chore: add tslint (#37)

* chore: tslint

* chore: workflow lint

Co-authored-by: Amour1688 <lcz_1996@foxmail.com>
This commit is contained in:
xrk 2020-07-19 14:47:24 +08:00 committed by GitHub
parent 6b0b7534a4
commit ee0d544c24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 321 additions and 106 deletions

View File

@ -12,7 +12,12 @@ module.exports = {
jest: true, jest: true,
es6: true, es6: true,
}, },
extends: 'eslint-config-airbnb-base', parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'import'],
extends: [
'eslint-config-airbnb-base',
'plugin:@typescript-eslint/recommended'
],
rules: { rules: {
'no-nested-ternary': [0], 'no-nested-ternary': [0],
'no-param-reassign': [0], 'no-param-reassign': [0],
@ -20,6 +25,18 @@ module.exports = {
'no-plusplus': [0], 'no-plusplus': [0],
'import/no-extraneous-dependencies': [0], 'import/no-extraneous-dependencies': [0],
'consistent-return': [0], 'consistent-return': [0],
'no-bitwise': [0] 'no-bitwise': [0],
'prefer-destructuring': [2, { 'array': false }],
'import/extensions': [2, 'ignorePackages', { ts: 'never' }],
'@typescript-eslint/ban-ts-comment': [0],
'@typescript-eslint/explicit-module-boundary-types': [0],
'@typescript-eslint/no-explicit-any': [0]
}, },
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx']
}
}
}
}; };

View File

@ -10,7 +10,10 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: install - name: install
run: yarn install --pure-lockfile run: yarn install
- name: lint
run: yarn lint
- name: test - name: test
run: yarn test run: yarn test

View File

@ -6,6 +6,7 @@
"scripts": { "scripts": {
"publish": "lerna publish", "publish": "lerna publish",
"test": "lerna run test", "test": "lerna run test",
"lint": "lerna run lint",
"dev": "node scripts/dev.js", "dev": "node scripts/dev.js",
"site": "node scripts/site.js" "site": "node scripts/site.js"
}, },

View File

@ -13,7 +13,7 @@
"scripts": { "scripts": {
"dev": "npm run build && webpack-dev-server", "dev": "npm run build && webpack-dev-server",
"build": "tsc", "build": "tsc",
"lint": "eslint --ext .js src", "lint": "eslint 'src/*.ts'",
"test": "npm run build && jest --coverage" "test": "npm run build && jest --coverage"
}, },
"bugs": { "bugs": {
@ -27,6 +27,7 @@
"@ant-design-vue/babel-helper-vue-transform-on": "^1.0.0", "@ant-design-vue/babel-helper-vue-transform-on": "^1.0.0",
"@babel/helper-module-imports": "^7.0.0", "@babel/helper-module-imports": "^7.0.0",
"@babel/plugin-syntax-jsx": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.0.0",
"@babel/traverse": "^7.0.0",
"@babel/types": "^7.0.0", "@babel/types": "^7.0.0",
"camelcase": "^6.0.0", "camelcase": "^6.0.0",
"html-tags": "^3.1.0", "html-tags": "^3.1.0",
@ -37,6 +38,8 @@
"@babel/preset-env": "^7.0.0", "@babel/preset-env": "^7.0.0",
"@rollup/plugin-babel": "^5.0.3", "@rollup/plugin-babel": "^5.0.3",
"@types/svg-tags": "^1.0.0", "@types/svg-tags": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^3.6.1",
"@typescript-eslint/parser": "^3.6.1",
"@vue/compiler-dom": "3.0.0-rc.1", "@vue/compiler-dom": "3.0.0-rc.1",
"@vue/test-utils": "2.0.0-beta.0", "@vue/test-utils": "2.0.0-beta.0",
"babel-jest": "^26.0.1", "babel-jest": "^26.0.1",

View File

@ -1,7 +1,9 @@
import * as t from '@babel/types'; import * as t from '@babel/types';
import { NodePath } from '@babel/traverse'; import { NodePath } from '@babel/traverse';
import { createIdentifier } from './utils'; import { createIdentifier } from './utils';
import { State, ExcludesBoolean } from './'; import { State, ExcludesBoolean } from '.';
type Tag = t.Identifier | t.MemberExpression | t.StringLiteral | t.CallExpression;
/** /**
* Get JSX element type * Get JSX element type
@ -17,9 +19,8 @@ const getType = (path: NodePath<t.JSXOpeningElement>) => {
} }
return t.isJSXIdentifier(attribute.get('name')) return t.isJSXIdentifier(attribute.get('name'))
&& (attribute.get('name') as NodePath<t.JSXIdentifier>).get('name') === 'type' && (attribute.get('name') as NodePath<t.JSXIdentifier>).get('name') === 'type'
&& t.isStringLiteral(attribute.get('value')) && t.isStringLiteral(attribute.get('value'));
}, });
);
return typePath ? typePath.get('value.value') : ''; return typePath ? typePath.get('value.value') : '';
}; };
@ -27,22 +28,22 @@ const getType = (path: NodePath<t.JSXOpeningElement>) => {
const parseModifiers = (value: t.Expression) => { const parseModifiers = (value: t.Expression) => {
let modifiers: string[] = []; let modifiers: string[] = [];
if (t.isArrayExpression(value)) { if (t.isArrayExpression(value)) {
modifiers = (value as t.ArrayExpression).elements.map(el => t.isStringLiteral(el) ? el.value : '').filter(Boolean) modifiers = (value as t.ArrayExpression).elements.map((el) => (t.isStringLiteral(el) ? el.value : '')).filter(Boolean);
} }
return modifiers; return modifiers;
} };
const parseDirectives = (args: { const parseDirectives = (args: {
name: string, name: string,
path: NodePath<t.JSXAttribute>, path: NodePath<t.JSXAttribute>,
value: t.StringLiteral | t.Expression | null, value: t.StringLiteral | t.Expression | null,
state: State, state: State,
tag: t.Identifier | t.MemberExpression | t.StringLiteral | t.CallExpression, tag: Tag,
isComponent: boolean isComponent: boolean
}) => { }) => {
const { const {
name, path, value, state, tag, isComponent, name, path, value, state, tag, isComponent,
} = args } = args;
let modifiers: string[] = name.split('_'); let modifiers: string[] = name.split('_');
let arg; let arg;
let val; let val;
@ -93,14 +94,19 @@ const parseDirectives = (args: {
}; };
}; };
const resolveDirective = (path: NodePath<t.JSXAttribute>, state: State, tag: any, directiveName: string) => { const resolveDirective = (
path: NodePath<t.JSXAttribute>,
state: State,
tag: Tag,
directiveName: string,
) => {
if (directiveName === 'show') { if (directiveName === 'show') {
return createIdentifier(state, 'vShow'); return createIdentifier(state, 'vShow');
} }
if (directiveName === 'model') { if (directiveName === 'model') {
let modelToUse; let modelToUse;
const type = getType(path.parentPath as NodePath<t.JSXOpeningElement>); const type = getType(path.parentPath as NodePath<t.JSXOpeningElement>);
switch (tag.value) { switch ((tag as t.StringLiteral).value) {
case 'select': case 'select':
modelToUse = createIdentifier(state, 'vModelSelect'); modelToUse = createIdentifier(state, 'vModelSelect');
break; break;

View File

@ -1,4 +1,5 @@
// https://github.com/vuejs/vue-next/blob/master/packages/shared/src/patchFlags.ts // https://github.com/vuejs/vue-next/blob/master/packages/shared/src/patchFlags.ts
// tslint:disable: no-bitwise
export const enum PatchFlags { export const enum PatchFlags {
TEXT = 1, TEXT = 1,
CLASS = 1 << 1, CLASS = 1 << 1,
@ -17,17 +18,17 @@ export const enum PatchFlags {
// dev only flag -> name mapping // dev only flag -> name mapping
export const PatchFlagNames = { export const PatchFlagNames = {
[PatchFlags.TEXT]: `TEXT`, [PatchFlags.TEXT]: 'TEXT',
[PatchFlags.CLASS]: `CLASS`, [PatchFlags.CLASS]: 'CLASS',
[PatchFlags.STYLE]: `STYLE`, [PatchFlags.STYLE]: 'STYLE',
[PatchFlags.PROPS]: `PROPS`, [PatchFlags.PROPS]: 'PROPS',
[PatchFlags.FULL_PROPS]: `FULL_PROPS`, [PatchFlags.FULL_PROPS]: 'FULL_PROPS',
[PatchFlags.HYDRATE_EVENTS]: `HYDRATE_EVENTS`, [PatchFlags.HYDRATE_EVENTS]: 'HYDRATE_EVENTS',
[PatchFlags.STABLE_FRAGMENT]: `STABLE_FRAGMENT`, [PatchFlags.STABLE_FRAGMENT]: 'STABLE_FRAGMENT',
[PatchFlags.KEYED_FRAGMENT]: `KEYED_FRAGMENT`, [PatchFlags.KEYED_FRAGMENT]: 'KEYED_FRAGMENT',
[PatchFlags.UNKEYED_FRAGMENT]: `UNKEYED_FRAGMENT`, [PatchFlags.UNKEYED_FRAGMENT]: 'UNKEYED_FRAGMENT',
[PatchFlags.DYNAMIC_SLOTS]: `DYNAMIC_SLOTS`, [PatchFlags.DYNAMIC_SLOTS]: 'DYNAMIC_SLOTS',
[PatchFlags.NEED_PATCH]: `NEED_PATCH`, [PatchFlags.NEED_PATCH]: 'NEED_PATCH',
[PatchFlags.HOISTED]: `HOISTED`, [PatchFlags.HOISTED]: 'HOISTED',
[PatchFlags.BAIL]: `BAIL` [PatchFlags.BAIL]: 'BAIL',
} };

View File

@ -1,7 +1,7 @@
import * as t from '@babel/types' import * as t from '@babel/types';
import { addNamespace } from '@babel/helper-module-imports'; import { addNamespace } from '@babel/helper-module-imports';
import { NodePath } from '@babel/traverse'; import { NodePath } from '@babel/traverse';
import { State } from './'; import { State } from '.';
const transformFragment = (path: NodePath<t.JSXElement>, Fragment: t.JSXMemberExpression) => { const transformFragment = (path: NodePath<t.JSXElement>, Fragment: t.JSXMemberExpression) => {
const children = path.get('children') || []; const children = path.get('children') || [];

View File

@ -14,7 +14,7 @@ import {
} from './utils'; } from './utils';
import parseDirectives from './parseDirectives'; import parseDirectives from './parseDirectives';
import { PatchFlags, PatchFlagNames } from './patchFlags'; import { PatchFlags, PatchFlagNames } from './patchFlags';
import { State, ExcludesBoolean } from './'; import { State, ExcludesBoolean } from '.';
const xlinkRE = /^xlink([A-Z])/; const xlinkRE = /^xlink([A-Z])/;
const onRE = /^on[^a-z]/; const onRE = /^on[^a-z]/;
@ -24,7 +24,7 @@ const isOn = (key: string) => onRE.test(key);
const transformJSXSpreadAttribute = ( const transformJSXSpreadAttribute = (
nodePath: NodePath, nodePath: NodePath,
path: NodePath<t.JSXSpreadAttribute>, path: NodePath<t.JSXSpreadAttribute>,
mergeArgs: (t.ObjectProperty | t.Expression)[] mergeArgs: (t.ObjectProperty | t.Expression)[],
) => { ) => {
const argument = path.get('argument') as NodePath<t.ObjectExpression>; const argument = path.get('argument') as NodePath<t.ObjectExpression>;
const { properties } = argument.node; const { properties } = argument.node;
@ -40,7 +40,7 @@ const transformJSXSpreadAttribute = (
const getJSXAttributeValue = ( const getJSXAttributeValue = (
path: NodePath<t.JSXAttribute>, path: NodePath<t.JSXAttribute>,
state: State state: State,
): ( ): (
t.StringLiteral | t.Expression | null t.StringLiteral | t.Expression | null
) => { ) => {
@ -64,13 +64,13 @@ const getJSXAttributeValue = (
* @returns boolean * @returns boolean
*/ */
const isConstant = ( const isConstant = (
node: t.Expression | t.Identifier | t.Literal | t.SpreadElement | null node: t.Expression | t.Identifier | t.Literal | t.SpreadElement | null,
): boolean => { ): boolean => {
if (t.isIdentifier(node)) { if (t.isIdentifier(node)) {
return node.name === 'undefined'; return node.name === 'undefined';
} }
if (t.isArrayExpression(node)) { if (t.isArrayExpression(node)) {
const elements = node.elements; const { elements } = node;
return elements.every((element) => element && isConstant(element)); return elements.every((element) => element && isConstant(element));
} }
if (t.isObjectExpression(node)) { if (t.isObjectExpression(node)) {
@ -193,7 +193,9 @@ const buildProps = (path: NodePath<t.JSXElement>, state: State) => {
return; return;
} }
if (isDirective(name)) { if (isDirective(name)) {
const { directive, modifiers, value, arg, directiveName } = parseDirectives({ const {
directive, modifiers, value, arg, directiveName,
} = parseDirectives({
tag, tag,
isComponent, isComponent,
name, name,
@ -207,7 +209,7 @@ const buildProps = (path: NodePath<t.JSXElement>, state: State) => {
if (directiveName === 'slots') { if (directiveName === 'slots') {
slots = attributeValue; slots = attributeValue;
return; return;
} else if (directive) { } if (directive) {
directives.push(t.arrayExpression(directive)); directives.push(t.arrayExpression(directive));
} else { } else {
// must be v-model and is a component // must be v-model and is a component
@ -258,11 +260,16 @@ const buildProps = (path: NodePath<t.JSXElement>, state: State) => {
} else { } else {
// JSXSpreadAttribute // JSXSpreadAttribute
hasDynamicKeys = true; hasDynamicKeys = true;
transformJSXSpreadAttribute(path as NodePath, prop as NodePath<t.JSXSpreadAttribute>, mergeArgs); transformJSXSpreadAttribute(
path as NodePath,
prop as NodePath<t.JSXSpreadAttribute>,
mergeArgs,
);
} }
}); });
// patchFlag analysis // patchFlag analysis
// tslint:disable: no-bitwise
if (hasDynamicKeys) { if (hasDynamicKeys) {
patchFlag |= PatchFlags.FULL_PROPS; patchFlag |= PatchFlags.FULL_PROPS;
} else { } else {
@ -342,49 +349,48 @@ const getChildren = (
| t.JSXElement | t.JSXElement
| t.JSXFragment | t.JSXFragment
>[], >[],
state: State state: State,
): t.Expression[] => ): t.Expression[] => paths
paths .map((path) => {
.map((path) => { if (path.isJSXText()) {
if (path.isJSXText()) { const transformedText = transformJSXText(path);
const transformedText = transformJSXText(path); if (transformedText) {
if (transformedText) { return t.callExpression(createIdentifier(state, 'createTextVNode'), [transformedText]);
return t.callExpression(createIdentifier(state, 'createTextVNode'), [transformedText]);
}
return transformedText;
} }
if (path.isJSXExpressionContainer()) { return transformedText;
const expression = transformJSXExpressionContainer(path); }
if (path.isJSXExpressionContainer()) {
const expression = transformJSXExpressionContainer(path);
if (t.isIdentifier(expression)) { if (t.isIdentifier(expression)) {
const { name } = expression as t.Identifier; const { name } = expression as t.Identifier;
const { referencePaths } = path.scope.getBinding(name) || {}; const { referencePaths = [] } = path.scope.getBinding(name) || {};
referencePaths?.forEach(referencePath => { referencePaths.forEach((referencePath) => {
walksScope(referencePath, name); walksScope(referencePath, name);
}) });
}
return expression;
} }
if (t.isJSXSpreadChild(path)) {
return transformJSXSpreadChild(path as NodePath<t.JSXSpreadChild>); return expression;
} }
if (path.isCallExpression()) { if (t.isJSXSpreadChild(path)) {
return path.node; return transformJSXSpreadChild(path as NodePath<t.JSXSpreadChild>);
} }
if (path.isJSXElement()) { if (path.isCallExpression()) {
return transformJSXElement(path, state); return path.node;
} }
throw new Error(`getChildren: ${path.type} is not supported`); if (path.isJSXElement()) {
}).filter(((value: any) => ( return transformJSXElement(path, state);
value !== undefined }
throw new Error(`getChildren: ${path.type} is not supported`);
}).filter(((value: any) => (
value !== undefined
&& value !== null && value !== null
&& !t.isJSXEmptyExpression(value) && !t.isJSXEmptyExpression(value)
)) as any); )) as any);
const transformJSXElement = ( const transformJSXElement = (
path: NodePath<t.JSXElement>, path: NodePath<t.JSXElement>,
state: State state: State,
): t.CallExpression => { ): t.CallExpression => {
const children = getChildren(path.get('children'), state); const children = getChildren(path.get('children'), state);
const { const {
@ -394,7 +400,7 @@ const transformJSXElement = (
directives, directives,
patchFlag, patchFlag,
dynamicPropNames, dynamicPropNames,
slots slots,
} = buildProps(path, state); } = buildProps(path, state);
const useOptimate = path.getData('optimize') !== false; const useOptimate = path.getData('optimize') !== false;
@ -420,16 +426,16 @@ const transformJSXElement = (
(children.length || slots) ? ( (children.length || slots) ? (
isComponent isComponent
? t.objectExpression([ ? t.objectExpression([
!!children.length && t.objectProperty( !!children.length && t.objectProperty(
t.identifier('default'), t.identifier('default'),
t.arrowFunctionExpression([], t.arrayExpression(children)) t.arrowFunctionExpression([], t.arrayExpression(children)),
), ),
...(slots ? ( ...(slots ? (
t.isObjectExpression(slots) t.isObjectExpression(slots)
? (slots as any as t.ObjectExpression).properties ? (slots as any as t.ObjectExpression).properties
: [t.spreadElement(slots as any)] : [t.spreadElement(slots as any)]
) : []) ) : []),
].filter(Boolean as any as ExcludesBoolean)) ].filter(Boolean as any as ExcludesBoolean))
: t.arrayExpression(children) : t.arrayExpression(children)
) : t.nullLiteral(), ) : t.nullLiteral(),
!!patchFlag && usePatchFlag && ( !!patchFlag && usePatchFlag && (
@ -438,7 +444,9 @@ const transformJSXElement = (
: t.numericLiteral(PatchFlags.BAIL) : t.numericLiteral(PatchFlags.BAIL)
), ),
!!dynamicPropNames.size && usePatchFlag !!dynamicPropNames.size && usePatchFlag
&& t.arrayExpression([...dynamicPropNames.keys()].map((name) => t.stringLiteral(name as string))), && t.arrayExpression(
[...dynamicPropNames.keys()].map((name) => t.stringLiteral(name as string)),
),
].filter(Boolean as any as ExcludesBoolean)); ].filter(Boolean as any as ExcludesBoolean));
if (!directives.length) { if (!directives.length) {

View File

@ -2,16 +2,16 @@ import * as t from '@babel/types';
import htmlTags from 'html-tags'; import htmlTags from 'html-tags';
import svgTags from 'svg-tags'; import svgTags from 'svg-tags';
import { NodePath } from '@babel/traverse'; import { NodePath } from '@babel/traverse';
import { State } from './'; import { State } from '.';
/** /**
* create Identifier * create Identifier
* @param state * @param state
* @param id string * @param id string
* @returns MemberExpression * @returns MemberExpression
*/ */
const createIdentifier = ( const createIdentifier = (
state: State, id: string state: State, id: string,
): t.MemberExpression => t.memberExpression(state.get('vue'), t.identifier(id)); ): t.MemberExpression => t.memberExpression(state.get('vue'), t.identifier(id));
/** /**
@ -26,8 +26,10 @@ const isDirective = (src: string): boolean => src.startsWith('v-')
* @param {*} path JSXIdentifier | JSXMemberExpression | JSXNamespacedName * @param {*} path JSXIdentifier | JSXMemberExpression | JSXNamespacedName
* @returns boolean * @returns boolean
*/ */
const isFragment = (path: NodePath<t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName>) => const isFragment = (
t.isJSXMemberExpression(path) path:
NodePath<t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName>,
): boolean => t.isJSXMemberExpression(path)
&& (path.node as t.JSXMemberExpression).property.name === 'Fragment'; && (path.node as t.JSXMemberExpression).property.name === 'Fragment';
/** /**
@ -54,7 +56,9 @@ const checkIsComponent = (path: NodePath<t.JSXOpeningElement>): boolean => {
* @param path JSXMemberExpression * @param path JSXMemberExpression
* @returns MemberExpression * @returns MemberExpression
*/ */
const transformJSXMemberExpression = (path: NodePath<t.JSXMemberExpression>): t.MemberExpression => { const transformJSXMemberExpression = (
path: NodePath<t.JSXMemberExpression>,
): t.MemberExpression => {
const objectPath = path.node.object; const objectPath = path.node.object;
const propertyPath = path.node.property; const propertyPath = path.node.property;
const transformedObject = t.isJSXMemberExpression(objectPath) const transformedObject = t.isJSXMemberExpression(objectPath)
@ -70,9 +74,12 @@ const transformJSXMemberExpression = (path: NodePath<t.JSXMemberExpression>): t.
* Get tag (first attribute for h) from JSXOpeningElement * Get tag (first attribute for h) from JSXOpeningElement
* @param path JSXElement * @param path JSXElement
* @param state State * @param state State
* @returns Identifier | StringLiteral | MemberExpression * @returns Identifier | StringLiteral | MemberExpression | CallExpression
*/ */
const getTag = (path: NodePath<t.JSXElement>, state: State) => { const getTag = (
path: NodePath<t.JSXElement>,
state: State,
): t.Identifier | t.CallExpression | t.StringLiteral | t.MemberExpression => {
const namePath = path.get('openingElement').get('name'); const namePath = path.get('openingElement').get('name');
if (namePath.isJSXIdentifier()) { if (namePath.isJSXIdentifier()) {
const { name } = namePath.node; const { name } = namePath.node;
@ -157,8 +164,9 @@ const transformJSXText = (path: NodePath<t.JSXText>): t.StringLiteral | null =>
* @returns Expression * @returns Expression
*/ */
const transformJSXExpressionContainer = ( const transformJSXExpressionContainer = (
path: NodePath<t.JSXExpressionContainer> path: NodePath<t.JSXExpressionContainer>,
): (t.Expression) => path.get('expression').node as t.Expression; ): (t.Expression
) => path.get('expression').node as t.Expression;
/** /**
* Transform JSXSpreadChild * Transform JSXSpreadChild
@ -166,17 +174,17 @@ const transformJSXExpressionContainer = (
* @returns SpreadElement * @returns SpreadElement
*/ */
const transformJSXSpreadChild = ( const transformJSXSpreadChild = (
path: NodePath<t.JSXSpreadChild> path: NodePath<t.JSXSpreadChild>,
): t.SpreadElement => t.spreadElement(path.get('expression').node); ): t.SpreadElement => t.spreadElement(path.get('expression').node);
const walksScope = (path: NodePath, name: string) => { const walksScope = (path: NodePath, name: string): void => {
if (path.scope.hasBinding(name) && path.parentPath) { if (path.scope.hasBinding(name) && path.parentPath) {
if (t.isJSXElement(path.parentPath.node)) { if (t.isJSXElement(path.parentPath.node)) {
path.parentPath.setData('optimize', false); path.parentPath.setData('optimize', false);
} }
walksScope(path.parentPath, name); walksScope(path.parentPath, name);
} }
} };
export { export {
createIdentifier, createIdentifier,

180
yarn.lock
View File

@ -50,6 +50,15 @@
lodash "^4.17.13" lodash "^4.17.13"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/generator@^7.10.5":
version "7.10.5"
resolved "https://r.cnpmjs.org/@babel/generator/download/@babel/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69"
integrity sha1-G5A1VLyMWD7o0l8eiWlzLmuCmmk=
dependencies:
"@babel/types" "^7.10.5"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.10.4": "@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://r.cnpmjs.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" resolved "https://r.cnpmjs.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
@ -257,6 +266,11 @@
resolved "https://r.cnpmjs.org/@babel/parser/download/@babel/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" resolved "https://r.cnpmjs.org/@babel/parser/download/@babel/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64"
integrity sha1-nu3yfhmY2Hc5+1AopRIFV8BqGmQ= integrity sha1-nu3yfhmY2Hc5+1AopRIFV8BqGmQ=
"@babel/parser@^7.10.5":
version "7.10.5"
resolved "https://r.cnpmjs.org/@babel/parser/download/@babel/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b"
integrity sha1-58a/Wn3v+VfOyfBLVR4nYpCdgms=
"@babel/plugin-proposal-async-generator-functions@^7.10.4": "@babel/plugin-proposal-async-generator-functions@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://r.cnpmjs.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" resolved "https://r.cnpmjs.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6"
@ -801,6 +815,21 @@
"@babel/parser" "^7.10.4" "@babel/parser" "^7.10.4"
"@babel/types" "^7.10.4" "@babel/types" "^7.10.4"
"@babel/traverse@^7.0.0":
version "7.10.5"
resolved "https://r.cnpmjs.org/@babel/traverse/download/@babel/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564"
integrity sha1-d85GT1sli+Jlr2GNj93wU28gtWQ=
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.10.5"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.10.4"
"@babel/parser" "^7.10.5"
"@babel/types" "^7.10.5"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4": "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://r.cnpmjs.org/@babel/traverse/download/@babel/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818" resolved "https://r.cnpmjs.org/@babel/traverse/download/@babel/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818"
@ -825,6 +854,15 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.10.5":
version "7.10.5"
resolved "https://r.cnpmjs.org/@babel/types/download/@babel/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15"
integrity sha1-2Irn4v3oa/v+hR1Nga+nCpl7XRU=
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3": "@bcoe/v8-coverage@^0.2.3":
version "0.2.3" version "0.2.3"
resolved "https://r.cnpmjs.org/@bcoe/v8-coverage/download/@bcoe/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" resolved "https://r.cnpmjs.org/@bcoe/v8-coverage/download/@bcoe/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@ -1975,6 +2013,11 @@
resolved "https://r.cnpmjs.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" resolved "https://r.cnpmjs.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA= integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=
"@types/eslint-visitor-keys@^1.0.0":
version "1.0.0"
resolved "https://r.cnpmjs.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=
"@types/estree@0.0.39": "@types/estree@0.0.39":
version "0.0.39" version "0.0.39"
resolved "https://r.cnpmjs.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" resolved "https://r.cnpmjs.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
@ -2020,7 +2063,7 @@
"@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*" "@types/istanbul-lib-report" "*"
"@types/json-schema@^7.0.4": "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4":
version "7.0.5" version "7.0.5"
resolved "https://r.cnpmjs.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" resolved "https://r.cnpmjs.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
integrity sha1-3M5EMOZLRDuolF8CkPtWStW6xt0= integrity sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=
@ -2115,6 +2158,66 @@
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@^3.6.1":
version "3.6.1"
resolved "https://r.cnpmjs.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-3.6.1.tgz#5ced8fd2087fbb83a76973dea4a0d39d9cb4a642"
integrity sha1-XO2P0gh/u4OnaXPepKDTnZy0pkI=
dependencies:
"@typescript-eslint/experimental-utils" "3.6.1"
debug "^4.1.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@3.6.1":
version "3.6.1"
resolved "https://r.cnpmjs.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-3.6.1.tgz#b5a2738ebbceb3fa90c5b07d50bb1225403c4a54"
integrity sha1-taJzjrvOs/qQxbB9ULsSJUA8SlQ=
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/types" "3.6.1"
"@typescript-eslint/typescript-estree" "3.6.1"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@^3.6.1":
version "3.6.1"
resolved "https://r.cnpmjs.org/@typescript-eslint/parser/download/@typescript-eslint/parser-3.6.1.tgz#216e8adf4ee9c629f77c985476a2ea07fb80e1dc"
integrity sha1-IW6K307pxin3fJhUdqLqB/uA4dw=
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
"@typescript-eslint/experimental-utils" "3.6.1"
"@typescript-eslint/types" "3.6.1"
"@typescript-eslint/typescript-estree" "3.6.1"
eslint-visitor-keys "^1.1.0"
"@typescript-eslint/types@3.6.1":
version "3.6.1"
resolved "https://r.cnpmjs.org/@typescript-eslint/types/download/@typescript-eslint/types-3.6.1.tgz#87600fe79a1874235d3cc1cf5c7e1a12eea69eee"
integrity sha1-h2AP55oYdCNdPMHPXH4aEu6mnu4=
"@typescript-eslint/typescript-estree@3.6.1":
version "3.6.1"
resolved "https://r.cnpmjs.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-3.6.1.tgz#a5c91fcc5497cce7922ff86bc37d5e5891dcdefa"
integrity sha1-pckfzFSXzOeSL/hrw31eWJHc3vo=
dependencies:
"@typescript-eslint/types" "3.6.1"
"@typescript-eslint/visitor-keys" "3.6.1"
debug "^4.1.1"
glob "^7.1.6"
is-glob "^4.0.1"
lodash "^4.17.15"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@3.6.1":
version "3.6.1"
resolved "https://r.cnpmjs.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-3.6.1.tgz#5c57a7772f4dd623cfeacc219303e7d46f963b37"
integrity sha1-XFendy9N1iPP6swhkwPn1G+WOzc=
dependencies:
eslint-visitor-keys "^1.1.0"
"@vue/compiler-core@3.0.0-rc.1": "@vue/compiler-core@3.0.0-rc.1":
version "3.0.0-rc.1" version "3.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.0-rc.1.tgz#66459f085b07408ddff0868199e2ceb7ddf8845a" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.0-rc.1.tgz#66459f085b07408ddff0868199e2ceb7ddf8845a"
@ -3036,6 +3139,11 @@ buffer@^4.3.0:
ieee754 "^1.1.4" ieee754 "^1.1.4"
isarray "^1.0.0" isarray "^1.0.0"
builtin-modules@^1.1.1:
version "1.1.1"
resolved "https://r.cnpmjs.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
builtin-status-codes@^3.0.0: builtin-status-codes@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://r.cnpmjs.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" resolved "https://r.cnpmjs.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
@ -3423,7 +3531,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@^2.20.0: commander@^2.12.1, commander@^2.20.0:
version "2.20.3" version "2.20.3"
resolved "https://r.cnpmjs.org/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://r.cnpmjs.org/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=
@ -4073,6 +4181,11 @@ diff-sequences@^26.0.0:
resolved "https://r.cnpmjs.org/diff-sequences/download/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" resolved "https://r.cnpmjs.org/diff-sequences/download/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6"
integrity sha1-B2AFmlwodje4Qr1whTEdtwYOiKY= integrity sha1-B2AFmlwodje4Qr1whTEdtwYOiKY=
diff@^4.0.1:
version "4.0.2"
resolved "https://r.cnpmjs.org/diff/download/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=
diffie-hellman@^5.0.0: diffie-hellman@^5.0.0:
version "5.0.3" version "5.0.3"
resolved "https://r.cnpmjs.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" resolved "https://r.cnpmjs.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@ -4471,6 +4584,13 @@ eslint-utils@^1.4.3:
dependencies: dependencies:
eslint-visitor-keys "^1.1.0" eslint-visitor-keys "^1.1.0"
eslint-utils@^2.0.0:
version "2.1.0"
resolved "https://r.cnpmjs.org/eslint-utils/download/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.1.0: eslint-visitor-keys@^1.1.0:
version "1.3.0" version "1.3.0"
resolved "https://r.cnpmjs.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" resolved "https://r.cnpmjs.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
@ -5207,7 +5327,7 @@ glob-to-regexp@^0.3.0:
resolved "https://r.cnpmjs.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" resolved "https://r.cnpmjs.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.6" version "7.1.6"
resolved "https://r.cnpmjs.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" resolved "https://r.cnpmjs.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=
@ -6901,7 +7021,7 @@ lodash.uniq@^4.5.0:
resolved "https://r.cnpmjs.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" resolved "https://r.cnpmjs.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.2.1: lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1:
version "4.17.19" version "4.17.19"
resolved "https://r.cnpmjs.org/lodash/download/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" resolved "https://r.cnpmjs.org/lodash/download/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha1-5I3e2+MLMyF4PFtDAfvTU7weSks= integrity sha1-5I3e2+MLMyF4PFtDAfvTU7weSks=
@ -8279,6 +8399,11 @@ prelude-ls@~1.1.2:
resolved "https://r.cnpmjs.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://r.cnpmjs.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
prettier@2.0.5:
version "2.0.5"
resolved "https://r.cnpmjs.org/prettier/download/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
integrity sha1-1tVigkVSQ/L5LMFxZpLAiqMVItQ=
pretty-error@^2.1.1: pretty-error@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://r.cnpmjs.org/pretty-error/download/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" resolved "https://r.cnpmjs.org/pretty-error/download/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
@ -8724,6 +8849,11 @@ regexpp@^2.0.1:
resolved "https://r.cnpmjs.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" resolved "https://r.cnpmjs.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8= integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=
regexpp@^3.0.0:
version "3.1.0"
resolved "https://r.cnpmjs.org/regexpp/download/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
integrity sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=
regexpu-core@^4.7.0: regexpu-core@^4.7.0:
version "4.7.0" version "4.7.0"
resolved "https://r.cnpmjs.org/regexpu-core/download/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" resolved "https://r.cnpmjs.org/regexpu-core/download/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
@ -9057,7 +9187,7 @@ selfsigned@^1.10.7:
dependencies: dependencies:
node-forge "0.9.0" node-forge "0.9.0"
"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1" version "5.7.1"
resolved "https://r.cnpmjs.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" resolved "https://r.cnpmjs.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
@ -9998,11 +10128,49 @@ tsconfig-paths@^3.9.0:
minimist "^1.2.0" minimist "^1.2.0"
strip-bom "^3.0.0" strip-bom "^3.0.0"
tslib@^1.10.0, tslib@^1.9.0: tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
version "1.13.0" version "1.13.0"
resolved "https://r.cnpmjs.org/tslib/download/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" resolved "https://r.cnpmjs.org/tslib/download/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
integrity sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM= integrity sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=
tslint-config-prettier@^1.18.0:
version "1.18.0"
resolved "https://r.cnpmjs.org/tslint-config-prettier/download/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37"
integrity sha1-dfFAvelH012PDSOODr+AnWRZLDc=
tslint@^6.1.2:
version "6.1.2"
resolved "https://r.cnpmjs.org/tslint/download/tslint-6.1.2.tgz#2433c248512cc5a7b2ab88ad44a6b1b34c6911cf"
integrity sha1-JDPCSFEsxaeyq4itRKaxs0xpEc8=
dependencies:
"@babel/code-frame" "^7.0.0"
builtin-modules "^1.1.1"
chalk "^2.3.0"
commander "^2.12.1"
diff "^4.0.1"
glob "^7.1.1"
js-yaml "^3.13.1"
minimatch "^3.0.4"
mkdirp "^0.5.3"
resolve "^1.3.2"
semver "^5.3.0"
tslib "^1.10.0"
tsutils "^2.29.0"
tsutils@^2.29.0:
version "2.29.0"
resolved "https://r.cnpmjs.org/tsutils/download/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
integrity sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=
dependencies:
tslib "^1.8.1"
tsutils@^3.17.1:
version "3.17.1"
resolved "https://r.cnpmjs.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
integrity sha1-7XGZF/EcoN7lhicrKsSeAVot11k=
dependencies:
tslib "^1.8.1"
tty-browserify@0.0.0: tty-browserify@0.0.0:
version "0.0.0" version "0.0.0"
resolved "https://r.cnpmjs.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" resolved "https://r.cnpmjs.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"