module.exports = {
    root: true,
    extends: [
        'eslint:recommended',
        'plugin:jsdoc/recommended',
    ],
    plugins: [
        'jsdoc',
        'security',
        'no-unsanitized',
    ],
    env: {
        browser: true,
        jquery: true,
        es6: true,
    },
    globals: {
        toastr: 'readonly',
        Fuse: 'readonly',
        globalThis: 'readonly',
        SillyTavern: 'readonly',
        ePub: 'readonly',
        pdfjsLib: 'readonly',
        echarts: 'readonly',
    },
    parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module',
    },
    rules: {
        'no-eval': 'warn',
        'no-implied-eval': 'warn',
        'no-new-func': 'warn',
        'no-script-url': 'warn',
        'no-unsanitized/method': 'warn',
        'no-unsanitized/property': 'warn',
        'security/detect-object-injection': 'off',
        'security/detect-non-literal-regexp': 'off',
        'security/detect-unsafe-regex': 'off',
        'no-restricted-syntax': [
            'warn',
            {
                selector: 'CallExpression[callee.property.name="postMessage"][arguments.1.value="*"]',
                message: 'Avoid postMessage(..., "*"); use a trusted origin or the shared iframe messaging helper.',
            },
            {
                selector: 'CallExpression[callee.property.name="addEventListener"][arguments.0.value="message"]',
                message: 'All message listeners must validate origin/source (use isTrustedMessage).',
            },
        ],
        'no-undef': 'error',
        'no-unused-vars': ['warn', { args: 'none' }],
        'eqeqeq': 'off',
        'no-empty': ['error', { allowEmptyCatch: true }],
        'no-inner-declarations': 'off',
        'no-constant-condition': ['error', { checkLoops: false }],
        'no-useless-catch': 'off',
        'no-control-regex': 'off',
        'no-mixed-spaces-and-tabs': 'off',
        'jsdoc/require-jsdoc': 'off',
        'jsdoc/require-param': 'off',
        'jsdoc/require-returns': 'off',
        'jsdoc/require-param-description': 'off',
        'jsdoc/require-returns-description': 'off',
        'jsdoc/check-types': 'off',
        'jsdoc/tag-lines': 'off',
    },
};
