280 lines
7.7 KiB
JavaScript
280 lines
7.7 KiB
JavaScript
"use strict";
|
|
|
|
module.exports = {
|
|
extends: [
|
|
"plugin:compat/recommended",
|
|
"plugin:node/recommended",
|
|
"plugin:no-unsanitized/DOM",
|
|
"plugin:promise/recommended",
|
|
"plugin:import/errors",
|
|
"plugin:markdown/recommended",
|
|
"plugin:sonarjs/recommended"
|
|
],
|
|
plugins: ["jsdoc", "promise", "html", "import", "sonarjs"],
|
|
parserOptions: {
|
|
ecmaVersion: 2020,
|
|
sourceType: "module"
|
|
},
|
|
env: {
|
|
browser: true,
|
|
es6: true
|
|
},
|
|
settings: {
|
|
polyfills: [
|
|
// These are the primary polyfills needed by regular users if
|
|
// not present, e.g., with core-js-bundle; also those under
|
|
// extensions
|
|
"fetch",
|
|
"Promise",
|
|
"Promise.all",
|
|
// 'Set',
|
|
"Uint8Array",
|
|
"URL"
|
|
]
|
|
},
|
|
rules: {
|
|
// check-examples is not picking up eslint config properly in some
|
|
// environments; see also discussion above
|
|
// `mocha-cleanup/no-assertions-outside-it`
|
|
"sonarjs/cognitive-complexity": 0,
|
|
"sonarjs/no-duplicate-string": 0,
|
|
"sonarjs/no-collapsible-if": 0,
|
|
"sonarjs/no-small-switch": 0,
|
|
"sonarjs/no-identical-functions": 0,
|
|
"sonarjs/no-duplicated-branches": 0,
|
|
|
|
"jsdoc/check-examples": [
|
|
"warn",
|
|
{
|
|
rejectExampleCodeRegex: "^`",
|
|
checkDefaults: true,
|
|
checkParams: true,
|
|
checkProperties: true
|
|
}
|
|
],
|
|
// The Babel transform seems to have a problem converting these
|
|
"prefer-named-capture-group": "off",
|
|
"jsdoc/require-file-overview": [
|
|
"error",
|
|
{
|
|
tags: {
|
|
file: {
|
|
initialCommentsOnly: true,
|
|
preventDuplicates: true
|
|
},
|
|
license: {
|
|
initialCommentsOnly: true,
|
|
preventDuplicates: true
|
|
},
|
|
copyright: {
|
|
initialCommentsOnly: true,
|
|
preventDuplicates: true
|
|
},
|
|
author: {
|
|
initialCommentsOnly: true,
|
|
preventDuplicates: true
|
|
},
|
|
module: {
|
|
initialCommentsOnly: true,
|
|
preventDuplicates: true
|
|
},
|
|
exports: {
|
|
initialCommentsOnly: true,
|
|
preventDuplicates: true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
// Warning or Off for now but should be reviewed
|
|
// Override these rules which are difficult for us
|
|
// to apply at this time
|
|
"default-case": "off",
|
|
"require-unicode-regexp": "off",
|
|
"max-len": ["warn", { ignoreComments: true, code: 130 }], // 130 is too much but too many occurences
|
|
"eslint-comments/require-description": "off",
|
|
"compat/compat": "error",
|
|
"consistent-this": "off",
|
|
"import/no-anonymous-default-export": "off",
|
|
"node/no-unsupported-features/node-builtins": "warn",
|
|
"prefer-exponentiation-operator": "warn",
|
|
"node/no-unsupported-features/es-syntax": "off",
|
|
"no-unsanitized/method": [
|
|
"error",
|
|
{
|
|
escape: {
|
|
methods: ["encodeURIComponent", "encodeURI"]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
overrides: [
|
|
// Locales have no need for importing outside of SVG-Edit
|
|
// and translations may need a longer line length
|
|
{
|
|
files: [
|
|
'src/editor/locale/lang.*.js',
|
|
'src/editor/extensions/*/locale/**',
|
|
'docs/tutorials/ExtensionDocs.md/*.js'
|
|
],
|
|
rules: {
|
|
"import/no-anonymous-default-export": "off",
|
|
"max-len": "off",
|
|
"node/no-missing-import": "off",
|
|
"import/no-unresolved": "off"
|
|
}
|
|
},
|
|
// These browser files don't do importing or requiring
|
|
{
|
|
files: [
|
|
"src/editor/touch.js",
|
|
"src/editor/typedefs.js",
|
|
"src/editor/redirect-on-no-module-support.js",
|
|
"src/editor/extensions/ext-imagelib/index.js",
|
|
"screencasts/svgopen2010/script.js"
|
|
],
|
|
rules: {
|
|
"import/unambiguous": ["off"]
|
|
}
|
|
},
|
|
{
|
|
files: ["**/*.html", "screencasts/**"],
|
|
globals: {
|
|
root: "off"
|
|
},
|
|
settings: {
|
|
polyfills: [
|
|
"document.querySelector",
|
|
"history",
|
|
"history.pushState",
|
|
"history.replaceState",
|
|
"location.hash",
|
|
"navigator",
|
|
"Number.parseFloat",
|
|
"Number.parseInt",
|
|
"Number.isNaN"
|
|
]
|
|
},
|
|
rules: {
|
|
"import/unambiguous": "off"
|
|
}
|
|
},
|
|
{
|
|
// As consumed by jsdoc, cannot be expressed as ESM
|
|
files: ["docs/jsdoc-config.js"],
|
|
parserOptions: {
|
|
sourceType: "script"
|
|
},
|
|
globals: {
|
|
module: false
|
|
},
|
|
rules: {
|
|
"import/no-commonjs": "off",
|
|
strict: "off"
|
|
}
|
|
},
|
|
{
|
|
files: ["cypress/**"],
|
|
extends: [
|
|
"plugin:cypress/recommended",
|
|
"plugin:mocha/recommended",
|
|
"plugin:mocha-cleanup/recommended-no-limits",
|
|
"plugin:@fintechstudios/chai-as-promised/recommended",
|
|
"plugin:chai-expect-keywords/recommended",
|
|
"plugin:chai-expect/recommended",
|
|
"plugin:chai-friendly/recommended"
|
|
],
|
|
env: {
|
|
node: true
|
|
},
|
|
settings: {
|
|
polyfills: [
|
|
"console",
|
|
"Date.now",
|
|
"document.body",
|
|
"document.createElementNS",
|
|
"document.head",
|
|
"DOMParser",
|
|
"Number.isNaN",
|
|
"Object.keys",
|
|
"Object.entries",
|
|
"Promise"
|
|
]
|
|
},
|
|
rules: {
|
|
// These errors are caused in Cypress files if user has not
|
|
// yet instrumented code; need to reinvestigate why we had to
|
|
// instrument separately from nyc mocha
|
|
"import/no-unresolved": ["error", { ignore: ["/instrumented/"] }],
|
|
"node/no-missing-import": "off",
|
|
"jsdoc/check-examples": "off",
|
|
"chai-expect-keywords/no-unsupported-keywords": [
|
|
"error",
|
|
{
|
|
allowChaiDOM: true
|
|
}
|
|
],
|
|
// Would be good but seems necessary due to some bugs in Cypress
|
|
// in detecting visibility
|
|
// 'cypress/no-force': 0,
|
|
// Good but would be difficult to enforce (and data-* may not be less
|
|
// brittle than IDs/classes anyways)
|
|
// 'cypress/require-data-selectors': 0,
|
|
"cypress/assertion-before-screenshot": 2,
|
|
|
|
// Conflicts with Cypress `should`
|
|
"mocha-cleanup/invalid-assertions": 0,
|
|
|
|
// Might see about working around to avoid the option limitation,
|
|
// but convenient
|
|
"mocha-cleanup/no-expressions-in-assertions": [
|
|
"error",
|
|
{
|
|
replacementsOnly: true
|
|
}
|
|
],
|
|
|
|
// Too oppressive when planning to extend a section
|
|
"mocha/no-hooks-for-single-case": 0,
|
|
|
|
// Would be good to enable but needs some refactoring
|
|
"mocha/no-setup-in-describe": 0,
|
|
"mocha-cleanup/no-outside-declaration": 0,
|
|
|
|
// Useful to ensure allowing `this.timeout()`, etc., but a
|
|
// little oppressive
|
|
"mocha/no-mocha-arrows": 0,
|
|
// Useful if enabling the regular `prefer-arrow-callback`
|
|
// 'mocha/prefer-arrow-callback': 2
|
|
|
|
"jsdoc/require-jsdoc": 0,
|
|
"no-console": 0,
|
|
"import/unambiguous": 0
|
|
}
|
|
},
|
|
{
|
|
// Node files
|
|
files: [
|
|
"docs/jsdoc-config.js",
|
|
"build/build-html.js",
|
|
"rollup.config.js",
|
|
"rollup-config.config.js"
|
|
],
|
|
env: {
|
|
node: true
|
|
},
|
|
settings: {
|
|
polyfills: ["console", "Promise.resolve"]
|
|
},
|
|
globals: {
|
|
require: true
|
|
},
|
|
rules: {
|
|
// We can't put Rollup in npmignore or user can't get access,
|
|
// and we have too many modules to add to `peerDependencies`
|
|
// so this rule can know them to be available, so we instead
|
|
// disable
|
|
"node/no-unpublished-import": "off"
|
|
}
|
|
}
|
|
]
|
|
}; |