Path: blob/main/tests/src/rules/no-commonjs.js
829 views
import { RuleTester } from 'eslint';1import eslintPkg from 'eslint/package.json';2import semver from 'semver';34const EXPORT_MESSAGE = 'Expected "export" or "export default"';5const IMPORT_MESSAGE = 'Expected "import" instead of "require()"';67const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015, sourceType: 'module' } });89ruleTester.run('no-commonjs', require('rules/no-commonjs'), {10valid: [1112// imports13{ code: 'import "x";', parserOptions: { ecmaVersion: 2015, sourceType: 'module' } },14{ code: 'import x from "x"', parserOptions: { ecmaVersion: 2015, sourceType: 'module' } },15{ code: 'import { x } from "x"', parserOptions: { ecmaVersion: 2015, sourceType: 'module' } },1617// exports18{ code: 'export default "x"', parserOptions: { ecmaVersion: 2015, sourceType: 'module' } },19{ code: 'export function house() {}', parserOptions: { ecmaVersion: 2015, sourceType: 'module' } },20{21code:22'function someFunc() {\n'+23' const exports = someComputation();\n'+24'\n'+25' expect(exports.someProp).toEqual({ a: \'value\' });\n'+26'}',27parserOptions: { ecmaVersion: 2015, sourceType: 'module' },28},2930// allowed requires31{ code: 'function a() { var x = require("y"); }' }, // nested requires allowed32{ code: 'var a = c && require("b")' }, // conditional requires allowed33{ code: 'require.resolve("help")' }, // methods of require are allowed34{ code: 'require.ensure([])' }, // webpack specific require.ensure is allowed35{ code: 'require([], function(a, b, c) {})' }, // AMD require is allowed36{ code: "var bar = require('./bar', true);" },37{ code: "var bar = proxyquire('./bar');" },38{ code: "var bar = require('./ba' + 'r');" },39{ code: 'var bar = require(`x${1}`);', parserOptions: { ecmaVersion: 2015 } },40{ code: 'var zero = require(0);' },41{ code: 'require("x")', options: [{ allowRequire: true }] },4243// commonJS doesn't care how the path is built. You can use a function to44// dynamically build the module path.t st45{ code: 'require(rootRequire("x"))', options: [{ allowRequire: true }] },46{ code: 'require(String("x"))', options: [{ allowRequire: true }] },47{ code: 'require(["x", "y", "z"].join("/"))', options: [{ allowRequire: true }] },4849// commonJS rules should be scoped to commonJS spec. `rootRequire` is not50// recognized by this commonJS plugin.51{ code: 'rootRequire("x")', options: [{ allowRequire: true }] },52{ code: 'rootRequire("x")', options: [{ allowRequire: false }] },5354{ code: 'module.exports = function () {}', options: ['allow-primitive-modules'] },55{ code: 'module.exports = function () {}', options: [{ allowPrimitiveModules: true }] },56{ code: 'module.exports = "foo"', options: ['allow-primitive-modules'] },57{ code: 'module.exports = "foo"', options: [{ allowPrimitiveModules: true }] },5859{ code: 'if (typeof window !== "undefined") require("x")', options: [{ allowRequire: true }] },60{ code: 'if (typeof window !== "undefined") require("x")', options: [{ allowRequire: false }] },61{ code: 'if (typeof window !== "undefined") { require("x") }', options: [{ allowRequire: true }] },62{ code: 'if (typeof window !== "undefined") { require("x") }', options: [{ allowRequire: false }] },6364{ code: 'try { require("x") } catch (error) {}' },65],6667invalid: [6869// imports70...(semver.satisfies(eslintPkg.version, '< 4.0.0') ? [] : [71{ code: 'var x = require("x")', output: 'var x = require("x")', errors: [ { message: IMPORT_MESSAGE }] },72{ code: 'x = require("x")', output: 'x = require("x")', errors: [ { message: IMPORT_MESSAGE }] },73{ code: 'require("x")', output: 'require("x")', errors: [ { message: IMPORT_MESSAGE }] },74{ code: 'require(`x`)',75parserOptions: { ecmaVersion: 2015 },76output: 'require(`x`)',77errors: [ { message: IMPORT_MESSAGE }],78},7980{ code: 'if (typeof window !== "undefined") require("x")',81options: [{ allowConditionalRequire: false }],82output: 'if (typeof window !== "undefined") require("x")',83errors: [ { message: IMPORT_MESSAGE }],84},85{ code: 'if (typeof window !== "undefined") { require("x") }',86options: [{ allowConditionalRequire: false }],87output: 'if (typeof window !== "undefined") { require("x") }',88errors: [ { message: IMPORT_MESSAGE }],89},90{ code: 'try { require("x") } catch (error) {}',91options: [{ allowConditionalRequire: false }],92output: 'try { require("x") } catch (error) {}',93errors: [ { message: IMPORT_MESSAGE }],94},95]),9697// exports98{ code: 'exports.face = "palm"', output: 'exports.face = "palm"', errors: [ { message: EXPORT_MESSAGE }] },99{ code: 'module.exports.face = "palm"', output: 'module.exports.face = "palm"', errors: [ { message: EXPORT_MESSAGE }] },100{ code: 'module.exports = face', output: 'module.exports = face', errors: [ { message: EXPORT_MESSAGE }] },101{ code: 'exports = module.exports = {}', output: 'exports = module.exports = {}', errors: [ { message: EXPORT_MESSAGE }] },102{ code: 'var x = module.exports = {}', output: 'var x = module.exports = {}', errors: [ { message: EXPORT_MESSAGE }] },103{ code: 'module.exports = {}',104options: ['allow-primitive-modules'],105output: 'module.exports = {}',106errors: [ { message: EXPORT_MESSAGE }],107},108{ code: 'var x = module.exports',109options: ['allow-primitive-modules'],110output: 'var x = module.exports',111errors: [ { message: EXPORT_MESSAGE }],112},113],114});115116117