react-scripts
Version:
Configuration and scripts for Create React App.
110 lines (88 loc) • 9.68 kB
JavaScript
var _resolve = require('../core/resolve');
var _resolve2 = _interopRequireDefault(_resolve);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function (context) {
var ignoreRegExps = [];
if (context.options[0] != null && context.options[0].ignore != null) {
ignoreRegExps = context.options[0].ignore.map(function (p) {
return new RegExp(p);
});
}
function checkSourceValue(source) {
if (source == null) return;
if (ignoreRegExps.some(function (re) {
return re.test(source.value);
})) return;
if ((0, _resolve2.default)(source.value, context) === undefined) {
context.report(source, 'Unable to resolve path to module \'' + source.value + '\'.');
}
}
// for import-y declarations
function checkSource(node) {
checkSourceValue(node.source);
}
// for CommonJS `require` calls
// adapted from @mctep: http://git.io/v4rAu
function checkCommon(call) {
if (call.callee.type !== 'Identifier') return;
if (call.callee.name !== 'require') return;
if (call.arguments.length !== 1) return;
var modulePath = call.arguments[0];
if (modulePath.type !== 'Literal') return;
if (typeof modulePath.value !== 'string') return;
checkSourceValue(modulePath);
}
function checkAMD(call) {
if (call.callee.type !== 'Identifier') return;
if (call.callee.name !== 'require' && call.callee.name !== 'define') return;
if (call.arguments.length !== 2) return;
var modules = call.arguments[0];
if (modules.type !== 'ArrayExpression') return;
modules.elements.forEach(function (element) {
if (element.type === 'Literal' && typeof element.value === 'string') {
// magic modules: http://git.io/vByan
if (element.value !== 'require' && element.value !== 'exports') {
checkSourceValue(element);
}
}
});
}
var visitors = {
'ImportDeclaration': checkSource,
'ExportNamedDeclaration': checkSource,
'ExportAllDeclaration': checkSource
};
if (context.options[0] != null) {
(function () {
var _context$options$ = context.options[0];
var commonjs = _context$options$.commonjs;
var amd = _context$options$.amd;
if (commonjs || amd) {
visitors['CallExpression'] = function (call) {
if (commonjs) checkCommon(call);
if (amd) checkAMD(call);
};
}
})();
}
return visitors;
}; /**
* @fileOverview Ensures that an imported path exists, given resolution rules.
* @author Ben Mosher
*/
module.exports.schema = [{
'type': 'object',
'properties': {
'commonjs': { 'type': 'boolean' },
'amd': { 'type': 'boolean' },
'ignore': {
'type': 'array',
'minItems': 1,
'items': { 'type': 'string' },
'uniqueItems': true
}
},
'additionalProperties': false
}];
//# sourceMappingURL=data:application/json;base64,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LFVBQ1osR0FEWSxxQkFDWixHQURZOzs7QUFHOUIsVUFBSSxZQUFZLEdBQWhCLEVBQXFCO0FBQ25CLGlCQUFTLGdCQUFULElBQTZCLFVBQVUsSUFBVixFQUFnQjtBQUMzQyxjQUFJLFFBQUosRUFBYyxZQUFZLElBQVo7QUFDZCxjQUFJLEdBQUosRUFBUyxTQUFTLElBQVQ7QUFDVixTQUhEO0FBSUQ7QUFSNkI7QUFTL0I7O0FBRUQsU0FBTyxRQUFQO0FBQ0QsQ0E3RUQsQyxDQVBBOzs7OztBQXNGQSxPQUFPLE9BQVAsQ0FBZSxNQUFmLEdBQXdCLENBQ3RCO0FBQ0UsVUFBUSxRQURWO0FBRUUsZ0JBQWM7QUFDWixnQkFBWSxFQUFFLFFBQVEsU0FBVixFQURBO0FBRVosV0FBTyxFQUFFLFFBQVEsU0FBVixFQUZLO0FBR1osY0FBVTtBQUNSLGNBQVEsT0FEQTtBQUVSLGtCQUFZLENBRko7QUFHUixlQUFTLEVBQUUsUUFBUSxRQUFWLEVBSEQ7QUFJUixxQkFBZTtBQUpQO0FBSEUsR0FGaEI7QUFZRSwwQkFBd0I7QUFaMUIsQ0FEc0IsQ0FBeEIiLCJmaWxlIjoicnVsZXMvbm8tdW5yZXNvbHZlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgYW4gaW1wb3J0ZWQgcGF0aCBleGlzdHMsIGdpdmVuIHJlc29sdXRpb24gcnVsZXMuXG4gKiBAYXV0aG9yIEJlbiBNb3NoZXJcbiAqL1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICcuLi9jb3JlL3Jlc29sdmUnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblxuICBsZXQgaWdub3JlUmVnRXhwcyA9IFtdXG4gIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gIT0gbnVsbCAmJiBjb250ZXh0Lm9wdGlvbnNbMF0uaWdub3JlICE9IG51bGwpIHtcbiAgICBpZ25vcmVSZWdFeHBzID0gY29udGV4dC5vcHRpb25zWzBdLmlnbm9yZS5tYXAocCA9PiBuZXcgUmVnRXhwKHApKVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tTb3VyY2VWYWx1ZShzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVyblxuXG4gICAgaWYgKGlnbm9yZVJlZ0V4cHMuc29tZShyZSA9PiByZS50ZXN0KHNvdXJjZS52YWx1ZSkpKSByZXR1cm5cblxuICAgIGlmIChyZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoc291cmNlLFxuICAgICAgICAnVW5hYmxlIHRvIHJlc29sdmUgcGF0aCB0byBtb2R1bGUgXFwnJyArIHNvdXJjZS52YWx1ZSArICdcXCcuJylcbiAgICB9XG4gIH1cblxuICAvLyBmb3IgaW1wb3J0LXkgZGVjbGFyYXRpb25zXG4gIGZ1bmN0aW9uIGNoZWNrU291cmNlKG5vZGUpIHtcbiAgICBjaGVja1NvdXJjZVZhbHVlKG5vZGUuc291cmNlKVxuICB9XG5cbiAgLy8gZm9yIENvbW1vbkpTIGByZXF1aXJlYCBjYWxsc1xuICAvLyBhZGFwdGVkIGZyb20gQG1jdGVwOiBodHRwOi8vZ2l0LmlvL3Y0ckF1XG4gIGZ1bmN0aW9uIGNoZWNrQ29tbW9uKGNhbGwpIHtcbiAgICBpZiAoY2FsbC5jYWxsZWUudHlwZSAhPT0gJ0lkZW50aWZpZXInKSByZXR1cm5cbiAgICBpZiAoY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnKSByZXR1cm5cbiAgICBpZiAoY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAxKSByZXR1cm5cblxuICAgIGNvbnN0IG1vZHVsZVBhdGggPSBjYWxsLmFyZ3VtZW50c1swXVxuICAgIGlmIChtb2R1bGVQYXRoLnR5cGUgIT09ICdMaXRlcmFsJykgcmV0dXJuXG4gICAgaWYgKHR5cGVvZiBtb2R1bGVQYXRoLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuXG5cbiAgICBjaGVja1NvdXJjZVZhbHVlKG1vZHVsZVBhdGgpXG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0FNRChjYWxsKSB7XG4gICAgaWYgKGNhbGwuY2FsbGVlLnR5cGUgIT09ICdJZGVudGlmaWVyJykgcmV0dXJuXG4gICAgaWYgKGNhbGwuY2FsbGVlLm5hbWUgIT09ICdyZXF1aXJlJyAmJlxuICAgICAgICBjYWxsLmNhbGxlZS5uYW1lICE9PSAnZGVmaW5lJykgcmV0dXJuXG4gICAgaWYgKGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMikgcmV0dXJuXG5cbiAgICBjb25zdCBtb2R1bGVzID0gY2FsbC5hcmd1bWVudHNbMF1cbiAgICBpZiAobW9kdWxlcy50eXBlICE9PSAnQXJyYXlFeHByZXNzaW9uJykgcmV0dXJuXG5cbiAgICBtb2R1bGVzLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdMaXRlcmFsJyAmJlxuICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnZhbHVlID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgIC8vIG1hZ2ljIG1vZHVsZXM6IGh0dHA6Ly9naXQuaW8vdkJ5YW5cbiAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUgIT09ICdyZXF1aXJlJyAmJlxuICAgICAgICAgICAgZWxlbWVudC52YWx1ZSAhPT0gJ2V4cG9ydHMnKSB7XG4gICAgICAgICAgY2hlY2tTb3VyY2VWYWx1ZShlbGVtZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHZpc2l0b3JzID0ge1xuICAgICdJbXBvcnREZWNsYXJhdGlvbic6IGNoZWNrU291cmNlLFxuICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogY2hlY2tTb3VyY2UsXG4gICAgJ0V4cG9ydEFsbERlY2xhcmF0aW9uJzogY2hlY2tTb3VyY2UsXG4gIH1cblxuICBpZiAoY29udGV4dC5vcHRpb25zWzBdICE9IG51bGwpIHtcbiAgICBjb25zdCB7IGNvbW1vbmpzLCBhbWQgfSA9IGNvbnRleHQub3B0aW9uc1swXVxuXG4gICAgaWYgKGNvbW1vbmpzIHx8IGFtZCkge1xuICAgICAgdmlzaXRvcnNbJ0NhbGxFeHByZXNzaW9uJ10gPSBmdW5jdGlvbiAoY2FsbCkge1xuICAgICAgICBpZiAoY29tbW9uanMpIGNoZWNrQ29tbW9uKGNhbGwpXG4gICAgICAgIGlmIChhbWQpIGNoZWNrQU1EKGNhbGwpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZpc2l0b3JzXG59XG5cbm1vZHVsZS5leHBvcnRzLnNjaGVtYSA9IFtcbiAge1xuICAgICd0eXBlJzogJ29iamVjdCcsXG4gICAgJ3Byb3BlcnRpZXMnOiB7XG4gICAgICAnY29tbW9uanMnOiB7ICd0eXBlJzogJ2Jvb2xlYW4nIH0sXG4gICAgICAnYW1kJzogeyAndHlwZSc6ICdib29sZWFuJyB9LFxuICAgICAgJ2lnbm9yZSc6IHtcbiAgICAgICAgJ3R5cGUnOiAnYXJyYXknLFxuICAgICAgICAnbWluSXRlbXMnOiAxLFxuICAgICAgICAnaXRlbXMnOiB7ICd0eXBlJzogJ3N0cmluZycgfSxcbiAgICAgICAgJ3VuaXF1ZUl0ZW1zJzogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICAnYWRkaXRpb25hbFByb3BlcnRpZXMnOiBmYWxzZSxcbiAgfSxcbl1cbiJdfQ==
;