137 lines
14 KiB
JavaScript
137 lines
14 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
|
||
|
|
||
|
var EXPORT_MESSAGE = 'Expected "export" or "export default"'; /**
|
||
|
* @fileoverview Rule to prefer ES6 to CJS
|
||
|
* @author Jamund Ferguson
|
||
|
*/var IMPORT_MESSAGE = 'Expected "import" instead of "require()"';function normalizeLegacyOptions(options) {
|
||
|
if (options.indexOf('allow-primitive-modules') >= 0) {
|
||
|
return { allowPrimitiveModules: true };
|
||
|
}
|
||
|
return options[0] || {};
|
||
|
}
|
||
|
|
||
|
function allowPrimitive(node, options) {
|
||
|
if (!options.allowPrimitiveModules) return false;
|
||
|
if (node.parent.type !== 'AssignmentExpression') return false;
|
||
|
return node.parent.right.type !== 'ObjectExpression';
|
||
|
}
|
||
|
|
||
|
function allowRequire(node, options) {
|
||
|
return options.allowRequire;
|
||
|
}
|
||
|
|
||
|
function allowConditionalRequire(node, options) {
|
||
|
return options.allowConditionalRequire !== false;
|
||
|
}
|
||
|
|
||
|
function validateScope(scope) {
|
||
|
return scope.variableScope.type === 'module';
|
||
|
}
|
||
|
|
||
|
// https://github.com/estree/estree/blob/HEAD/es5.md
|
||
|
function isConditional(node) {
|
||
|
if (
|
||
|
node.type === 'IfStatement' ||
|
||
|
node.type === 'TryStatement' ||
|
||
|
node.type === 'LogicalExpression' ||
|
||
|
node.type === 'ConditionalExpression')
|
||
|
return true;
|
||
|
if (node.parent) return isConditional(node.parent);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function isLiteralString(node) {
|
||
|
return node.type === 'Literal' && typeof node.value === 'string' ||
|
||
|
node.type === 'TemplateLiteral' && node.expressions.length === 0;
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Rule Definition
|
||
|
//------------------------------------------------------------------------------
|
||
|
|
||
|
var schemaString = { 'enum': ['allow-primitive-modules'] };
|
||
|
var schemaObject = {
|
||
|
type: 'object',
|
||
|
properties: {
|
||
|
allowPrimitiveModules: { 'type': 'boolean' },
|
||
|
allowRequire: { 'type': 'boolean' },
|
||
|
allowConditionalRequire: { 'type': 'boolean' } },
|
||
|
|
||
|
additionalProperties: false };
|
||
|
|
||
|
|
||
|
module.exports = {
|
||
|
meta: {
|
||
|
type: 'suggestion',
|
||
|
docs: {
|
||
|
url: (0, _docsUrl2['default'])('no-commonjs') },
|
||
|
|
||
|
|
||
|
schema: {
|
||
|
anyOf: [
|
||
|
{
|
||
|
type: 'array',
|
||
|
items: [schemaString],
|
||
|
additionalItems: false },
|
||
|
|
||
|
{
|
||
|
type: 'array',
|
||
|
items: [schemaObject],
|
||
|
additionalItems: false }] } },
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
create: function () {function create(context) {
|
||
|
var options = normalizeLegacyOptions(context.options);
|
||
|
|
||
|
return {
|
||
|
|
||
|
'MemberExpression': function () {function MemberExpression(node) {
|
||
|
|
||
|
// module.exports
|
||
|
if (node.object.name === 'module' && node.property.name === 'exports') {
|
||
|
if (allowPrimitive(node, options)) return;
|
||
|
context.report({ node: node, message: EXPORT_MESSAGE });
|
||
|
}
|
||
|
|
||
|
// exports.
|
||
|
if (node.object.name === 'exports') {
|
||
|
var isInScope = context.getScope().
|
||
|
variables.
|
||
|
some(function (variable) {return variable.name === 'exports';});
|
||
|
if (!isInScope) {
|
||
|
context.report({ node: node, message: EXPORT_MESSAGE });
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}return MemberExpression;}(),
|
||
|
'CallExpression': function () {function CallExpression(call) {
|
||
|
if (!validateScope(context.getScope())) return;
|
||
|
|
||
|
if (call.callee.type !== 'Identifier') return;
|
||
|
if (call.callee.name !== 'require') return;
|
||
|
|
||
|
if (call.arguments.length !== 1) return;
|
||
|
if (!isLiteralString(call.arguments[0])) return;
|
||
|
|
||
|
if (allowRequire(call, options)) return;
|
||
|
|
||
|
if (allowConditionalRequire(call, options) && isConditional(call.parent)) return;
|
||
|
|
||
|
// keeping it simple: all 1-string-arg `require` calls are reported
|
||
|
context.report({
|
||
|
node: call.callee,
|
||
|
message: IMPORT_MESSAGE });
|
||
|
|
||
|
}return CallExpression;}() };
|
||
|
|
||
|
|
||
|
}return create;}() };
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jb21tb25qcy5qcyJdLCJuYW1lcyI6WyJFWFBPUlRfTUVTU0FHRSIsIklNUE9SVF9NRVNTQUdFIiwibm9ybWFsaXplTGVnYWN5T3B0aW9ucyIsIm9wdGlvbnMiLCJpbmRleE9mIiwiYWxsb3dQcmltaXRpdmVNb2R1bGVzIiwiYWxsb3dQcmltaXRpdmUiLCJub2RlIiwicGFyZW50IiwidHlwZSIsInJpZ2h0IiwiYWxsb3dSZXF1aXJlIiwiYWxsb3dDb25kaXRpb25hbFJlcXVpcmUiLCJ2YWxpZGF0ZVNjb3BlIiwic2NvcGUiLCJ2YXJpYWJsZVNjb3BlIiwiaXNDb25kaXRpb25hbCIsImlzTGl0ZXJhbFN0cmluZyIsInZhbHVlIiwiZXhwcmVzc2lvbnMiLCJsZW5ndGgiLCJzY2hlbWFTdHJpbmciLCJzY2hlbWFPYmplY3QiLCJwcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJhbnlPZiIsIml0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiY3JlYXRlIiwiY29udGV4dCIsIm9iamVjdCIsIm5hbWUiLCJwcm9wZXJ0eSIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0luU2NvcGUiLCJnZXRTY29wZSIsInZhcmlhYmxlcyIsInNvbWUiLCJ2YXJpYWJsZSIsImNhbGwiLCJjYWxsZWUiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0EscUM7O0FBRUEsSUFBTUEsaUJBQWlCLHVDQUF2QixDLENBUEE7OztpRUFRQSxJQUFNQyxpQkFBaUIsMENBQXZCLENBRUEsU0FBU0Msc0JBQVQsQ0FBZ0NDLE9BQWhDLEVBQXlDO0FBQ3ZDLE1BQUlBLFFBQVFDLE9BQVIsQ0FBZ0IseUJBQWhCLEtBQThDLENBQWxELEVBQXFEO0FBQ25ELFdBQU8sRUFBRUMsdUJBQXVCLElBQXpCLEVBQVA7QUFDRDtBQUNELFNBQU9GLFFBQVEsQ0FBUixLQUFj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
|