@nuofe/ndk-lint-tool
Version:
Lint tool for Nuo FE.
182 lines (128 loc) • 4.69 kB
JavaScript
;
var _interopRequireWildcard3 = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Globals", {
enumerable: true,
get: function () {
return _getContent.Globals;
}
});
exports.default = void 0;
var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard"));
var _generator = _interopRequireDefault(require("@babel/generator"));
var _parser = require("@babel/parser");
var _ndkConfig = _interopRequireDefault(require("@nuofe/ndk-config"));
var _ndkLogger = _interopRequireDefault(require("@nuofe/ndk-logger"));
var _ndkPackage = _interopRequireDefault(require("@nuofe/ndk-package"));
var _ndkPrettier = _interopRequireDefault(require("@nuofe/ndk-prettier"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _path = _interopRequireDefault(require("path"));
var _stripJsonComments = _interopRequireDefault(require("strip-json-comments"));
var _getContent = _interopRequireWildcard3(require("./get-content"));
var _getExtends = _interopRequireDefault(require("./get-extends"));
const {
property
} = _ndkConfig.default;
const debug = _ndkLogger.default.debug('ndk-lint-tool:config:eslint-config:init');
const getRcGlobals = rcPath => {
let eslintConfig;
try {
eslintConfig = JSON.parse((0, _stripJsonComments.default)(_fsExtra.default.readFileSync(rcPath, 'utf8')));
return eslintConfig.globals;
} catch (error) {
debug('error: %o', error);
return undefined;
}
};
var _default = async options => {
const {
cwd,
package: pkg,
spinner
} = options;
const rcFiles = ['.eslintrc', '.eslintrc.json'];
const rcJsFile = '.eslintrc.js';
const rcJsPath = _path.default.resolve(cwd, rcJsFile);
const tslintFile = 'tslint.json';
const tslintPath = _path.default.resolve(cwd, tslintFile);
let rcGlobals;
rcFiles.forEach(rcFile => {
const rcPath = _path.default.resolve(cwd, rcFile);
if (_fsExtra.default.existsSync(rcPath)) {
const globals = getRcGlobals(rcPath);
if (globals) {
rcGlobals = rcGlobals ? { ...rcGlobals,
...globals
} : { ...globals
};
}
_fsExtra.default.removeSync(rcPath);
spinner.succeed(`删除多余的 ${rcFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
}
});
if (pkg.eslintConfig) {
const {
globals
} = pkg.eslintConfig;
rcGlobals = rcGlobals ? { ...rcGlobals,
...globals
} : { ...globals
};
delete pkg.eslintConfig;
await _ndkPackage.default.update(options, '删除多余的 eslintConfig 配置。');
}
if (_fsExtra.default.existsSync(tslintPath)) {
_fsExtra.default.removeSync(tslintPath);
spinner.succeed(`删除多余的 ${tslintFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
}
if (_fsExtra.default.existsSync(rcJsPath)) {
const {
default: config
} = await Promise.resolve(`${rcJsPath}`).then(s => (0, _interopRequireWildcard2.default)(require(s))).catch(error => {
spinner.stop();
console.error(error);
_ndkLogger.default.logEmpty();
_ndkLogger.default.logError(`[i] 加载 ${rcJsFile} 文件失败!`);
_ndkLogger.default.logEmpty();
process.exit(1);
});
debug('config: %o', config);
const code = _fsExtra.default.readFileSync(rcJsPath, 'utf8');
const ast = (0, _parser.parse)(code);
const name = (0, _getExtends.default)(options);
let modified = false;
if (!config.extends) {
property.add(ast, 'extends', name, undefined, 1);
config.extends = name;
modified = true;
}
if (name !== config.extends) {
property.modify(ast, 'extends', undefined, name);
modified = true;
}
if (modified) {
const fileContent = _ndkPrettier.default.format((0, _generator.default)(ast).code);
_fsExtra.default.writeFileSync(rcJsPath, fileContent, 'utf8');
delete require.cache[rcJsPath];
spinner.succeed(`更新 ${rcJsFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
} else {
debug('%s is ok.', rcJsFile);
}
} else {
const fileContent = _ndkPrettier.default.format((0, _getContent.default)(options, rcGlobals));
_fsExtra.default.writeFileSync(rcJsPath, fileContent, 'utf8');
spinner.succeed(`新建 ${rcJsFile} 文件。`);
_ndkLogger.default.logEmpty();
spinner.start();
}
};
exports.default = _default;