diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..fca472f --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + root: true, + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], +}; diff --git a/CHANGELOG.md b/CHANGELOG.md index 12a6b87..f66d7af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,4 +2,6 @@ ### Features +- **framework:** 新增 Git Commit Message 规范提交能力 ([d04e259](https://github.com/ziyi2/algorithms/commit/d04e25977a7041b5e2d9d801934d554ab6815c42)) +- **framework:** 新增 TypeScript 编译能力 ([ebecee9](https://github.com/ziyi2/algorithms/commit/ebecee96551f8ed49a7b48c61be3da6b79ae3974)) - 项目初始化 ([afaa458](https://github.com/ziyi2/algorithms/commit/afaa4583009ea5ac3ead2f3bfc5c61103ce8533c)) diff --git a/README.md b/README.md index 83d5808..10ae0c0 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ - Init - Git Commit Message - TypeScript +- ESLint > 温馨提示:如果想知道各个配置的细节信息,可查看各个配置的 Commit 信息。 @@ -126,3 +127,98 @@ gulp.task("default", function () { ``` > 温馨提示: 对于工具包使用全量引入的方式并不是一个好的选择,可以通过具体的工具方法进行按需引入。 + +### ESLint + +#### 背景 + +TypeScript 的代码检查工具主要有 TSLint 和 ESLint 两种。早期的 TypeScript 项目一般采用 TSLint 进行检查,TSLint 和 TypeScript 采用同样的 AST 格式进行编译,但主要问题是对于 JavaScript 生态的项目支持不够友好,因此 TypeScript 团队在 2019 年宣布全面转向 ESLint,更多关于转向 ESLint 的原因可查看: + +- +- + +TypeScript 和 ESLint 使用不同的 AST 进行解析,因此为了在 ESLint 中支持 TypeScript 代码检查需要制作额外的[自定义解析器](https://cn.eslint.org/docs/developer-guide/working-with-custom-parsers)(Custom Parsers,ESLint 的自定义解析器功能需要基于 [ESTree](https://github.com/estree/estree)),目的是为了能够解析 TypeScript 语法并转成与 ESLint 兼容的 AST。[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint#getting-started--installation) 在这样的背景下诞生,它会处理所有 ESLint 特定的配置并调用 [@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/typescript-estree) 生成 ESTree-compatible AST(需要注意的是不仅仅兼容 ESLint,也能够兼容 Prettier)。 + +`@typescript-eslint` 是一个 Monorepo 体系结构的仓库,采用 [Learn](https://github.com/lerna/lerna) 进行设计,除了上述提到的 NPM 包之外,还包含以下两个重要的 NPM 包: + +- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin): 配合 `@typescript-eslint/parser` 一起使用的 ESLint 插件,可以设置 TypeScript 的校验规则。 +- [@typescript-eslint/eslint-plugin-tslint](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin-tslint): TSLint 向 ESLint 迁移的插件。 + +> 温馨提示:如果你正在使用 TSLint,并且你希望兼容 ESLint 或者向 ESLint 进行过渡(TSLint 和 ESLint 并存), 可查看 [Migrating from TSLint to ESLint](https://github.com/typescript-eslint/typescript-eslint#migrating-from-tslint-to-eslint)。除此之外,以上所介绍的这些包发布时版本一致(为了联合使用的适配性),如果还有什么需要注意的话你可能需要关心一下 `@typescript-eslint` 对于 TypeScript 和 ESLint 的版本支持性,更多可查看该库包的 @typescript-eslint/parser 的仓库信息。 + +#### 配置 + +从背景的介绍中可以理解,对于全新的 TypeScript 项目(直接抛弃 TSLint)需要包含解析 AST 的解析器 @typescript-eslint/parser 和使用校验规则的插件 @typescript-eslint/eslint-plugin,这里需要在项目中进行安装 + +```javascript +npm i --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin +``` + +在根目录新建 `.eslintrc.js` 配置文件,并设置以下配置: + +```javascript +module.exports = { + root: true, + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], +}; +``` + +其中: + +- `parser: '@typescript-eslint/parser'`:使用 ESLint 解析 TypeScript 语法 +- `plugins: ['@typescript-eslint']`:在 ESLint 中加载插件 `@typescript-eslint/eslint-plugin`,该插件可用于配置 TypeScript 校验规则。 +- `extends: [ ... ]`:在 ESLint 中使用[共享规则配置](https://cn.eslint.org/docs/developer-guide/shareable-configs),其中 `eslint:recommended` 是 ESLint 内置的推荐校验规则配置(也被称作最佳规则实践),`plugin:@typescript-eslint/recommended` 是类似于 `eslint:recommended` 的 TypeScript 推荐校验规则配置。 + +> 温馨提示:如果你稍微阅读一下 recommanded 源码你会发现,其实内部可以理解为推荐校验规则的集合。因此如果想基于 `@typescript-eslint/eslint-plugin` 进行自定义规则,则可参考 [TypeScript Supported Rules](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#supported-rules)。 + +配置完成后在 `package.json` 中设置校验命令 + +```javascript +"lint": "eslint src", +``` + +此时如果在 `src` 目录下书写错误的语法,执行 `npm run lint` 就会输出错误信息: + +```javascript +> eslint src + + +C:\Code\Git\algorithms\src\greet.ts + 2:16 warning Missing return type on function @typescript-eslint/explicit-module-boundary-types + +✖ 1 problem (0 errors, 1 warning) +``` + +> 温馨提示:输出的错误信息是通过 [ESLint Formatters](https://cn.eslint.org/docs/user-guide/formatters/) 生成,查看 ESLint 源代码并调试可发现默认采用的是 [stylish](https://cn.eslint.org/docs/user-guide/formatters/#stylish) formatter。 + +#### ESLint 插件 + +如果不使用插件,很难发现写的代码可能存在 TypeScript 格式错误(除非手动 `npm run lint` 或监听代码的变更并实时运行 `npm run lint`),此时可以通过 VS Code 插件进行处理。安装 ESLint 插件后可进行代码的实时提示,具体如下图所示: + +ESLint Plugin.png + +此时可以发现之前执行 `lint` 命令的错误通过插件的形式可实时在 VS Code 编辑器中进行显示。除此之外,一些简单的 ESLint 格式错误(例如 多余的`;` 等)可通过配置 Save Auto Fix 进行保存自动格式化处理。具体 VS Code 的配置可参考 [ESLint 插件](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)的文档说明,这边应该需要进行如下配置: + +``` javascript +"editor.codeActionsOnSave": { + "source.fixAll": true, + "source.fixAll.eslint": true +} +``` + +> 温馨提示:VS Code 的配置分为两种类型(用户和工作区),针对上述通用的配置主要放在用户里,针对不同项目的不同配置则需要放入工作区进行处理。 + +## 文档 + +- [Npm 官方文档](https://docs.npmjs.com/) +- [使用 NPM 发布和使用 CLI 工具](https://juejin.im/post/5eb89053e51d454de54db501) +- [Cz 工具集使用介绍](https://juejin.im/post/5cc4694a6fb9a03238106eb9)(强烈推荐阅读) +- [TypeScript 中文网](https://www.tslang.cn/) +- [tsconfig.json 编译选项](https://www.tslang.cn/docs/handbook/compiler-options.html) +- [gulp-typescript](https://github.com/ivogabe/gulp-typescript) +- [ES modules: A cartoon deep-dive](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/)(强烈推荐阅读) +- [ESLint 中文网](https://cn.eslint.org/) +- [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) +- [Getting Started - Linting your TypeScript Codebase](https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/README.md) diff --git a/images/ESLint Plugin.png b/images/ESLint Plugin.png new file mode 100644 index 0000000..c56c9f6 Binary files /dev/null and b/images/ESLint Plugin.png differ diff --git a/package-lock.json b/package-lock.json index 00cf86d..5f31afb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -373,6 +373,18 @@ "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=", "dev": true }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npm.alibaba-inc.com/@types/json-schema/download/@types/json-schema-7.0.5.tgz", + "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=", + "dev": true + }, "@types/minimist": { "version": "1.2.0", "resolved": "https://registry.npm.alibaba-inc.com/@types/minimist/download/@types/minimist-1.2.0.tgz", @@ -391,6 +403,123 @@ "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "3.6.0", + "resolved": "https://registry.npm.alibaba-inc.com/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-3.6.0.tgz", + "integrity": "sha1-uitsrkeLj8o/Llj/ExPkGY7qLYo=", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.6.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.alibaba-inc.com/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npm.alibaba-inc.com/semver/download/semver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.6.0", + "resolved": "https://registry.npm.alibaba-inc.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-3.6.0.tgz", + "integrity": "sha1-ATgVLWbj5TpjQPYGeT+yV78tdqE=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.6.0", + "@typescript-eslint/typescript-estree": "3.6.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.6.0", + "resolved": "https://registry.npm.alibaba-inc.com/@typescript-eslint/parser/download/@typescript-eslint/parser-3.6.0.tgz", + "integrity": "sha1-ebUjLhotBvH8dFlCtpDNh6yntg4=", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.6.0", + "@typescript-eslint/types": "3.6.0", + "@typescript-eslint/typescript-estree": "3.6.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.6.0", + "resolved": "https://registry.npm.alibaba-inc.com/@typescript-eslint/types/download/@typescript-eslint/types-3.6.0.tgz", + "integrity": "sha1-S9bu5V0vnTWks2xIBL4YgL9o97w=", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.6.0", + "resolved": "https://registry.npm.alibaba-inc.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-3.6.0.tgz", + "integrity": "sha1-m0yrQ/EZK2T/UVMIFbiRnxZs4Xc=", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.6.0", + "@typescript-eslint/visitor-keys": "3.6.0", + "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" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.alibaba-inc.com/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npm.alibaba-inc.com/semver/download/semver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.6.0", + "resolved": "https://registry.npm.alibaba-inc.com/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-3.6.0.tgz", + "integrity": "sha1-RBhesMxHZRA0+qlcXi6LMU7OuyY=", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npm.alibaba-inc.com/JSONStream/download/JSONStream-1.3.5.tgz", @@ -401,12 +530,36 @@ "through": ">=2.2.7 <3" } }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npm.alibaba-inc.com/acorn/download/acorn-7.3.1.tgz", + "integrity": "sha1-hQEHVNtTw/uvO56j4IOqXF0Uf/0=", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npm.alibaba-inc.com/acorn-jsx/download/acorn-jsx-5.2.0.tgz", + "integrity": "sha1-TGYGkXPW/daO2FI5/CViJhgrLr4=", + "dev": true + }, "add-stream": { "version": "1.0.0", "resolved": "https://registry.npm.alibaba-inc.com/add-stream/download/add-stream-1.0.0.tgz", "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", "dev": true }, + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npm.alibaba-inc.com/ajv/download/ajv-6.12.3.tgz", + "integrity": "sha1-GMWvOKER3etPJpe9eNaKvByr1wY=", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npm.alibaba-inc.com/ansi-colors/download/ansi-colors-1.1.0.tgz", @@ -477,6 +630,15 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.alibaba-inc.com/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npm.alibaba-inc.com/arr-diff/download/arr-diff-4.0.0.tgz", @@ -609,6 +771,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true + }, "async-done": { "version": "1.3.2", "resolved": "https://registry.npm.alibaba-inc.com/async-done/download/async-done-1.3.2.tgz", @@ -1621,6 +1789,28 @@ "yaml": "^1.7.2" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npm.alibaba-inc.com/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npm.alibaba-inc.com/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npm.alibaba-inc.com/currently-unhandled/download/currently-unhandled-0.4.1.tgz", @@ -1705,6 +1895,12 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npm.alibaba-inc.com/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, "default-compare": { "version": "1.0.0", "resolved": "https://registry.npm.alibaba-inc.com/default-compare/download/default-compare-1.0.0.tgz", @@ -1784,6 +1980,15 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/doctrine/download/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dot-prop": { "version": "3.0.0", "resolved": "https://registry.npm.alibaba-inc.com/dot-prop/download/dot-prop-3.0.0.tgz", @@ -1821,6 +2026,12 @@ "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", "dev": true }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.alibaba-inc.com/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npm.alibaba-inc.com/end-of-stream/download/end-of-stream-1.4.4.tgz", @@ -1830,6 +2041,23 @@ "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npm.alibaba-inc.com/enquirer/download/enquirer-2.3.6.tgz", + "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/ansi-colors/download/ansi-colors-4.1.1.tgz", + "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "dev": true + } + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npm.alibaba-inc.com/error-ex/download/error-ex-1.3.2.tgz", @@ -1889,6 +2117,227 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "7.4.0", + "resolved": "https://registry.npm.alibaba-inc.com/eslint/download/eslint-7.4.0.tgz", + "integrity": "sha1-TjWiaX5sGXL51u8raQrTGfgPIG8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.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.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.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.14", + "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": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.alibaba-inc.com/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/chalk/download/chalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.alibaba-inc.com/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.alibaba-inc.com/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/glob-parent/download/glob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.alibaba-inc.com/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npm.alibaba-inc.com/semver/download/semver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/strip-ansi/download/strip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/supports-color/download/supports-color-7.1.0.tgz", + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/eslint-scope/download/eslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/eslint-utils/download/eslint-utils-2.1.0.tgz", + "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.alibaba-inc.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + }, + "espree": { + "version": "7.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/espree/download/espree-7.1.0.tgz", + "integrity": "sha1-qcfxinUgVnNb8boUyxtwrcOlzhw=", + "dev": true, + "requires": { + "acorn": "^7.2.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.2.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.alibaba-inc.com/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npm.alibaba-inc.com/esquery/download/esquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/estraverse/download/estraverse-5.1.0.tgz", + "integrity": "sha1-N0MJ05/ZNa5QDnuS6Ka0xyDllkI=", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npm.alibaba-inc.com/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.alibaba-inc.com/estraverse/download/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.alibaba-inc.com/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npm.alibaba-inc.com/expand-brackets/download/expand-brackets-2.1.4.tgz", @@ -2065,6 +2514,24 @@ "time-stamp": "^1.0.0" } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.alibaba-inc.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npm.alibaba-inc.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npm.alibaba-inc.com/figures/download/figures-2.0.0.tgz", @@ -2074,6 +2541,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npm.alibaba-inc.com/file-entry-cache/download/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npm.alibaba-inc.com/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", @@ -2163,6 +2639,34 @@ "integrity": "sha1-595vEnnd2cqarIpZcdYYYGs6q0E=", "dev": true }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npm.alibaba-inc.com/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npm.alibaba-inc.com/rimraf/download/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npm.alibaba-inc.com/flatted/download/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npm.alibaba-inc.com/flush-write-stream/download/flush-write-stream-1.1.1.tgz", @@ -2253,6 +2757,12 @@ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npm.alibaba-inc.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npm.alibaba-inc.com/get-caller-file/download/get-caller-file-1.0.3.tgz", @@ -2666,6 +3176,23 @@ "which": "^1.2.14" } }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npm.alibaba-inc.com/globals/download/globals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.alibaba-inc.com/type-fest/download/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true + } + } + }, "glogg": { "version": "1.0.2", "resolved": "https://registry.npm.alibaba-inc.com/glogg/download/glogg-1.0.2.tgz", @@ -2915,6 +3442,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.alibaba-inc.com/ignore/download/ignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true + }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npm.alibaba-inc.com/import-fresh/download/import-fresh-3.2.1.tgz", @@ -2933,6 +3466,12 @@ } } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.alibaba-inc.com/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npm.alibaba-inc.com/indent-string/download/indent-string-4.0.0.tgz", @@ -3233,12 +3772,28 @@ "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", "dev": true }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npm.alibaba-inc.com/js-yaml/download/js-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npm.alibaba-inc.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", "dev": true }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.alibaba-inc.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npm.alibaba-inc.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -3315,6 +3870,16 @@ "flush-write-stream": "^1.0.2" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npm.alibaba-inc.com/levn/download/levn-0.4.1.tgz", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "liftoff": { "version": "3.1.0", "resolved": "https://registry.npm.alibaba-inc.com/liftoff/download/liftoff-3.1.0.tgz", @@ -3756,6 +4321,15 @@ } } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npm.alibaba-inc.com/mkdirp/download/mkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npm.alibaba-inc.com/modify-values/download/modify-values-1.0.1.tgz", @@ -3806,6 +4380,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npm.alibaba-inc.com/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npm.alibaba-inc.com/neo-async/download/neo-async-2.6.1.tgz", @@ -3991,6 +4571,20 @@ "integrity": "sha1-eg//l49tv6TQBiOPusmO1BmMMlk=", "dev": true }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npm.alibaba-inc.com/optionator/download/optionator-0.9.1.tgz", + "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npm.alibaba-inc.com/ordered-read-streams/download/ordered-read-streams-1.0.1.tgz", @@ -4119,6 +4713,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true + }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npm.alibaba-inc.com/path-parse/download/path-parse-1.0.6.tgz", @@ -4203,6 +4803,12 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npm.alibaba-inc.com/prelude-ls/download/prelude-ls-1.2.1.tgz", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", + "dev": true + }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npm.alibaba-inc.com/pretty-hrtime/download/pretty-hrtime-1.0.3.tgz", @@ -4215,6 +4821,12 @@ "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npm.alibaba-inc.com/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true + }, "pump": { "version": "2.0.1", "resolved": "https://registry.npm.alibaba-inc.com/pump/download/pump-2.0.1.tgz", @@ -4236,6 +4848,12 @@ "pump": "^2.0.0" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, "q": { "version": "1.5.1", "resolved": "https://registry.npm.alibaba-inc.com/q/download/q-1.5.1.tgz", @@ -4348,6 +4966,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/regexpp/download/regexpp-3.1.0.tgz", + "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=", + "dev": true + }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npm.alibaba-inc.com/remove-bom-buffer/download/remove-bom-buffer-3.0.0.tgz", @@ -4603,6 +5227,21 @@ } } }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.alibaba-inc.com/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true + }, "shelljs": { "version": "0.8.4", "resolved": "https://registry.npm.alibaba-inc.com/shelljs/download/shelljs-0.8.4.tgz", @@ -4626,6 +5265,17 @@ "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", "dev": true }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npm.alibaba-inc.com/snapdragon/download/snapdragon-0.8.2.tgz", @@ -4841,6 +5491,12 @@ } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.alibaba-inc.com/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npm.alibaba-inc.com/stack-trace/download/stack-trace-0.0.10.tgz", @@ -4942,6 +5598,12 @@ "min-indent": "^1.0.0" } }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/strip-json-comments/download/strip-json-comments-3.1.0.tgz", + "integrity": "sha1-djjTFCISns9EV0QACfugP5+awYA=", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npm.alibaba-inc.com/supports-color/download/supports-color-5.5.0.tgz", @@ -4961,6 +5623,31 @@ "es6-symbol": "^3.1.1" } }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npm.alibaba-inc.com/table/download/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.alibaba-inc.com/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, "temp": { "version": "0.9.1", "resolved": "https://registry.npm.alibaba-inc.com/temp/download/temp-0.9.1.tgz", @@ -5003,6 +5690,12 @@ "integrity": "sha1-GFPkX+45yUXOb2w2stZZtaq8KiY=", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npm.alibaba-inc.com/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npm.alibaba-inc.com/through/download/through-2.3.8.tgz", @@ -5147,12 +5840,30 @@ "integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=", "dev": true }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npm.alibaba-inc.com/tsutils/download/tsutils-3.17.1.tgz", + "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "type": { "version": "1.2.0", "resolved": "https://registry.npm.alibaba-inc.com/type/download/type-1.2.0.tgz", "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npm.alibaba-inc.com/type-check/download/type-check-0.4.0.tgz", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-fest": { "version": "0.13.1", "resolved": "https://registry.npm.alibaba-inc.com/type-fest/download/type-fest-0.13.1.tgz", @@ -5281,6 +5992,15 @@ "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", "dev": true }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npm.alibaba-inc.com/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npm.alibaba-inc.com/urix/download/urix-0.1.0.tgz", @@ -5314,6 +6034,12 @@ "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", "dev": true }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npm.alibaba-inc.com/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, "v8flags": { "version": "3.2.0", "resolved": "https://registry.npm.alibaba-inc.com/v8flags/download/v8flags-3.2.0.tgz", @@ -5491,6 +6217,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npm.alibaba-inc.com/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npm.alibaba-inc.com/xtend/download/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 003c031..d720a97 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "types" ], "scripts": { + "lint": "eslint src", "build": "rimraf dist types && gulp", "log": "rimraf CHANGELOG.md && conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md" }, @@ -28,8 +29,11 @@ "devDependencies": { "@commitlint/cli": "^9.0.1", "@commitlint/config-conventional": "^9.0.1", + "@typescript-eslint/eslint-plugin": "^3.6.0", + "@typescript-eslint/parser": "^3.6.0", "conventional-changelog-cli": "^2.0.34", "cz-customizable": "^6.2.1", + "eslint": "^7.4.0", "gulp": "^4.0.2", "gulp-typescript": "^6.0.0-alpha.1", "husky": "^4.2.5", diff --git a/src/greet.ts b/src/greet.ts index f79accf..bf3a0b3 100644 --- a/src/greet.ts +++ b/src/greet.ts @@ -1,4 +1,4 @@ -// 这是一条注释 -export default function sayHello(name: string) { +// 通过增加返回类型 string 解决 ESLint 格式错误问题 +export default function sayHello(name: string): string { return `Hello from ${name}`; }