1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | const 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 |
|
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 |
|
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 |
|
65 |
|
66 | const jsdocSettings = {
|
67 | plugins: ["jsdoc"],
|
68 | rules: {
|
69 |
|
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 |
|
101 |
|
102 | module.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;
|