@huangjunsen/encode-fe-lint 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +0 -0
- package/lib/actions/init.d.ts +3 -0
- package/lib/actions/init.js +223 -0
- package/lib/actions/scan.d.ts +3 -0
- package/lib/actions/scan.js +137 -0
- package/lib/actions/update.d.ts +2 -0
- package/lib/actions/update.js +112 -0
- package/lib/cli.d.ts +2 -0
- package/lib/cli.js +230 -0
- package/lib/config/_editorconfig.ejs +13 -0
- package/lib/config/_eslintignore.ejs +9 -0
- package/lib/config/_eslintrc.js.ejs +3 -0
- package/lib/config/_markdownlint.json.ejs +1 -0
- package/lib/config/_markdownlintignore.ejs +5 -0
- package/lib/config/_prettierrc.js.ejs +8 -0
- package/lib/config/_stylelintignore.ejs +5 -0
- package/lib/config/_stylelintrc.js.ejs +5 -0
- package/lib/config/_vscode/extensions.json.ejs +7 -0
- package/lib/config/_vscode/settings.json.ejs +54 -0
- package/lib/config/commitlint.config.js.ejs +3 -0
- package/lib/config/encode-fe-lint.config.js.ejs +6 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +93 -0
- package/lib/lints/eslint/doEslint.d.ts +6 -0
- package/lib/lints/eslint/doEslint.js +80 -0
- package/lib/lints/eslint/formatESLintResults.d.ts +3 -0
- package/lib/lints/eslint/formatESLintResults.js +39 -0
- package/lib/lints/eslint/getESLintConfig.d.ts +3 -0
- package/lib/lints/eslint/getESLintConfig.js +67 -0
- package/lib/lints/eslint/getESLintConfigType.d.ts +2 -0
- package/lib/lints/eslint/getESLintConfigType.js +26 -0
- package/lib/lints/eslint/index.d.ts +3 -0
- package/lib/lints/eslint/index.js +19 -0
- package/lib/lints/index.d.ts +4 -0
- package/lib/lints/index.js +20 -0
- package/lib/lints/markdownlint/doMarkdownlint.d.ts +6 -0
- package/lib/lints/markdownlint/doMarkdownlint.js +119 -0
- package/lib/lints/markdownlint/formatMarkdownlintResults.d.ts +3 -0
- package/lib/lints/markdownlint/formatMarkdownlintResults.js +39 -0
- package/lib/lints/markdownlint/getMarkdownlintConfig.d.ts +7 -0
- package/lib/lints/markdownlint/getMarkdownlintConfig.js +31 -0
- package/lib/lints/markdownlint/index.d.ts +3 -0
- package/lib/lints/markdownlint/index.js +19 -0
- package/lib/lints/prettier/doPrettier.d.ts +4 -0
- package/lib/lints/prettier/doPrettier.js +106 -0
- package/lib/lints/prettier/index.d.ts +1 -0
- package/lib/lints/prettier/index.js +17 -0
- package/lib/lints/stylelint/doStylelint.d.ts +5 -0
- package/lib/lints/stylelint/doStylelint.js +86 -0
- package/lib/lints/stylelint/formatStylelintResults.d.ts +3 -0
- package/lib/lints/stylelint/formatStylelintResults.js +39 -0
- package/lib/lints/stylelint/getStylelintConfig.d.ts +3 -0
- package/lib/lints/stylelint/getStylelintConfig.js +36 -0
- package/lib/lints/stylelint/getStylelintDocUrl.d.ts +1 -0
- package/lib/lints/stylelint/getStylelintDocUrl.js +13 -0
- package/lib/lints/stylelint/index.d.ts +3 -0
- package/lib/lints/stylelint/index.js +19 -0
- package/lib/types/index.d.ts +73 -0
- package/lib/types/index.js +2 -0
- package/lib/utils/conflict-resolve.d.ts +3 -0
- package/lib/utils/conflict-resolve.js +175 -0
- package/lib/utils/constants.d.ts +18 -0
- package/lib/utils/constants.js +133 -0
- package/lib/utils/generate-template.d.ts +2 -0
- package/lib/utils/generate-template.js +99 -0
- package/lib/utils/git.d.ts +3 -0
- package/lib/utils/git.js +105 -0
- package/lib/utils/init.d.ts +3 -0
- package/lib/utils/init.js +223 -0
- package/lib/utils/log.d.ts +8 -0
- package/lib/utils/log.js +25 -0
- package/lib/utils/npm-type.d.ts +2 -0
- package/lib/utils/npm-type.js +10 -0
- package/lib/utils/print-report.d.ts +3 -0
- package/lib/utils/print-report.js +109 -0
- package/lib/utils/update.d.ts +2 -0
- package/lib/utils/update.js +112 -0
- package/package.json +97 -0
package/lib/cli.js
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
14
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
15
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
+
function step(op) {
|
|
17
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
19
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
20
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
+
switch (op[0]) {
|
|
22
|
+
case 0: case 1: t = op; break;
|
|
23
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
+
default:
|
|
27
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
+
if (t[2]) _.ops.pop();
|
|
32
|
+
_.trys.pop(); continue;
|
|
33
|
+
}
|
|
34
|
+
op = body.call(thisArg, _);
|
|
35
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
var path_1 = __importDefault(require("path"));
|
|
44
|
+
var fs_extra_1 = __importDefault(require("fs-extra"));
|
|
45
|
+
var ora_1 = __importDefault(require("ora"));
|
|
46
|
+
var glob_1 = __importDefault(require("glob"));
|
|
47
|
+
var commander_1 = require("commander");
|
|
48
|
+
var cross_spawn_1 = __importDefault(require("cross-spawn"));
|
|
49
|
+
var child_process_1 = require("child_process");
|
|
50
|
+
var init_1 = __importDefault(require("./actions/init"));
|
|
51
|
+
var scan_1 = __importDefault(require("./actions/scan"));
|
|
52
|
+
var update_1 = __importDefault(require("./actions/update"));
|
|
53
|
+
var log_1 = __importDefault(require("./utils/log"));
|
|
54
|
+
var print_report_1 = __importDefault(require("./utils/print-report"));
|
|
55
|
+
var npm_type_1 = __importDefault(require("./utils/npm-type"));
|
|
56
|
+
var git_1 = require("./utils/git");
|
|
57
|
+
var generate_template_1 = __importDefault(require("./utils/generate-template"));
|
|
58
|
+
var constants_1 = require("./utils/constants");
|
|
59
|
+
var cwd = process.cwd();
|
|
60
|
+
var installDepsIfThereNo = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
61
|
+
var lintConfigFiles, nodeModulesPath, npm;
|
|
62
|
+
return __generator(this, function (_a) {
|
|
63
|
+
switch (_a.label) {
|
|
64
|
+
case 0:
|
|
65
|
+
lintConfigFiles = [].concat(glob_1.default.sync('.eslintrc?(.@(js|yaml|yml|json))', { cwd: cwd }), glob_1.default.sync('.stylelintrc?(.@(js|yaml|yml|json))', { cwd: cwd }), glob_1.default.sync('.markdownlint(.@(yaml|yml|json))', { cwd: cwd }));
|
|
66
|
+
nodeModulesPath = path_1.default.resolve(cwd, 'node_modules');
|
|
67
|
+
if (!(!fs_extra_1.default.existsSync(nodeModulesPath) && lintConfigFiles.length > 0)) return [3, 2];
|
|
68
|
+
return [4, npm_type_1.default];
|
|
69
|
+
case 1:
|
|
70
|
+
npm = _a.sent();
|
|
71
|
+
log_1.default.info("\u4F7F\u7528\u9879\u76EE Lint \u914D\u7F6E\uFF0C\u68C0\u6D4B\u5230\u9879\u76EE\u672A\u5B89\u88C5\u4F9D\u8D56\uFF0C\u5C06\u8FDB\u884C\u5B89\u88C5\uFF08\u6267\u884C ".concat(npm, " install\uFF09"));
|
|
72
|
+
(0, child_process_1.execSync)("cd ".concat(cwd, " && ").concat(npm, " i"));
|
|
73
|
+
_a.label = 2;
|
|
74
|
+
case 2: return [2];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}); };
|
|
78
|
+
commander_1.program
|
|
79
|
+
.version(constants_1.PKG_VERSION)
|
|
80
|
+
.description("".concat(constants_1.PKG_NAME, " \u662F Lint \u5DE5\u5177\uFF0C\u63D0\u4F9B\u7B80\u5355\u7684 CLI \u548C Node.js API\uFF0C\u8BA9\u9879\u76EE\u80FD\u591F\u4E00\u952E\u63A5\u5165\u3001\u4E00\u952E\u626B\u63CF\u3001\u4E00\u952E\u4FEE\u590D\u3001\u4E00\u952E\u5347\u7EA7\uFF0C\u5E76\u4E3A\u9879\u76EE\u914D\u7F6E git commit \u5361\u70B9\uFF0C\u964D\u4F4E\u9879\u76EE\u5B9E\u65BD\u89C4\u8303\u7684\u6210\u672C"));
|
|
81
|
+
commander_1.program
|
|
82
|
+
.command('init')
|
|
83
|
+
.description('一键接入:为项目初始化规范工具和配置,可以根据项目类型和需求进行定制')
|
|
84
|
+
.option('--vscode', '写入.vscode/setting.json配置')
|
|
85
|
+
.action(function (cmd) { return __awaiter(void 0, void 0, void 0, function () {
|
|
86
|
+
var configPath;
|
|
87
|
+
return __generator(this, function (_a) {
|
|
88
|
+
switch (_a.label) {
|
|
89
|
+
case 0:
|
|
90
|
+
if (!cmd.vscode) return [3, 1];
|
|
91
|
+
configPath = path_1.default.resolve(cwd, "".concat(constants_1.PKG_NAME, ".config.js"));
|
|
92
|
+
(0, generate_template_1.default)(cwd, require(configPath), true);
|
|
93
|
+
return [3, 3];
|
|
94
|
+
case 1: return [4, (0, init_1.default)({
|
|
95
|
+
cwd: cwd,
|
|
96
|
+
checkVersionUpdate: true,
|
|
97
|
+
})];
|
|
98
|
+
case 2:
|
|
99
|
+
_a.sent();
|
|
100
|
+
_a.label = 3;
|
|
101
|
+
case 3: return [2];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}); });
|
|
105
|
+
commander_1.program
|
|
106
|
+
.command('scan')
|
|
107
|
+
.description('一键扫描:对项目进行代码规范问题扫描')
|
|
108
|
+
.option('-q, --quiet', '仅报告错误信息 - 默认: false')
|
|
109
|
+
.option('-o, --output-report', '输出扫描出的规范问题日志')
|
|
110
|
+
.option('-i, --include <dirpath>', '指定要进行规范扫描的目录')
|
|
111
|
+
.option('--no-ignore', '忽略 eslint 的 ignore 配置文件和 ignore 规则')
|
|
112
|
+
.action(function (cmd) { return __awaiter(void 0, void 0, void 0, function () {
|
|
113
|
+
var checking, _a, results, errorCount, warningCount, runErrors, type;
|
|
114
|
+
return __generator(this, function (_b) {
|
|
115
|
+
switch (_b.label) {
|
|
116
|
+
case 0: return [4, installDepsIfThereNo()];
|
|
117
|
+
case 1:
|
|
118
|
+
_b.sent();
|
|
119
|
+
checking = (0, ora_1.default)();
|
|
120
|
+
checking.start("\u6267\u884C ".concat(constants_1.PKG_NAME, " \u4EE3\u7801\u68C0\u67E5"));
|
|
121
|
+
return [4, (0, scan_1.default)({
|
|
122
|
+
cwd: cwd,
|
|
123
|
+
fix: false,
|
|
124
|
+
include: cmd.include || cwd,
|
|
125
|
+
quiet: Boolean(cmd.quiet),
|
|
126
|
+
outputReport: Boolean(cmd.outputReport),
|
|
127
|
+
ignore: cmd.ignore,
|
|
128
|
+
})];
|
|
129
|
+
case 2:
|
|
130
|
+
_a = _b.sent(), results = _a.results, errorCount = _a.errorCount, warningCount = _a.warningCount, runErrors = _a.runErrors;
|
|
131
|
+
type = 'succeed';
|
|
132
|
+
if (runErrors.length > 0 || errorCount > 0) {
|
|
133
|
+
type = 'fail';
|
|
134
|
+
}
|
|
135
|
+
else if (warningCount > 0) {
|
|
136
|
+
type = 'warn';
|
|
137
|
+
}
|
|
138
|
+
checking[type]();
|
|
139
|
+
if (results.length > 0)
|
|
140
|
+
(0, print_report_1.default)(results, false);
|
|
141
|
+
runErrors.forEach(function (e) { return console.log(e); });
|
|
142
|
+
return [2];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}); });
|
|
146
|
+
commander_1.program
|
|
147
|
+
.command('commit-msg-scan')
|
|
148
|
+
.description('commit message 检查: git commit 时对 commit message 进行检查')
|
|
149
|
+
.action(function () {
|
|
150
|
+
var result = cross_spawn_1.default.sync('commitlint', ['-E', 'HUSKY_GIT_PARAMS'], { stdio: 'inherit' });
|
|
151
|
+
if (result.status !== 0) {
|
|
152
|
+
process.exit(result.status);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
commander_1.program
|
|
156
|
+
.command('commit-file-scan')
|
|
157
|
+
.description('代码提交检查: git commit 时对提交代码进行规范问题扫描')
|
|
158
|
+
.option('-s, --strict', '严格模式,对 warn 和 error 问题都卡口,默认仅对 error 问题卡口')
|
|
159
|
+
.action(function (cmd) { return __awaiter(void 0, void 0, void 0, function () {
|
|
160
|
+
var files, checking, _a, results, errorCount, warningCount, _b;
|
|
161
|
+
var _c;
|
|
162
|
+
return __generator(this, function (_d) {
|
|
163
|
+
switch (_d.label) {
|
|
164
|
+
case 0: return [4, installDepsIfThereNo()];
|
|
165
|
+
case 1:
|
|
166
|
+
_d.sent();
|
|
167
|
+
return [4, (0, git_1.getAmendFiles)()];
|
|
168
|
+
case 2:
|
|
169
|
+
files = _d.sent();
|
|
170
|
+
if (files)
|
|
171
|
+
log_1.default.warn("[".concat(constants_1.PKG_NAME, "] changes not staged for commit: \n").concat(files, "\n"));
|
|
172
|
+
checking = (0, ora_1.default)();
|
|
173
|
+
checking.start("\u6267\u884C ".concat(constants_1.PKG_NAME, " \u4EE3\u7801\u63D0\u4EA4\u68C0\u67E5"));
|
|
174
|
+
_b = scan_1.default;
|
|
175
|
+
_c = {
|
|
176
|
+
cwd: cwd,
|
|
177
|
+
include: cwd,
|
|
178
|
+
quiet: !cmd.strict
|
|
179
|
+
};
|
|
180
|
+
return [4, (0, git_1.getCommitFiles)()];
|
|
181
|
+
case 3: return [4, _b.apply(void 0, [(_c.files = _d.sent(),
|
|
182
|
+
_c)])];
|
|
183
|
+
case 4:
|
|
184
|
+
_a = _d.sent(), results = _a.results, errorCount = _a.errorCount, warningCount = _a.warningCount;
|
|
185
|
+
if (errorCount > 0 || (cmd.strict && warningCount > 0)) {
|
|
186
|
+
checking.fail();
|
|
187
|
+
(0, print_report_1.default)(results, false);
|
|
188
|
+
process.exitCode = 1;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
checking.succeed();
|
|
192
|
+
}
|
|
193
|
+
return [2];
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}); });
|
|
197
|
+
commander_1.program
|
|
198
|
+
.command('fix')
|
|
199
|
+
.description('一键修复:自动修复项目的代码规范扫描问题')
|
|
200
|
+
.option('-i, --include <dirpath>', '指定要进行修复扫描的目录')
|
|
201
|
+
.option('--no-ignore', '忽略 eslint 的 ignore 配置文件和 ignore 规则')
|
|
202
|
+
.action(function (cmd) { return __awaiter(void 0, void 0, void 0, function () {
|
|
203
|
+
var checking, results;
|
|
204
|
+
return __generator(this, function (_a) {
|
|
205
|
+
switch (_a.label) {
|
|
206
|
+
case 0: return [4, installDepsIfThereNo()];
|
|
207
|
+
case 1:
|
|
208
|
+
_a.sent();
|
|
209
|
+
checking = (0, ora_1.default)();
|
|
210
|
+
checking.start("\u6267\u884C ".concat(constants_1.PKG_NAME, " \u4EE3\u7801\u4FEE\u590D"));
|
|
211
|
+
return [4, (0, scan_1.default)({
|
|
212
|
+
cwd: cwd,
|
|
213
|
+
fix: true,
|
|
214
|
+
include: cmd.include || cwd,
|
|
215
|
+
ignore: cmd.ignore,
|
|
216
|
+
})];
|
|
217
|
+
case 2:
|
|
218
|
+
results = (_a.sent()).results;
|
|
219
|
+
checking.succeed();
|
|
220
|
+
if (results.length > 0)
|
|
221
|
+
(0, print_report_1.default)(results, true);
|
|
222
|
+
return [2];
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}); });
|
|
226
|
+
commander_1.program
|
|
227
|
+
.command('update')
|
|
228
|
+
.description("\u66F4\u65B0 ".concat(constants_1.PKG_NAME, " \u81F3\u6700\u65B0\u7248\u672C"))
|
|
229
|
+
.action(function () { return (0, update_1.default)(true); });
|
|
230
|
+
commander_1.program.parse(process.argv);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%_ if (enableMarkdownlint) { _%> { "extends": "@huangjunsen/markdownlint-config" } <%_ } _%>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
<%_ if (enableESLint) { _%>
|
|
3
|
+
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "vue"],
|
|
4
|
+
<%_ } _%>
|
|
5
|
+
<%_ if (enableStylelint) { _%>
|
|
6
|
+
"stylelint.validate": [<%- stylelintExt.map((ext) => `"${ext.replace(/^\./, '')}"`).join(',') %>],
|
|
7
|
+
<%_ } _%>
|
|
8
|
+
"editor.codeActionsOnSave": {
|
|
9
|
+
"source.fixAll.eslint": true<%= enableStylelint || enableMarkdownlint ? ',' : ''%>
|
|
10
|
+
<%_ if (enableStylelint) { _%>
|
|
11
|
+
"source.fixAll.stylelint": true<%= enableMarkdownlint ? ',' : ''%>
|
|
12
|
+
<%_ } _%>
|
|
13
|
+
<%_ if (enableMarkdownlint) { _%>
|
|
14
|
+
"source.fixAll.markdownlint": true
|
|
15
|
+
<%_ } _%>
|
|
16
|
+
},
|
|
17
|
+
<%_ if (enablePrettier) { _%>
|
|
18
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
19
|
+
"[javascript]": {
|
|
20
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
21
|
+
},
|
|
22
|
+
"[javascriptreact]": {
|
|
23
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
24
|
+
},
|
|
25
|
+
"[typescript]": {
|
|
26
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
27
|
+
},
|
|
28
|
+
"[typescriptreact]": {
|
|
29
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
30
|
+
},
|
|
31
|
+
"[vue]": {
|
|
32
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
33
|
+
},
|
|
34
|
+
"[css]": {
|
|
35
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
36
|
+
},
|
|
37
|
+
"[less]": {
|
|
38
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
39
|
+
},
|
|
40
|
+
"[scss]": {
|
|
41
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
42
|
+
},
|
|
43
|
+
"[html]": {
|
|
44
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
45
|
+
},
|
|
46
|
+
"[json]": {
|
|
47
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
48
|
+
},
|
|
49
|
+
"[jsonc]": {
|
|
50
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
51
|
+
},
|
|
52
|
+
<%_ } _%>
|
|
53
|
+
"editor.formatOnSave": <%= enablePrettier ? 'true' : 'false' %>
|
|
54
|
+
}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { InitOptions, ScanOptions } from './types';
|
|
2
|
+
type IInitOptions = Omit<InitOptions, 'checkVersionUpdate'>;
|
|
3
|
+
export declare const init: (options: IInitOptions) => Promise<void>;
|
|
4
|
+
export declare const scan: (options: ScanOptions) => Promise<import("./types").ScanReport>;
|
|
5
|
+
export {};
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.scan = exports.init = void 0;
|
|
54
|
+
var ora_1 = __importDefault(require("ora"));
|
|
55
|
+
var scan_1 = __importDefault(require("./actions/scan"));
|
|
56
|
+
var init_1 = __importDefault(require("./actions/init"));
|
|
57
|
+
var constants_1 = require("./utils/constants");
|
|
58
|
+
var print_report_1 = __importDefault(require("./utils/print-report"));
|
|
59
|
+
var init = function (options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
60
|
+
return __generator(this, function (_a) {
|
|
61
|
+
switch (_a.label) {
|
|
62
|
+
case 0: return [4, (0, init_1.default)(__assign(__assign({}, options), { checkVersionUpdate: false }))];
|
|
63
|
+
case 1: return [2, _a.sent()];
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}); };
|
|
67
|
+
exports.init = init;
|
|
68
|
+
var scan = function (options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
69
|
+
var checking, report, results, errorCount, warningCount, type;
|
|
70
|
+
return __generator(this, function (_a) {
|
|
71
|
+
switch (_a.label) {
|
|
72
|
+
case 0:
|
|
73
|
+
checking = (0, ora_1.default)();
|
|
74
|
+
checking.start("\u6267\u884C ".concat(constants_1.PKG_NAME, " \u4EE3\u7801\u68C0\u67E5"));
|
|
75
|
+
return [4, (0, scan_1.default)(options)];
|
|
76
|
+
case 1:
|
|
77
|
+
report = _a.sent();
|
|
78
|
+
results = report.results, errorCount = report.errorCount, warningCount = report.warningCount;
|
|
79
|
+
type = 'succeed';
|
|
80
|
+
if (errorCount > 0) {
|
|
81
|
+
type = 'fail';
|
|
82
|
+
}
|
|
83
|
+
else if (warningCount > 0) {
|
|
84
|
+
type = 'warn';
|
|
85
|
+
}
|
|
86
|
+
checking[type]();
|
|
87
|
+
if (results.length > 0)
|
|
88
|
+
(0, print_report_1.default)(results, false);
|
|
89
|
+
return [2, report];
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}); };
|
|
93
|
+
exports.scan = scan;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.doESLint = void 0;
|
|
43
|
+
var eslint_1 = require("eslint");
|
|
44
|
+
var fast_glob_1 = __importDefault(require("fast-glob"));
|
|
45
|
+
var path_1 = require("path");
|
|
46
|
+
var constants_1 = require("../../utils/constants");
|
|
47
|
+
var formatESLintResults_1 = require("./formatESLintResults");
|
|
48
|
+
var getESLintConfig_1 = require("./getESLintConfig");
|
|
49
|
+
function doESLint(options) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
51
|
+
var files, eslint, reports;
|
|
52
|
+
return __generator(this, function (_a) {
|
|
53
|
+
switch (_a.label) {
|
|
54
|
+
case 0:
|
|
55
|
+
if (!options.files) return [3, 1];
|
|
56
|
+
files = options.files.filter(function (name) { return constants_1.ESLINT_FILE_EXT.includes((0, path_1.extname)(name)); });
|
|
57
|
+
return [3, 3];
|
|
58
|
+
case 1: return [4, (0, fast_glob_1.default)("**/*.{".concat(constants_1.ESLINT_FILE_EXT.map(function (t) { return t.replace(/^\./, ''); }).join(','), "}"), {
|
|
59
|
+
cwd: options.cwd,
|
|
60
|
+
ignore: constants_1.ESLINT_IGNORE_PATTERN,
|
|
61
|
+
})];
|
|
62
|
+
case 2:
|
|
63
|
+
files = _a.sent();
|
|
64
|
+
_a.label = 3;
|
|
65
|
+
case 3:
|
|
66
|
+
eslint = new eslint_1.ESLint((0, getESLintConfig_1.getESLintConfig)(options, options.pkg, options.config));
|
|
67
|
+
return [4, eslint.lintFiles(files)];
|
|
68
|
+
case 4:
|
|
69
|
+
reports = _a.sent();
|
|
70
|
+
if (!options.fix) return [3, 6];
|
|
71
|
+
return [4, eslint_1.ESLint.outputFixes(reports)];
|
|
72
|
+
case 5:
|
|
73
|
+
_a.sent();
|
|
74
|
+
_a.label = 6;
|
|
75
|
+
case 6: return [2, (0, formatESLintResults_1.formatESLintResults)(reports, options.quiet, eslint)];
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
exports.doESLint = doESLint;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatESLintResults = void 0;
|
|
4
|
+
function formatESLintResults(results, quiet, eslint) {
|
|
5
|
+
var rulesMeta = eslint.getRulesMetaForResults(results);
|
|
6
|
+
return results
|
|
7
|
+
.filter(function (_a) {
|
|
8
|
+
var warningCount = _a.warningCount, errorCount = _a.errorCount;
|
|
9
|
+
return errorCount || warningCount;
|
|
10
|
+
})
|
|
11
|
+
.map(function (_a) {
|
|
12
|
+
var filePath = _a.filePath, messages = _a.messages, errorCount = _a.errorCount, warningCount = _a.warningCount, fixableErrorCount = _a.fixableErrorCount, fixableWarningCount = _a.fixableWarningCount;
|
|
13
|
+
return ({
|
|
14
|
+
filePath: filePath,
|
|
15
|
+
errorCount: errorCount,
|
|
16
|
+
warningCount: quiet ? 0 : warningCount,
|
|
17
|
+
fixableErrorCount: fixableErrorCount,
|
|
18
|
+
fixableWarningCount: quiet ? 0 : fixableWarningCount,
|
|
19
|
+
messages: messages
|
|
20
|
+
.map(function (_a) {
|
|
21
|
+
var _b, _c;
|
|
22
|
+
var _d = _a.line, line = _d === void 0 ? 0 : _d, _e = _a.column, column = _e === void 0 ? 0 : _e, ruleId = _a.ruleId, message = _a.message, fatal = _a.fatal, severity = _a.severity;
|
|
23
|
+
return {
|
|
24
|
+
line: line,
|
|
25
|
+
column: column,
|
|
26
|
+
rule: ruleId,
|
|
27
|
+
url: ((_c = (_b = rulesMeta[ruleId]) === null || _b === void 0 ? void 0 : _b.docs) === null || _c === void 0 ? void 0 : _c.url) || '',
|
|
28
|
+
message: message.replace(/([^ ])\.$/u, '$1'),
|
|
29
|
+
errored: fatal || severity === 2,
|
|
30
|
+
};
|
|
31
|
+
})
|
|
32
|
+
.filter(function (_a) {
|
|
33
|
+
var errored = _a.errored;
|
|
34
|
+
return (quiet ? errored : true);
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
exports.formatESLintResults = formatESLintResults;
|