@nuofe/ndk-lint-tool
Version:
Lint tool for Nuo FE.
163 lines (116 loc) • 4.34 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _ndkLogger = _interopRequireDefault(require("@nuofe/ndk-logger"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _inquirer = _interopRequireDefault(require("inquirer"));
var _path = _interopRequireDefault(require("path"));
const {
prompt,
Separator
} = _inquirer.default;
const debug = _ndkLogger.default.debug('ndk-lint-tool:ignore:init');
const iconfontContent = '**/iconfont.js';
const iconfontReg = /iconfont\.js$/;
var _default = async options => {
const {
config,
cwd,
spinner
} = options;
const {
type
} = config;
const eslintIgnoreFile = '.eslintignore';
const eslintIgnorePath = _path.default.resolve(cwd, eslintIgnoreFile);
const prettierIgnoreFile = '.prettierignore';
const prettierIgnorePath = _path.default.resolve(cwd, prettierIgnoreFile);
const defaultItems = ['**/node_modules/'];
let defaultReg;
let ignoreContent;
if (['app', 'web'].includes(type)) {
defaultItems.push(iconfontContent, '/dist/');
defaultReg = iconfontReg;
} else if (['component', 'library'].includes(type)) {
defaultItems.push('/es/');
} else if (type === 'tool') {
defaultItems.push('**/lib/');
}
ignoreContent = `${defaultItems.sort().join('\n')}\n`;
if (_fsExtra.default.existsSync(eslintIgnorePath)) {
const fileContent = _fsExtra.default.readFileSync(eslintIgnorePath, 'utf8');
const ignoreItems = fileContent.trim().split(/\r|\n/).filter(item => !!(item && item.trim()));
const allowableItems = ignoreItems.filter(item => defaultReg && defaultReg.test(item) || defaultItems.includes(item));
let modified = false;
if (ignoreItems.length > 0) {
if (ignoreItems.length !== allowableItems.length) {
spinner.stop();
_ndkLogger.default.logTip('Ignore Content:');
_ndkLogger.default.logText(fileContent);
_ndkLogger.default.logHint('> Update Ignore...');
const choices = ignoreItems.map(item => {
return {
name: item,
value: item
};
});
const {
value
} = await prompt({
type: 'checkbox',
name: 'value',
message: '请选择要保留的内容',
choices: choices.concat(new Separator()),
default: allowableItems
});
defaultItems.push(...value);
modified = true;
} else {
defaultItems.push(...ignoreItems);
}
defaultItems.map(item => iconfontReg.test(item) ? iconfontContent : item).sort();
}
ignoreContent = `${Array.from(new Set(defaultItems)).join('\n')}\n`;
if (ignoreContent !== fileContent) {
debug('write %s', eslintIgnorePath);
_fsExtra.default.writeFileSync(eslintIgnorePath, ignoreContent, 'utf8');
spinner.succeed(`更新 ${eslintIgnoreFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
} else if (modified) {
spinner.succeed('全部保留。');
_ndkLogger.default.logEmpty();
spinner.start();
} else {
debug('%s is ok.', eslintIgnoreFile);
}
} else {
debug('write %s', eslintIgnorePath);
_fsExtra.default.writeFileSync(eslintIgnorePath, ignoreContent, 'utf8');
spinner.succeed(`新建 ${eslintIgnoreFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
}
if (_fsExtra.default.existsSync(prettierIgnorePath)) {
const fileContent = _fsExtra.default.readFileSync(prettierIgnorePath, 'utf8');
if (ignoreContent !== fileContent) {
debug('write %s', prettierIgnorePath);
_fsExtra.default.writeFileSync(prettierIgnorePath, ignoreContent, 'utf8');
spinner.succeed(`更新 ${prettierIgnoreFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
} else {
debug('%s is ok.', prettierIgnoreFile);
}
} else {
debug('write %s', prettierIgnorePath);
_fsExtra.default.writeFileSync(prettierIgnorePath, ignoreContent, 'utf8');
spinner.succeed(`新建 ${prettierIgnoreFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
}
};
exports.default = _default;