UNPKG

@nuofe/ndk-lint-tool

Version:
182 lines (128 loc) 4.69 kB
"use strict"; 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;