UNPKG

2.88 kBJavaScriptView Raw
1/* eslint-disable import/no-commonjs */
2
3/**
4 * @type {Record<string, any>} Eslint settings
5 */
6const settings = {
7 root: true,
8 globals: {},
9 extends: [
10 "eslint:recommended",
11 "plugin:import/errors",
12 "plugin:import/warnings",
13 "prettier",
14 ],
15 parser: "@babel/eslint-parser",
16 parserOptions: {
17 requireConfigFile: false,
18 babelOptions: {
19 plugins: ["@babel/plugin-syntax-class-properties"],
20 },
21 },
22 rules: {
23 // ESLint base
24 "no-process-exit": "off",
25 "no-console": ["error", { allow: ["dir", "time", "timeEnd"] }],
26 "no-promise-executor-return": "error",
27 "no-unsafe-optional-chaining": [
28 "error",
29 { disallowArithmeticOperators: true },
30 ],
31 "default-case-last": "error",
32 "no-else-return": "error",
33 "no-return-assign": "error",
34 "no-sequences": "error",
35 "no-throw-literal": "error",
36 "prefer-promise-reject-errors": "error",
37 "no-var": "error",
38 "prefer-const": "error",
39 "prefer-template": "error",
40 "require-await": "error",
41
42 // ESLint plugin import
43 "import/export": "off",
44 "import/first": "error",
45 "import/named": "off",
46 "import/namespace": "off",
47 "import/newline-after-import": ["error", { count: 1 }],
48 "import/no-commonjs": "error",
49 "import/no-default-export": "error",
50 "import/order": [
51 "error",
52 {
53 "newlines-between": "never",
54 alphabetize: { order: "asc", caseInsensitive: true },
55 },
56 ],
57 },
58 env: {
59 node: true,
60 es2021: true,
61 },
62};
63/**
64 * @type {Record<string, any>} Eslint settings
65 */
66const jsdocSettings = {
67 plugins: ["jsdoc"],
68 rules: {
69 // ESLint plugin jsdoc
70 "jsdoc/check-alignment": "error",
71 "jsdoc/check-examples": ["off", { padding: 2 }],
72 "jsdoc/check-param-names": "error",
73 "jsdoc/check-property-names": "error",
74 "jsdoc/check-syntax": "error",
75 "jsdoc/check-tag-names": ["error", { definedTags: [] }],
76 "jsdoc/check-types": ["error"],
77 "jsdoc/check-values": "error",
78 "jsdoc/empty-tags": "error",
79 "jsdoc/newline-after-description": ["error", "always"],
80 "jsdoc/require-param-name": "error",
81 "jsdoc/require-property": "error",
82 "jsdoc/require-property-type": "error",
83 "jsdoc/require-property-name": "error",
84 "jsdoc/require-returns-check": [
85 "off",
86 { reportMissingReturnForUndefinedTypes: true },
87 ],
88 "jsdoc/require-returns-description": "off",
89 "jsdoc/require-returns-type": "off",
90 "jsdoc/valid-types": "off",
91 },
92 settings: {
93 jsdoc: {
94 mode: "typescript",
95 },
96 },
97};
98
99/**
100 * @type {Record<string, any>} Eslint settings
101 */
102module.exports =
103 process.env.CI === "true" || process.env.LINT_JSDOC === "true"
104 ? {
105 ...settings,
106 ...jsdocSettings,
107 rules: {
108 ...settings.rules,
109 ...jsdocSettings.rules,
110 },
111 }
112 : settings;