import js from "@eslint/js"; import prettier from "eslint-config-prettier"; import globals from "globals"; import tseslint from "typescript-eslint"; // packages/sim and packages/content must stay pure: time and randomness are // always passed in as arguments (implementation plan rule 0.1.4). const impureMessage = "Not allowed in pure packages; pass time and seeds in as arguments."; export default tseslint.config( { ignores: [ "**/node_modules/**", "**/dist/**", "**/dist-*/**", "**/coverage/**", ".pnpm-store/**", ], }, js.configs.recommended, ...tseslint.configs.recommended, { languageOptions: { globals: { ...globals.node }, }, rules: { // Allow deliberately unused names such as placeholder parameters (_url). "@typescript-eslint/no-unused-vars": [ "error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, ], }, }, { files: ["apps/web/**/*.{ts,tsx}"], languageOptions: { globals: { ...globals.browser }, }, }, { files: ["packages/sim/**/*.ts", "packages/content/**/*.ts"], rules: { "no-restricted-properties": [ "error", { object: "Math", property: "random", message: impureMessage }, { object: "Date", property: "now", message: impureMessage }, ], "no-restricted-syntax": [ "error", { selector: "NewExpression[callee.name='Date'][arguments.length=0]", message: impureMessage, }, ], }, }, prettier, );