@cleeviox/biome 0.0.0-next-20260120205819

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.
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ <div align="center">
2
+
3
+ <a href="https://github.com/cleevio/cleeviox-toolkit">
4
+ <img alt="CleevioX Logo" src="../../public/logo.svg" width="308" style="background-color: #151a1d; padding: 15px" />
5
+
6
+ # BIOME
7
+
8
+ ### Biome configurations for cleeviox projects
9
+
10
+ </a>
11
+ </div>
12
+
13
+ ## 👷 Installation
14
+
15
+ ```bash
16
+ bun add --dev @cleeviox/biome @biomejs/biome
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ Extend the appropriate configuration in your `biome.json` file by referencing the package through `node_modules`:
22
+
23
+ ### Base
24
+
25
+ Suitable for general TypeScript projects.
26
+
27
+ ```json
28
+ {
29
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
30
+ "extends": ["./node_modules/@cleeviox/biome/base.json"]
31
+ }
32
+ ```
33
+
34
+ ### React
35
+
36
+ For React (JSX) projects.
37
+
38
+ ```json
39
+ {
40
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
41
+ "extends": ["./node_modules/@cleeviox/biome/react.json"]
42
+ }
43
+ ```
44
+
45
+ ### Next.js
46
+
47
+ For Next.js projects (extends React configuration).
48
+
49
+ ```json
50
+ {
51
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
52
+ "extends": ["./node_modules/@cleeviox/biome/nextjs.json"]
53
+ }
54
+ ```
55
+
56
+ ### NestJS
57
+
58
+ For NestJS projects.
59
+
60
+ ```json
61
+ {
62
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
63
+ "extends": ["./node_modules/@cleeviox/biome/nestjs.json"]
64
+ }
65
+ ```
66
+
67
+ ## Running Biome
68
+
69
+ After setting up your configuration, you can run Biome commands:
70
+
71
+ ```bash
72
+ # Check code
73
+ bun biome check .
74
+
75
+ # Format code
76
+ bun biome format --write .
77
+
78
+ # Lint code
79
+ bun biome lint .
80
+
81
+ # Fix issues
82
+ bun biome check --write .
83
+ ```
84
+
85
+ ## Setup With IDE
86
+
87
+ First install the official VSCode extension.
88
+
89
+ Add the following settings to your `settings.json` file:
90
+
91
+ ```json
92
+ {
93
+ "editor.codeActionsOnSave": {
94
+ "source.action.useSortedKeys.biome": "explicit",
95
+ "source.fixAll.biome": "explicit"
96
+ },
97
+ "editor.defaultFormatter": "biomejs.biome",
98
+ "[github-actions-workflow]": {
99
+ "editor.defaultFormatter": "redhat.vscode-yaml"
100
+ },
101
+ "[json]": {
102
+ "editor.defaultFormatter": "biomejs.biome"
103
+ },
104
+ "[javascript]": {
105
+ "editor.defaultFormatter": "biomejs.biome"
106
+ },
107
+ "[typescriptreact]": {
108
+ "editor.defaultFormatter": "biomejs.biome"
109
+ },
110
+ "[jsonc]": {
111
+ "editor.defaultFormatter": "biomejs.biome"
112
+ }
113
+ }
114
+ ```
115
+
116
+ See the link below for a more detailed explanation.
117
+
118
+ [Further Reading](https://biomejs.dev/guides/editors/first-party-extensions/)
119
+
120
+ ## Notes
121
+
122
+ - Biome combines formatting and linting in a single tool
123
+ - These configurations aim to match the existing ESLint and Prettier rules used in Cleevio projects
124
+ - Some ESLint rules may not have direct Biome equivalents - the configurations include the closest matches available
package/base.jsonc ADDED
@@ -0,0 +1,343 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
3
+ "assist": {
4
+ "actions": {
5
+ "source": {
6
+ "organizeImports": "on",
7
+ // "recommended": true,
8
+ "useSortedAttributes": "on",
9
+ "useSortedKeys": "on",
10
+ "useSortedProperties": "on"
11
+ }
12
+ }
13
+ },
14
+ // "files": {
15
+ // "includes": ["!**/dist/**", "*.ts", "*.js"]
16
+ // },
17
+ "formatter": {
18
+ "indentStyle": "space",
19
+ "indentWidth": 2,
20
+ "useEditorconfig": false
21
+ },
22
+ "javascript": {
23
+ "formatter": {
24
+ "arrowParentheses": "always",
25
+ "bracketSpacing": true,
26
+ "indentStyle": "space",
27
+ "indentWidth": 2,
28
+ "lineWidth": 120,
29
+ "quoteStyle": "single",
30
+ "semicolons": "always",
31
+ "trailingCommas": "all"
32
+ }
33
+ },
34
+ "json": {
35
+ "formatter": {
36
+ "indentStyle": "space",
37
+ "indentWidth": 2
38
+ }
39
+ },
40
+ "linter": {
41
+ "rules": {
42
+ "complexity": {
43
+ "noAdjacentSpacesInRegex": "error",
44
+ "noArguments": "error",
45
+ "noBannedTypes": "error",
46
+ "noCommaOperator": "error",
47
+ "noEmptyTypeParameters": "error",
48
+ "noExcessiveCognitiveComplexity": {
49
+ "level": "warn",
50
+ "options": {
51
+ "maxAllowedComplexity": 15
52
+ }
53
+ },
54
+ "noExcessiveLinesPerFunction": {
55
+ "level": "warn",
56
+ "options": {
57
+ "maxLines": 100,
58
+ "skipBlankLines": true
59
+ }
60
+ },
61
+ "noExcessiveNestedTestSuites": "warn",
62
+ "noExtraBooleanCast": "error",
63
+ "noFlatMapIdentity": "error",
64
+ "noForEach": "error",
65
+ "noImplicitCoercions": "error",
66
+ "noUselessCatch": "error",
67
+ "noUselessConstructor": "error",
68
+ "noUselessContinue": "error",
69
+ "noUselessEmptyExport": "error",
70
+ "noUselessEscapeInRegex": "error",
71
+ "noUselessLabel": "error",
72
+ "noUselessLoneBlockStatements": "error",
73
+ "noUselessRename": "error",
74
+ "noUselessStringConcat": "error",
75
+ "noUselessStringRaw": "error",
76
+ "noUselessSwitchCase": "error",
77
+ "noUselessTernary": "error",
78
+ "noUselessThisAlias": "error",
79
+ "noUselessTypeConstraint": "error",
80
+ "noUselessUndefinedInitialization": "error",
81
+ "noVoid": "warn",
82
+ // Arrow functions yes, but not for /app/**/*.tsx
83
+ "useArrowFunction": "warn",
84
+ "useDateNow": "error",
85
+ "useFlatMap": "on",
86
+ "useIndexOf": "on",
87
+ "useLiteralKeys": "error",
88
+ "useNumericLiterals": "error",
89
+ "useOptionalChain": "error",
90
+ "useRegexLiterals": "warn",
91
+ "useSimpleNumberKeys": "error",
92
+ "useSimplifiedLogicExpression": "error",
93
+ "useWhile": "error"
94
+ },
95
+ "correctness": {
96
+ "noConstAssign": "error",
97
+ "noConstantCondition": "error",
98
+ "noConstantMathMinMaxClamp": "error",
99
+ "noConstructorReturn": "error",
100
+ "noEmptyCharacterClassInRegex": "warn",
101
+ "noEmptyPattern": "error",
102
+ "noGlobalDirnameFilename": "warn",
103
+ "noGlobalObjectCalls": "warn",
104
+ "noInnerDeclarations": "error",
105
+ "noInvalidBuiltinInstantiation": "error",
106
+ "noInvalidConstructorSuper": "error",
107
+ "noInvalidUseBeforeDeclaration": "error",
108
+ "noNodejsModules": "warn",
109
+ "noNonoctalDecimalEscape": "warn",
110
+ "noPrecisionLoss": "error",
111
+ "noPrivateImports": "warn",
112
+ "noProcessGlobal": "error",
113
+ "noSelfAssign": "error",
114
+ "noSetterReturn": "error",
115
+ "noSolidDestructuredProps": "error",
116
+ "noStringCaseMismatch": "error",
117
+ "noSwitchDeclarations": "error",
118
+ "noUndeclaredDependencies": "error",
119
+ "noUndeclaredVariables": "error",
120
+ "noUnknownFunction": "error",
121
+ "noUnreachable": "error",
122
+ "noUnreachableSuper": "error",
123
+ "noUnsafeFinally": "error",
124
+ "noUnsafeOptionalChaining": "error",
125
+ "noUnusedImports": "error",
126
+ "noUnusedPrivateClassMembers": "error",
127
+ "noUnusedVariables": "error",
128
+ "noVoidTypeReturn": "warn",
129
+ "useImportExtensions": {
130
+ "fix": "safe",
131
+ "level": "error",
132
+ "options": {
133
+ "forceJsExtensions": true
134
+ }
135
+ },
136
+ "useIsNan": "error",
137
+ "useJsonImportAttributes": "warn",
138
+ "useParseIntRadix": "warn",
139
+ "useSingleJsDocAsterisk": "warn",
140
+ "useValidForDirection": "warn",
141
+ "useValidTypeof": "error",
142
+ "useYield": "error"
143
+ },
144
+ // Nursery Rules have performance issues according to official biomejs docs.
145
+ // https://biomejs.dev/linter/#nursery
146
+ // "nursery": "off",
147
+ "performance": {
148
+ "noAccumulatingSpread": "error",
149
+ "noAwaitInLoops": "error",
150
+ "noBarrelFile": "warn",
151
+ "noDelete": "error",
152
+ "noDynamicNamespaceImportAccess": "warn",
153
+ "noNamespaceImport": "error",
154
+ "noReExportAll": "warn",
155
+ "noUnwantedPolyfillio": "warn",
156
+ "useTopLevelRegex": "error"
157
+ },
158
+ "security": {
159
+ "noGlobalEval": "error",
160
+ "noSecrets": "error"
161
+ },
162
+ "style": {
163
+ "noCommonJs": "error",
164
+ "noDefaultExport": "error",
165
+ "noDescendingSpecificity": "error",
166
+ "noDoneCallback": "error",
167
+ "noEnum": "error",
168
+ "noExportedImports": "warn",
169
+ "noInferrableTypes": "warn",
170
+ "noMagicNumbers": "error",
171
+ "noNamespace": "warn",
172
+ "noNegationElse": "error",
173
+ "noNestedTernary": "error",
174
+ "noNonNullAssertion": "error",
175
+ "noParameterAssign": "error",
176
+ "noParameterProperties": "error",
177
+ "noProcessEnv": "error",
178
+ "noRestrictedGlobals": {
179
+ "level": "warn",
180
+ "options": {
181
+ "deniedGlobals": {
182
+ "$": "An example - Obviously jQuery is disgusting."
183
+ }
184
+ }
185
+ },
186
+ // "noRestrictedImports": {
187
+ // "level": "error",
188
+ // Something like react-18n-next
189
+ // }
190
+ "noShoutyConstants": "error",
191
+ "noSubstr": "warn",
192
+ "noUnusedTemplateLiteral": "error",
193
+ "noUselessElse": "error",
194
+ "noYodaExpression": "error",
195
+ "useArrayLiterals": "error",
196
+ "useAsConstAssertion": "error",
197
+ "useAtIndex": "error",
198
+ "useBlockStatements": "error",
199
+ "useCollapsedElseIf": "error",
200
+ "useCollapsedIf": "error",
201
+ "useComponentExportOnlyModules": "error",
202
+ "useConsistentArrayType": "error",
203
+ "useConsistentBuiltinInstantiation": "error",
204
+ "useConsistentMemberAccessibility": {
205
+ "level": "error",
206
+ "options": {
207
+ "accessibility": "noPublic"
208
+ }
209
+ },
210
+ "useConsistentObjectDefinitions": "error",
211
+ "useConsistentTypeDefinitions": {
212
+ "fix": "safe",
213
+ "level": "error",
214
+ "options": {
215
+ "style": "interface"
216
+ }
217
+ },
218
+ "useConst": "error",
219
+ "useDefaultParameterLast": "error",
220
+ "useDefaultSwitchClause": "error",
221
+ "useDeprecatedReason": "error",
222
+ // "useEnumInitializers": "error", -> not using enums
223
+ "useExplicitLengthCheck": "error",
224
+ "useExponentiationOperator": "error",
225
+ "useExportsLast": "error",
226
+ "useExportType": "error",
227
+ "useFilenamingConvention": {
228
+ "level": "error",
229
+ "options": {
230
+ "filenameCases": ["kebab-case"],
231
+ "strictCase": true
232
+ }
233
+ },
234
+ "useForOf": "error",
235
+ "useImportType": "error",
236
+ // "useLiteralEnumMembers": "error", -> not using enums
237
+ "useNamingConvention": "error",
238
+ "useNodeAssertStrict": "error",
239
+ // This can be tuned a little more
240
+ // "useNamingConvention": {
241
+ // "level": "error",
242
+ // }
243
+ // },
244
+ "useNumberNamespace": "error",
245
+ "useNumericSeparators": "error",
246
+ "useObjectSpread": "error",
247
+ "useShorthandAssign": "error",
248
+ "useShorthandFunctionType": "error",
249
+ "useSingleVarDeclarator": "error",
250
+ "useSymbolDescription": "error",
251
+ "useTemplate": "error",
252
+ "useThrowNewError": "error",
253
+ "useThrowOnlyError": "error",
254
+ "useTrimStartEnd": "error",
255
+ "useUnifiedTypeSignatures": "error"
256
+ },
257
+ "suspicious": {
258
+ "noApproximativeNumericConstant": "error",
259
+ "noAssignInExpressions": "error",
260
+ "noAsyncPromiseExecutor": "error",
261
+ "noBiomeFirstException": "warn",
262
+ "noBitwiseOperators": "warn",
263
+ "noCatchAssign": "error",
264
+ "noClassAssign": "error",
265
+ "noCommentText": "error",
266
+ "noCompareNegZero": "error",
267
+ "noConfusingLabels": "error",
268
+ "noConfusingVoidType": "error",
269
+ "noConsole": "error",
270
+ "noConstantBinaryExpressions": "error",
271
+ "noConstEnum": "error",
272
+ "noControlCharactersInRegex": "warn",
273
+ "noDebugger": "error",
274
+ "noDoubleEquals": "error",
275
+ "noDuplicateCase": "error",
276
+ "noDuplicateClassMembers": "error",
277
+ "noDuplicateCustomProperties": "error",
278
+ "noDuplicateElseIf": "error",
279
+ "noDuplicateObjectKeys": "error",
280
+ "noDuplicateParameters": "error",
281
+ "noDuplicateProperties": "error",
282
+ "noEmptyBlockStatements": "error",
283
+ "noEmptyInterface": "error",
284
+ "noEvolvingTypes": "error",
285
+ "noExplicitAny": "error",
286
+ "noExportsInTest": "error",
287
+ "noExtraNonNullAssertion": "error",
288
+ "noFallthroughSwitchClause": "error",
289
+ "noFocusedTests": "error",
290
+ "noFunctionAssign": "error",
291
+ "noGlobalAssign": "error",
292
+ "noGlobalIsFinite": "error",
293
+ "noGlobalIsNan": "error",
294
+ "noImplicitAnyLet": "error",
295
+ "noImportAssign": "warn",
296
+ "noIrregularWhitespace": "error",
297
+ "noLabelVar": "error",
298
+ "noMisleadingCharacterClass": "error",
299
+ "noMisleadingInstantiator": "error",
300
+ "noMisplacedAssertion": "error",
301
+ "noMisrefactoredShorthandAssign": "error",
302
+ "noNonNullAssertedOptionalChain": "error",
303
+ "noOctalEscape": "error",
304
+ "noPrototypeBuiltins": "warn",
305
+ "noQuickfixBiome": "warn",
306
+ "noRedeclare": "error",
307
+ "noRedundantUseStrict": "error",
308
+ // Who uses strict directive anymore?
309
+ // "noRedundantUseStrict": "error"
310
+ "noSelfCompare": "error",
311
+ "noShadowRestrictedNames": "error",
312
+ "noShorthandPropertyOverrides": "error",
313
+ "noSkippedTests": "error",
314
+ "noSparseArray": "error",
315
+ "noSuspiciousSemicolonInJsx": "error",
316
+ "noTemplateCurlyInString": "error",
317
+ "noThenProperty": "error",
318
+ "noTsIgnore": "error",
319
+ "noUnassignedVariables": "error",
320
+ "noUnsafeDeclarationMerging": "warn",
321
+ "noUnsafeNegation": "error",
322
+ "noUselessEscapeInString": "error",
323
+ "noUselessRegexBackrefs": "error",
324
+ "noVar": "error",
325
+ "noWith": "error",
326
+ "useAdjacentOverloadSignatures": "error",
327
+ "useAwait": "error",
328
+ "useBiomeIgnoreFolder": "warn",
329
+ "useDefaultSwitchClauseLast": "error",
330
+ "useErrorMessage": "warn",
331
+ "useGetterReturn": "error",
332
+ "useGuardForIn": "error",
333
+ "useIsArray": "error",
334
+ "useIterableCallbackReturn": "error",
335
+ "useNamespaceKeyword": "error",
336
+ "useNumberToFixedDigitsArgument": "error",
337
+ // "useStaticResponseMethods": "error"
338
+ "useStrictMode": "error"
339
+ }
340
+ }
341
+ },
342
+ "root": false
343
+ }
package/biome.jsonc ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
3
+ "extends": ["./base.jsonc"],
4
+ "overrides": [
5
+ {
6
+ "includes": ["**/lint-staged.config.js"],
7
+ "linter": {
8
+ "rules": {
9
+ "correctness": {
10
+ "noUndeclaredDependencies": "off"
11
+ },
12
+ "performance": {
13
+ "noBarrelFile": "off"
14
+ },
15
+ "style": {
16
+ "noDefaultExport": "off"
17
+ }
18
+ }
19
+ }
20
+ }
21
+ ],
22
+ "root": false
23
+ }
package/nestjs.jsonc ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
3
+ "extends": ["./base.jsonc"],
4
+ "linter": {
5
+ "rules": {
6
+ "complexity": {
7
+ "noStaticOnlyClass": "warn",
8
+ "noThisInStatic": "warn"
9
+ },
10
+ "style": {
11
+ "useGroupedAccessorPairs": "error",
12
+ "useReadonlyClassProperties": "error"
13
+ }
14
+ }
15
+ },
16
+ "root": false
17
+ }
package/nextjs.jsonc ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
3
+ "extends": ["./react.jsonc"],
4
+ "linter": {
5
+ "rules": {
6
+ "performance": {
7
+ "noImgElement": "error",
8
+ "useGoogleFontPreconnect": "warn"
9
+ },
10
+ "suspicious": {
11
+ "noDocumentImportInPage": "error",
12
+ "noHeadImportInDocument": "error"
13
+ }
14
+ }
15
+ },
16
+ "root": false
17
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "description": "Biome configurations",
3
+ "devDependencies": {
4
+ "@biomejs/biome": "^2.3.11"
5
+ },
6
+ "exports": {
7
+ "./base.json": "./base.jsonc",
8
+ "./nestjs.json": "./nestjs.jsonc",
9
+ "./nextjs.json": "./nextjs.jsonc",
10
+ "./react.json": "./react.jsonc"
11
+ },
12
+ "files": [
13
+ "*.jsonc",
14
+ "!package.json"
15
+ ],
16
+ "name": "@cleeviox/biome",
17
+ "peerDependencies": {
18
+ "@biomejs/biome": "^2.3.11"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "repository": {
24
+ "directory": "packages/biome",
25
+ "type": "git",
26
+ "url": "https://github.com/cleevio/cleeviox-toolkit"
27
+ },
28
+ "scripts": {
29
+ "check": "biome check --write .",
30
+ "clean": "del .turbo node_modules",
31
+ "fix": "biome:check:fix",
32
+ "format": "biome format .",
33
+ "format:fix": "biome format --write .",
34
+ "lint": "biome lint .",
35
+ "lint:fix": "biome lint --write ."
36
+ },
37
+ "sideEffects": false,
38
+ "type": "module",
39
+ "version": "0.0.0-next-20260120205819"
40
+ }
package/reactjs.jsonc ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
3
+ "css": {
4
+ "parser": {
5
+ "tailwindDirectives": true
6
+ }
7
+ },
8
+ "extends": ["./base.jsonc"],
9
+ "linter": {
10
+ "rules": {
11
+ "a11y": "on",
12
+ "complexity": {
13
+ "noImportantStyles": "error",
14
+ "noUselessFragments": "error"
15
+ },
16
+ "correctness": {
17
+ "noChildrenProp": "error",
18
+ "noInvalidDirectionInLinearGradient": "error",
19
+ "noInvalidGridAreas": "error",
20
+ "noInvalidPositionAtImportRule": "error",
21
+ "noMissingVarFunction": "error",
22
+ "noNestedComponentDefinitions": "error",
23
+ "noQwikUseVisibleTask": "error",
24
+ "noReactPropAssignments": "error",
25
+ "noRenderReturnValue": "error",
26
+ "noUnknownMediaFeatureName": "error",
27
+ "noUnknownProperty": "error",
28
+ "noUnknownPseudoClass": "error",
29
+ "noUnknownPseudoElement": "error",
30
+ "noUnknownTypeSelector": "error",
31
+ "noUnknownUnit": "error",
32
+ "noUnmatchableAnbSelector": "error",
33
+ "noVoidElementsWithChildren": "error",
34
+ "useExhaustiveDependencies": "error",
35
+ "useHookAtTopLevel": "error",
36
+ "useImageSize": "error",
37
+
38
+ "useJsxKeyInIterable": "error",
39
+ "useQwikClasslist": "error",
40
+ "useUniqueElementIds": "error"
41
+ },
42
+ "security": {
43
+ "noBlankTarget": "error",
44
+ "noDangerouslySetInnerHtml": "error",
45
+ "noDangerouslySetInnerHtmlWithChildren": "error"
46
+ },
47
+ "style": {
48
+ "noDescendingSpecificity": "error",
49
+ "noHeadElement": "error",
50
+ "noImplicitBoolean": "error",
51
+ "noValueAtRule": "error",
52
+ "useConsistentCurlyBraces": "error",
53
+ "useFragmentSyntax": "error",
54
+ "useReactFunctionComponents": "error",
55
+ "useSelfClosingElements": "error"
56
+ },
57
+ "suspicious": {
58
+ "noAlert": "error",
59
+ "noArrayIndexKey": "warn",
60
+ "noCommentText": "error",
61
+ "noDocumentCookie": "error",
62
+ "noDuplicateAtImportRules": "error",
63
+ "noDuplicateFontNames": "error",
64
+ "noDuplicateJsxProps": "error",
65
+ "noDuplicateSelectorsKeyframeBlock": "error",
66
+ "noDuplicateTestHooks": "error",
67
+ "noEmptyBlock": "error",
68
+ "noImportantInKeyframe": "error",
69
+ "noReactSpecificProps": "error",
70
+ "noUnknownAtRules": "error",
71
+ "useGoogleFontDisplay": "error"
72
+ }
73
+ }
74
+ },
75
+ "root": false
76
+ }