| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | /** * @author Toru Nagashima <https://github.com/mysticatea> * See LICENSE file in root directory for full license. */"use strict"const { findVariable } = require("eslint-utils")function isExports(node, scope) {    let variable = null    return (        node != null &&        node.type === "Identifier" &&        node.name === "exports" &&        (variable = findVariable(scope, node)) != null &&        variable.scope.type === "global"    )}function isModuleExports(node, scope) {    let variable = null    return (        node != null &&        node.type === "MemberExpression" &&        !node.computed &&        node.object.type === "Identifier" &&        node.object.name === "module" &&        node.property.type === "Identifier" &&        node.property.name === "exports" &&        (variable = findVariable(scope, node.object)) != null &&        variable.scope.type === "global"    )}module.exports = {    meta: {        docs: {            description: "disallow the assignment to `exports`",            category: "Possible Errors",            recommended: true,            url:                "https://github.com/mysticatea/eslint-plugin-node/blob/v11.1.0/docs/rules/no-exports-assign.md",        },        fixable: null,        messages: {            forbidden:                "Unexpected assignment to 'exports' variable. Use 'module.exports' instead.",        },        schema: [],        type: "problem",    },    create(context) {        return {            AssignmentExpression(node) {                const scope = context.getScope()                if (                    !isExports(node.left, scope) ||                    // module.exports = exports = {}                    (node.parent.type === "AssignmentExpression" &&                        node.parent.right === node &&                        isModuleExports(node.parent.left, scope)) ||                    // exports = module.exports = {}                    (node.right.type === "AssignmentExpression" &&                        isModuleExports(node.right.left, scope))                ) {                    return                }                context.report({ node, messageId: "forbidden" })            },        }    },}
 |