44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
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/**", "**/coverage/**", ".pnpm-store/**"] },
|
|
js.configs.recommended,
|
|
...tseslint.configs.recommended,
|
|
{
|
|
languageOptions: {
|
|
globals: { ...globals.node },
|
|
},
|
|
},
|
|
{
|
|
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,
|
|
);
|