UNPKG

ut-tools

Version:

Build and Release management automation package.

200 lines (160 loc) 5.98 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.exists = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _fsPlus = require('fs-plus'); var _fsPlus2 = _interopRequireDefault(_fsPlus); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _child_process = require('child_process'); var _builtinModules = require('builtin-modules'); var _builtinModules2 = _interopRequireDefault(_builtinModules); var _resolve = require('resolve'); var _resolve2 = _interopRequireDefault(_resolve); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getCurrentFilePath(context) { var filename = context.getFilename(); if (!_fsPlus2.default.isAbsolute(filename)) { filename = _path2.default.join(process.cwd(), filename); } return _path2.default.dirname(filename); } var webpackConfigCache = {}; function getWebpackConfig(fromDir) { var pathname = _path2.default.resolve(fromDir); if (webpackConfigCache[pathname]) { return webpackConfigCache[pathname]; } if (!_fsPlus2.default.existsSync(pathname)) { throw new Error('Webpack config does not exists at ' + pathname + '.'); } var webpackConfigLoadCode = ['try {', ' var config = JSON.stringify(require(\'' + pathname + '\'));', ' console.log(config);', '} catch (e) {', ' console.log(\'{ "parseError": \' + JSON.stringify(e.message) + \' }\');', '}'].join(''); var result = (0, _child_process.execFileSync)(process.argv[0], ['-e', webpackConfigLoadCode]); result = result.toString().trim(); if (!result) { throw new Error('Webpack config is empty at ' + pathname + '.'); } result = JSON.parse(result); if (result.parseError) { throw new Error('Cannot load Webpack config: ' + result.parseError); } webpackConfigCache[pathname] = result; return result; } function getWebpackAliases(webpackConfigPath) { var webpackConfig = getWebpackConfig(webpackConfigPath); var alias = {}; if (_typeof(webpackConfig.resolve) === 'object') { if (_typeof(webpackConfig.resolve.alias) === 'object') { alias = webpackConfig.resolve.alias; } } return alias; } function testModulePath(value, fileDir) { var aliases = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var extensions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; if (_builtinModules2.default.indexOf(value) >= 0) { return; } if (aliases[value] !== undefined) { value = aliases[value]; } else { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = Object.keys(aliases)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; if (value.startsWith(key + '/')) { value = value.replace(key + '/', aliases[key] + '/'); break; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } try { _resolve2.default.sync(value, { basedir: fileDir, extensions: extensions, paths: process.env.NODE_PATH ? [process.env.NODE_PATH] : undefined }); } catch (e) { return e.message; } } function testRequirePath(fileName, node, context, config) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = fileName.split('!')[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var value = _step2.value; var fileDir = getCurrentFilePath(context); if (!fileDir) { continue; } try { var result = testModulePath(value, fileDir, config.aliases, config.extensions); if (result) { context.report(node, result, {}); } } catch (e) { context.report(node, 'Unexpected error in eslint-plugin-require-path-exists: ' + e.message + '\n' + e.stack, {}); } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } var exists = exports.exists = function exists(context) { var pluginSettings = {}; if (context && context.options && _typeof(context.options[0]) === 'object') { pluginSettings = context.options[0]; } var config = { extensions: Array.isArray(pluginSettings.extensions) ? pluginSettings.extensions : ['', '.js', '.json', '.node'], webpackConfigPath: pluginSettings.webpackConfigPath === undefined ? null : pluginSettings.webpackConfigPath, aliases: {} }; if (config.webpackConfigPath !== null) { config.aliases = getWebpackAliases(config.webpackConfigPath); } return { ImportDeclaration: function ImportDeclaration(node) { testRequirePath(node.source.value, node, context, config); }, CallExpression: function CallExpression(node) { if (node.callee.name !== 'require' || !node.arguments.length || typeof node.arguments[0].value !== 'string' || !node.arguments[0].value) { return; } testRequirePath(node.arguments[0].value, node, context, config); } }; };