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,
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: {
'no-nested-ternary': [0],
'no-param-reassign': [0],
@ -20,6 +25,18 @@ module.exports = {
'no-plusplus': [0],
'import/no-extraneous-dependencies': [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
- name: install
run: yarn install --pure-lockfile
run: yarn install
- name: lint
run: yarn lint
- name: test
run: yarn test

View File

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

View File

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

View File

@ -1,7 +1,9 @@
import * as t from '@babel/types';
import { NodePath } from '@babel/traverse';
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
@ -17,9 +19,8 @@ const getType = (path: NodePath<t.JSXOpeningElement>) => {
}
return t.isJSXIdentifier(attribute.get('name'))
&& (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') : '';
};
@ -27,22 +28,22 @@ const getType = (path: NodePath<t.JSXOpeningElement>) => {
const parseModifiers = (value: t.Expression) => {
let modifiers: string[] = [];
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;
}
};
const parseDirectives = (args: {
name: string,
path: NodePath<t.JSXAttribute>,
value: t.StringLiteral | t.Expression | null,
state: State,
tag: t.Identifier | t.MemberExpression | t.StringLiteral | t.CallExpression,
tag: Tag,
isComponent: boolean
}) => {
const {
name, path, value, state, tag, isComponent,
} = args
} = args;
let modifiers: string[] = name.split('_');
let arg;
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') {
return createIdentifier(state, 'vShow');
}
if (directiveName === 'model') {
let modelToUse;
const type = getType(path.parentPath as NodePath<t.JSXOpeningElement>);
switch (tag.value) {
switch ((tag as t.StringLiteral).value) {
case 'select':
modelToUse = createIdentifier(state, 'vModelSelect');
break;

View File

@ -1,4 +1,5 @@
// https://github.com/vuejs/vue-next/blob/master/packages/shared/src/patchFlags.ts
// tslint:disable: no-bitwise
export const enum PatchFlags {
TEXT = 1,
CLASS = 1 << 1,
@ -17,17 +18,17 @@ export const enum PatchFlags {
// dev only flag -> name mapping
export const PatchFlagNames = {
[PatchFlags.TEXT]: `TEXT`,
[PatchFlags.CLASS]: `CLASS`,
[PatchFlags.STYLE]: `STYLE`,
[PatchFlags.PROPS]: `PROPS`,
[PatchFlags.FULL_PROPS]: `FULL_PROPS`,
[PatchFlags.HYDRATE_EVENTS]: `HYDRATE_EVENTS`,
[PatchFlags.STABLE_FRAGMENT]: `STABLE_FRAGMENT`,
[PatchFlags.KEYED_FRAGMENT]: `KEYED_FRAGMENT`,
[PatchFlags.UNKEYED_FRAGMENT]: `UNKEYED_FRAGMENT`,
[PatchFlags.DYNAMIC_SLOTS]: `DYNAMIC_SLOTS`,
[PatchFlags.NEED_PATCH]: `NEED_PATCH`,
[PatchFlags.HOISTED]: `HOISTED`,
[PatchFlags.BAIL]: `BAIL`
}
[PatchFlags.TEXT]: 'TEXT',
[PatchFlags.CLASS]: 'CLASS',
[PatchFlags.STYLE]: 'STYLE',
[PatchFlags.PROPS]: 'PROPS',
[PatchFlags.FULL_PROPS]: 'FULL_PROPS',
[PatchFlags.HYDRATE_EVENTS]: 'HYDRATE_EVENTS',
[PatchFlags.STABLE_FRAGMENT]: 'STABLE_FRAGMENT',
[PatchFlags.KEYED_FRAGMENT]: 'KEYED_FRAGMENT',
[PatchFlags.UNKEYED_FRAGMENT]: 'UNKEYED_FRAGMENT',
[PatchFlags.DYNAMIC_SLOTS]: 'DYNAMIC_SLOTS',
[PatchFlags.NEED_PATCH]: 'NEED_PATCH',
[PatchFlags.HOISTED]: 'HOISTED',
[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 { NodePath } from '@babel/traverse';
import { State } from './';
import { State } from '.';
const transformFragment = (path: NodePath<t.JSXElement>, Fragment: t.JSXMemberExpression) => {
const children = path.get('children') || [];

View File

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

View File

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

180
yarn.lock
View File

@ -50,6 +50,15 @@
lodash "^4.17.13"
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":
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"
@ -257,6 +266,11 @@
resolved "https://r.cnpmjs.org/@babel/parser/download/@babel/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64"
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":
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"
@ -801,6 +815,21 @@
"@babel/parser" "^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":
version "7.10.4"
resolved "https://r.cnpmjs.org/@babel/traverse/download/@babel/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818"
@ -825,6 +854,15 @@
lodash "^4.17.13"
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":
version "0.2.3"
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"
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":
version "0.0.39"
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-report" "*"
"@types/json-schema@^7.0.4":
"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4":
version "7.0.5"
resolved "https://r.cnpmjs.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
integrity sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=
@ -2115,6 +2158,66 @@
dependencies:
"@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":
version "3.0.0-rc.1"
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"
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:
version "3.0.0"
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:
delayed-stream "~1.0.0"
commander@^2.20.0:
commander@^2.12.1, commander@^2.20.0:
version "2.20.3"
resolved "https://r.cnpmjs.org/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
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"
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:
version "5.0.3"
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:
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:
version "1.3.0"
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"
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"
resolved "https://r.cnpmjs.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
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"
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"
resolved "https://r.cnpmjs.org/lodash/download/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
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"
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:
version "2.1.1"
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"
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:
version "4.7.0"
resolved "https://r.cnpmjs.org/regexpu-core/download/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
@ -9057,7 +9187,7 @@ selfsigned@^1.10.7:
dependencies:
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"
resolved "https://r.cnpmjs.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
@ -9998,11 +10128,49 @@ tsconfig-paths@^3.9.0:
minimist "^1.2.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"
resolved "https://r.cnpmjs.org/tslib/download/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
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:
version "0.0.0"
resolved "https://r.cnpmjs.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"