module.exports = { root: true, extends: [ 'eslint:recommended', ], env: { es6: true, }, parserOptions: { ecmaVersion: 'latest', }, overrides: [ { // Server-side files (plus this configuration file) files: ['src/**/*.js', './*.js', 'plugins/**/*.js'], env: { node: true, }, parserOptions: { sourceType: 'module', }, }, { files: ['src/**/*.mjs'], parserOptions: { sourceType: 'module', }, env: { node: true, }, }, { // Browser-side files files: ['public/**/*.js'], env: { browser: true, jquery: true, }, parserOptions: { sourceType: 'module', }, // These scripts are loaded in HTML; tell ESLint not to complain about them being undefined globals: { DOMPurify: 'readonly', droll: 'readonly', Fuse: 'readonly', Handlebars: 'readonly', hljs: 'readonly', localforage: 'readonly', moment: 'readonly', pdfjsLib: 'readonly', Popper: 'readonly', showdown: 'readonly', showdownKatex: 'readonly', SVGInject: 'readonly', toastr: 'readonly', Readability: 'readonly', isProbablyReaderable: 'readonly', ePub: 'readonly', diff_match_patch: 'readonly', SillyTavern: 'readonly', }, }, ], ignorePatterns: [ '**/node_modules/**', '**/dist/**', '**/.git/**', 'public/lib/**', 'backups/**', 'data/**', 'cache/**', 'src/tokenizers/**', 'docker/**', 'plugins/**', '**/*.min.js', ], rules: { 'no-unused-vars': ['error', { args: 'none' }], 'no-control-regex': 'off', 'no-constant-condition': ['error', { checkLoops: false }], 'require-yield': 'off', 'quotes': ['error', 'single'], 'semi': ['error', 'always'], 'indent': ['error', 4, { SwitchCase: 1, FunctionDeclaration: { parameters: 'first' } }], 'comma-dangle': ['error', 'always-multiline'], 'eol-last': ['error', 'always'], 'no-trailing-spaces': 'error', 'object-curly-spacing': ['error', 'always'], 'space-infix-ops': 'error', 'no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }], 'no-cond-assign': 'error', // These rules should eventually be enabled. 'no-async-promise-executor': 'off', 'no-inner-declarations': 'off', }, };