houserules/eslint.config.js

47 lines
1.7 KiB
JavaScript

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: "^_" }],
},
},
// 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",
},
}
);