diff --git a/.editorconfig b/.editorconfig index 6ec5bf4d..db6d80c2 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,6 +6,6 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[{*.css,*.html,*.js,*.json,*.ts}] +[{*.cjs,*.css,*.html,*.js,*.json,*.ts}] indent_style = space indent_size = 2 diff --git a/package.json b/package.json index e7b77473..fc670c3c 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "lint-css": "stylelint \"app/**/*.css\"", "lint-html": "htmlhint \"app/**/*.html\"", "lint-js": "xo", - "prettier-non-js": "prettier --check --log-level=warn . \"!**/*.{js,ts}\"", + "prettier-non-js": "prettier --check --log-level=warn . \"!**/*.{cjs,js,ts}\"", "test": "tsc && npm run lint-html && npm run lint-css && npm run lint-js && npm run prettier-non-js", "test-e2e": "vite build && tape \"tests/**/*.js\"", "pack": "vite build && electron-builder --dir", @@ -196,142 +196,5 @@ "bracketSpacing": false, "singleQuote": false, "trailingComma": "all" - }, - "xo": { - "prettier": true, - "rules": { - "@typescript-eslint/no-dynamic-delete": "off", - "arrow-body-style": "error", - "import/no-restricted-paths": [ - "error", - { - "zones": [ - { - "target": "./app/common", - "from": "./app", - "except": [ - "./common" - ] - }, - { - "target": "./app/main", - "from": "./app", - "except": [ - "./common", - "./main" - ] - }, - { - "target": "./app/renderer", - "from": "./app", - "except": [ - "./common", - "./renderer", - "./resources" - ] - } - ] - } - ], - "import/order": [ - "error", - { - "alphabetize": { - "order": "asc" - }, - "newlines-between": "always" - } - ], - "import/unambiguous": "error", - "no-restricted-imports": [ - "error", - { - "paths": [ - { - "name": "@sentry/electron", - "message": "Use @sentry/electron/main, @sentry/electron/renderer, or @sentry/core." - }, - { - "name": "electron", - "message": "Use electron/main, electron/renderer, or electron/common." - }, - { - "name": "electron/main", - "importNames": [ - "ipcMain" - ], - "message": "Use typed-ipc-main." - }, - { - "name": "electron/renderer", - "importNames": [ - "ipcRenderer" - ], - "message": "Use typed-ipc-renderer." - }, - { - "name": "electron-log", - "message": "Use electron-log/main or electron-log/renderer." - } - ] - } - ], - "no-warning-comments": "off", - "sort-imports": [ - "error", - { - "ignoreDeclarationSort": true - } - ], - "strict": "error", - "unicorn/prefer-module": "off", - "unicorn/prefer-top-level-await": "off" - }, - "envs": [ - "node", - "browser" - ], - "overrides": [ - { - "files": [ - "**/*.ts" - ], - "rules": { - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/consistent-type-imports": [ - "error", - { - "disallowTypeAnnotations": false - } - ], - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "caughtErrors": "all" - } - ], - "unicorn/no-await-expression-member": "off" - } - }, - { - "files": [ - "i18next-scanner.config.js", - "scripts/win-sign.js", - "tests/**/*.js" - ], - "parserOptions": { - "sourceType": "script" - } - }, - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "import/unambiguous": "off" - } - } - ] } } diff --git a/xo.config.cjs b/xo.config.cjs new file mode 100644 index 00000000..55525400 --- /dev/null +++ b/xo.config.cjs @@ -0,0 +1,107 @@ +"use strict"; + +module.exports = { + prettier: true, + rules: { + "@typescript-eslint/no-dynamic-delete": "off", + "arrow-body-style": "error", + "import/no-restricted-paths": [ + "error", + { + zones: [ + { + target: "./app/common", + from: "./app", + except: ["./common"], + }, + { + target: "./app/main", + from: "./app", + except: ["./common", "./main"], + }, + { + target: "./app/renderer", + from: "./app", + except: ["./common", "./renderer", "./resources"], + }, + ], + }, + ], + "import/order": [ + "error", + {alphabetize: {order: "asc"}, "newlines-between": "always"}, + ], + "import/unambiguous": "error", + "no-restricted-imports": [ + "error", + { + paths: [ + { + name: "@sentry/electron", + message: + "Use @sentry/electron/main, @sentry/electron/renderer, or @sentry/core.", + }, + { + name: "electron", + message: + "Use electron/main, electron/renderer, or electron/common.", + }, + { + name: "electron/main", + importNames: ["ipcMain"], + message: "Use typed-ipc-main.", + }, + { + name: "electron/renderer", + importNames: ["ipcRenderer"], + message: "Use typed-ipc-renderer.", + }, + { + name: "electron-log", + message: "Use electron-log/main or electron-log/renderer.", + }, + ], + }, + ], + "no-warning-comments": "off", + "sort-imports": ["error", {ignoreDeclarationSort: true}], + strict: "error", + "unicorn/prefer-module": "off", + "unicorn/prefer-top-level-await": "off", + }, + envs: ["node", "browser"], + overrides: [ + { + files: ["**/*.ts"], + rules: { + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/consistent-type-imports": [ + "error", + {disallowTypeAnnotations: false}, + ], + "@typescript-eslint/no-unused-vars": [ + "error", + {argsIgnorePattern: "^_", caughtErrors: "all"}, + ], + "unicorn/no-await-expression-member": "off", + }, + }, + { + files: [ + "**.cjs", + "i18next-scanner.config.js", + "scripts/win-sign.js", + "tests/**/*.js", + ], + parserOptions: { + sourceType: "script", + }, + }, + { + files: ["**/*.d.ts"], + rules: { + "import/unambiguous": "off", + }, + }, + ], +};