@dvukovic/style-guide 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,6 @@
2
2
  module.exports = {
3
3
  plugins: ["@next/eslint-plugin-next"],
4
4
  rules: {
5
- "@next/next/no-typos": "error",
6
5
  "@next/next/google-font-display": "error",
7
6
  "@next/next/google-font-preconnect": "error",
8
7
  "@next/next/inline-script-id": "error",
@@ -23,6 +22,7 @@ module.exports = {
23
22
  "@next/next/no-sync-scripts": "error",
24
23
  "@next/next/no-title-in-document-head": "error",
25
24
  "@next/next/no-typos": "error",
25
+ "@next/next/no-typos": "error",
26
26
  "@next/next/no-unwanted-polyfillio": "error",
27
27
  },
28
28
  }
@@ -21,7 +21,6 @@ module.exports = {
21
21
  "promise/no-return-in-finally": "error",
22
22
  "promise/no-return-wrap": "error",
23
23
  "promise/param-names": "error",
24
- "promise/prefer-await-to-callbacks": "error",
25
24
  "promise/valid-params": "error",
26
25
  },
27
26
  }
@@ -30,20 +30,18 @@ module.exports = {
30
30
  "react/jsx-filename-extension": "error",
31
31
  "react/jsx-filename-extension": [
32
32
  "error",
33
- { extensions: [".tsx", ".jsx"], allow: "as-needed" },
33
+ { allow: "as-needed", extensions: [".tsx", ".jsx"] },
34
34
  ],
35
35
  "react/jsx-first-prop-new-line": ["error", "multiline"],
36
36
  "react/jsx-fragments": "error",
37
- "react/jsx-handler-names": "error",
38
37
  "react/jsx-key": "error",
39
38
  "react/jsx-newline": [
40
39
  "error",
41
40
  {
42
- prevent: true,
43
41
  allowMultilines: false,
42
+ prevent: true,
44
43
  },
45
44
  ],
46
- "react/jsx-no-bind": "error",
47
45
  "react/jsx-no-comment-textnodes": "error",
48
46
  "react/jsx-no-constructed-context-values": "error",
49
47
  "react/jsx-no-leaked-render": [
@@ -86,7 +84,7 @@ module.exports = {
86
84
  "react/no-render-return-value": "error",
87
85
  "react/no-this-in-sfc": "error",
88
86
  "react/no-unescaped-entities": "error",
89
- "react/no-unknown-property": "error",
87
+ "react/no-unknown-property": ["error", { ignore: ["global", "jsx"] }],
90
88
  "react/no-unsafe": "error",
91
89
  "react/no-unstable-nested-components": "error",
92
90
  "react/no-unused-class-component-methods": "error",
@@ -2,22 +2,20 @@
2
2
  module.exports = {
3
3
  plugins: ["sonarjs"],
4
4
  rules: {
5
- "sonarjs/no-element-overwrite": "error",
6
- "sonarjs/non-existent-operator": "error",
7
- "sonarjs/no-collapsible-if": "error",
8
- "sonarjs/no-identical-functions": "error",
9
- "sonarjs/no-useless-catch": "error",
10
- "sonarjs/no-nested-template-literals": "error",
11
5
  "sonarjs/no-all-duplicated-branches": "error",
6
+ "sonarjs/no-collapsible-if": "error",
12
7
  "sonarjs/no-collection-size-mischeck": "error",
13
8
  "sonarjs/no-duplicated-branches": "error",
9
+ "sonarjs/no-element-overwrite": "error",
14
10
  "sonarjs/no-empty-collection": "error",
15
11
  "sonarjs/no-gratuitous-expressions": "error",
16
12
  "sonarjs/no-identical-conditions": "error",
17
13
  "sonarjs/no-identical-expressions": "error",
14
+ "sonarjs/no-identical-functions": "error",
18
15
  "sonarjs/no-ignored-return": "error",
19
16
  "sonarjs/no-inverted-boolean-check": "error",
20
17
  "sonarjs/no-nested-switch": "error",
18
+ "sonarjs/no-nested-template-literals": "error",
21
19
  "sonarjs/no-one-iteration-loop": "error",
22
20
  "sonarjs/no-redundant-boolean": "error",
23
21
  "sonarjs/no-redundant-jump": "error",
@@ -25,6 +23,8 @@ module.exports = {
25
23
  "sonarjs/no-small-switch": "error",
26
24
  "sonarjs/no-unused-collection": "error",
27
25
  "sonarjs/no-use-of-empty-return-value": "error",
26
+ "sonarjs/no-useless-catch": "error",
27
+ "sonarjs/non-existent-operator": "error",
28
28
  "sonarjs/prefer-immediate-return": "error",
29
29
  "sonarjs/prefer-object-literal": "error",
30
30
  "sonarjs/prefer-single-boolean-return": "error",
@@ -0,0 +1,7 @@
1
+ /** @type {import("@types/eslint").ESLint.ConfigData} */
2
+ module.exports = {
3
+ plugins: ["sort-destructure-keys"],
4
+ rules: {
5
+ "sort-destructure-keys/sort-destructure-keys": "error",
6
+ },
7
+ }
@@ -1,6 +1,7 @@
1
1
  /** @type {import("@types/eslint").ESLint.ConfigData} */
2
2
  module.exports = {
3
+ plugins: ["sort-keys-fix"],
3
4
  rules: {
4
- "@typescript-eslint/explicit-module-boundary-types": "error",
5
+ "sort-keys-fix/sort-keys-fix": "error",
5
6
  },
6
7
  }
@@ -27,9 +27,7 @@ module.exports = {
27
27
  prefer: "type-imports",
28
28
  },
29
29
  ],
30
- "default-param-last": "off",
31
30
  "@typescript-eslint/default-param-last": "error",
32
- "dot-notation": "off",
33
31
  "@typescript-eslint/dot-notation": "error",
34
32
  "@typescript-eslint/explicit-member-accessibility": [
35
33
  "error",
@@ -44,10 +42,21 @@ module.exports = {
44
42
  },
45
43
  },
46
44
  ],
47
- "max-params": "off",
48
45
  "@typescript-eslint/max-params": ["error", { max: 2 }],
49
46
  "@typescript-eslint/method-signature-style": "error",
50
- "no-array-constructor": "off",
47
+ "@typescript-eslint/naming-convention": [
48
+ "error",
49
+ {
50
+ format: ["PascalCase"],
51
+ selector: "typeAlias",
52
+ suffix: ["Type", "Props"],
53
+ },
54
+ {
55
+ format: ["PascalCase"],
56
+ prefix: ["T"],
57
+ selector: "typeParameter",
58
+ },
59
+ ],
51
60
  "@typescript-eslint/no-array-constructor": "error",
52
61
  "@typescript-eslint/no-array-delete": "error",
53
62
  "@typescript-eslint/no-base-to-string": "error",
@@ -56,7 +65,6 @@ module.exports = {
56
65
  "@typescript-eslint/no-duplicate-enum-values": "error",
57
66
  "@typescript-eslint/no-duplicate-type-constituents": "error",
58
67
  "@typescript-eslint/no-dynamic-delete": "error",
59
- "no-empty-function": "off",
60
68
  "@typescript-eslint/no-empty-function": "error",
61
69
  "@typescript-eslint/no-empty-interface": "error",
62
70
  "@typescript-eslint/no-empty-object-type": "error",
@@ -65,14 +73,11 @@ module.exports = {
65
73
  "@typescript-eslint/no-extraneous-class": "error",
66
74
  "@typescript-eslint/no-floating-promises": "error",
67
75
  "@typescript-eslint/no-for-in-array": "error",
68
- "no-implied-eval": "off",
69
76
  "@typescript-eslint/no-implied-eval": "error",
70
77
  "@typescript-eslint/no-import-type-side-effects": "error",
71
78
  "@typescript-eslint/no-inferrable-types": "error",
72
79
  "@typescript-eslint/no-invalid-void-type": "error",
73
- "no-loop-func": "off",
74
80
  "@typescript-eslint/no-loop-func": "error",
75
- "no-loss-of-precision": "off",
76
81
  "@typescript-eslint/no-loss-of-precision": "error",
77
82
  "@typescript-eslint/no-meaningless-void-operator": [
78
83
  "error",
@@ -81,15 +86,13 @@ module.exports = {
81
86
  },
82
87
  ],
83
88
  "@typescript-eslint/no-misused-new": "error",
89
+ "@typescript-eslint/no-misused-promises": "error",
84
90
  "@typescript-eslint/no-mixed-enums": "error",
85
91
  "@typescript-eslint/no-namespace": "error",
86
92
  "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
87
93
  "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
88
94
  "@typescript-eslint/no-non-null-assertion": "error",
89
- "no-redeclare": "off",
90
- "@typescript-eslint/no-redeclare": "error",
91
95
  "@typescript-eslint/no-redundant-type-constituents": "error",
92
- "no-shadow": "off",
93
96
  "@typescript-eslint/no-shadow": "error",
94
97
  "@typescript-eslint/no-this-alias": "error",
95
98
  "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error",
@@ -110,13 +113,23 @@ module.exports = {
110
113
  "@typescript-eslint/no-unsafe-member-access": "error",
111
114
  "@typescript-eslint/no-unsafe-return": "error",
112
115
  "@typescript-eslint/no-unsafe-unary-minus": "error",
113
- "no-unused-expressions": "off",
114
116
  "@typescript-eslint/no-unused-expressions": "error",
115
- "no-useless-constructor": "off",
117
+ "@typescript-eslint/no-unused-vars": [
118
+ "error",
119
+ {
120
+ args: "all",
121
+ argsIgnorePattern: "^_",
122
+ caughtErrors: "all",
123
+ caughtErrorsIgnorePattern: "^_",
124
+ destructuredArrayIgnorePattern: "^_",
125
+ ignoreRestSiblings: true,
126
+ varsIgnorePattern: "^_",
127
+ },
128
+ ],
129
+ "@typescript-eslint/no-use-before-define": "error",
116
130
  "@typescript-eslint/no-useless-constructor": "error",
117
131
  "@typescript-eslint/no-useless-empty-export": "error",
118
132
  "@typescript-eslint/non-nullable-type-assertion-style": "error",
119
- "no-throw-literal": "off",
120
133
  "@typescript-eslint/only-throw-error": "error",
121
134
  "@typescript-eslint/prefer-as-const": "error",
122
135
  "@typescript-eslint/prefer-enum-initializers": "error",
@@ -126,9 +139,13 @@ module.exports = {
126
139
  "@typescript-eslint/prefer-includes": "error",
127
140
  "@typescript-eslint/prefer-literal-enum-member": "error",
128
141
  "@typescript-eslint/prefer-namespace-keyword": "error",
129
- "@typescript-eslint/prefer-nullish-coalescing": "error",
142
+ "@typescript-eslint/prefer-nullish-coalescing": [
143
+ "error",
144
+ {
145
+ ignoreConditionalTests: true,
146
+ },
147
+ ],
130
148
  "@typescript-eslint/prefer-optional-chain": "error",
131
- "prefer-promise-reject-errors": "off",
132
149
  "@typescript-eslint/prefer-promise-reject-errors": "error",
133
150
  "@typescript-eslint/prefer-readonly": "error",
134
151
  "@typescript-eslint/prefer-reduce-type-parameter": "error",
@@ -137,39 +154,20 @@ module.exports = {
137
154
  "@typescript-eslint/prefer-string-starts-ends-with": "error",
138
155
  "@typescript-eslint/promise-function-async": "error",
139
156
  "@typescript-eslint/require-array-sort-compare": "error",
140
- "require-await": "off",
141
157
  "@typescript-eslint/require-await": "error",
142
- "@typescript-eslint/unified-signatures": "error",
143
- "@typescript-eslint/no-misused-promises": "error",
144
- "@typescript-eslint/no-unused-vars": [
145
- "error",
146
- {
147
- args: "all",
148
- argsIgnorePattern: "^_",
149
- caughtErrors: "all",
150
- caughtErrorsIgnorePattern: "^_",
151
- destructuredArrayIgnorePattern: "^_",
152
- varsIgnorePattern: "^_",
153
- ignoreRestSiblings: true,
154
- },
155
- ],
156
- "no-use-before-define": "off",
157
- "@typescript-eslint/no-use-before-define": "error",
158
158
  "@typescript-eslint/restrict-plus-operands": "error",
159
159
  "@typescript-eslint/restrict-template-expressions": [
160
160
  "error",
161
161
  {
162
162
  allowAny: false,
163
163
  allowBoolean: false,
164
+ allowNever: false,
164
165
  allowNullish: false,
165
166
  allowNumber: false,
166
167
  allowRegExp: false,
167
- allowNever: false,
168
168
  },
169
169
  ],
170
- "no-return-await": "off",
171
170
  "@typescript-eslint/return-await": "error",
172
- "@typescript-eslint/strict-boolean-expressions": "error",
173
171
  "@typescript-eslint/switch-exhaustiveness-check": [
174
172
  "error",
175
173
  {
@@ -178,6 +176,23 @@ module.exports = {
178
176
  },
179
177
  ],
180
178
  "@typescript-eslint/triple-slash-reference": "error",
179
+ "@typescript-eslint/unified-signatures": "error",
181
180
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "error",
181
+ "default-param-last": "off",
182
+ "dot-notation": "off",
183
+ "max-params": "off",
184
+ "no-array-constructor": "off",
185
+ "no-empty-function": "off",
186
+ "no-implied-eval": "off",
187
+ "no-loop-func": "off",
188
+ "no-loss-of-precision": "off",
189
+ "no-return-await": "off",
190
+ "no-shadow": "off",
191
+ "no-throw-literal": "off",
192
+ "no-unused-expressions": "off",
193
+ "no-use-before-define": "off",
194
+ "no-useless-constructor": "off",
195
+ "prefer-promise-reject-errors": "off",
196
+ "require-await": "off",
182
197
  },
183
198
  }
@@ -0,0 +1,8 @@
1
+ /** @type {import("@types/eslint").ESLint.ConfigData} */
2
+ module.exports = {
3
+ plugins: ["typescript-sort-keys"],
4
+ rules: {
5
+ "typescript-sort-keys/interface": "error",
6
+ "typescript-sort-keys/string-enum": "error",
7
+ },
8
+ }
@@ -2,6 +2,7 @@
2
2
  module.exports = {
3
3
  plugins: ["unicorn"],
4
4
  rules: {
5
+ "no-nested-ternary": "off",
5
6
  "unicorn/better-regex": "error",
6
7
  "unicorn/catch-error-name": "error",
7
8
  "unicorn/consistent-destructuring": "error",
@@ -17,8 +18,8 @@ module.exports = {
17
18
  {
18
19
  cases: {
19
20
  camelCase: true,
20
- pascalCase: true,
21
21
  kebabCase: true,
22
+ pascalCase: true,
22
23
  },
23
24
  },
24
25
  ],
@@ -37,12 +38,12 @@ module.exports = {
37
38
  "unicorn/no-for-loop": "error",
38
39
  "unicorn/no-instanceof-array": "error",
39
40
  "unicorn/no-invalid-fetch-options": "error",
41
+
40
42
  "unicorn/no-invalid-remove-event-listener": "error",
41
43
  // "unicorn/no-length-as-slice-end": "error", NOTE: not released yet
42
44
  "unicorn/no-lonely-if": "error",
43
45
  "unicorn/no-magic-array-flat-depth": "error",
44
46
  "unicorn/no-negation-in-equality-check": "error",
45
- "no-nested-ternary": "off",
46
47
  "unicorn/no-nested-ternary": "error",
47
48
  "unicorn/no-new-array": "error",
48
49
  "unicorn/no-new-buffer": "error",
@@ -89,7 +90,6 @@ module.exports = {
89
90
  "unicorn/prefer-math-trunc": "error",
90
91
  "unicorn/prefer-modern-dom-apis": "error",
91
92
  "unicorn/prefer-modern-math-apis": "error",
92
- "unicorn/prefer-native-coercion-functions": "error",
93
93
  "unicorn/prefer-negative-index": "error",
94
94
  "unicorn/prefer-node-protocol": "error",
95
95
  "unicorn/prefer-number-properties": "error",
@@ -101,7 +101,6 @@ module.exports = {
101
101
  "unicorn/prefer-regexp-test": "error",
102
102
  "unicorn/prefer-set-has": "error",
103
103
  "unicorn/prefer-set-size": "error",
104
- "unicorn/prefer-spread": "error",
105
104
  "unicorn/prefer-string-raw": "error",
106
105
  "unicorn/prefer-string-replace-all": "error",
107
106
  "unicorn/prefer-string-slice": "error",
@@ -112,19 +111,6 @@ module.exports = {
112
111
  "unicorn/prefer-ternary": "error",
113
112
  "unicorn/prefer-top-level-await": "error",
114
113
  "unicorn/prefer-type-error": "error",
115
- "unicorn/relative-url-style": ["error", "always"],
116
- "unicorn/require-array-join-separator": "error",
117
- "unicorn/require-number-to-fixed-digits-argument": "error",
118
- "unicorn/require-post-message-target-origin": "error",
119
- "unicorn/switch-case-braces": ["error", "always"],
120
- "unicorn/template-indent": [
121
- "warn",
122
- {
123
- indent: 4,
124
- },
125
- ],
126
- "unicorn/text-encoding-identifier-case": "error",
127
- "unicorn/throw-new-error": "error",
128
114
  "unicorn/prevent-abbreviations": [
129
115
  "error",
130
116
  {
@@ -151,5 +137,18 @@ module.exports = {
151
137
  },
152
138
  },
153
139
  ],
140
+ "unicorn/relative-url-style": ["error", "always"],
141
+ "unicorn/require-array-join-separator": "error",
142
+ "unicorn/require-number-to-fixed-digits-argument": "error",
143
+ "unicorn/require-post-message-target-origin": "error",
144
+ "unicorn/switch-case-braces": ["error", "always"],
145
+ "unicorn/template-indent": [
146
+ "warn",
147
+ {
148
+ indent: 4,
149
+ },
150
+ ],
151
+ "unicorn/text-encoding-identifier-case": "error",
152
+ "unicorn/throw-new-error": "error",
154
153
  },
155
154
  }
@@ -0,0 +1,10 @@
1
+ const { packageJsonCore } = require("../plugins/package-json.js")
2
+
3
+ /** @type {import("npm-package-json-lint/dist/src/configuration").Config} */
4
+ const config = {
5
+ rules: {
6
+ ...packageJsonCore.rules,
7
+ },
8
+ }
9
+
10
+ module.exports = config
@@ -0,0 +1,85 @@
1
+ /** @type {import("npm-package-json-lint/dist/src/configuration").Config} */
2
+ const packageJsonCore = {
3
+ rules: {
4
+ "bin-type": "error",
5
+ "bundledDependencies-type": "error",
6
+ "config-type": "error",
7
+ "cpu-type": "error",
8
+ "dependencies-type": "error",
9
+ "description-format": [
10
+ "error",
11
+ {
12
+ "name-format": "error",
13
+ "no-duplicate-properties": "error",
14
+ requireCapitalFirstLetter: true,
15
+ requireEndingPeriod: false,
16
+
17
+ "version-format": "error",
18
+ },
19
+ ],
20
+ "description-type": "error",
21
+ "devDependencies-type": "error",
22
+ "directories-type": "error",
23
+ "engines-type": "error",
24
+ "files-type": "error",
25
+ "homepage-type": "error",
26
+ "keywords-type": "error",
27
+ "license-type": "error",
28
+ "main-type": "error",
29
+ "man-type": "error",
30
+ "name-type": "error",
31
+ "no-archive-dependencies": "error",
32
+ "no-archive-devDependencies": "error",
33
+ "no-caret-version-dependencies": "error",
34
+ "no-caret-version-devDependencies": "error",
35
+ "no-file-dependencies": "error",
36
+ "no-file-devDependencies": "error",
37
+ "no-git-dependencies": "error",
38
+ "no-git-devDependencies": "error",
39
+ "no-repeated-dependencies": "error",
40
+ "no-restricted-dependencies": [
41
+ "error",
42
+ [
43
+ "typeorm",
44
+ "ramda",
45
+ "lodash",
46
+ "@types/*",
47
+ "eslint",
48
+ "prettier",
49
+ "cspell",
50
+ "npm-package-json-lint",
51
+ "stylelint",
52
+ ],
53
+ ],
54
+ "no-tilde-version-dependencies": "error",
55
+ "no-tilde-version-devDependencies": "error",
56
+ "optionalDependencies-type": "error",
57
+ "os-type": "error",
58
+ "peerDependencies-type": "error",
59
+ "prefer-absolute-version-dependencies": "error",
60
+ "prefer-absolute-version-devDependencies": "error",
61
+ "prefer-alphabetical-dependencies": "error",
62
+ "preferGlobal-type": "error",
63
+ "private-type": "error",
64
+ "repository-type": "error",
65
+ "require-author": "error",
66
+ "require-description": "error",
67
+ "require-engines": "error",
68
+ "require-license": "error",
69
+ "require-name": "error",
70
+ "require-repository": "error",
71
+ "require-type": "error",
72
+ "require-version": "error",
73
+ "scripts-type": "error",
74
+ "type-type": "error",
75
+ "valid-values-engines": [
76
+ "error",
77
+ [{ node: ">18.0.0" }, { node: ">20.0.0" }, { node: ">22.0.0" }],
78
+ ],
79
+ "version-type": "error",
80
+ },
81
+ }
82
+
83
+ module.exports = {
84
+ packageJsonCore,
85
+ }
@@ -1,21 +1,21 @@
1
1
  /** @type {import("prettier").Config} */
2
2
  const prettierPlugin = {
3
+ arrowParens: "always",
4
+ bracketSameLine: false,
5
+ bracketSpacing: true,
6
+ embeddedLanguageFormatting: "auto",
7
+ endOfLine: "lf",
8
+ htmlWhitespaceSensitivity: "css",
9
+ jsxSingleQuote: false,
3
10
  printWidth: 80,
4
- tabWidth: 4,
5
- useTabs: false,
11
+ proseWrap: "always",
12
+ quoteProps: "as-needed",
6
13
  semi: false,
14
+ singleAttributePerLine: true,
7
15
  singleQuote: false,
8
- quoteProps: "as-needed",
9
- jsxSingleQuote: false,
16
+ tabWidth: 4,
10
17
  trailingComma: "all",
11
- bracketSpacing: true,
12
- bracketSameLine: false,
13
- arrowParens: "always",
14
- proseWrap: "always",
15
- htmlWhitespaceSensitivity: "css",
16
- endOfLine: "lf",
17
- singleAttributePerLine: true,
18
- embeddedLanguageFormatting: "auto",
18
+ useTabs: false,
19
19
  }
20
20
 
21
21
  module.exports = {
@@ -1,7 +1,7 @@
1
1
  /** @type {import("prettier-plugin-sql").SqlBaseOptions} */
2
2
  const prettierPluginSql = {
3
- language: "postgresql",
4
3
  keywordCase: "upper",
4
+ language: "postgresql",
5
5
  }
6
6
 
7
7
  module.exports = {
@@ -3,12 +3,12 @@ const { stylelintOrder } = require("../plugins/order")
3
3
 
4
4
  /** @type {import("stylelint").Config} */
5
5
  module.exports = {
6
+ allowEmptyInput: true,
6
7
  defaultSeverity: "error",
8
+ plugins: ["stylelint-order"],
7
9
  reportDescriptionlessDisables: true,
8
10
  reportInvalidScopeDisables: true,
9
11
  reportNeedlessDisables: true,
10
- allowEmptyInput: true,
11
- plugins: ["stylelint-order"],
12
12
  rules: {
13
13
  ...stylelint.rules,
14
14
  ...stylelintOrder.rules,