import tseslint from "typescript-eslint"; export default tseslint.config( { ignores: ["**/dist/**", "**/node_modules/**", "**/*.js", "**/*.mjs"], }, ...tseslint.configs.recommended, { rules: { "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }], }, }, // Engine RHS purity: ban impure globals in rete/src { files: ["packages/rete/src/**/*.ts"], rules: { "no-restricted-globals": [ "error", { name: "Date", message: "RHS purity: use session.now() instead" }, { name: "performance", message: "RHS purity: forbidden in engine" }, { name: "setTimeout", message: "RHS purity: forbidden in engine" }, { name: "setInterval", message: "RHS purity: forbidden in engine" }, { name: "clearTimeout", message: "RHS purity: forbidden in engine" }, { name: "clearInterval", message: "RHS purity: forbidden in engine" }, { name: "fetch", message: "RHS purity: forbidden in engine" }, { name: "console", message: "RHS purity: use debug flag instead" }, ], "no-restricted-syntax": [ "error", { selector: "MemberExpression[object.name='Math'][property.name='random']", message: "RHS purity: Math.random() forbidden in engine", }, ], }, }, // EventLog is a transcript, not rule logic — wall-clock timestamps // are intentional here (see SPEC.md §Rete II Reference Target and // eventlog.ts header). Carve it out from the RHS-purity Date ban. { files: ["packages/rete/src/eventlog.ts"], rules: { "no-restricted-globals": "off", }, } );