feat(fes-plugin-monaco-editor): 新增monaco-editor插件,提供编辑器能力

This commit is contained in:
harrywan 2021-07-22 20:46:49 +08:00
parent 365f89d1a2
commit 74cf05e15e
16 changed files with 668 additions and 259 deletions

View File

@ -1,10 +1,7 @@
import { readdirSync } from "fs";
import { join } from "path";
// utils must build before core
// runtime must build before renderer-react
const headPkgs = [
const pkgs = [
"fes-runtime",
"fes-compiler",
"fes",
@ -20,19 +17,14 @@ const headPkgs = [
"fes-plugin-vuex",
"create-fes-app",
"fes-plugin-qiankun",
"fes-plugin-sass"
"fes-plugin-sass",
"fes-plugin-monaco-editor"
];
const tailPkgs = [];
// const otherPkgs = readdirSync(join(__dirname, 'packages')).filter(
// (pkg) =>
// pkg.charAt(0) !== '.' && !headPkgs.includes(pkg) && !tailPkgs.includes(pkg),
// );
const otherPkgs = [];
export default {
target: "node",
cjs: { type: "babel", lazy: false },
disableTypeCheck: true,
pkgs: [...headPkgs, ...otherPkgs, ...tailPkgs],
pkgs,
};

4
.prettierrc Normal file
View File

@ -0,0 +1,4 @@
{
"singleQuote": true,
"trailingComma": "none"
}

View File

@ -14,7 +14,8 @@
"ver": "lerna version patch --no-changelog --no-commit-hooks --no-private",
"release": "father-build && lerna publish from-git",
"docs:dev": "vuepress dev docs --clean-cache",
"docs:build": "vuepress build docs --clean-cache"
"docs:build": "vuepress build docs --clean-cache",
"lint": "eslint -c ./.eslintrc.js --ext .js,.jsx,.vue,.ts"
},
"license": "MIT",
"keywords": [
@ -34,7 +35,7 @@
"@vuepress/plugin-pwa": "^2.0.0-alpha.18",
"@vuepress/plugin-pwa-popup": "^2.0.0-alpha.18",
"@vuepress/theme-vue": "^2.0.0-alpha.18",
"@webank/eslint-config-webank": "0.2.10",
"@webank/eslint-config-webank": "0.3.0",
"commitizen": "^4.2.1",
"cz-conventional-changelog": "^3.3.0",
"esbuild-loader": "^2.7.0",

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020-present webank
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,40 @@
{
"name": "@fesjs/plugin-monaco-editor",
"version": "2.0.0-rc.0",
"description": "@fesjs/plugin-monaco-editor",
"main": "lib/index.js",
"files": [
"lib"
],
"scripts": {
},
"repository": {
"type": "git",
"url": "git+https://github.com/WeBankFinTech/fes.js.git",
"directory": "packages/fes-plugin-monaco-editor"
},
"keywords": [
"fes"
],
"author": "harrywan",
"license": "MIT",
"bugs": {
"url": "https://github.com/WeBankFinTech/fes.js/issues"
},
"homepage": "https://github.com/WeBankFinTech/fes.js#readme",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@umijs/utils": "3.3.3",
"lodash": "^4.17.15",
"monaco-editor": "^0.20.0",
"monaco-editor-webpack-plugin": "^1.9.1"
},
"devDependencies": {
},
"peerDependencies": {
"@webank/fes": "^2.0.0",
"vue": "^3.0.5"
}
}

View File

@ -0,0 +1,85 @@
import { readFileSync } from 'fs';
import { join } from 'path';
const namespace = 'plugin-monaco-editor';
export default (api) => {
const {
utils: { Mustache }
} = api;
api.describe({
key: 'monacoEditor',
config: {
schema(joi) {
return joi.object().keys({
filename: joi.string(),
publicPath: joi.string(),
languages: joi.array(),
features: joi.array(),
globalAPI: joi.boolean()
});
}
},
default: {
}
});
const absoluteFilePath = join(namespace, 'core.js');
const absRuntimeFilePath = join(namespace, 'runtime.js');
const absLoaderFilePath = join(namespace, 'loader.js');
api.onGenerateFiles(() => {
// 文件写出
api.writeTmpFile({
path: absoluteFilePath,
content: Mustache.render(
readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'),
{
}
)
});
api.writeTmpFile({
path: absRuntimeFilePath,
content: Mustache.render(
readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8')
)
});
api.writeTmpFile({
path: absLoaderFilePath,
content: Mustache.render(
readFileSync(join(__dirname, 'runtime/loader.tpl'), 'utf-8')
)
});
api.copyTmpFiles({
namespace,
path: join(__dirname, 'runtime'),
ignore: ['.tpl']
});
});
api.addPluginExports(() => [
{
specifiers: ['monaco', 'MonacoEditor'],
source: absoluteFilePath
}
]);
api.addRuntimePluginKey(() => 'monacoEditor');
api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);
api.chainWebpack((webpackConfig) => {
webpackConfig
.plugin('monaco-editor')
.use(require('monaco-editor-webpack-plugin'), [
api.config?.monacoEditor || {}
]);
return webpackConfig;
});
};

View File

@ -0,0 +1,6 @@
import Editor from './editor';
import _monaco from './loader';
export const MonacoEditor = Editor;
export const monaco = _monaco;

View File

@ -0,0 +1,304 @@
<template>
<section ref="containRef" :style="style" class="editor" />
</template>
<script>
import {
computed, ref, watch, onMounted, onBeforeUnmount
} from 'vue';
import { merge, debounce } from 'lodash';
// eslint-disable-next-line
import monaco from './loader';
const processSize = function (size) {
return !/^\d+$/.test(size) ? size : `${size}px`;
};
export default {
name: 'MonacoEditor',
props: {
theme: {
type: String,
default: 'defaultTheme'
},
language: {
type: String,
default: ''
},
height: {
type: [String, Number],
default: '100%'
},
width: {
type: [String, Number],
default: '100%'
},
modelValue: String,
readOnly: Boolean,
options: Object,
check: {
type: Boolean,
default: false
}
},
emits: ['update:modelValue', 'onload', 'scrollChange'],
setup(props, { emit }) {
const containRef = ref(null);
const style = computed(() => {
const fixedWidth = processSize(props.width);
const fixedHeight = processSize(props.height);
return {
width: fixedWidth,
height: fixedHeight
};
});
const currentConfig = computed(() => {
const config = merge(
{
automaticLayout: true,
scrollBeyondLastLine: false,
minimap: {
enabled: false
},
glyphMargin: true,
fontSize: '14px',
contextmenu: true
},
props.options,
{
readOnly: props.readOnly
}
);
return config;
});
let editor;
let editorModel;
const getValue = () => {
if (!editor) {
return '';
}
const text = editor.getValue({
lineEnding: '\n',
preserveBOM: false
});
//
if (props.check) {
if (props.language === 'json') {
try {
JSON.parse(text);
} catch (e) {
return props.modelValue;
}
}
}
return text;
};
watch(currentConfig, () => {
if (editor) {
editor.updateOptions(currentConfig.value);
}
});
watch(() => props.language, (newVal) => {
if (editorModel) {
monaco.editor.setModelLanguage(editorModel, newVal);
}
});
watch(() => props.theme, (newVal) => {
if (editor) {
monaco.editor.setTheme(newVal);
}
});
watch([() => props.width, () => props.height], () => {
if (editor) {
editor.layout();
}
});
watch(
() => props.modelValue,
(newValue) => {
if (!editor) {
return;
}
if (newValue === getValue()) {
return;
}
const readOnly = editor.getRawOptions().readOnly;
if (readOnly) {
// editor.setValue model.setValue
editor.setValue(newValue);
} else {
//
const range = editorModel.getFullModelRange();
const text = newValue;
const op = {
identifier: {
major: 1,
minor: 1
},
range,
text,
forceMoveMarkers: true
};
editor.executeEdits('insertValue', [op]);
}
}
);
const initMonaco = () => {
if (!containRef.value) {
return;
}
editor = monaco.editor.create(containRef.value, {
...currentConfig.value,
language: props.language,
theme: props.theme,
value: props.modelValue
});
editorModel = editor.getModel();
emit('onload', {
monaco,
editor,
editorModel
});
editor.onDidScrollChange(
debounce((e) => {
emit('scrollChange', e);
}),
300
);
//
editor.onDidChangeModelContent(
debounce(() => {
emit('update:modelValue', getValue());
}),
100
);
//
editor.onDidBlurEditorText(() => {
//
editor.trigger('anyString', 'editor.action.formatDocument');
});
};
const undo = () => {
if (!editor) return;
editor.trigger('anyString', 'undo');
};
const redo = () => {
if (!editor) return;
editor.trigger('anyString', 'redo');
};
/**
* 保存的编辑状态 ViewState
* Yes, editor.saveViewState stores:
cursor position
scroll location
folded sections
for a certain model when it is connected to an editor instance.
Once the same model is connected to the same or a different editor instance, editor.restoreViewState can be used to restore the above listed state.
There are very many things that influence how rendering occurs:
the current theme
the current wrapping settings set on the editor
the enablement of a minimap, etc.
the current language configured for a model
etc.
*/
const saveViewState = () => {
if (!editorModel) return;
editorModel.viewState = editor.saveViewState();
};
// ViewState
const restoreViewState = () => {
if (editorModel && editorModel.viewState) {
editor.restoreViewState(editorModel.viewState);
}
};
//
const getValueInRange = () => {
if (!editor) return;
const selection = editor.getSelection();
return selection.isEmpty()
? null
: editorModel.getValueInRange(selection);
};
//
const insertValueIntoEditor = (value) => {
if (!editor) {
return;
}
const SelectedRange = editor.getSelection();
let range = null;
if (SelectedRange) {
range = new monaco.Range(
SelectedRange.startLineNumber,
SelectedRange.startColumn,
SelectedRange.endLineNumber,
SelectedRange.endColumn
);
const text = value;
const op = {
identifier: {
major: 1,
minor: 1
},
range,
text,
forceMoveMarkers: true
};
editor.executeEdits('insertValue', [op]);
}
};
onMounted(() => {
initMonaco();
});
onBeforeUnmount(() => {
// editorgc
editor && editor.dispose();
editorModel && editorModel.dispose();
});
return {
containRef,
style,
undo,
redo,
saveViewState,
restoreViewState,
getValueInRange,
insertValueIntoEditor
};
}
};
</script>
<style lang="less">
.editor {
height: 100%;
width: 100%;
.monaco-editor.rename-box {
left: 0;
top: 0;
}
.glyphMarginErrorClass {
background: #ff5500;
}
.contentErrorClass {
background: rgba(#ff5500, 0.2);
}
}
</style>

View File

@ -0,0 +1,7 @@
import * as monaco from 'monaco-editor';
import defaultTheme from './theme/default';
// 默认主题
defaultTheme.register(monaco);
export default monaco;

View File

@ -0,0 +1,111 @@
/* eslint-disable max-len */
export default {
register(monaco) {
monaco.editor.defineTheme('defaultTheme', {
base: 'vs',
inherit: true,
rules: [
{
foreground: 'c41a16',
token: 'string'
},
{
foreground: '1c00cf',
token: 'constant.numeric'
},
{
foreground: 'aa0d91',
token: 'keyword'
},
{
foreground: '000000',
token: 'keyword.operator'
},
{
foreground: 'aa0d91',
token: 'constant.language'
},
{
foreground: '990000',
token: 'support.class.exception'
},
{
foreground: '000000',
token: 'entity.name.function'
},
{
fontStyle: 'bold underline',
token: 'entity.name.type'
},
{
fontStyle: 'italic',
token: 'variable.parameter'
},
{
foreground: '007400',
token: 'comment'
},
{
foreground: 'ff0000',
token: 'invalid'
},
{
background: 'e71a1100',
token: 'invalid.deprecated.trailing-whitespace'
},
{
foreground: '000000',
background: 'fafafafc',
token: 'text source'
},
{
foreground: 'aa0d91',
token: 'meta.tag'
},
{
foreground: 'aa0d91',
token: 'declaration.tag'
},
{
foreground: '000000',
fontStyle: 'bold',
token: 'support'
},
{
foreground: 'aa0d91',
token: 'storage'
},
{
fontStyle: 'bold underline',
token: 'entity.name.section'
},
{
foreground: '000000',
fontStyle: 'bold',
token: 'entity.name.function.frame'
},
{
foreground: '333333',
token: 'meta.tag.preprocessor.xml'
},
{
foreground: '994500',
fontStyle: 'italic',
token: 'entity.other.attribute-name'
},
{
foreground: '881280',
token: 'entity.name.tag'
}
],
colors: {
'editor.foreground': '#000000',
'editor.background': '#FFFFFF',
'editor.selectionBackground': '#BAD6FD',
'editor.lineHighlightBackground': '#0000001A',
'editorCursor.foreground': '#000000',
'editorWhitespace.foreground': '#B3B3B3F4'
}
});
}
};

View File

@ -19,7 +19,7 @@
"keywords": [
"fes"
],
"author": "michaelxxie",
"author": "michaelxxie、harrywan",
"license": "MIT",
"bugs": {
"url": "https://github.com/WeBankFinTech/fes.js/issues"
@ -32,7 +32,7 @@
"@umijs/utils": "3.3.3",
"address": "^1.1.2",
"lodash": "^4.17.15",
"qiankun": "2.3.4"
"qiankun": "^2.4.4"
},
"devDependencies": {
"npm-run-all": "^4.1.5"

View File

@ -61,7 +61,10 @@ export default {
name: "test",
},
],
},
},{
name: 'editor',
icon: "/wine-outline.svg"
}
],
},
locale: {
@ -82,5 +85,8 @@ export default {
dynamicImport: true,
extraBabelPlugins: [
['import', { libraryName: 'ant-design-vue', libraryDirectory: 'es', style: 'css' }, 'ant-design-vue'],
]
],
monacoEditor: {
// languages: ['javascript', 'typescript', 'html', 'json']
}
};

View File

@ -57,6 +57,7 @@
"@fesjs/plugin-request": "^2.0.0",
"@fesjs/plugin-qiankun": "^2.0.0",
"@fesjs/plugin-sass": "^2.0.0",
"@fesjs/plugin-monaco-editor": "^2.0.0-rc.0",
"ant-design-vue": "2.0.0",
"vue": "^3.0.5",
"vuex": "^4.0.0"

View File

@ -0,0 +1,41 @@
<template>
<monaco-editor
ref="editorRef"
v-model="json"
:language="language"
height="200px"
check
/>
{{json}}
</template>
<config>
{
"name": "editor",
"title": "monaco-editor"
}
</config>
<script>
import { onMounted, ref } from 'vue';
import { MonacoEditor } from '@fesjs/fes';
export default {
components: {
MonacoEditor
},
setup() {
const editorRef = ref();
const json = ref('');
const language = ref('json');
onMounted(() => {
setTimeout(() => {
language.value = 'html';
}, 3000);
});
return {
editorRef,
json,
language
};
}
};
</script>

272
yarn.lock
View File

@ -478,7 +478,7 @@
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0"
integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==
"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.12.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0":
"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.12.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4", "@babel/parser@^7.4.3":
version "7.13.9"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99"
integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw==
@ -1657,7 +1657,7 @@
globals "^11.1.0"
lodash "^4.17.19"
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0":
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.4.3":
version "7.13.0"
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc"
integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==
@ -1690,7 +1690,7 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.5", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.5", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4":
version "7.13.0"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80"
integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==
@ -1911,21 +1911,6 @@
"@docsearch/css" "3.0.0-alpha.31"
algoliasearch "^4.0.0"
"@eslint/eslintrc@^0.4.0":
version "0.4.0"
resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
dependencies:
ajv "^6.12.4"
debug "^4.1.1"
espree "^7.3.0"
globals "^12.1.0"
ignore "^4.0.6"
import-fresh "^3.2.1"
js-yaml "^3.13.1"
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@eslint/eslintrc@^0.4.1":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14"
@ -4443,21 +4428,6 @@
ora "^5.3.0"
upath "^2.0.1"
"@webank/eslint-config-webank@0.2.10":
version "0.2.10"
resolved "https://registry.npmjs.org/@webank/eslint-config-webank/-/eslint-config-webank-0.2.10.tgz#43538752a051abe8019933601aac097cb081938f"
integrity sha512-DAA71s0V+ib4dAL/w7Rj3FMUljcacgTKPNZWymv4YWkUwbHhWJApYlMw1d864MiPEg4PLQtaiAtHokERoEWOSQ==
dependencies:
babel-eslint "^10.1.0"
confusing-browser-globals "^1.0.10"
eslint "^7.15.0"
eslint-plugin-angular "^4.0.1"
eslint-plugin-html "^6.1.1"
eslint-plugin-import "^2.18.2"
eslint-plugin-node "^11.1.0"
eslint-plugin-vue "^7.5.0"
vue-eslint-parser "^7.4.1"
"@webank/eslint-config-webank@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@webank/eslint-config-webank/-/eslint-config-webank-0.3.0.tgz#250e0eb726958d038529156f6be175b8766ae1d2"
@ -4757,16 +4727,6 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ajv@^7.0.2:
version "7.1.1"
resolved "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84"
integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==
dependencies:
fast-deep-equal "^3.1.1"
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
uri-js "^4.2.2"
ajv@^8.0.1:
version "8.5.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b"
@ -5061,7 +5021,7 @@ array-ify@^1.0.0:
resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
array-includes@^3.1.1, array-includes@^3.1.3:
array-includes@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
@ -5104,7 +5064,7 @@ array-unique@^0.3.2:
resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.4:
array.prototype.flat@^1.2.4:
version "1.2.4"
resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
@ -5241,18 +5201,6 @@ babel-core@^7.0.0-bridge.0:
resolved "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
babel-eslint@^10.1.0:
version "10.1.0"
resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
dependencies:
"@babel/code-frame" "^7.0.0"
"@babel/parser" "^7.7.0"
"@babel/traverse" "^7.7.0"
"@babel/types" "^7.7.0"
eslint-visitor-keys "^1.0.0"
resolve "^1.12.0"
babel-jest@^26.6.3:
version "26.6.3"
resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056"
@ -6456,11 +6404,6 @@ consolidate@^0.16.0:
dependencies:
bluebird "^3.7.2"
contains-path@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
content-disposition@0.5.3:
version "0.5.3"
resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
@ -7407,14 +7350,6 @@ dns-txt@^2.0.2:
dependencies:
buffer-indexof "^1.0.0"
doctrine@1.5.0:
version "1.5.0"
resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
dependencies:
esutils "^2.0.2"
isarray "^1.0.0"
doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
@ -7500,13 +7435,6 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
domhandler@^3.3.0:
version "3.3.0"
resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
domhandler@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e"
@ -7537,15 +7465,6 @@ domutils@^1.5.1, domutils@^1.7.0:
dom-serializer "0"
domelementtype "1"
domutils@^2.4.2:
version "2.4.4"
resolved "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3"
integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.0.1"
domhandler "^4.0.0"
domutils@^2.4.3, domutils@^2.5.2:
version "2.6.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7"
@ -7864,14 +7783,6 @@ eslint-import-resolver-node@^0.3.4:
debug "^2.6.9"
resolve "^1.13.1"
eslint-module-utils@^2.6.0:
version "2.6.0"
resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
dependencies:
debug "^2.6.9"
pkg-dir "^2.0.0"
eslint-module-utils@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233"
@ -7893,13 +7804,6 @@ eslint-plugin-es@^3.0.0:
eslint-utils "^2.0.0"
regexpp "^3.0.0"
eslint-plugin-html@^6.1.1:
version "6.1.1"
resolved "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.1.tgz#95aee151900b9bb2da5fa017b45cc64456a0a74e"
integrity sha512-JSe3ZDb7feKMnQM27XWGeoIjvP4oWQMJD9GZ6wW67J7/plVL87NK72RBwlvfc3tTZiYUchHhxAwtgEd1GdofDA==
dependencies:
htmlparser2 "^5.0.1"
eslint-plugin-html@^6.1.2:
version "6.1.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-6.1.2.tgz#fa26e4804428956c80e963b6499c192061c2daf3"
@ -7907,25 +7811,6 @@ eslint-plugin-html@^6.1.2:
dependencies:
htmlparser2 "^6.0.1"
eslint-plugin-import@^2.18.2:
version "2.22.1"
resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
dependencies:
array-includes "^3.1.1"
array.prototype.flat "^1.2.3"
contains-path "^0.1.0"
debug "^2.6.9"
doctrine "1.5.0"
eslint-import-resolver-node "^0.3.4"
eslint-module-utils "^2.6.0"
has "^1.0.3"
minimatch "^3.0.4"
object.values "^1.1.1"
read-pkg-up "^2.0.0"
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
eslint-plugin-import@^2.22.1:
version "2.23.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.3.tgz#8a1b073289fff03c4af0f04b6df956b7d463e191"
@ -7959,16 +7844,6 @@ eslint-plugin-node@^11.1.0:
resolve "^1.10.1"
semver "^6.1.0"
eslint-plugin-vue@^7.5.0:
version "7.7.0"
resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.7.0.tgz#a90df4595e670821bf243bd2750ededdb74948b8"
integrity sha512-mYz4bpLGv5jx6YG/GvKkqbGSfV7uma2u1P3mLA41Q5vQl8W1MeuTneB8tfsLq6xxxesFubcrOC0BZBJ5R+eaCQ==
dependencies:
eslint-utils "^2.1.0"
natural-compare "^1.4.0"
semver "^7.3.2"
vue-eslint-parser "^7.6.0"
eslint-plugin-vue@^7.9.0:
version "7.9.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz#f8e83a2a908f4c43fc8304f5401d4ff671f3d560"
@ -7994,7 +7869,7 @@ eslint-utils@^2.0.0, eslint-utils@^2.1.0:
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
@ -8009,49 +7884,6 @@ eslint-visitor-keys@^2.1.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
eslint@^7.15.0:
version "7.21.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83"
integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==
dependencies:
"@babel/code-frame" "7.12.11"
"@eslint/eslintrc" "^0.4.0"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.0.1"
doctrine "^3.0.0"
enquirer "^2.3.5"
eslint-scope "^5.1.1"
eslint-utils "^2.1.0"
eslint-visitor-keys "^2.0.0"
espree "^7.3.1"
esquery "^1.4.0"
esutils "^2.0.2"
file-entry-cache "^6.0.1"
functional-red-black-tree "^1.0.1"
glob-parent "^5.0.0"
globals "^12.1.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash "^4.17.20"
minimatch "^3.0.4"
natural-compare "^1.4.0"
optionator "^0.9.1"
progress "^2.0.0"
regexpp "^3.1.0"
semver "^7.2.1"
strip-ansi "^6.0.0"
strip-json-comments "^3.1.0"
table "^6.0.4"
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
eslint@^7.26.0:
version "7.27.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7"
@ -9566,16 +9398,6 @@ htmlparser2@^3.10.1, htmlparser2@^3.9.1:
inherits "^2.0.1"
readable-stream "^3.1.1"
htmlparser2@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7"
integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==
dependencies:
domelementtype "^2.0.1"
domhandler "^3.3.0"
domutils "^2.4.2"
entities "^2.0.0"
htmlparser2@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@ -10509,7 +10331,7 @@ is-yarn-global@^0.3.0:
resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
@ -11422,16 +11244,6 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
load-json-file@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
dependencies:
graceful-fs "^4.1.2"
parse-json "^2.2.0"
pify "^2.0.0"
strip-bom "^3.0.0"
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@ -12202,6 +12014,18 @@ moment@^2.27.0:
resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
monaco-editor-webpack-plugin@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.9.1.tgz#eb4bbb1c5e5bfb554541c1ae1542e74c2a9f43fd"
integrity sha512-x7fx1w3i/uwZERIgztHAAK3VQMsL8+ku0lFXXbO81hKDg8IieACqjGEa2mqEueg0c/fX+wd0oI+75wB19KJAsA==
dependencies:
loader-utils "^1.2.3"
monaco-editor@^0.20.0:
version "0.20.0"
resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.20.0.tgz#5d5009343a550124426cb4d965a4d27a348b4dea"
integrity sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ==
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@ -12690,7 +12514,7 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.3:
object.values@^1.1.0, object.values@^1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee"
integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==
@ -13207,13 +13031,6 @@ path-type@^1.0.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
path-type@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
dependencies:
pify "^2.0.0"
path-type@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@ -14240,15 +14057,15 @@ q@^1.1.2, q@^1.5.1:
resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
qiankun@2.3.4:
version "2.3.4"
resolved "https://registry.yarnpkg.com/qiankun/-/qiankun-2.3.4.tgz#a6a6382c1e909a76f9aea1708ff46276432428f2"
integrity sha512-LJ3luGH0eAQ3xd7vH7xUtAS57eGUs4bMiCcFQx1OJ94XJ3VdKIb97jqT5p5ibOj82EPQdLJhVsB5+phm4iEXfw==
qiankun@^2.4.4:
version "2.4.4"
resolved "https://registry.yarnpkg.com/qiankun/-/qiankun-2.4.4.tgz#e98a1930af66fef9aa5a7573b789959cd742e65d"
integrity sha512-n7yrKge4po9SB6ykqyoX8JbNuDpo4G9C5V9agRy6IPWruPnyh4vxLb5UhTKVd1/CsVScP7V9gTMyy55EJFpzlA==
dependencies:
"@babel/runtime" "^7.10.5"
import-html-entry "^1.9.0"
lodash "^4.17.11"
single-spa "5.8.1"
single-spa "^5.9.2"
tslib "^1.10.0"
qs@6.7.0:
@ -14380,14 +14197,6 @@ read-pkg-up@^1.0.1:
find-up "^1.0.0"
read-pkg "^1.0.0"
read-pkg-up@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
dependencies:
find-up "^2.0.0"
read-pkg "^2.0.0"
read-pkg-up@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
@ -14422,15 +14231,6 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
read-pkg@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
dependencies:
load-json-file "^2.0.0"
normalize-package-data "^2.3.2"
path-type "^2.0.0"
read-pkg@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
@ -14819,7 +14619,7 @@ resolve@1.17.0:
dependencies:
path-parse "^1.0.6"
resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1:
resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1:
version "1.20.0"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@ -15348,10 +15148,10 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
single-spa@5.8.1:
version "5.8.1"
resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-5.8.1.tgz#86c2575e297e31d8f06945944ec97e31851a59ae"
integrity sha512-RlyLZ1IDIPdzI6mQPzCQnlgTt9jmbAXBZODmifoDut840wksPDSPhcSS8jXMpuUlqOidQiX2YuLVQSR9DEgsXw==
single-spa@^5.9.2:
version "5.9.3"
resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-5.9.3.tgz#2d151cbb3b273629a5b27b30a3b8ca847dcba4c5"
integrity sha512-qMGraRzIBsodV6569Fob4cQ4/yQNrcZ5Achh3SAQDljmqUtjAZ7BAA7GAyO/l5eizb7GtTmVq9Di7ORyKw82CQ==
sirv@^1.0.7:
version "1.0.11"
@ -16064,16 +15864,6 @@ symbol-tree@^3.2.4:
resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
table@^6.0.4:
version "6.0.7"
resolved "https://registry.npmjs.org/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34"
integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==
dependencies:
ajv "^7.0.2"
lodash "^4.17.20"
slice-ansi "^4.0.0"
string-width "^4.2.0"
table@^6.0.9:
version "6.7.1"
resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
@ -17013,7 +16803,7 @@ vinyl@^2.0.0, vinyl@^2.1.0:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
vue-eslint-parser@^7.4.1, vue-eslint-parser@^7.6.0:
vue-eslint-parser@^7.6.0:
version "7.6.0"
resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561"
integrity sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==