├── lib ├── inject-code-template.d.ts ├── server.d.ts ├── get-inject-code.d.ts ├── index.d.ts ├── constant.d.ts ├── constant.js.map ├── constant.js ├── get-inject-code.js.map ├── index.js.map ├── server.js.map ├── cover.css ├── get-inject-code.js ├── server.js ├── index.js ├── inject-code-template.js.map ├── inject-code-template.js └── launch-editor.js ├── .gitignore ├── README.md ├── src ├── constant.ts ├── get-inject-code.ts ├── server.ts ├── index.ts ├── cover.css ├── inject-code-template.ts └── launch-editor.js ├── package.json ├── tsconfig.json └── yarn.lock /lib/inject-code-template.d.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | yarn-error.log -------------------------------------------------------------------------------- /lib/server.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: (callback: Function) => void; 2 | export = _default; 3 | -------------------------------------------------------------------------------- /lib/get-inject-code.d.ts: -------------------------------------------------------------------------------- 1 | declare const injectCode: (port: any) => string; 2 | export = injectCode; 3 | -------------------------------------------------------------------------------- /lib/index.d.ts: -------------------------------------------------------------------------------- 1 | declare class TrackCodePlugin { 2 | apply(complier: any): void; 3 | } 4 | export = TrackCodePlugin; 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vnode-plugin 2 | 3 | 该 plugin 的功能已经迁移至 [webpack-vue-debug](https://github.com/zh-lx/webpack-vue-debug),此仓库不再维护,请使用 [webpack-vue-debug](https://github.com/zh-lx/webpack-vue-debug) 4 | 5 | -------------------------------------------------------------------------------- /lib/constant.d.ts: -------------------------------------------------------------------------------- 1 | export declare const InjectLineName = "_vc-row"; 2 | export declare const InjectColumnName = "_vc-col"; 3 | export declare const InjectPathName = "_vc-path"; 4 | export declare const InjectCoverName = "_vc-cover"; 5 | export declare const InjectCoverInfoName = "_vc-cover-info"; 6 | export declare const InjectNodeName = "_vc-node"; 7 | -------------------------------------------------------------------------------- /src/constant.ts: -------------------------------------------------------------------------------- 1 | export const InjectLineName = '_vc-row'; // 注入的行名称 2 | export const InjectColumnName = '_vc-col'; // 注入的列名称 3 | export const InjectPathName = '_vc-path'; // 注入的路径名称 4 | export const InjectCoverName = '_vc-cover'; // 遮罩层id 5 | export const InjectCoverInfoName = '_vc-cover-info'; // 遮罩层id 6 | export const InjectNodeName = '_vc-node'; // 注入的节点名称 7 | -------------------------------------------------------------------------------- /lib/constant.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"constant.js","sourceRoot":"","sources":["../src/constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,SAAS,CAAC,CAAC,SAAS;AACrC,QAAA,gBAAgB,GAAG,SAAS,CAAC,CAAC,SAAS;AACvC,QAAA,cAAc,GAAG,UAAU,CAAC,CAAC,UAAU;AACvC,QAAA,eAAe,GAAG,WAAW,CAAC,CAAC,QAAQ;AACvC,QAAA,mBAAmB,GAAG,gBAAgB,CAAC,CAAC,QAAQ;AAChD,QAAA,cAAc,GAAG,UAAU,CAAC,CAAC,UAAU"} -------------------------------------------------------------------------------- /lib/constant.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.InjectNodeName = exports.InjectCoverInfoName = exports.InjectCoverName = exports.InjectPathName = exports.InjectColumnName = exports.InjectLineName = void 0; 4 | exports.InjectLineName = '_vc-row'; // 注入的行名称 5 | exports.InjectColumnName = '_vc-col'; // 注入的列名称 6 | exports.InjectPathName = '_vc-path'; // 注入的路径名称 7 | exports.InjectCoverName = '_vc-cover'; // 遮罩层id 8 | exports.InjectCoverInfoName = '_vc-cover-info'; // 遮罩层id 9 | exports.InjectNodeName = '_vc-node'; // 注入的节点名称 10 | //# sourceMappingURL=constant.js.map -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vnode-plugin", 3 | "version": "1.0.2", 4 | "main": "./lib/index.js", 5 | "repository": "git@github.com:zh-lx/vnode-plugin.git", 6 | "author": "zh-lx <18366276315@163.com>", 7 | "license": "MIT", 8 | "dependencies": { 9 | "chalk": "^4.1.1", 10 | "html-webpack-plugin": "^5.5.0", 11 | "portfinder": "^1.0.28", 12 | "shell-quote": "^1.7.2", 13 | "webpack": "^5.43.0" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "^16.0.1" 17 | }, 18 | "scripts": { 19 | "build": "rm -rf lib && tsc && cp -r ./src/launch-editor.js ./lib && cp -r ./src/cover.css ./lib" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["es6", "dom"], 4 | "sourceMap": true, 5 | "noImplicitReturns": true, 6 | "noImplicitThis": true, 7 | "noImplicitAny": false, 8 | "module": "commonjs", 9 | "target": "es5", 10 | "strictNullChecks": false, 11 | "suppressImplicitAnyIndexErrors": false, 12 | "jsx": "react", 13 | "moduleResolution": "node", 14 | "experimentalDecorators": true, 15 | "allowSyntheticDefaultImports": true, 16 | "esModuleInterop": true, 17 | "allowJs": false, 18 | "skipLibCheck": true, 19 | "skipDefaultLibCheck": true, 20 | "noUnusedLocals": false, 21 | "resolveJsonModule": true, 22 | "baseUrl": "./", 23 | "outDir": "lib", 24 | "declaration": true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/get-inject-code.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"get-inject-code.js","sourceRoot":"","sources":["../src/get-inject-code.ts"],"names":[],"mappings":";;;;AAAA,8CAAwB;AACxB,0CAAoB;AACpB,uCAOoB;AACpB,IAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC,CAAC,eAAe;AACpF,IAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACzD,IAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,IAAM,SAAS,GAAG,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAEtD,IAAM,UAAU,GAAG,UAAC,IAAI;IACtB,IAAM,IAAI,GAAG,MAAM;SAChB,OAAO,CAAC,WAAW,EAAE,yBAAc,CAAC;SACpC,OAAO,CAAC,WAAW,EAAE,yBAAc,CAAC;SACpC,OAAO,CAAC,aAAa,EAAE,2BAAgB,CAAC;SACxC,OAAO,CAAC,WAAW,EAAE,yBAAc,CAAC;SACpC,OAAO,CAAC,YAAY,EAAE,0BAAe,CAAC;SACtC,OAAO,CAAC,gBAAgB,EAAE,8BAAmB,CAAC;SAC9C,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE9B,OAAO,4JAAgJ,SAAS,4BAAuB,IAAI,gBAAa,CAAC;AAC3M,CAAC,CAAC;AAEF,iBAAS,UAAU,CAAC"} -------------------------------------------------------------------------------- /lib/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,4EAAoD;AACpD,oDAAmC;AACnC,sEAA2C;AAC3C;IAAA;IA+BA,CAAC;IA9BC,+BAAK,GAAL,UAAM,QAAQ;QACZ,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAC,WAAW;YAC5D,gBAAW,CAAC,UAAC,IAAI;gBACf,IAAM,IAAI,GAAG,yBAAU,CAAC,IAAI,CAAC,CAAC;gBAC9B,SAAS;gBACT,IAAI,WAAW,CAAC,KAAK,CAAC,oCAAoC,EAAE;oBAC1D,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC,GAAG,CACxD,mBAAmB,EACnB,UAAC,IAAI;wBACH,iCAAiC;wBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAK,IAAI,cAAW,CAAC,CAAC;oBAC/D,CAAC,CACF,CAAC;iBACH;gBACD,UAAU;gBACV,6BAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,QAAQ,CACzD,iBAAiB,EACjB,UAAC,IAAI,EAAE,EAAE;oBACP,yBAAyB;oBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBAC7B,SAAS;wBACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAK,IAAI,cAAW,CAAC,CAAC;wBAC7D,0BAA0B;wBAC1B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBAChB;gBACH,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACH,sBAAC;AAAD,CAAC,AA/BD,IA+BC;AAED,iBAAS,eAAe,CAAC"} -------------------------------------------------------------------------------- /lib/server.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;AAAA,qBAAqB;AACrB,8CAAwB;AACxB,0DAAoC;AACpC,kEAA2C;AAE3C,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,iBAAS,SAAS,WAAW,CAAC,QAAkB;IAC9C,IAAI,OAAO,EAAE;QACX,OAAO;KACR;IACD,OAAO,GAAG,IAAI,CAAC;IACf,IAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,UAAC,GAAG,EAAE,GAAG;QACxC,eAAe;QACf,IAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,6BAA6B,EAAE,GAAG;YAClC,8BAA8B,EAAE,GAAG;YACnC,8BAA8B,EAC5B,0EAA0E;SAC7E,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACd,uBAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS;IACT,oBAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAC,GAAU,EAAE,IAAY;QAC1D,IAAI,GAAG,EAAE;YACP,MAAM,GAAG,CAAC;SACX;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"} -------------------------------------------------------------------------------- /src/get-inject-code.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs'; 3 | import { 4 | InjectPathName, 5 | InjectLineName, 6 | InjectColumnName, 7 | InjectCoverName, 8 | InjectNodeName, 9 | InjectCoverInfoName, 10 | } from './constant'; 11 | const jsFile = path.resolve(__dirname, './inject-code-template.js'); // 编译后会在lib文件夹中 12 | const styleFile = path.resolve(__dirname, './cover.css'); 13 | const jsCode = fs.readFileSync(jsFile, 'utf-8'); 14 | const styleCode = fs.readFileSync(styleFile, 'utf-8'); 15 | 16 | const injectCode = (port) => { 17 | const code = jsCode 18 | .replace(/__FILE__/g, InjectPathName) 19 | .replace(/__LINE__/g, InjectLineName) 20 | .replace(/__COLUMN__/g, InjectColumnName) 21 | .replace(/__NODE__/g, InjectNodeName) 22 | .replace(/__COVER__/g, InjectCoverName) 23 | .replace(/__COVERINFO__/g, InjectCoverInfoName) 24 | .replace(/__PORT__/g, port); 25 | 26 | return `
V
\n\n`; 27 | }; 28 | 29 | export = injectCode; 30 | -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | // 启动本地接口,访问时唤起vscode 2 | import http from 'http'; 3 | import portFinder from 'portfinder'; 4 | import launchEditor from './launch-editor'; 5 | 6 | let started = false; 7 | 8 | export = function StartServer(callback: Function) { 9 | if (started) { 10 | return; 11 | } 12 | started = true; 13 | const server = http.createServer((req, res) => { 14 | // 收到请求唤醒vscode 15 | const params = new URLSearchParams(req.url.slice(1)); 16 | const file = params.get('file'); 17 | const line = Number(params.get('line')); 18 | const column = Number(params.get('column')); 19 | res.writeHead(200, { 20 | 'Access-Control-Allow-Origin': '*', 21 | 'Access-Control-Allow-Methods': '*', 22 | 'Access-Control-Allow-Headers': 23 | 'Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,X-URL-PATH,x-access-token', 24 | }); 25 | res.end('ok'); 26 | launchEditor(file, line, column); 27 | }); 28 | 29 | // 寻找可用接口 30 | portFinder.getPort({ port: 4000 }, (err: Error, port: number) => { 31 | if (err) { 32 | throw err; 33 | } 34 | server.listen(port, () => { 35 | callback(port); 36 | }); 37 | }); 38 | }; 39 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import HtmlWebpackPlugin from 'html-webpack-plugin'; 2 | import startServer from './server'; 3 | import injectCode from './get-inject-code'; 4 | class TrackCodePlugin { 5 | apply(complier) { 6 | complier.hooks.compilation.tap('TrackCodePlugin', (compilation) => { 7 | startServer((port) => { 8 | const code = injectCode(port); 9 | // 4 之前版本 10 | if (compilation.hooks.htmlWebpackPluginAfterHtmlProcessing) { 11 | compilation.hooks.htmlWebpackPluginAfterHtmlProcessing.tap( 12 | 'HtmlWebpackPlugin', 13 | (data) => { 14 | // html-webpack-plugin编译后的内容,注入代码 15 | data.html = data.html.replace('', `${code}\n`); 16 | } 17 | ); 18 | } 19 | // 适应 5 版本 20 | HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync( 21 | 'TrackCodePlugin', 22 | (data, cb) => { 23 | // Manipulate the content 24 | if (!data.html.includes(code)) { 25 | // 防止重复注入 26 | data.html = data.html.replace('', `${code}\n`); 27 | // Tell webpack to move on 28 | cb(null, data); 29 | } 30 | } 31 | ); 32 | }); 33 | }); 34 | } 35 | } 36 | 37 | export = TrackCodePlugin; 38 | -------------------------------------------------------------------------------- /lib/cover.css: -------------------------------------------------------------------------------- 1 | ._vc-cover { 2 | position: fixed; 3 | pointer-events: none; 4 | z-index: 999999; 5 | background: rgba(32, 114, 205, 0.5); 6 | } 7 | ._vc-cover-info { 8 | position: absolute; 9 | width: 320px; 10 | height: auto; 11 | overflow: hidden; 12 | white-space: normal; 13 | word-break: break-all; 14 | text-overflow: ellipsis; 15 | font-size: 12px; 16 | color: black; 17 | background-color: #fff; 18 | box-shadow: black 0px 0px 6px; 19 | box-sizing: border-box; 20 | padding: 4px; 21 | } 22 | ._vc-top-info { 23 | top: 0; 24 | transform: translateY(-100%); 25 | } 26 | ._vc-bottom-info { 27 | top: 100%; 28 | } 29 | ._vc-top-inner-info { 30 | top: 0; 31 | } 32 | ._vc-bottom-inner-info { 33 | bottom: 0; 34 | } 35 | ._vc-left-info { 36 | left: 0; 37 | } 38 | ._vc-right-info { 39 | right: 0; 40 | } 41 | ._vc-node-name { 42 | color: coral; 43 | font-weight: bold; 44 | font-size: 14px; 45 | } 46 | ._vc-node-class-name { 47 | color: dodgerblue; 48 | } 49 | 50 | #_vc-control-suspension { 51 | position: fixed; 52 | z-index: 99999999; 53 | height: 40px; 54 | width: 40px; 55 | background-color: gray; 56 | line-height: 40px; 57 | text-align: center; 58 | font-size: 16px; 59 | color: #fff; 60 | top: 30px; 61 | right: 30px; 62 | cursor: pointer; 63 | border-radius: 50%; 64 | border: 1px solid #fff; 65 | } 66 | -------------------------------------------------------------------------------- /src/cover.css: -------------------------------------------------------------------------------- 1 | ._vc-cover { 2 | position: fixed; 3 | pointer-events: none; 4 | z-index: 999999; 5 | background: rgba(32, 114, 205, 0.5); 6 | } 7 | ._vc-cover-info { 8 | position: absolute; 9 | width: 320px; 10 | height: auto; 11 | overflow: hidden; 12 | white-space: normal; 13 | word-break: break-all; 14 | text-overflow: ellipsis; 15 | font-size: 12px; 16 | color: black; 17 | background-color: #fff; 18 | box-shadow: black 0px 0px 6px; 19 | box-sizing: border-box; 20 | padding: 4px; 21 | } 22 | ._vc-top-info { 23 | top: 0; 24 | transform: translateY(-100%); 25 | } 26 | ._vc-bottom-info { 27 | top: 100%; 28 | } 29 | ._vc-top-inner-info { 30 | top: 0; 31 | } 32 | ._vc-bottom-inner-info { 33 | bottom: 0; 34 | } 35 | ._vc-left-info { 36 | left: 0; 37 | } 38 | ._vc-right-info { 39 | right: 0; 40 | } 41 | ._vc-node-name { 42 | color: coral; 43 | font-weight: bold; 44 | font-size: 14px; 45 | } 46 | ._vc-node-class-name { 47 | color: dodgerblue; 48 | } 49 | 50 | #_vc-control-suspension { 51 | position: fixed; 52 | z-index: 99999999; 53 | height: 40px; 54 | width: 40px; 55 | background-color: gray; 56 | line-height: 40px; 57 | text-align: center; 58 | font-size: 16px; 59 | color: #fff; 60 | top: 30px; 61 | right: 30px; 62 | cursor: pointer; 63 | border-radius: 50%; 64 | border: 1px solid #fff; 65 | } 66 | -------------------------------------------------------------------------------- /lib/get-inject-code.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | var path_1 = __importDefault(require("path")); 6 | var fs_1 = __importDefault(require("fs")); 7 | var constant_1 = require("./constant"); 8 | var jsFile = path_1.default.resolve(__dirname, './inject-code-template.js'); // 编译后会在lib文件夹中 9 | var styleFile = path_1.default.resolve(__dirname, './cover.css'); 10 | var jsCode = fs_1.default.readFileSync(jsFile, 'utf-8'); 11 | var styleCode = fs_1.default.readFileSync(styleFile, 'utf-8'); 12 | var injectCode = function (port) { 13 | var code = jsCode 14 | .replace(/__FILE__/g, constant_1.InjectPathName) 15 | .replace(/__LINE__/g, constant_1.InjectLineName) 16 | .replace(/__COLUMN__/g, constant_1.InjectColumnName) 17 | .replace(/__NODE__/g, constant_1.InjectNodeName) 18 | .replace(/__COVER__/g, constant_1.InjectCoverName) 19 | .replace(/__COVERINFO__/g, constant_1.InjectCoverInfoName) 20 | .replace(/__PORT__/g, port); 21 | return "
V
\n\n"; 22 | }; 23 | module.exports = injectCode; 24 | //# sourceMappingURL=get-inject-code.js.map -------------------------------------------------------------------------------- /lib/server.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | // 启动本地接口,访问时唤起vscode 6 | var http_1 = __importDefault(require("http")); 7 | var portfinder_1 = __importDefault(require("portfinder")); 8 | var launch_editor_1 = __importDefault(require("./launch-editor")); 9 | var started = false; 10 | module.exports = function StartServer(callback) { 11 | if (started) { 12 | return; 13 | } 14 | started = true; 15 | var server = http_1.default.createServer(function (req, res) { 16 | // 收到请求唤醒vscode 17 | var params = new URLSearchParams(req.url.slice(1)); 18 | var file = params.get('file'); 19 | var line = Number(params.get('line')); 20 | var column = Number(params.get('column')); 21 | res.writeHead(200, { 22 | 'Access-Control-Allow-Origin': '*', 23 | 'Access-Control-Allow-Methods': '*', 24 | 'Access-Control-Allow-Headers': 'Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,X-URL-PATH,x-access-token', 25 | }); 26 | res.end('ok'); 27 | launch_editor_1.default(file, line, column); 28 | }); 29 | // 寻找可用接口 30 | portfinder_1.default.getPort({ port: 4000 }, function (err, port) { 31 | if (err) { 32 | throw err; 33 | } 34 | server.listen(port, function () { 35 | callback(port); 36 | }); 37 | }); 38 | }; 39 | //# sourceMappingURL=server.js.map -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | var html_webpack_plugin_1 = __importDefault(require("html-webpack-plugin")); 6 | var server_1 = __importDefault(require("./server")); 7 | var get_inject_code_1 = __importDefault(require("./get-inject-code")); 8 | var TrackCodePlugin = /** @class */ (function () { 9 | function TrackCodePlugin() { 10 | } 11 | TrackCodePlugin.prototype.apply = function (complier) { 12 | complier.hooks.compilation.tap('TrackCodePlugin', function (compilation) { 13 | server_1.default(function (port) { 14 | var code = get_inject_code_1.default(port); 15 | // 4 之前版本 16 | if (compilation.hooks.htmlWebpackPluginAfterHtmlProcessing) { 17 | compilation.hooks.htmlWebpackPluginAfterHtmlProcessing.tap('HtmlWebpackPlugin', function (data) { 18 | // html-webpack-plugin编译后的内容,注入代码 19 | data.html = data.html.replace('', code + "\n"); 20 | }); 21 | } 22 | // 适应 5 版本 23 | html_webpack_plugin_1.default.getHooks(compilation).beforeEmit.tapAsync('TrackCodePlugin', function (data, cb) { 24 | // Manipulate the content 25 | if (!data.html.includes(code)) { 26 | // 防止重复注入 27 | data.html = data.html.replace('', code + "\n"); 28 | // Tell webpack to move on 29 | cb(null, data); 30 | } 31 | }); 32 | }); 33 | }); 34 | }; 35 | return TrackCodePlugin; 36 | }()); 37 | module.exports = TrackCodePlugin; 38 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /lib/inject-code-template.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"inject-code-template.js","sourceRoot":"","sources":["../src/inject-code-template.ts"],"names":[],"mappings":"AAAA,CAAC;IACC,SAAS;IACT,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,aAAa;IACb,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,UAAU;IACV,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,YAAY;IACZ,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,qBAAqB;IACrB,SAAS,QAAQ,CAAC,UAAU;QAC1B,IAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAgB,CAAC;QACrE,IAAM,cAAc,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;QAC1D,IAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,QAAQ;QACrE,IAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,QAAQ;QACnE,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAM,cAAc,CAAC,GAAG,OAAI,CAAC;QAC/C,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAM,cAAc,CAAC,IAAI,OAAI,CAAC;QACjD,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAM,cAAc,CAAC,KAAK,OAAI,CAAC;QACnD,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAM,cAAc,CAAC,MAAM,OAAI,CAAC;QACrD,IAAM,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,aAAa;QACxF,IAAM,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW;QACpF,IAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,IAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,IAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CACzC,gBAAgB,CACF,CAAC;QACjB,IAAM,iBAAiB,GACrB,cAAc,CAAC,GAAG,GAAG,MAAM;YACzB,CAAC,CAAC,cAAc,CAAC,GAAG,GAAG,GAAG;gBACxB,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,cAAc;YAClB,CAAC,CAAC,MAAM,GAAG,GAAG;gBACd,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,iBAAiB,CAAC;QACxB,IAAM,gBAAgB,GACpB,cAAc,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACpE,IAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI;YACrB,cAAc,IAAI,2CAAwC,IAAI,YAAS,CAAC;QAC1E,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,SAAS,GAAG,oBAAkB,gBAAgB,SAAI,iBAAmB,CAAC;QACnF,YAAY,CAAC,SAAS,GAAG,wCAAoC,IAAI,eAAU,cAAc,mBAAc,IAAI,WAAQ,CAAC;IACtH,CAAC;IAED,aAAa;IACb,SAAS,UAAU;QACjB,IAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAgB,CAAC;QACrE,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QACzB,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QAC1B,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC5B,IAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CACzC,gBAAgB,CACF,CAAC;QACjB,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;QAC5B,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,mBAAmB;IACnB,SAAS,SAAS,CAAC,UAAU;QAC3B,IAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,IAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,IAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACrD,IAAM,GAAG,GAAG,qCAAmC,IAAI,cAAS,IAAI,gBAAW,MAAQ,CAAC;QACpF,IAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,OAAO;IACP,SAAS,YAAY,CAAC,CAAC;QACrB,IAAI,GAAG,GAAG,CAAC,CAAC,MAAqB,CAAC;QAClC,IAAI,GAAG,CAAC,EAAE,KAAK,wBAAwB,EAAE;YACvC,IAAI,WAAW,EAAE;gBACf,WAAW,GAAG,KAAK,CAAC;gBACpB,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC;aACpC;iBAAM;gBACL,WAAW,GAAG,IAAI,CAAC;gBACnB,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,YAAY,CAAC;aAC1C;SACF;IACH,CAAC;IAED,QAAQ;IACR,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;QAC9C,IAAI,WAAW,EAAE;YACf,IAAM,QAAQ,GAAI,CAAS,CAAC,IAAI,CAAC;YACjC,IAAI,UAAU,SAAA,CAAC;YACf,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,wBAAwB,EAAE;gBAC/C,UAAU,EAAE,CAAC;aACd;YACD,sBAAsB;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBACtD,UAAU,GAAG,IAAI,CAAC;oBAClB,MAAM;iBACP;aACF;YACD,IAAI,UAAU,EAAE;gBACd,QAAQ,CAAC,UAAU,CAAC,CAAC;aACtB;SACF;IACH,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,CAAC,gBAAgB,CACrB,OAAO,EACP,UAAU,CAAC;QACT,IAAI,WAAW,EAAE;YACf,IAAM,QAAQ,GAAI,CAAS,CAAC,IAAI,CAAC;YACjC,IAAI,UAAU,SAAA,CAAC;YACf,sBAAsB;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBACtD,UAAU,GAAG,IAAI,CAAC;oBAClB,MAAM;iBACP;aACF;YACD,IAAI,UAAU,EAAE;gBACd,OAAO;gBACP,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,SAAS;gBACT,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,YAAY;gBACZ,SAAS,CAAC,UAAU,CAAC,CAAC;aACvB;SACF;IACH,CAAC,EACD,IAAI,CACL,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;QAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,GAAG,GAAG,CAAC,CAAC,MAAqB,CAAC;QAClC,IAAI,GAAG,CAAC,EAAE,KAAK,wBAAwB,EAAE;YACvC,OAAO,GAAG,IAAI,CAAC;YACf,cAAc,GAAG,GAAG,CAAC,UAAU,CAAC;YAChC,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC;YAC/B,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC;YAC3B,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC;SAC5B;IACH,CAAC,CAAC,CAAC;IAEH,UAAU;IACV,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;QAC9C,IAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE;YACX,oBAAoB,GAAG,IAAI,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC;YAC1E,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC;SAC1E;IACH,CAAC,CAAC,CAAC;IAEH,UAAU;IACV,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC;QAC5C,OAAO,GAAG,KAAK,CAAC;QAChB,cAAc,GAAG,CAAC,CAAC;QACnB,cAAc,GAAG,CAAC,CAAC;QACnB,cAAc,GAAG,CAAC,CAAC;QACnB,cAAc,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAM,oBAAoB,GAAG,QAAQ,CAAC,cAAc,CAClD,wBAAwB,CACzB,CAAC;IACF,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;QACxD,IAAI,CAAC,oBAAoB,EAAE;YACzB,YAAY,CAAC,CAAC,CAAC,CAAC;SACjB;aAAM;YACL,oBAAoB,GAAG,KAAK,CAAC;SAC9B;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,EAAE,CAAC"} -------------------------------------------------------------------------------- /src/inject-code-template.ts: -------------------------------------------------------------------------------- 1 | (function () { 2 | // 功能是否开启 3 | let is_tracking = false; 4 | // 当前控制器是否在拖拽 5 | let is_drag = false; 6 | // 当前控制器位置 7 | let last_control_X = 0; 8 | let last_control_Y = 0; 9 | let last_pointer_X = 0; 10 | let last_pointer_Y = 0; 11 | // 控制器是否被移动了 12 | let has_control_be_moved = false; 13 | 14 | // 鼠标移到有对应信息组件时,显示遮罩层 15 | function setCover(targetNode) { 16 | const coverDom = document.querySelector('#__COVER__') as HTMLElement; 17 | const targetLocation = targetNode.getBoundingClientRect(); 18 | const browserHeight = document.documentElement.clientHeight; // 浏览器高度 19 | const browserWidth = document.documentElement.clientWidth; // 浏览器宽度 20 | coverDom.style.top = `${targetLocation.top}px`; 21 | coverDom.style.left = `${targetLocation.left}px`; 22 | coverDom.style.width = `${targetLocation.width}px`; 23 | coverDom.style.height = `${targetLocation.height}px`; 24 | const bottom = browserHeight - targetLocation.top - targetLocation.height; // 距浏览器视口底部距离 25 | const right = browserWidth - targetLocation.left - targetLocation.width; // 距浏览器右边距离 26 | const file = targetNode.getAttribute('__FILE__'); 27 | const node = targetNode.getAttribute('__NODE__'); 28 | const coverInfoDom = document.querySelector( 29 | '#__COVERINFO__' 30 | ) as HTMLElement; 31 | const classInfoVertical = 32 | targetLocation.top > bottom 33 | ? targetLocation.top < 100 34 | ? '_vc-top-inner-info' 35 | : '_vc-top-info' 36 | : bottom < 100 37 | ? '_vc-bottom-inner-info' 38 | : '_vc-bottom-info'; 39 | const classInfoHorizon = 40 | targetLocation.left >= right ? '_vc-left-info' : '_vc-right-info'; 41 | const classList = targetNode.classList; 42 | let classListSpans = ''; 43 | classList.forEach((item) => { 44 | classListSpans += ` \.${item}`; 45 | }); 46 | coverInfoDom.className = `_vc-cover-info ${classInfoHorizon} ${classInfoVertical}`; 47 | coverInfoDom.innerHTML = `
${node}${classListSpans}
${file}
`; 48 | } 49 | 50 | // 键盘抬起时清除遮罩层 51 | function resetCover() { 52 | const coverDom = document.querySelector('#__COVER__') as HTMLElement; 53 | coverDom.style.top = '0'; 54 | coverDom.style.left = '0'; 55 | coverDom.style.width = '0'; 56 | coverDom.style.height = '0'; 57 | const coverInfoDom = document.querySelector( 58 | '#__COVERINFO__' 59 | ) as HTMLElement; 60 | coverInfoDom.innerHTML = ''; 61 | coverInfoDom.className = ''; 62 | } 63 | 64 | // 请求本地服务端,打开vscode 65 | function trackCode(targetNode) { 66 | const file = targetNode.getAttribute('__FILE__'); 67 | const line = targetNode.getAttribute('__LINE__'); 68 | const column = targetNode.getAttribute('__COLUMN__'); 69 | const url = `http://localhost:__PORT__/?file=${file}&line=${line}&column=${column}`; 70 | const xhr = new XMLHttpRequest(); 71 | xhr.open('GET', url, true); 72 | xhr.send(); 73 | } 74 | 75 | // 功能开关 76 | function clickControl(e) { 77 | let dom = e.target as HTMLElement; 78 | if (dom.id === '_vc-control-suspension') { 79 | if (is_tracking) { 80 | is_tracking = false; 81 | dom.style.backgroundColor = 'gray'; 82 | } else { 83 | is_tracking = true; 84 | dom.style.backgroundColor = 'lightgreen'; 85 | } 86 | } 87 | } 88 | 89 | // 鼠标移动时 90 | window.addEventListener('mousemove', function (e) { 91 | if (is_tracking) { 92 | const nodePath = (e as any).path; 93 | let targetNode; 94 | if (nodePath[0].id === '_vc-control-suspension') { 95 | resetCover(); 96 | } 97 | // 寻找第一个有_vc-path属性的元素 98 | for (let i = 0; i < nodePath.length; i++) { 99 | const node = nodePath[i]; 100 | if (node.hasAttribute && node.hasAttribute('__FILE__')) { 101 | targetNode = node; 102 | break; 103 | } 104 | } 105 | if (targetNode) { 106 | setCover(targetNode); 107 | } 108 | } 109 | }); 110 | 111 | // 按下对应功能键点击页面时,在捕获阶段 112 | window.addEventListener( 113 | 'click', 114 | function (e) { 115 | if (is_tracking) { 116 | const nodePath = (e as any).path; 117 | let targetNode; 118 | // 寻找第一个有_vc-path属性的元素 119 | for (let i = 0; i < nodePath.length; i++) { 120 | const node = nodePath[i]; 121 | if (node.hasAttribute && node.hasAttribute('__FILE__')) { 122 | targetNode = node; 123 | break; 124 | } 125 | } 126 | if (targetNode) { 127 | // 阻止冒泡 128 | e.stopPropagation(); 129 | // 阻止默认事件 130 | e.preventDefault(); 131 | // 唤醒 vscode 132 | trackCode(targetNode); 133 | } 134 | } 135 | }, 136 | true 137 | ); 138 | 139 | // 监听是否发生拖拽事件 140 | window.addEventListener('mousedown', function (e) { 141 | e.preventDefault(); 142 | let dom = e.target as HTMLElement; 143 | if (dom.id === '_vc-control-suspension') { 144 | is_drag = true; 145 | last_control_X = dom.offsetLeft; 146 | last_control_Y = dom.offsetTop; 147 | last_pointer_X = e.clientX; 148 | last_pointer_Y = e.clientY; 149 | } 150 | }); 151 | 152 | // 控制器拖拽过程 153 | window.addEventListener('mousemove', function (e) { 154 | const control = document.getElementById('_vc-control-suspension'); 155 | if (is_drag) { 156 | has_control_be_moved = true; 157 | control.style.left = last_control_X + (e.clientX - last_pointer_X) + 'px'; 158 | control.style.top = last_control_Y + (e.clientY - last_pointer_Y) + 'px'; 159 | } 160 | }); 161 | 162 | // 控制器拖拽结束 163 | window.addEventListener('mouseup', function (e) { 164 | is_drag = false; 165 | last_control_X = 0; 166 | last_control_Y = 0; 167 | last_pointer_X = 0; 168 | last_pointer_Y = 0; 169 | }); 170 | 171 | const __suspension_control = document.getElementById( 172 | '_vc-control-suspension' 173 | ); 174 | __suspension_control.addEventListener('click', function (e) { 175 | if (!has_control_be_moved) { 176 | clickControl(e); 177 | } else { 178 | has_control_be_moved = false; 179 | } 180 | }); 181 | })(); 182 | -------------------------------------------------------------------------------- /lib/inject-code-template.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | // 功能是否开启 3 | var is_tracking = false; 4 | // 当前控制器是否在拖拽 5 | var is_drag = false; 6 | // 当前控制器位置 7 | var last_control_X = 0; 8 | var last_control_Y = 0; 9 | var last_pointer_X = 0; 10 | var last_pointer_Y = 0; 11 | // 控制器是否被移动了 12 | var has_control_be_moved = false; 13 | // 鼠标移到有对应信息组件时,显示遮罩层 14 | function setCover(targetNode) { 15 | var coverDom = document.querySelector('#__COVER__'); 16 | var targetLocation = targetNode.getBoundingClientRect(); 17 | var browserHeight = document.documentElement.clientHeight; // 浏览器高度 18 | var browserWidth = document.documentElement.clientWidth; // 浏览器宽度 19 | coverDom.style.top = targetLocation.top + "px"; 20 | coverDom.style.left = targetLocation.left + "px"; 21 | coverDom.style.width = targetLocation.width + "px"; 22 | coverDom.style.height = targetLocation.height + "px"; 23 | var bottom = browserHeight - targetLocation.top - targetLocation.height; // 距浏览器视口底部距离 24 | var right = browserWidth - targetLocation.left - targetLocation.width; // 距浏览器右边距离 25 | var file = targetNode.getAttribute('__FILE__'); 26 | var node = targetNode.getAttribute('__NODE__'); 27 | var coverInfoDom = document.querySelector('#__COVERINFO__'); 28 | var classInfoVertical = targetLocation.top > bottom 29 | ? targetLocation.top < 100 30 | ? '_vc-top-inner-info' 31 | : '_vc-top-info' 32 | : bottom < 100 33 | ? '_vc-bottom-inner-info' 34 | : '_vc-bottom-info'; 35 | var classInfoHorizon = targetLocation.left >= right ? '_vc-left-info' : '_vc-right-info'; 36 | var classList = targetNode.classList; 37 | var classListSpans = ''; 38 | classList.forEach(function (item) { 39 | classListSpans += " ." + item + ""; 40 | }); 41 | coverInfoDom.className = "_vc-cover-info " + classInfoHorizon + " " + classInfoVertical; 42 | coverInfoDom.innerHTML = "
" + node + "" + classListSpans + "
" + file + "
"; 43 | } 44 | // 键盘抬起时清除遮罩层 45 | function resetCover() { 46 | var coverDom = document.querySelector('#__COVER__'); 47 | coverDom.style.top = '0'; 48 | coverDom.style.left = '0'; 49 | coverDom.style.width = '0'; 50 | coverDom.style.height = '0'; 51 | var coverInfoDom = document.querySelector('#__COVERINFO__'); 52 | coverInfoDom.innerHTML = ''; 53 | coverInfoDom.className = ''; 54 | } 55 | // 请求本地服务端,打开vscode 56 | function trackCode(targetNode) { 57 | var file = targetNode.getAttribute('__FILE__'); 58 | var line = targetNode.getAttribute('__LINE__'); 59 | var column = targetNode.getAttribute('__COLUMN__'); 60 | var url = "http://localhost:__PORT__/?file=" + file + "&line=" + line + "&column=" + column; 61 | var xhr = new XMLHttpRequest(); 62 | xhr.open('GET', url, true); 63 | xhr.send(); 64 | } 65 | // 功能开关 66 | function clickControl(e) { 67 | var dom = e.target; 68 | if (dom.id === '_vc-control-suspension') { 69 | if (is_tracking) { 70 | is_tracking = false; 71 | dom.style.backgroundColor = 'gray'; 72 | } 73 | else { 74 | is_tracking = true; 75 | dom.style.backgroundColor = 'lightgreen'; 76 | } 77 | } 78 | } 79 | // 鼠标移动时 80 | window.addEventListener('mousemove', function (e) { 81 | if (is_tracking) { 82 | var nodePath = e.path; 83 | var targetNode = void 0; 84 | if (nodePath[0].id === '_vc-control-suspension') { 85 | resetCover(); 86 | } 87 | // 寻找第一个有_vc-path属性的元素 88 | for (var i = 0; i < nodePath.length; i++) { 89 | var node = nodePath[i]; 90 | if (node.hasAttribute && node.hasAttribute('__FILE__')) { 91 | targetNode = node; 92 | break; 93 | } 94 | } 95 | if (targetNode) { 96 | setCover(targetNode); 97 | } 98 | } 99 | }); 100 | // 按下对应功能键点击页面时,在捕获阶段 101 | window.addEventListener('click', function (e) { 102 | if (is_tracking) { 103 | var nodePath = e.path; 104 | var targetNode = void 0; 105 | // 寻找第一个有_vc-path属性的元素 106 | for (var i = 0; i < nodePath.length; i++) { 107 | var node = nodePath[i]; 108 | if (node.hasAttribute && node.hasAttribute('__FILE__')) { 109 | targetNode = node; 110 | break; 111 | } 112 | } 113 | if (targetNode) { 114 | // 阻止冒泡 115 | e.stopPropagation(); 116 | // 阻止默认事件 117 | e.preventDefault(); 118 | // 唤醒 vscode 119 | trackCode(targetNode); 120 | } 121 | } 122 | }, true); 123 | // 监听是否发生拖拽事件 124 | window.addEventListener('mousedown', function (e) { 125 | e.preventDefault(); 126 | var dom = e.target; 127 | if (dom.id === '_vc-control-suspension') { 128 | is_drag = true; 129 | last_control_X = dom.offsetLeft; 130 | last_control_Y = dom.offsetTop; 131 | last_pointer_X = e.clientX; 132 | last_pointer_Y = e.clientY; 133 | } 134 | }); 135 | // 控制器拖拽过程 136 | window.addEventListener('mousemove', function (e) { 137 | var control = document.getElementById('_vc-control-suspension'); 138 | if (is_drag) { 139 | has_control_be_moved = true; 140 | control.style.left = last_control_X + (e.clientX - last_pointer_X) + 'px'; 141 | control.style.top = last_control_Y + (e.clientY - last_pointer_Y) + 'px'; 142 | } 143 | }); 144 | // 控制器拖拽结束 145 | window.addEventListener('mouseup', function (e) { 146 | is_drag = false; 147 | last_control_X = 0; 148 | last_control_Y = 0; 149 | last_pointer_X = 0; 150 | last_pointer_Y = 0; 151 | }); 152 | var __suspension_control = document.getElementById('_vc-control-suspension'); 153 | __suspension_control.addEventListener('click', function (e) { 154 | if (!has_control_be_moved) { 155 | clickControl(e); 156 | } 157 | else { 158 | has_control_be_moved = false; 159 | } 160 | }); 161 | })(); 162 | //# sourceMappingURL=inject-code-template.js.map -------------------------------------------------------------------------------- /lib/launch-editor.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const child_process = require('child_process'); 4 | const os = require('os'); 5 | const chalk = require('chalk'); 6 | const shellQuote = require('shell-quote'); 7 | 8 | function isTerminalEditor(editor) { 9 | switch (editor) { 10 | case 'vim': 11 | case 'emacs': 12 | case 'nano': 13 | return true; 14 | } 15 | return false; 16 | } 17 | 18 | // Map from full process name to binary that starts the process 19 | // We can't just re-use full process name, because it will spawn a new instance 20 | // of the app every time 21 | const COMMON_EDITORS_OSX = { 22 | '/Applications/Atom.app/Contents/MacOS/Atom': 'atom', 23 | '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta': 24 | '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta', 25 | '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets', 26 | '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text': 27 | '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl', 28 | '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text': 29 | '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl', 30 | '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2': 31 | '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl', 32 | '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code', 33 | '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron': 34 | 'code-insiders', 35 | '/Applications/VSCodium.app/Contents/MacOS/Electron': 'vscodium', 36 | '/Applications/AppCode.app/Contents/MacOS/appcode': 37 | '/Applications/AppCode.app/Contents/MacOS/appcode', 38 | '/Applications/CLion.app/Contents/MacOS/clion': 39 | '/Applications/CLion.app/Contents/MacOS/clion', 40 | '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea': 41 | '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea', 42 | '/Applications/PhpStorm.app/Contents/MacOS/phpstorm': 43 | '/Applications/PhpStorm.app/Contents/MacOS/phpstorm', 44 | '/Applications/PyCharm.app/Contents/MacOS/pycharm': 45 | '/Applications/PyCharm.app/Contents/MacOS/pycharm', 46 | '/Applications/PyCharm CE.app/Contents/MacOS/pycharm': 47 | '/Applications/PyCharm CE.app/Contents/MacOS/pycharm', 48 | '/Applications/RubyMine.app/Contents/MacOS/rubymine': 49 | '/Applications/RubyMine.app/Contents/MacOS/rubymine', 50 | '/Applications/WebStorm.app/Contents/MacOS/webstorm': 51 | '/Applications/WebStorm.app/Contents/MacOS/webstorm', 52 | '/Applications/MacVim.app/Contents/MacOS/MacVim': 'mvim', 53 | '/Applications/GoLand.app/Contents/MacOS/goland': 54 | '/Applications/GoLand.app/Contents/MacOS/goland', 55 | '/Applications/Rider.app/Contents/MacOS/rider': 56 | '/Applications/Rider.app/Contents/MacOS/rider', 57 | }; 58 | 59 | const COMMON_EDITORS_LINUX = { 60 | atom: 'atom', 61 | Brackets: 'brackets', 62 | code: 'code', 63 | 'code-insiders': 'code-insiders', 64 | vscodium: 'vscodium', 65 | emacs: 'emacs', 66 | gvim: 'gvim', 67 | 'idea.sh': 'idea', 68 | 'phpstorm.sh': 'phpstorm', 69 | 'pycharm.sh': 'pycharm', 70 | 'rubymine.sh': 'rubymine', 71 | sublime_text: 'sublime_text', 72 | vim: 'vim', 73 | 'webstorm.sh': 'webstorm', 74 | 'goland.sh': 'goland', 75 | 'rider.sh': 'rider', 76 | }; 77 | 78 | const COMMON_EDITORS_WIN = [ 79 | 'Brackets.exe', 80 | 'Code.exe', 81 | 'Code - Insiders.exe', 82 | 'VSCodium.exe', 83 | 'atom.exe', 84 | 'sublime_text.exe', 85 | 'notepad++.exe', 86 | 'clion.exe', 87 | 'clion64.exe', 88 | 'idea.exe', 89 | 'idea64.exe', 90 | 'phpstorm.exe', 91 | 'phpstorm64.exe', 92 | 'pycharm.exe', 93 | 'pycharm64.exe', 94 | 'rubymine.exe', 95 | 'rubymine64.exe', 96 | 'webstorm.exe', 97 | 'webstorm64.exe', 98 | 'goland.exe', 99 | 'goland64.exe', 100 | 'rider.exe', 101 | 'rider64.exe', 102 | ]; 103 | 104 | // Transpiled version of: /^([A-Za-z]:[/\\])?[\p{L}0-9/.\-_\\]+$/u 105 | // Non-transpiled version requires support for Unicode property regex. Allows 106 | // alphanumeric characters, periods, dashes, slashes, and underscores. 107 | const WINDOWS_FILE_NAME_WHITELIST = 108 | /^([A-Za-z]:[/\\])?(?:[\x2D-9A-Z\\_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7B9\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])+$/; 109 | 110 | function addWorkspaceToArgumentsIfExists(args, workspace) { 111 | if (workspace) { 112 | args.unshift(workspace); 113 | } 114 | return args; 115 | } 116 | 117 | function getArgumentsForLineNumber( 118 | editor, 119 | fileName, 120 | lineNumber, 121 | colNumber, 122 | workspace 123 | ) { 124 | const editorBasename = path.basename(editor).replace(/\.(exe|cmd|bat)$/i, ''); 125 | switch (editorBasename) { 126 | case 'atom': 127 | case 'Atom': 128 | case 'Atom Beta': 129 | case 'subl': 130 | case 'sublime': 131 | case 'sublime_text': 132 | return [fileName + ':' + lineNumber + ':' + colNumber]; 133 | case 'wstorm': 134 | case 'charm': 135 | return [fileName + ':' + lineNumber]; 136 | case 'notepad++': 137 | return ['-n' + lineNumber, '-c' + colNumber, fileName]; 138 | case 'vim': 139 | case 'mvim': 140 | case 'joe': 141 | case 'gvim': 142 | return ['+' + lineNumber, fileName]; 143 | case 'emacs': 144 | case 'emacsclient': 145 | return ['+' + lineNumber + ':' + colNumber, fileName]; 146 | case 'rmate': 147 | case 'mate': 148 | case 'mine': 149 | return ['--line', lineNumber, fileName]; 150 | case 'code': 151 | case 'Code': 152 | case 'code-insiders': 153 | case 'Code - Insiders': 154 | case 'vscodium': 155 | case 'VSCodium': 156 | return addWorkspaceToArgumentsIfExists( 157 | ['-g', fileName + ':' + lineNumber + ':' + colNumber], 158 | workspace 159 | ); 160 | case 'appcode': 161 | case 'clion': 162 | case 'clion64': 163 | case 'idea': 164 | case 'idea64': 165 | case 'phpstorm': 166 | case 'phpstorm64': 167 | case 'pycharm': 168 | case 'pycharm64': 169 | case 'rubymine': 170 | case 'rubymine64': 171 | case 'webstorm': 172 | case 'webstorm64': 173 | case 'goland': 174 | case 'goland64': 175 | case 'rider': 176 | case 'rider64': 177 | return addWorkspaceToArgumentsIfExists( 178 | ['--line', lineNumber, fileName], 179 | workspace 180 | ); 181 | } 182 | 183 | // For all others, drop the lineNumber until we have 184 | // a mapping above, since providing the lineNumber incorrectly 185 | // can result in errors or confusing behavior. 186 | return [fileName]; 187 | } 188 | 189 | function guessEditor() { 190 | // Explicit config always wins 191 | if (process.env.VUE_EDITOR) { 192 | return shellQuote.parse(process.env.VUE_EDITOR); 193 | } 194 | 195 | // We can find out which editor is currently running by: 196 | // `ps x` on macOS and Linux 197 | // `Get-Process` on Windows 198 | try { 199 | if (process.platform === 'darwin') { 200 | const output = child_process.execSync('ps x').toString(); 201 | const processNames = Object.keys(COMMON_EDITORS_OSX); 202 | for (let i = 0; i < processNames.length; i++) { 203 | const processName = processNames[i]; 204 | if (output.indexOf(processName) !== -1) { 205 | return [COMMON_EDITORS_OSX[processName]]; 206 | } 207 | } 208 | } else if (process.platform === 'win32') { 209 | // Some processes need elevated rights to get its executable path. 210 | // Just filter them out upfront. This also saves 10-20ms on the command. 211 | const output = child_process 212 | .execSync( 213 | 'wmic process where "executablepath is not null" get executablepath' 214 | ) 215 | .toString(); 216 | const runningProcesses = output.split('\r\n'); 217 | for (let i = 0; i < runningProcesses.length; i++) { 218 | const processPath = runningProcesses[i].trim(); 219 | const processName = path.basename(processPath); 220 | if (COMMON_EDITORS_WIN.indexOf(processName) !== -1) { 221 | return [processPath]; 222 | } 223 | } 224 | } else if (process.platform === 'linux') { 225 | // --no-heading No header line 226 | // x List all processes owned by you 227 | // -o comm Need only names column 228 | const output = child_process 229 | .execSync('ps x --no-heading -o comm --sort=comm') 230 | .toString(); 231 | const processNames = Object.keys(COMMON_EDITORS_LINUX); 232 | for (let i = 0; i < processNames.length; i++) { 233 | const processName = processNames[i]; 234 | if (output.indexOf(processName) !== -1) { 235 | return [COMMON_EDITORS_LINUX[processName]]; 236 | } 237 | } 238 | } 239 | } catch (error) { 240 | // Ignore... 241 | } 242 | 243 | // Last resort, use old skool env vars 244 | if (process.env.VISUAL) { 245 | return [process.env.VISUAL]; 246 | } else if (process.env.EDITOR) { 247 | return [process.env.EDITOR]; 248 | } 249 | 250 | return [null]; 251 | } 252 | 253 | function printInstructions(fileName, errorMessage) { 254 | console.log(); 255 | console.log( 256 | chalk.red('Could not open ' + path.basename(fileName) + ' in the editor.') 257 | ); 258 | if (errorMessage) { 259 | if (errorMessage[errorMessage.length - 1] !== '.') { 260 | errorMessage += '.'; 261 | } 262 | console.log( 263 | chalk.red('The editor process exited with an error: ' + errorMessage) 264 | ); 265 | } 266 | console.log(); 267 | console.log( 268 | 'To set up the editor integration, add something like ' + 269 | chalk.cyan('VUE_EDITOR=atom') + 270 | ' to the ' + 271 | chalk.green('.env.local') + 272 | ' file in your project folder ' + 273 | 'and restart the development server. Learn more: ' + 274 | chalk.green('https://goo.gl/MMTaZt') 275 | ); 276 | console.log(); 277 | } 278 | 279 | let _childProcess = null; 280 | function launchEditor(fileName, lineNumber, colNumber) { 281 | if (!fs.existsSync(fileName)) { 282 | return; 283 | } 284 | 285 | // Sanitize lineNumber to prevent malicious use on win32 286 | // via: https://github.com/nodejs/node/blob/c3bb4b1aa5e907d489619fb43d233c3336bfc03d/lib/child_process.js#L333 287 | // and it should be a positive integer 288 | if (!(Number.isInteger(lineNumber) && lineNumber > 0)) { 289 | return; 290 | } 291 | 292 | // colNumber is optional, but should be a positive integer too 293 | // default is 1 294 | if (!(Number.isInteger(colNumber) && colNumber > 0)) { 295 | colNumber = 1; 296 | } 297 | 298 | let [editor, ...args] = guessEditor(); 299 | 300 | if (!editor) { 301 | printInstructions(fileName, null); 302 | return; 303 | } 304 | 305 | if (editor.toLowerCase() === 'none') { 306 | return; 307 | } 308 | 309 | if ( 310 | process.platform === 'linux' && 311 | fileName.startsWith('/mnt/') && 312 | /Microsoft/i.test(os.release()) 313 | ) { 314 | // Assume WSL / "Bash on Ubuntu on Windows" is being used, and 315 | // that the file exists on the Windows file system. 316 | // `os.release()` is "4.4.0-43-Microsoft" in the current release 317 | // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364 318 | // When a Windows editor is specified, interop functionality can 319 | // handle the path translation, but only if a relative path is used. 320 | fileName = path.relative('', fileName); 321 | } 322 | 323 | // cmd.exe on Windows is vulnerable to RCE attacks given a file name of the 324 | // form "C:\Users\myusername\Downloads\& curl 172.21.93.52". Use a whitelist 325 | // to validate user-provided file names. This doesn't cover the entire range 326 | // of valid file names but should cover almost all of them in practice. 327 | if ( 328 | process.platform === 'win32' && 329 | !WINDOWS_FILE_NAME_WHITELIST.test(fileName.trim()) 330 | ) { 331 | console.log(); 332 | console.log( 333 | chalk.red('Could not open ' + path.basename(fileName) + ' in the editor.') 334 | ); 335 | console.log(); 336 | console.log( 337 | 'When running on Windows, file names are checked against a whitelist ' + 338 | 'to protect against remote code execution attacks. File names may ' + 339 | 'consist only of alphanumeric characters (all languages), periods, ' + 340 | 'dashes, slashes, and underscores.' 341 | ); 342 | console.log(); 343 | return; 344 | } 345 | 346 | let workspace = null; 347 | if (lineNumber) { 348 | args = args.concat( 349 | getArgumentsForLineNumber( 350 | editor, 351 | fileName, 352 | lineNumber, 353 | colNumber, 354 | workspace 355 | ) 356 | ); 357 | } else { 358 | args.push(fileName); 359 | } 360 | 361 | if (_childProcess && isTerminalEditor(editor)) { 362 | // There's an existing editor process already and it's attached 363 | // to the terminal, so go kill it. Otherwise two separate editor 364 | // instances attach to the stdin/stdout which gets confusing. 365 | _childProcess.kill('SIGKILL'); 366 | } 367 | 368 | if (process.platform === 'win32') { 369 | // On Windows, launch the editor in a shell because spawn can only 370 | // launch .exe files. 371 | _childProcess = child_process.spawn( 372 | 'cmd.exe', 373 | ['/C', editor].concat(args), 374 | { stdio: 'inherit' } 375 | ); 376 | } else { 377 | _childProcess = child_process.spawn(editor, args, { stdio: 'inherit' }); 378 | } 379 | _childProcess.on('exit', function (errorCode) { 380 | _childProcess = null; 381 | 382 | if (errorCode) { 383 | printInstructions(fileName, '(code ' + errorCode + ')'); 384 | } 385 | }); 386 | 387 | _childProcess.on('error', function (error) { 388 | printInstructions(fileName, error.message); 389 | }); 390 | } 391 | 392 | module.exports = launchEditor; 393 | -------------------------------------------------------------------------------- /src/launch-editor.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const child_process = require('child_process'); 4 | const os = require('os'); 5 | const chalk = require('chalk'); 6 | const shellQuote = require('shell-quote'); 7 | 8 | function isTerminalEditor(editor) { 9 | switch (editor) { 10 | case 'vim': 11 | case 'emacs': 12 | case 'nano': 13 | return true; 14 | } 15 | return false; 16 | } 17 | 18 | // Map from full process name to binary that starts the process 19 | // We can't just re-use full process name, because it will spawn a new instance 20 | // of the app every time 21 | const COMMON_EDITORS_OSX = { 22 | '/Applications/Atom.app/Contents/MacOS/Atom': 'atom', 23 | '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta': 24 | '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta', 25 | '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets', 26 | '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text': 27 | '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl', 28 | '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text': 29 | '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl', 30 | '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2': 31 | '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl', 32 | '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code', 33 | '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron': 34 | 'code-insiders', 35 | '/Applications/VSCodium.app/Contents/MacOS/Electron': 'vscodium', 36 | '/Applications/AppCode.app/Contents/MacOS/appcode': 37 | '/Applications/AppCode.app/Contents/MacOS/appcode', 38 | '/Applications/CLion.app/Contents/MacOS/clion': 39 | '/Applications/CLion.app/Contents/MacOS/clion', 40 | '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea': 41 | '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea', 42 | '/Applications/PhpStorm.app/Contents/MacOS/phpstorm': 43 | '/Applications/PhpStorm.app/Contents/MacOS/phpstorm', 44 | '/Applications/PyCharm.app/Contents/MacOS/pycharm': 45 | '/Applications/PyCharm.app/Contents/MacOS/pycharm', 46 | '/Applications/PyCharm CE.app/Contents/MacOS/pycharm': 47 | '/Applications/PyCharm CE.app/Contents/MacOS/pycharm', 48 | '/Applications/RubyMine.app/Contents/MacOS/rubymine': 49 | '/Applications/RubyMine.app/Contents/MacOS/rubymine', 50 | '/Applications/WebStorm.app/Contents/MacOS/webstorm': 51 | '/Applications/WebStorm.app/Contents/MacOS/webstorm', 52 | '/Applications/MacVim.app/Contents/MacOS/MacVim': 'mvim', 53 | '/Applications/GoLand.app/Contents/MacOS/goland': 54 | '/Applications/GoLand.app/Contents/MacOS/goland', 55 | '/Applications/Rider.app/Contents/MacOS/rider': 56 | '/Applications/Rider.app/Contents/MacOS/rider', 57 | }; 58 | 59 | const COMMON_EDITORS_LINUX = { 60 | atom: 'atom', 61 | Brackets: 'brackets', 62 | code: 'code', 63 | 'code-insiders': 'code-insiders', 64 | vscodium: 'vscodium', 65 | emacs: 'emacs', 66 | gvim: 'gvim', 67 | 'idea.sh': 'idea', 68 | 'phpstorm.sh': 'phpstorm', 69 | 'pycharm.sh': 'pycharm', 70 | 'rubymine.sh': 'rubymine', 71 | sublime_text: 'sublime_text', 72 | vim: 'vim', 73 | 'webstorm.sh': 'webstorm', 74 | 'goland.sh': 'goland', 75 | 'rider.sh': 'rider', 76 | }; 77 | 78 | const COMMON_EDITORS_WIN = [ 79 | 'Brackets.exe', 80 | 'Code.exe', 81 | 'Code - Insiders.exe', 82 | 'VSCodium.exe', 83 | 'atom.exe', 84 | 'sublime_text.exe', 85 | 'notepad++.exe', 86 | 'clion.exe', 87 | 'clion64.exe', 88 | 'idea.exe', 89 | 'idea64.exe', 90 | 'phpstorm.exe', 91 | 'phpstorm64.exe', 92 | 'pycharm.exe', 93 | 'pycharm64.exe', 94 | 'rubymine.exe', 95 | 'rubymine64.exe', 96 | 'webstorm.exe', 97 | 'webstorm64.exe', 98 | 'goland.exe', 99 | 'goland64.exe', 100 | 'rider.exe', 101 | 'rider64.exe', 102 | ]; 103 | 104 | // Transpiled version of: /^([A-Za-z]:[/\\])?[\p{L}0-9/.\-_\\]+$/u 105 | // Non-transpiled version requires support for Unicode property regex. Allows 106 | // alphanumeric characters, periods, dashes, slashes, and underscores. 107 | const WINDOWS_FILE_NAME_WHITELIST = 108 | /^([A-Za-z]:[/\\])?(?:[\x2D-9A-Z\\_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7B9\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])+$/; 109 | 110 | function addWorkspaceToArgumentsIfExists(args, workspace) { 111 | if (workspace) { 112 | args.unshift(workspace); 113 | } 114 | return args; 115 | } 116 | 117 | function getArgumentsForLineNumber( 118 | editor, 119 | fileName, 120 | lineNumber, 121 | colNumber, 122 | workspace 123 | ) { 124 | const editorBasename = path.basename(editor).replace(/\.(exe|cmd|bat)$/i, ''); 125 | switch (editorBasename) { 126 | case 'atom': 127 | case 'Atom': 128 | case 'Atom Beta': 129 | case 'subl': 130 | case 'sublime': 131 | case 'sublime_text': 132 | return [fileName + ':' + lineNumber + ':' + colNumber]; 133 | case 'wstorm': 134 | case 'charm': 135 | return [fileName + ':' + lineNumber]; 136 | case 'notepad++': 137 | return ['-n' + lineNumber, '-c' + colNumber, fileName]; 138 | case 'vim': 139 | case 'mvim': 140 | case 'joe': 141 | case 'gvim': 142 | return ['+' + lineNumber, fileName]; 143 | case 'emacs': 144 | case 'emacsclient': 145 | return ['+' + lineNumber + ':' + colNumber, fileName]; 146 | case 'rmate': 147 | case 'mate': 148 | case 'mine': 149 | return ['--line', lineNumber, fileName]; 150 | case 'code': 151 | case 'Code': 152 | case 'code-insiders': 153 | case 'Code - Insiders': 154 | case 'vscodium': 155 | case 'VSCodium': 156 | return addWorkspaceToArgumentsIfExists( 157 | ['-g', fileName + ':' + lineNumber + ':' + colNumber], 158 | workspace 159 | ); 160 | case 'appcode': 161 | case 'clion': 162 | case 'clion64': 163 | case 'idea': 164 | case 'idea64': 165 | case 'phpstorm': 166 | case 'phpstorm64': 167 | case 'pycharm': 168 | case 'pycharm64': 169 | case 'rubymine': 170 | case 'rubymine64': 171 | case 'webstorm': 172 | case 'webstorm64': 173 | case 'goland': 174 | case 'goland64': 175 | case 'rider': 176 | case 'rider64': 177 | return addWorkspaceToArgumentsIfExists( 178 | ['--line', lineNumber, fileName], 179 | workspace 180 | ); 181 | } 182 | 183 | // For all others, drop the lineNumber until we have 184 | // a mapping above, since providing the lineNumber incorrectly 185 | // can result in errors or confusing behavior. 186 | return [fileName]; 187 | } 188 | 189 | function guessEditor() { 190 | // Explicit config always wins 191 | if (process.env.VUE_EDITOR) { 192 | return shellQuote.parse(process.env.VUE_EDITOR); 193 | } 194 | 195 | // We can find out which editor is currently running by: 196 | // `ps x` on macOS and Linux 197 | // `Get-Process` on Windows 198 | try { 199 | if (process.platform === 'darwin') { 200 | const output = child_process.execSync('ps x').toString(); 201 | const processNames = Object.keys(COMMON_EDITORS_OSX); 202 | for (let i = 0; i < processNames.length; i++) { 203 | const processName = processNames[i]; 204 | if (output.indexOf(processName) !== -1) { 205 | return [COMMON_EDITORS_OSX[processName]]; 206 | } 207 | } 208 | } else if (process.platform === 'win32') { 209 | // Some processes need elevated rights to get its executable path. 210 | // Just filter them out upfront. This also saves 10-20ms on the command. 211 | const output = child_process 212 | .execSync( 213 | 'wmic process where "executablepath is not null" get executablepath' 214 | ) 215 | .toString(); 216 | const runningProcesses = output.split('\r\n'); 217 | for (let i = 0; i < runningProcesses.length; i++) { 218 | const processPath = runningProcesses[i].trim(); 219 | const processName = path.basename(processPath); 220 | if (COMMON_EDITORS_WIN.indexOf(processName) !== -1) { 221 | return [processPath]; 222 | } 223 | } 224 | } else if (process.platform === 'linux') { 225 | // --no-heading No header line 226 | // x List all processes owned by you 227 | // -o comm Need only names column 228 | const output = child_process 229 | .execSync('ps x --no-heading -o comm --sort=comm') 230 | .toString(); 231 | const processNames = Object.keys(COMMON_EDITORS_LINUX); 232 | for (let i = 0; i < processNames.length; i++) { 233 | const processName = processNames[i]; 234 | if (output.indexOf(processName) !== -1) { 235 | return [COMMON_EDITORS_LINUX[processName]]; 236 | } 237 | } 238 | } 239 | } catch (error) { 240 | // Ignore... 241 | } 242 | 243 | // Last resort, use old skool env vars 244 | if (process.env.VISUAL) { 245 | return [process.env.VISUAL]; 246 | } else if (process.env.EDITOR) { 247 | return [process.env.EDITOR]; 248 | } 249 | 250 | return [null]; 251 | } 252 | 253 | function printInstructions(fileName, errorMessage) { 254 | console.log(); 255 | console.log( 256 | chalk.red('Could not open ' + path.basename(fileName) + ' in the editor.') 257 | ); 258 | if (errorMessage) { 259 | if (errorMessage[errorMessage.length - 1] !== '.') { 260 | errorMessage += '.'; 261 | } 262 | console.log( 263 | chalk.red('The editor process exited with an error: ' + errorMessage) 264 | ); 265 | } 266 | console.log(); 267 | console.log( 268 | 'To set up the editor integration, add something like ' + 269 | chalk.cyan('VUE_EDITOR=atom') + 270 | ' to the ' + 271 | chalk.green('.env.local') + 272 | ' file in your project folder ' + 273 | 'and restart the development server. Learn more: ' + 274 | chalk.green('https://goo.gl/MMTaZt') 275 | ); 276 | console.log(); 277 | } 278 | 279 | let _childProcess = null; 280 | function launchEditor(fileName, lineNumber, colNumber) { 281 | if (!fs.existsSync(fileName)) { 282 | return; 283 | } 284 | 285 | // Sanitize lineNumber to prevent malicious use on win32 286 | // via: https://github.com/nodejs/node/blob/c3bb4b1aa5e907d489619fb43d233c3336bfc03d/lib/child_process.js#L333 287 | // and it should be a positive integer 288 | if (!(Number.isInteger(lineNumber) && lineNumber > 0)) { 289 | return; 290 | } 291 | 292 | // colNumber is optional, but should be a positive integer too 293 | // default is 1 294 | if (!(Number.isInteger(colNumber) && colNumber > 0)) { 295 | colNumber = 1; 296 | } 297 | 298 | let [editor, ...args] = guessEditor(); 299 | 300 | if (!editor) { 301 | printInstructions(fileName, null); 302 | return; 303 | } 304 | 305 | if (editor.toLowerCase() === 'none') { 306 | return; 307 | } 308 | 309 | if ( 310 | process.platform === 'linux' && 311 | fileName.startsWith('/mnt/') && 312 | /Microsoft/i.test(os.release()) 313 | ) { 314 | // Assume WSL / "Bash on Ubuntu on Windows" is being used, and 315 | // that the file exists on the Windows file system. 316 | // `os.release()` is "4.4.0-43-Microsoft" in the current release 317 | // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364 318 | // When a Windows editor is specified, interop functionality can 319 | // handle the path translation, but only if a relative path is used. 320 | fileName = path.relative('', fileName); 321 | } 322 | 323 | // cmd.exe on Windows is vulnerable to RCE attacks given a file name of the 324 | // form "C:\Users\myusername\Downloads\& curl 172.21.93.52". Use a whitelist 325 | // to validate user-provided file names. This doesn't cover the entire range 326 | // of valid file names but should cover almost all of them in practice. 327 | if ( 328 | process.platform === 'win32' && 329 | !WINDOWS_FILE_NAME_WHITELIST.test(fileName.trim()) 330 | ) { 331 | console.log(); 332 | console.log( 333 | chalk.red('Could not open ' + path.basename(fileName) + ' in the editor.') 334 | ); 335 | console.log(); 336 | console.log( 337 | 'When running on Windows, file names are checked against a whitelist ' + 338 | 'to protect against remote code execution attacks. File names may ' + 339 | 'consist only of alphanumeric characters (all languages), periods, ' + 340 | 'dashes, slashes, and underscores.' 341 | ); 342 | console.log(); 343 | return; 344 | } 345 | 346 | let workspace = null; 347 | if (lineNumber) { 348 | args = args.concat( 349 | getArgumentsForLineNumber( 350 | editor, 351 | fileName, 352 | lineNumber, 353 | colNumber, 354 | workspace 355 | ) 356 | ); 357 | } else { 358 | args.push(fileName); 359 | } 360 | 361 | if (_childProcess && isTerminalEditor(editor)) { 362 | // There's an existing editor process already and it's attached 363 | // to the terminal, so go kill it. Otherwise two separate editor 364 | // instances attach to the stdin/stdout which gets confusing. 365 | _childProcess.kill('SIGKILL'); 366 | } 367 | 368 | if (process.platform === 'win32') { 369 | // On Windows, launch the editor in a shell because spawn can only 370 | // launch .exe files. 371 | _childProcess = child_process.spawn( 372 | 'cmd.exe', 373 | ['/C', editor].concat(args), 374 | { stdio: 'inherit' } 375 | ); 376 | } else { 377 | _childProcess = child_process.spawn(editor, args, { stdio: 'inherit' }); 378 | } 379 | _childProcess.on('exit', function (errorCode) { 380 | _childProcess = null; 381 | 382 | if (errorCode) { 383 | printInstructions(fileName, '(code ' + errorCode + ')'); 384 | } 385 | }); 386 | 387 | _childProcess.on('error', function (error) { 388 | printInstructions(fileName, error.message); 389 | }); 390 | } 391 | 392 | module.exports = launchEditor; 393 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.14.5": 6 | version "7.14.5" 7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 8 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 9 | dependencies: 10 | "@babel/highlight" "^7.14.5" 11 | 12 | "@babel/compat-data@^7.14.5": 13 | version "7.14.7" 14 | resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" 15 | integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== 16 | 17 | "@babel/core@^7.14.6": 18 | version "7.14.6" 19 | resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" 20 | integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== 21 | dependencies: 22 | "@babel/code-frame" "^7.14.5" 23 | "@babel/generator" "^7.14.5" 24 | "@babel/helper-compilation-targets" "^7.14.5" 25 | "@babel/helper-module-transforms" "^7.14.5" 26 | "@babel/helpers" "^7.14.6" 27 | "@babel/parser" "^7.14.6" 28 | "@babel/template" "^7.14.5" 29 | "@babel/traverse" "^7.14.5" 30 | "@babel/types" "^7.14.5" 31 | convert-source-map "^1.7.0" 32 | debug "^4.1.0" 33 | gensync "^1.0.0-beta.2" 34 | json5 "^2.1.2" 35 | semver "^6.3.0" 36 | source-map "^0.5.0" 37 | 38 | "@babel/generator@^7.14.5": 39 | version "7.14.5" 40 | resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" 41 | integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== 42 | dependencies: 43 | "@babel/types" "^7.14.5" 44 | jsesc "^2.5.1" 45 | source-map "^0.5.0" 46 | 47 | "@babel/helper-compilation-targets@^7.14.5": 48 | version "7.14.5" 49 | resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" 50 | integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== 51 | dependencies: 52 | "@babel/compat-data" "^7.14.5" 53 | "@babel/helper-validator-option" "^7.14.5" 54 | browserslist "^4.16.6" 55 | semver "^6.3.0" 56 | 57 | "@babel/helper-function-name@^7.14.5": 58 | version "7.14.5" 59 | resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" 60 | integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== 61 | dependencies: 62 | "@babel/helper-get-function-arity" "^7.14.5" 63 | "@babel/template" "^7.14.5" 64 | "@babel/types" "^7.14.5" 65 | 66 | "@babel/helper-get-function-arity@^7.14.5": 67 | version "7.14.5" 68 | resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" 69 | integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== 70 | dependencies: 71 | "@babel/types" "^7.14.5" 72 | 73 | "@babel/helper-hoist-variables@^7.14.5": 74 | version "7.14.5" 75 | resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" 76 | integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== 77 | dependencies: 78 | "@babel/types" "^7.14.5" 79 | 80 | "@babel/helper-member-expression-to-functions@^7.14.5": 81 | version "7.14.7" 82 | resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" 83 | integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== 84 | dependencies: 85 | "@babel/types" "^7.14.5" 86 | 87 | "@babel/helper-module-imports@^7.14.5": 88 | version "7.14.5" 89 | resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" 90 | integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== 91 | dependencies: 92 | "@babel/types" "^7.14.5" 93 | 94 | "@babel/helper-module-transforms@^7.14.5": 95 | version "7.14.5" 96 | resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" 97 | integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== 98 | dependencies: 99 | "@babel/helper-module-imports" "^7.14.5" 100 | "@babel/helper-replace-supers" "^7.14.5" 101 | "@babel/helper-simple-access" "^7.14.5" 102 | "@babel/helper-split-export-declaration" "^7.14.5" 103 | "@babel/helper-validator-identifier" "^7.14.5" 104 | "@babel/template" "^7.14.5" 105 | "@babel/traverse" "^7.14.5" 106 | "@babel/types" "^7.14.5" 107 | 108 | "@babel/helper-optimise-call-expression@^7.14.5": 109 | version "7.14.5" 110 | resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" 111 | integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== 112 | dependencies: 113 | "@babel/types" "^7.14.5" 114 | 115 | "@babel/helper-replace-supers@^7.14.5": 116 | version "7.14.5" 117 | resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" 118 | integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== 119 | dependencies: 120 | "@babel/helper-member-expression-to-functions" "^7.14.5" 121 | "@babel/helper-optimise-call-expression" "^7.14.5" 122 | "@babel/traverse" "^7.14.5" 123 | "@babel/types" "^7.14.5" 124 | 125 | "@babel/helper-simple-access@^7.14.5": 126 | version "7.14.5" 127 | resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" 128 | integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== 129 | dependencies: 130 | "@babel/types" "^7.14.5" 131 | 132 | "@babel/helper-split-export-declaration@^7.14.5": 133 | version "7.14.5" 134 | resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" 135 | integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== 136 | dependencies: 137 | "@babel/types" "^7.14.5" 138 | 139 | "@babel/helper-validator-identifier@^7.14.5": 140 | version "7.14.5" 141 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" 142 | integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== 143 | 144 | "@babel/helper-validator-option@^7.14.5": 145 | version "7.14.5" 146 | resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" 147 | integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== 148 | 149 | "@babel/helpers@^7.14.6": 150 | version "7.14.6" 151 | resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" 152 | integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== 153 | dependencies: 154 | "@babel/template" "^7.14.5" 155 | "@babel/traverse" "^7.14.5" 156 | "@babel/types" "^7.14.5" 157 | 158 | "@babel/highlight@^7.14.5": 159 | version "7.14.5" 160 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 161 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 162 | dependencies: 163 | "@babel/helper-validator-identifier" "^7.14.5" 164 | chalk "^2.0.0" 165 | js-tokens "^4.0.0" 166 | 167 | "@babel/parser@^7.12.0", "@babel/parser@^7.13.9", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7": 168 | version "7.14.7" 169 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" 170 | integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== 171 | 172 | "@babel/template@^7.14.5": 173 | version "7.14.5" 174 | resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" 175 | integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== 176 | dependencies: 177 | "@babel/code-frame" "^7.14.5" 178 | "@babel/parser" "^7.14.5" 179 | "@babel/types" "^7.14.5" 180 | 181 | "@babel/traverse@^7.14.5": 182 | version "7.14.7" 183 | resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" 184 | integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== 185 | dependencies: 186 | "@babel/code-frame" "^7.14.5" 187 | "@babel/generator" "^7.14.5" 188 | "@babel/helper-function-name" "^7.14.5" 189 | "@babel/helper-hoist-variables" "^7.14.5" 190 | "@babel/helper-split-export-declaration" "^7.14.5" 191 | "@babel/parser" "^7.14.7" 192 | "@babel/types" "^7.14.5" 193 | debug "^4.1.0" 194 | globals "^11.1.0" 195 | 196 | "@babel/types@^7.12.0", "@babel/types@^7.13.0", "@babel/types@^7.14.5": 197 | version "7.14.5" 198 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" 199 | integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== 200 | dependencies: 201 | "@babel/helper-validator-identifier" "^7.14.5" 202 | to-fast-properties "^2.0.0" 203 | 204 | "@types/eslint-scope@^3.7.0": 205 | version "3.7.1" 206 | resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" 207 | integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== 208 | dependencies: 209 | "@types/eslint" "*" 210 | "@types/estree" "*" 211 | 212 | "@types/eslint@*": 213 | version "7.2.14" 214 | resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.14.tgz#088661518db0c3c23089ab45900b99dd9214b92a" 215 | integrity sha512-pESyhSbUOskqrGcaN+bCXIQDyT5zTaRWfj5ZjjSlMatgGjIn3QQPfocAu4WSabUR7CGyLZ2CQaZyISOEX7/saw== 216 | dependencies: 217 | "@types/estree" "*" 218 | "@types/json-schema" "*" 219 | 220 | "@types/estree@*": 221 | version "0.0.50" 222 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" 223 | integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== 224 | 225 | "@types/estree@^0.0.49": 226 | version "0.0.49" 227 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz#3facb98ebcd4114a4ecef74e0de2175b56fd4464" 228 | integrity sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw== 229 | 230 | "@types/html-minifier-terser@^6.0.0": 231 | version "6.1.0" 232 | resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" 233 | integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== 234 | 235 | "@types/json-schema@*", "@types/json-schema@^7.0.7": 236 | version "7.0.8" 237 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" 238 | integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== 239 | 240 | "@types/node@*", "@types/node@^16.0.1": 241 | version "16.0.1" 242 | resolved "https://registry.npmjs.org/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8" 243 | integrity sha512-hBOx4SUlEPKwRi6PrXuTGw1z6lz0fjsibcWCM378YxsSu/6+C30L6CR49zIBKHiwNWCYIcOLjg4OHKZaFeLAug== 244 | 245 | "@vue/compiler-core@3.0.11": 246 | version "3.0.11" 247 | resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.11.tgz#5ef579e46d7b336b8735228758d1c2c505aae69a" 248 | integrity sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw== 249 | dependencies: 250 | "@babel/parser" "^7.12.0" 251 | "@babel/types" "^7.12.0" 252 | "@vue/shared" "3.0.11" 253 | estree-walker "^2.0.1" 254 | source-map "^0.6.1" 255 | 256 | "@vue/compiler-dom@3.0.11": 257 | version "3.0.11" 258 | resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.11.tgz#b15fc1c909371fd671746020ba55b5dab4a730ee" 259 | integrity sha512-+3xB50uGeY5Fv9eMKVJs2WSRULfgwaTJsy23OIltKgMrynnIj8hTYY2UL97HCoz78aDw1VDXdrBQ4qepWjnQcw== 260 | dependencies: 261 | "@vue/compiler-core" "3.0.11" 262 | "@vue/shared" "3.0.11" 263 | 264 | "@vue/compiler-sfc@3.0.11": 265 | version "3.0.11" 266 | resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.11.tgz#cd8ca2154b88967b521f5ad3b10f5f8b6b665679" 267 | integrity sha512-7fNiZuCecRleiyVGUWNa6pn8fB2fnuJU+3AGjbjl7r1P5wBivfl02H4pG+2aJP5gh2u+0wXov1W38tfWOphsXw== 268 | dependencies: 269 | "@babel/parser" "^7.13.9" 270 | "@babel/types" "^7.13.0" 271 | "@vue/compiler-core" "3.0.11" 272 | "@vue/compiler-dom" "3.0.11" 273 | "@vue/compiler-ssr" "3.0.11" 274 | "@vue/shared" "3.0.11" 275 | consolidate "^0.16.0" 276 | estree-walker "^2.0.1" 277 | hash-sum "^2.0.0" 278 | lru-cache "^5.1.1" 279 | magic-string "^0.25.7" 280 | merge-source-map "^1.1.0" 281 | postcss "^8.1.10" 282 | postcss-modules "^4.0.0" 283 | postcss-selector-parser "^6.0.4" 284 | source-map "^0.6.1" 285 | 286 | "@vue/compiler-ssr@3.0.11": 287 | version "3.0.11" 288 | resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.11.tgz#ac5a05fd1257412fa66079c823d8203b6a889a13" 289 | integrity sha512-66yUGI8SGOpNvOcrQybRIhl2M03PJ+OrDPm78i7tvVln86MHTKhM3ERbALK26F7tXl0RkjX4sZpucCpiKs3MnA== 290 | dependencies: 291 | "@vue/compiler-dom" "3.0.11" 292 | "@vue/shared" "3.0.11" 293 | 294 | "@vue/shared@3.0.11": 295 | version "3.0.11" 296 | resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77" 297 | integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA== 298 | 299 | "@webassemblyjs/ast@1.11.1": 300 | version "1.11.1" 301 | resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" 302 | integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== 303 | dependencies: 304 | "@webassemblyjs/helper-numbers" "1.11.1" 305 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 306 | 307 | "@webassemblyjs/floating-point-hex-parser@1.11.1": 308 | version "1.11.1" 309 | resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" 310 | integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== 311 | 312 | "@webassemblyjs/helper-api-error@1.11.1": 313 | version "1.11.1" 314 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" 315 | integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== 316 | 317 | "@webassemblyjs/helper-buffer@1.11.1": 318 | version "1.11.1" 319 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" 320 | integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== 321 | 322 | "@webassemblyjs/helper-numbers@1.11.1": 323 | version "1.11.1" 324 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" 325 | integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== 326 | dependencies: 327 | "@webassemblyjs/floating-point-hex-parser" "1.11.1" 328 | "@webassemblyjs/helper-api-error" "1.11.1" 329 | "@xtuc/long" "4.2.2" 330 | 331 | "@webassemblyjs/helper-wasm-bytecode@1.11.1": 332 | version "1.11.1" 333 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" 334 | integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== 335 | 336 | "@webassemblyjs/helper-wasm-section@1.11.1": 337 | version "1.11.1" 338 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" 339 | integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== 340 | dependencies: 341 | "@webassemblyjs/ast" "1.11.1" 342 | "@webassemblyjs/helper-buffer" "1.11.1" 343 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 344 | "@webassemblyjs/wasm-gen" "1.11.1" 345 | 346 | "@webassemblyjs/ieee754@1.11.1": 347 | version "1.11.1" 348 | resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" 349 | integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== 350 | dependencies: 351 | "@xtuc/ieee754" "^1.2.0" 352 | 353 | "@webassemblyjs/leb128@1.11.1": 354 | version "1.11.1" 355 | resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" 356 | integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== 357 | dependencies: 358 | "@xtuc/long" "4.2.2" 359 | 360 | "@webassemblyjs/utf8@1.11.1": 361 | version "1.11.1" 362 | resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" 363 | integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== 364 | 365 | "@webassemblyjs/wasm-edit@1.11.1": 366 | version "1.11.1" 367 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" 368 | integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== 369 | dependencies: 370 | "@webassemblyjs/ast" "1.11.1" 371 | "@webassemblyjs/helper-buffer" "1.11.1" 372 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 373 | "@webassemblyjs/helper-wasm-section" "1.11.1" 374 | "@webassemblyjs/wasm-gen" "1.11.1" 375 | "@webassemblyjs/wasm-opt" "1.11.1" 376 | "@webassemblyjs/wasm-parser" "1.11.1" 377 | "@webassemblyjs/wast-printer" "1.11.1" 378 | 379 | "@webassemblyjs/wasm-gen@1.11.1": 380 | version "1.11.1" 381 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" 382 | integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== 383 | dependencies: 384 | "@webassemblyjs/ast" "1.11.1" 385 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 386 | "@webassemblyjs/ieee754" "1.11.1" 387 | "@webassemblyjs/leb128" "1.11.1" 388 | "@webassemblyjs/utf8" "1.11.1" 389 | 390 | "@webassemblyjs/wasm-opt@1.11.1": 391 | version "1.11.1" 392 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" 393 | integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== 394 | dependencies: 395 | "@webassemblyjs/ast" "1.11.1" 396 | "@webassemblyjs/helper-buffer" "1.11.1" 397 | "@webassemblyjs/wasm-gen" "1.11.1" 398 | "@webassemblyjs/wasm-parser" "1.11.1" 399 | 400 | "@webassemblyjs/wasm-parser@1.11.1": 401 | version "1.11.1" 402 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" 403 | integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== 404 | dependencies: 405 | "@webassemblyjs/ast" "1.11.1" 406 | "@webassemblyjs/helper-api-error" "1.11.1" 407 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 408 | "@webassemblyjs/ieee754" "1.11.1" 409 | "@webassemblyjs/leb128" "1.11.1" 410 | "@webassemblyjs/utf8" "1.11.1" 411 | 412 | "@webassemblyjs/wast-printer@1.11.1": 413 | version "1.11.1" 414 | resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" 415 | integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== 416 | dependencies: 417 | "@webassemblyjs/ast" "1.11.1" 418 | "@xtuc/long" "4.2.2" 419 | 420 | "@xtuc/ieee754@^1.2.0": 421 | version "1.2.0" 422 | resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 423 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 424 | 425 | "@xtuc/long@4.2.2": 426 | version "4.2.2" 427 | resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 428 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 429 | 430 | acorn@^8.4.1: 431 | version "8.4.1" 432 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" 433 | integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== 434 | 435 | ajv-keywords@^3.5.2: 436 | version "3.5.2" 437 | resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 438 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 439 | 440 | ajv@^6.12.5: 441 | version "6.12.6" 442 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 443 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 444 | dependencies: 445 | fast-deep-equal "^3.1.1" 446 | fast-json-stable-stringify "^2.0.0" 447 | json-schema-traverse "^0.4.1" 448 | uri-js "^4.2.2" 449 | 450 | ansi-regex@^5.0.1: 451 | version "5.0.1" 452 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 453 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 454 | 455 | ansi-styles@^3.2.1: 456 | version "3.2.1" 457 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 458 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 459 | dependencies: 460 | color-convert "^1.9.0" 461 | 462 | ansi-styles@^4.1.0: 463 | version "4.3.0" 464 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 465 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 466 | dependencies: 467 | color-convert "^2.0.1" 468 | 469 | async@^2.6.2: 470 | version "2.6.3" 471 | resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" 472 | integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== 473 | dependencies: 474 | lodash "^4.17.14" 475 | 476 | big.js@^5.2.2: 477 | version "5.2.2" 478 | resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 479 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== 480 | 481 | bluebird@^3.7.2: 482 | version "3.7.2" 483 | resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 484 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 485 | 486 | boolbase@^1.0.0: 487 | version "1.0.0" 488 | resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 489 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 490 | 491 | browserslist@^4.14.5, browserslist@^4.16.6: 492 | version "4.16.6" 493 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" 494 | integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== 495 | dependencies: 496 | caniuse-lite "^1.0.30001219" 497 | colorette "^1.2.2" 498 | electron-to-chromium "^1.3.723" 499 | escalade "^3.1.1" 500 | node-releases "^1.1.71" 501 | 502 | buffer-from@^1.0.0: 503 | version "1.1.1" 504 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 505 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 506 | 507 | camel-case@^4.1.2: 508 | version "4.1.2" 509 | resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" 510 | integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== 511 | dependencies: 512 | pascal-case "^3.1.2" 513 | tslib "^2.0.3" 514 | 515 | caniuse-lite@^1.0.30001219: 516 | version "1.0.30001243" 517 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz#d9250155c91e872186671c523f3ae50cfc94a3aa" 518 | integrity sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA== 519 | 520 | chalk@^2.0.0: 521 | version "2.4.2" 522 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 523 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 524 | dependencies: 525 | ansi-styles "^3.2.1" 526 | escape-string-regexp "^1.0.5" 527 | supports-color "^5.3.0" 528 | 529 | chalk@^4.1.1: 530 | version "4.1.1" 531 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 532 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 533 | dependencies: 534 | ansi-styles "^4.1.0" 535 | supports-color "^7.1.0" 536 | 537 | chrome-trace-event@^1.0.2: 538 | version "1.0.3" 539 | resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 540 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 541 | 542 | clean-css@^5.2.2: 543 | version "5.2.2" 544 | resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz#d3a7c6ee2511011e051719838bdcf8314dc4548d" 545 | integrity sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w== 546 | dependencies: 547 | source-map "~0.6.0" 548 | 549 | color-convert@^1.9.0: 550 | version "1.9.3" 551 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 552 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 553 | dependencies: 554 | color-name "1.1.3" 555 | 556 | color-convert@^2.0.1: 557 | version "2.0.1" 558 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 559 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 560 | dependencies: 561 | color-name "~1.1.4" 562 | 563 | color-name@1.1.3: 564 | version "1.1.3" 565 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 566 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 567 | 568 | color-name@~1.1.4: 569 | version "1.1.4" 570 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 571 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 572 | 573 | colorette@^1.2.2: 574 | version "1.2.2" 575 | resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 576 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 577 | 578 | commander@^2.20.0: 579 | version "2.20.3" 580 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 581 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 582 | 583 | commander@^8.3.0: 584 | version "8.3.0" 585 | resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" 586 | integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== 587 | 588 | consolidate@^0.16.0: 589 | version "0.16.0" 590 | resolved "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16" 591 | integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ== 592 | dependencies: 593 | bluebird "^3.7.2" 594 | 595 | convert-source-map@^1.7.0: 596 | version "1.8.0" 597 | resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 598 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 599 | dependencies: 600 | safe-buffer "~5.1.1" 601 | 602 | css-select@^4.1.3: 603 | version "4.1.3" 604 | resolved "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" 605 | integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== 606 | dependencies: 607 | boolbase "^1.0.0" 608 | css-what "^5.0.0" 609 | domhandler "^4.2.0" 610 | domutils "^2.6.0" 611 | nth-check "^2.0.0" 612 | 613 | css-what@^5.0.0: 614 | version "5.1.0" 615 | resolved "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" 616 | integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== 617 | 618 | cssesc@^3.0.0: 619 | version "3.0.0" 620 | resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 621 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 622 | 623 | debug@^3.1.1: 624 | version "3.2.7" 625 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 626 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 627 | dependencies: 628 | ms "^2.1.1" 629 | 630 | debug@^4.1.0: 631 | version "4.3.2" 632 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 633 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 634 | dependencies: 635 | ms "2.1.2" 636 | 637 | dom-converter@^0.2.0: 638 | version "0.2.0" 639 | resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" 640 | integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== 641 | dependencies: 642 | utila "~0.4" 643 | 644 | dom-serializer@^1.0.1: 645 | version "1.3.2" 646 | resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" 647 | integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== 648 | dependencies: 649 | domelementtype "^2.0.1" 650 | domhandler "^4.2.0" 651 | entities "^2.0.0" 652 | 653 | domelementtype@^2.0.1, domelementtype@^2.2.0: 654 | version "2.2.0" 655 | resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" 656 | integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== 657 | 658 | domhandler@^4.0.0, domhandler@^4.2.0: 659 | version "4.3.0" 660 | resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" 661 | integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== 662 | dependencies: 663 | domelementtype "^2.2.0" 664 | 665 | domutils@^2.5.2, domutils@^2.6.0: 666 | version "2.8.0" 667 | resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 668 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== 669 | dependencies: 670 | dom-serializer "^1.0.1" 671 | domelementtype "^2.2.0" 672 | domhandler "^4.2.0" 673 | 674 | dot-case@^3.0.4: 675 | version "3.0.4" 676 | resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 677 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 678 | dependencies: 679 | no-case "^3.0.4" 680 | tslib "^2.0.3" 681 | 682 | electron-to-chromium@^1.3.723: 683 | version "1.3.769" 684 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.769.tgz#73ad7e3f2d435810b6f8b29617ec344c782fcbed" 685 | integrity sha512-B+3hW8D76/uoTPSobWI3D/CFn2S4jPn88dVJ+BkD88Lz6LijQpL+hfdzIFJGTQK4KdE0XwmNbjUQFH1OQVwKdQ== 686 | 687 | emojis-list@^3.0.0: 688 | version "3.0.0" 689 | resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" 690 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== 691 | 692 | enhanced-resolve@^5.8.0: 693 | version "5.8.2" 694 | resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" 695 | integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== 696 | dependencies: 697 | graceful-fs "^4.2.4" 698 | tapable "^2.2.0" 699 | 700 | entities@^2.0.0: 701 | version "2.2.0" 702 | resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 703 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 704 | 705 | es-module-lexer@^0.7.1: 706 | version "0.7.1" 707 | resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" 708 | integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== 709 | 710 | escalade@^3.1.1: 711 | version "3.1.1" 712 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 713 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 714 | 715 | escape-string-regexp@^1.0.5: 716 | version "1.0.5" 717 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 718 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 719 | 720 | eslint-scope@5.1.1: 721 | version "5.1.1" 722 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 723 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 724 | dependencies: 725 | esrecurse "^4.3.0" 726 | estraverse "^4.1.1" 727 | 728 | esrecurse@^4.3.0: 729 | version "4.3.0" 730 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 731 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 732 | dependencies: 733 | estraverse "^5.2.0" 734 | 735 | estraverse@^4.1.1: 736 | version "4.3.0" 737 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 738 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 739 | 740 | estraverse@^5.2.0: 741 | version "5.2.0" 742 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 743 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 744 | 745 | estree-walker@^2.0.1: 746 | version "2.0.2" 747 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 748 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 749 | 750 | events@^3.2.0: 751 | version "3.3.0" 752 | resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 753 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 754 | 755 | fast-deep-equal@^3.1.1: 756 | version "3.1.3" 757 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 758 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 759 | 760 | fast-json-stable-stringify@^2.0.0: 761 | version "2.1.0" 762 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 763 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 764 | 765 | generic-names@^2.0.1: 766 | version "2.0.1" 767 | resolved "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" 768 | integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ== 769 | dependencies: 770 | loader-utils "^1.1.0" 771 | 772 | gensync@^1.0.0-beta.2: 773 | version "1.0.0-beta.2" 774 | resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 775 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 776 | 777 | glob-to-regexp@^0.4.1: 778 | version "0.4.1" 779 | resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 780 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 781 | 782 | globals@^11.1.0: 783 | version "11.12.0" 784 | resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 785 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 786 | 787 | graceful-fs@^4.1.2, graceful-fs@^4.2.4: 788 | version "4.2.6" 789 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 790 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 791 | 792 | has-flag@^3.0.0: 793 | version "3.0.0" 794 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 795 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 796 | 797 | has-flag@^4.0.0: 798 | version "4.0.0" 799 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 800 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 801 | 802 | hash-sum@^2.0.0: 803 | version "2.0.0" 804 | resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" 805 | integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== 806 | 807 | he@^1.2.0: 808 | version "1.2.0" 809 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 810 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 811 | 812 | html-minifier-terser@^6.0.2: 813 | version "6.1.0" 814 | resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" 815 | integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== 816 | dependencies: 817 | camel-case "^4.1.2" 818 | clean-css "^5.2.2" 819 | commander "^8.3.0" 820 | he "^1.2.0" 821 | param-case "^3.0.4" 822 | relateurl "^0.2.7" 823 | terser "^5.10.0" 824 | 825 | html-webpack-plugin@^5.5.0: 826 | version "5.5.0" 827 | resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" 828 | integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== 829 | dependencies: 830 | "@types/html-minifier-terser" "^6.0.0" 831 | html-minifier-terser "^6.0.2" 832 | lodash "^4.17.21" 833 | pretty-error "^4.0.0" 834 | tapable "^2.0.0" 835 | 836 | htmlparser2@^6.1.0: 837 | version "6.1.0" 838 | resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" 839 | integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== 840 | dependencies: 841 | domelementtype "^2.0.1" 842 | domhandler "^4.0.0" 843 | domutils "^2.5.2" 844 | entities "^2.0.0" 845 | 846 | icss-replace-symbols@^1.1.0: 847 | version "1.1.0" 848 | resolved "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" 849 | integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= 850 | 851 | icss-utils@^5.0.0: 852 | version "5.1.0" 853 | resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" 854 | integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== 855 | 856 | jest-worker@^27.0.2: 857 | version "27.0.6" 858 | resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" 859 | integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== 860 | dependencies: 861 | "@types/node" "*" 862 | merge-stream "^2.0.0" 863 | supports-color "^8.0.0" 864 | 865 | js-tokens@^4.0.0: 866 | version "4.0.0" 867 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 868 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 869 | 870 | jsesc@^2.5.1: 871 | version "2.5.2" 872 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 873 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 874 | 875 | json-parse-better-errors@^1.0.2: 876 | version "1.0.2" 877 | resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 878 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 879 | 880 | json-schema-traverse@^0.4.1: 881 | version "0.4.1" 882 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 883 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 884 | 885 | json5@^1.0.1: 886 | version "1.0.1" 887 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 888 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 889 | dependencies: 890 | minimist "^1.2.0" 891 | 892 | json5@^2.1.2: 893 | version "2.2.0" 894 | resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 895 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 896 | dependencies: 897 | minimist "^1.2.5" 898 | 899 | loader-runner@^4.2.0: 900 | version "4.2.0" 901 | resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" 902 | integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== 903 | 904 | loader-utils@^1.1.0: 905 | version "1.4.0" 906 | resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" 907 | integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== 908 | dependencies: 909 | big.js "^5.2.2" 910 | emojis-list "^3.0.0" 911 | json5 "^1.0.1" 912 | 913 | lodash.camelcase@^4.3.0: 914 | version "4.3.0" 915 | resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 916 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 917 | 918 | lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: 919 | version "4.17.21" 920 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 921 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 922 | 923 | lower-case@^2.0.2: 924 | version "2.0.2" 925 | resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 926 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 927 | dependencies: 928 | tslib "^2.0.3" 929 | 930 | lru-cache@^5.1.1: 931 | version "5.1.1" 932 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 933 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 934 | dependencies: 935 | yallist "^3.0.2" 936 | 937 | magic-string@^0.25.7: 938 | version "0.25.7" 939 | resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 940 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 941 | dependencies: 942 | sourcemap-codec "^1.4.4" 943 | 944 | merge-source-map@^1.1.0: 945 | version "1.1.0" 946 | resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 947 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== 948 | dependencies: 949 | source-map "^0.6.1" 950 | 951 | merge-stream@^2.0.0: 952 | version "2.0.0" 953 | resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 954 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 955 | 956 | mime-db@1.48.0: 957 | version "1.48.0" 958 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" 959 | integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== 960 | 961 | mime-types@^2.1.27: 962 | version "2.1.31" 963 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" 964 | integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== 965 | dependencies: 966 | mime-db "1.48.0" 967 | 968 | minimist@^1.2.0, minimist@^1.2.5: 969 | version "1.2.5" 970 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 971 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 972 | 973 | mkdirp@^0.5.5: 974 | version "0.5.5" 975 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 976 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 977 | dependencies: 978 | minimist "^1.2.5" 979 | 980 | ms@2.1.2: 981 | version "2.1.2" 982 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 983 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 984 | 985 | ms@^2.1.1: 986 | version "2.1.3" 987 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 988 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 989 | 990 | nanoid@^3.1.23: 991 | version "3.1.23" 992 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 993 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 994 | 995 | neo-async@^2.6.2: 996 | version "2.6.2" 997 | resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 998 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 999 | 1000 | no-case@^3.0.4: 1001 | version "3.0.4" 1002 | resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 1003 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 1004 | dependencies: 1005 | lower-case "^2.0.2" 1006 | tslib "^2.0.3" 1007 | 1008 | node-releases@^1.1.71: 1009 | version "1.1.73" 1010 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" 1011 | integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== 1012 | 1013 | nth-check@^2.0.0: 1014 | version "2.0.1" 1015 | resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" 1016 | integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== 1017 | dependencies: 1018 | boolbase "^1.0.0" 1019 | 1020 | p-limit@^3.1.0: 1021 | version "3.1.0" 1022 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1023 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1024 | dependencies: 1025 | yocto-queue "^0.1.0" 1026 | 1027 | param-case@^3.0.4: 1028 | version "3.0.4" 1029 | resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" 1030 | integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== 1031 | dependencies: 1032 | dot-case "^3.0.4" 1033 | tslib "^2.0.3" 1034 | 1035 | pascal-case@^3.1.2: 1036 | version "3.1.2" 1037 | resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" 1038 | integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== 1039 | dependencies: 1040 | no-case "^3.0.4" 1041 | tslib "^2.0.3" 1042 | 1043 | portfinder@^1.0.28: 1044 | version "1.0.28" 1045 | resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" 1046 | integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== 1047 | dependencies: 1048 | async "^2.6.2" 1049 | debug "^3.1.1" 1050 | mkdirp "^0.5.5" 1051 | 1052 | postcss-modules-extract-imports@^3.0.0: 1053 | version "3.0.0" 1054 | resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" 1055 | integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== 1056 | 1057 | postcss-modules-local-by-default@^4.0.0: 1058 | version "4.0.0" 1059 | resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" 1060 | integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== 1061 | dependencies: 1062 | icss-utils "^5.0.0" 1063 | postcss-selector-parser "^6.0.2" 1064 | postcss-value-parser "^4.1.0" 1065 | 1066 | postcss-modules-scope@^3.0.0: 1067 | version "3.0.0" 1068 | resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" 1069 | integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== 1070 | dependencies: 1071 | postcss-selector-parser "^6.0.4" 1072 | 1073 | postcss-modules-values@^4.0.0: 1074 | version "4.0.0" 1075 | resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" 1076 | integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== 1077 | dependencies: 1078 | icss-utils "^5.0.0" 1079 | 1080 | postcss-modules@^4.0.0: 1081 | version "4.1.3" 1082 | resolved "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.1.3.tgz#c4c4c41d98d97d24c70e88dacfc97af5a4b3e21d" 1083 | integrity sha512-dBT39hrXe4OAVYJe/2ZuIZ9BzYhOe7t+IhedYeQ2OxKwDpAGlkEN/fR0fGnrbx4BvgbMReRX4hCubYK9cE/pJQ== 1084 | dependencies: 1085 | generic-names "^2.0.1" 1086 | icss-replace-symbols "^1.1.0" 1087 | lodash.camelcase "^4.3.0" 1088 | postcss-modules-extract-imports "^3.0.0" 1089 | postcss-modules-local-by-default "^4.0.0" 1090 | postcss-modules-scope "^3.0.0" 1091 | postcss-modules-values "^4.0.0" 1092 | string-hash "^1.1.1" 1093 | 1094 | postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: 1095 | version "6.0.6" 1096 | resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" 1097 | integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== 1098 | dependencies: 1099 | cssesc "^3.0.0" 1100 | util-deprecate "^1.0.2" 1101 | 1102 | postcss-value-parser@^4.1.0: 1103 | version "4.1.0" 1104 | resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" 1105 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== 1106 | 1107 | postcss@^8.1.10: 1108 | version "8.3.5" 1109 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" 1110 | integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== 1111 | dependencies: 1112 | colorette "^1.2.2" 1113 | nanoid "^3.1.23" 1114 | source-map-js "^0.6.2" 1115 | 1116 | pretty-error@^4.0.0: 1117 | version "4.0.0" 1118 | resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" 1119 | integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== 1120 | dependencies: 1121 | lodash "^4.17.20" 1122 | renderkid "^3.0.0" 1123 | 1124 | punycode@^2.1.0: 1125 | version "2.1.1" 1126 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1127 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1128 | 1129 | randombytes@^2.1.0: 1130 | version "2.1.0" 1131 | resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1132 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1133 | dependencies: 1134 | safe-buffer "^5.1.0" 1135 | 1136 | relateurl@^0.2.7: 1137 | version "0.2.7" 1138 | resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" 1139 | integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= 1140 | 1141 | renderkid@^3.0.0: 1142 | version "3.0.0" 1143 | resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" 1144 | integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== 1145 | dependencies: 1146 | css-select "^4.1.3" 1147 | dom-converter "^0.2.0" 1148 | htmlparser2 "^6.1.0" 1149 | lodash "^4.17.21" 1150 | strip-ansi "^6.0.1" 1151 | 1152 | safe-buffer@^5.1.0: 1153 | version "5.2.1" 1154 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1155 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1156 | 1157 | safe-buffer@~5.1.1: 1158 | version "5.1.2" 1159 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1160 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1161 | 1162 | schema-utils@^3.0.0: 1163 | version "3.1.0" 1164 | resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9" 1165 | integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w== 1166 | dependencies: 1167 | "@types/json-schema" "^7.0.7" 1168 | ajv "^6.12.5" 1169 | ajv-keywords "^3.5.2" 1170 | 1171 | semver@^6.3.0: 1172 | version "6.3.0" 1173 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1174 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1175 | 1176 | serialize-javascript@^6.0.0: 1177 | version "6.0.0" 1178 | resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1179 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1180 | dependencies: 1181 | randombytes "^2.1.0" 1182 | 1183 | shell-quote@^1.7.2: 1184 | version "1.7.2" 1185 | resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" 1186 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 1187 | 1188 | source-list-map@^2.0.1: 1189 | version "2.0.1" 1190 | resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" 1191 | integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== 1192 | 1193 | source-map-js@^0.6.2: 1194 | version "0.6.2" 1195 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 1196 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 1197 | 1198 | source-map-support@~0.5.19: 1199 | version "0.5.19" 1200 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1201 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1202 | dependencies: 1203 | buffer-from "^1.0.0" 1204 | source-map "^0.6.0" 1205 | 1206 | source-map-support@~0.5.20: 1207 | version "0.5.21" 1208 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1209 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1210 | dependencies: 1211 | buffer-from "^1.0.0" 1212 | source-map "^0.6.0" 1213 | 1214 | source-map@^0.5.0: 1215 | version "0.5.7" 1216 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1217 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1218 | 1219 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: 1220 | version "0.6.1" 1221 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1222 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1223 | 1224 | source-map@~0.7.2: 1225 | version "0.7.3" 1226 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 1227 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 1228 | 1229 | sourcemap-codec@^1.4.4: 1230 | version "1.4.8" 1231 | resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1232 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1233 | 1234 | string-hash@^1.1.1: 1235 | version "1.1.3" 1236 | resolved "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" 1237 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= 1238 | 1239 | strip-ansi@^6.0.1: 1240 | version "6.0.1" 1241 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1242 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1243 | dependencies: 1244 | ansi-regex "^5.0.1" 1245 | 1246 | supports-color@^5.3.0: 1247 | version "5.5.0" 1248 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1249 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1250 | dependencies: 1251 | has-flag "^3.0.0" 1252 | 1253 | supports-color@^7.1.0: 1254 | version "7.2.0" 1255 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1256 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1257 | dependencies: 1258 | has-flag "^4.0.0" 1259 | 1260 | supports-color@^8.0.0: 1261 | version "8.1.1" 1262 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1263 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1264 | dependencies: 1265 | has-flag "^4.0.0" 1266 | 1267 | tapable@^2.0.0: 1268 | version "2.2.1" 1269 | resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 1270 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 1271 | 1272 | tapable@^2.1.1, tapable@^2.2.0: 1273 | version "2.2.0" 1274 | resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" 1275 | integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== 1276 | 1277 | terser-webpack-plugin@^5.1.3: 1278 | version "5.1.4" 1279 | resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" 1280 | integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== 1281 | dependencies: 1282 | jest-worker "^27.0.2" 1283 | p-limit "^3.1.0" 1284 | schema-utils "^3.0.0" 1285 | serialize-javascript "^6.0.0" 1286 | source-map "^0.6.1" 1287 | terser "^5.7.0" 1288 | 1289 | terser@^5.10.0: 1290 | version "5.10.0" 1291 | resolved "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" 1292 | integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== 1293 | dependencies: 1294 | commander "^2.20.0" 1295 | source-map "~0.7.2" 1296 | source-map-support "~0.5.20" 1297 | 1298 | terser@^5.7.0: 1299 | version "5.7.1" 1300 | resolved "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" 1301 | integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== 1302 | dependencies: 1303 | commander "^2.20.0" 1304 | source-map "~0.7.2" 1305 | source-map-support "~0.5.19" 1306 | 1307 | to-fast-properties@^2.0.0: 1308 | version "2.0.0" 1309 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1310 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1311 | 1312 | tslib@^2.0.3: 1313 | version "2.3.1" 1314 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 1315 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 1316 | 1317 | uri-js@^4.2.2: 1318 | version "4.4.1" 1319 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1320 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1321 | dependencies: 1322 | punycode "^2.1.0" 1323 | 1324 | util-deprecate@^1.0.2: 1325 | version "1.0.2" 1326 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1327 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1328 | 1329 | utila@~0.4: 1330 | version "0.4.0" 1331 | resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" 1332 | integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= 1333 | 1334 | watchpack@^2.2.0: 1335 | version "2.2.0" 1336 | resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" 1337 | integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== 1338 | dependencies: 1339 | glob-to-regexp "^0.4.1" 1340 | graceful-fs "^4.1.2" 1341 | 1342 | webpack-sources@^2.3.0: 1343 | version "2.3.0" 1344 | resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" 1345 | integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== 1346 | dependencies: 1347 | source-list-map "^2.0.1" 1348 | source-map "^0.6.1" 1349 | 1350 | webpack@^5.43.0: 1351 | version "5.43.0" 1352 | resolved "https://registry.npmjs.org/webpack/-/webpack-5.43.0.tgz#36a122d6e9bac3836273857f56ed7801d40c9145" 1353 | integrity sha512-ex3nB9uxNI0azzb0r3xGwi+LS5Gw1RCRSKk0kg3kq9MYdIPmLS6UI3oEtG7esBaB51t9I+5H+vHmL3htaxqMSw== 1354 | dependencies: 1355 | "@types/eslint-scope" "^3.7.0" 1356 | "@types/estree" "^0.0.49" 1357 | "@webassemblyjs/ast" "1.11.1" 1358 | "@webassemblyjs/wasm-edit" "1.11.1" 1359 | "@webassemblyjs/wasm-parser" "1.11.1" 1360 | acorn "^8.4.1" 1361 | browserslist "^4.14.5" 1362 | chrome-trace-event "^1.0.2" 1363 | enhanced-resolve "^5.8.0" 1364 | es-module-lexer "^0.7.1" 1365 | eslint-scope "5.1.1" 1366 | events "^3.2.0" 1367 | glob-to-regexp "^0.4.1" 1368 | graceful-fs "^4.2.4" 1369 | json-parse-better-errors "^1.0.2" 1370 | loader-runner "^4.2.0" 1371 | mime-types "^2.1.27" 1372 | neo-async "^2.6.2" 1373 | schema-utils "^3.0.0" 1374 | tapable "^2.1.1" 1375 | terser-webpack-plugin "^5.1.3" 1376 | watchpack "^2.2.0" 1377 | webpack-sources "^2.3.0" 1378 | 1379 | yallist@^3.0.2: 1380 | version "3.1.1" 1381 | resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 1382 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 1383 | 1384 | yocto-queue@^0.1.0: 1385 | version "0.1.0" 1386 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1387 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1388 | --------------------------------------------------------------------------------