<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/**
 * @author Toru Nagashima &lt;https://github.com/mysticatea&gt;
 * 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 &amp;&amp;
        node.type === "Identifier" &amp;&amp;
        node.name === "exports" &amp;&amp;
        (variable = findVariable(scope, node)) != null &amp;&amp;
        variable.scope.type === "global"
    )
}

function isModuleExports(node, scope) {
    let variable = null

    return (
        node != null &amp;&amp;
        node.type === "MemberExpression" &amp;&amp;
        !node.computed &amp;&amp;
        node.object.type === "Identifier" &amp;&amp;
        node.object.name === "module" &amp;&amp;
        node.property.type === "Identifier" &amp;&amp;
        node.property.name === "exports" &amp;&amp;
        (variable = findVariable(scope, node.object)) != null &amp;&amp;
        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" &amp;&amp;
                        node.parent.right === node &amp;&amp;
                        isModuleExports(node.parent.left, scope)) ||
                    // exports = module.exports = {}
                    (node.right.type === "AssignmentExpression" &amp;&amp;
                        isModuleExports(node.right.left, scope))
                ) {
                    return
                }

                context.report({ node, messageId: "forbidden" })
            },
        }
    },
}
</pre></body></html>