@aprx/biome-config 0.1.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ # MIT License
2
+
3
+ Copyright (c) 2025 Aperrix
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,136 @@
1
+ # @aprx/biome-config
2
+
3
+ ## Setup
4
+
5
+ - Install the package
6
+
7
+ ```bash
8
+ npm install --dev @aprx/biome-config @biomejs/biome
9
+ ```
10
+
11
+ - Choose which preset you need from the [list](#presets) below and add it to your `biome.json`
12
+
13
+ ```json
14
+ {
15
+ "extends": ["@aprx/biome-config/react", "@aprx/biome-config/testing"]
16
+ }
17
+ ```
18
+
19
+ ## Presets
20
+
21
+ ### Hierarchy
22
+
23
+ Presets are organized in layers. Each preset inherits all rules from its parent:
24
+
25
+ ```txt
26
+ base Universal JS/TS rules (formatter, linter, assist)
27
+ ├── dom + browser/DOM rules (a11y, security)
28
+ │ ├── react + React-specific rules
29
+ │ │ └── nextjs + Next.js-specific rules
30
+ │ └── vue + Vue-specific rules
31
+ └── lib + Node.js-specific rules
32
+
33
+ testing Composable with any preset above
34
+ ```
35
+
36
+ ### Reference
37
+
38
+ | Preset | Use case |
39
+ |----------------------------------|--------------------------------------------|
40
+ | ```@aprx/biome-config``` | Base rules only (e.g. universal library) |
41
+ | ```@aprx/biome-config/dom``` | Browser/DOM application without framework |
42
+ | ```@aprx/biome-config/lib``` | Node.js library or backend service |
43
+ | ```@aprx/biome-config/react``` | React application (includes `dom`) |
44
+ | ```@aprx/biome-config/nextjs``` | Next.js application (includes `react`) |
45
+ | ```@aprx/biome-config/vue``` | Vue application (includes `dom`) |
46
+ | ```@aprx/biome-config/testing``` | Test files (combine with any preset above) |
47
+
48
+ ### Examples
49
+
50
+ React application with tests:
51
+
52
+ ```json
53
+ {
54
+ "extends": ["@aprx/biome-config/react", "@aprx/biome-config/testing"]
55
+ }
56
+ ```
57
+
58
+ Node.js backend with tests:
59
+
60
+ ```json
61
+ {
62
+ "extends": ["@aprx/biome-config/lib", "@aprx/biome-config/testing"]
63
+ }
64
+ ```
65
+
66
+ Vanilla browser application:
67
+
68
+ ```json
69
+ {
70
+ "extends": ["@aprx/biome-config/dom"]
71
+ }
72
+ ```
73
+
74
+ ## Monorepo usage
75
+
76
+ In a monorepo, create a `biome.json` at the root and per-package configs that extend it using the `"//"` syntax:
77
+
78
+ ```txt
79
+ monorepo/
80
+ ├── biome.json Root config
81
+ ├── packages/
82
+ │ ├── ui/
83
+ │ │ └── biome.json Extends root + react preset
84
+ │ ├── api/
85
+ │ │ └── biome.json Extends root + lib preset
86
+ │ └── shared/
87
+ │ └── biome.json Extends root only
88
+ ```
89
+
90
+ Root `biome.json`:
91
+
92
+ ```json
93
+ {
94
+ "extends": ["@aprx/biome-config"]
95
+ }
96
+ ```
97
+
98
+ Package `packages/ui/biome.json`:
99
+
100
+ ```json
101
+ {
102
+ "extends": ["//", "@aprx/biome-config/react", "@aprx/biome-config/testing"]
103
+ }
104
+ ```
105
+
106
+ The `"//"` syntax tells Biome to inherit from the root configuration regardless of the package location. See the [Biome monorepo guide][biome-mono] for more details.
107
+
108
+ ## VS Code integration
109
+
110
+ Install the [Biome extension][biome-extension] (`biomejs.biome`), then add the following to your `.vscode/settings.json`:
111
+
112
+ ```json
113
+ {
114
+ "editor.defaultFormatter": "biomejs.biome",
115
+ "editor.formatOnSave": true,
116
+ "editor.codeActionsOnSave": {
117
+ "source.fixAll.biome": "explicit",
118
+ "source.organizeImports.biome": "explicit"
119
+ }
120
+ }
121
+ ```
122
+
123
+ This enables format on save, auto-fix of lint issues, and import sorting.
124
+
125
+ ## Resources
126
+
127
+ - <https://biomejs.dev/>
128
+ - <https://biomejs.dev/guides/big-projects/>
129
+ - <https://biomejs.dev/reference/vscode/>
130
+
131
+ ## License
132
+
133
+ MIT
134
+
135
+ [biome-mono]: https://biomejs.dev/guides/big-projects/
136
+ [biome-extension]: https://marketplace.visualstudio.com/items?itemName=biomejs.biome
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@aprx/biome-config",
3
+ "description": "An opinionated Biome configuration",
4
+ "version": "0.1.0",
5
+ "license": "MIT",
6
+ "author": "Aperrix",
7
+ "homepage": "https://github.com/aperrix/code-quality-tools/tree/main/packages/biome#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/aperrix/code-quality-tools.git",
11
+ "directory": "packages/biome"
12
+ },
13
+ "type": "module",
14
+ "exports": {
15
+ ".": "./src/base.jsonc",
16
+ "./dom": "./src/dom.jsonc",
17
+ "./lib": "./src/lib.jsonc",
18
+ "./react": "./src/react.jsonc",
19
+ "./nextjs": "./src/nextjs.jsonc",
20
+ "./vue": "./src/vue.jsonc",
21
+ "./testing": "./src/testing.jsonc"
22
+ },
23
+ "files": [
24
+ "src"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "peerDependencies": {
30
+ "@biomejs/biome": "^2.3.9"
31
+ }
32
+ }
package/src/base.jsonc ADDED
@@ -0,0 +1,429 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "root": true,
4
+ // "extends": [],
5
+ "files": {
6
+ // "includes": [],
7
+ "ignoreUnknown": true
8
+ // "maxSize": 1048576
9
+ },
10
+ "vcs": {
11
+ "enabled": true,
12
+ "clientKind": "git",
13
+ "useIgnoreFile": true,
14
+ // "root": "",
15
+ "defaultBranch": "main"
16
+ },
17
+ "linter": {
18
+ "enabled": true,
19
+ // "includes": [],
20
+ "rules": {
21
+ "complexity": {
22
+ "recommended": true,
23
+
24
+ // JS/TS
25
+ // "noAdjacentSpacesInRegex": "error",
26
+ // "noArguments": "error",
27
+ // "noBannedTypes": "error",
28
+ // "noCommaOperator": "error",
29
+ // "noEmptyTypeParameters": "error",
30
+ // "noExcessiveCognitiveComplexity": "error",
31
+ // "noExcessiveLinesPerFunction": "error",
32
+ // "noExtraBooleanCast": "error",
33
+ // "noFlatMapIdentity": "error",
34
+ // "noForEach": "error",
35
+ // "noImplicitCoercions": "error",
36
+ "noStaticOnlyClass": "error",
37
+ // "noThisInStatic": "error",
38
+ // "noUselessCatch": "error",
39
+ "noUselessConstructor": "error",
40
+ // "noUselessContinue": "error",
41
+ "noUselessEmptyExport": "error",
42
+ // "noUselessEscapeInRegex": "error",
43
+ // "noUselessLabel": "error",
44
+ // "noUselessLoneBlockStatements": "error",
45
+ // "noUselessRename": "error",
46
+ "noUselessStringConcat": "error",
47
+ // "noUselessStringRaw": "error",
48
+ // "noUselessSwitchCase": "error",
49
+ "noUselessTernary": "error",
50
+ // "noUselessThisAlias": "error",
51
+ // "noUselessTypeConstraint": "error",
52
+ // "noUselessUndefinedInitialization": "error",
53
+ // "noVoid": "error",
54
+ // "useArrowFunction": "error",
55
+ "useDateNow": "error",
56
+ "useFlatMap": "error"
57
+ // "useIndexOf": "error",
58
+ // "useLiteralKeys": "error",
59
+ // "useNumericLiterals": "error",
60
+ // "useOptionalChain": "error",
61
+ // "useRegexLiterals": "error",
62
+ // "useSimpleNumberKeys": "error",
63
+ // "useSimplifiedLogicExpression": "error",
64
+ // "useWhile": "error"
65
+ },
66
+ "correctness": {
67
+ "recommended": true,
68
+
69
+ // JS/TS
70
+ // "noConstAssign": "error",
71
+ // "noConstantCondition": "error",
72
+ // "noConstantMathMinMaxClamp": "error",
73
+ // "noConstructorReturn": "error",
74
+ // "noEmptyCharacterClassInRegex": "error",
75
+ // "noEmptyPattern": "error",
76
+ // "noGlobalObjectCalls": "error",
77
+ // "noInnerDeclarations": "error",
78
+ // "noInvalidBuiltinInstantiation": "error",
79
+ // "noInvalidConstructorSuper": "error",
80
+ // "noInvalidUseBeforeDeclaration": "error",
81
+ // "noNonoctalDecimalEscape": "error",
82
+ // "noPrecisionLoss": "error",
83
+ "noPrivateImports": "error",
84
+ // "noQwikUseVisibleTask": "error",
85
+ // "noRestrictedElements": "error",
86
+ // "noSelfAssign": "error",
87
+ // "noSetterReturn": "error",
88
+ // "noSolidDestructuredProps": "error",
89
+ // "noStringCaseMismatch": "error",
90
+ // "noSwitchDeclarations": "error",
91
+ "noUndeclaredDependencies": "error"
92
+ // "noUndeclaredVariables": "error",
93
+ // "noUnreachable": "error",
94
+ // "noUnreachableSuper": "error",
95
+ // "noUnsafeFinally": "error",
96
+ // "noUnsafeOptionalChaining": "error",
97
+ // "noUnusedFunctionParameters": "error",
98
+ // "noUnusedImports": "error",
99
+ // "noUnusedLabels": "error",
100
+ // "noUnusedPrivateClassMembers": "error",
101
+ // "noUnusedVariables": "error",
102
+ // "noVoidTypeReturn": "error",
103
+ // "useImportExtensions": "error",
104
+ // "useIsNan": "error",
105
+ // "useJsonImportAttributes": "error",
106
+ // "useParseIntRadix": "error",
107
+ // "useQwikClasslist": "error",
108
+ // "useSingleJsDocAsterisk": "error",
109
+ // "useValidForDirection": "error",
110
+ // "useValidTypeof": "error",
111
+ // "useYield": "error"
112
+ },
113
+ "nursery": {
114
+ "recommended": true,
115
+
116
+ // JS/TS
117
+ // "noContinue": "error",
118
+ // "noDeprecatedImports": "error",
119
+ // "noDivRegex": "error",
120
+ // "noDuplicateEnumValues": "error",
121
+ // "noEmptySource": "error",
122
+ // "noEqualsToNull": "error",
123
+ // "noExcessiveClassesPerFile": "error",
124
+ // "noExcessiveLinesPerFile": "error",
125
+ // "noFloatingClasses": "error",
126
+ // "noFloatingPromises": "error",
127
+ // "noForIn": "error",
128
+ "noImportCycles": "error",
129
+ // "noIncrementDecrement": "error",
130
+ // "noMisusedPromises": "error",
131
+ // "noMultiAssign": "error",
132
+ // "noMultiStr": "error",
133
+ // "noParametersOnlyUsedInRecursion": "error",
134
+ // "noProto": "error",
135
+ // "useQwikMethodUsage": "error",
136
+ // "useQwikValidLexicalScope": "error",
137
+ // "noReturnAssign": "error",
138
+ // "noShadow": "error",
139
+ // "noTernary": "error",
140
+ // "noUndeclaredEnvVars": "error",
141
+ // "noUnknownAttribute": "error",
142
+ // "noUnnecessaryConditions": "error",
143
+ "noUnresolvedImports": "error"
144
+ // "noUnusedExpressions": "error",
145
+ // "noUselessCatchBinding": "error",
146
+ // "noUselessUndefined": "error",
147
+ // "useArraySortCompare": "error",
148
+ // "useAwaitThenable": "error",
149
+ // "useConsistentArrowReturn": "error",
150
+ // "useConsistentEnumValueType": "error",
151
+ // "useDestructuring": "error",
152
+ // "useErrorCause": "error",
153
+ // "useExhaustiveSwitchCases": "error",
154
+ // "useExplicitType": "error",
155
+ // "useFind": "error",
156
+ // "useMaxParams": "error",
157
+ // "useRegexpExec": "error",
158
+ // "useSortedClasses": "error",
159
+ // "useSpread": "error",
160
+
161
+ // JSON
162
+ // "noDuplicateDependencies": "error",
163
+ // "useRequiredScripts": "error"
164
+ },
165
+ "performance": {
166
+ "recommended": true,
167
+
168
+ // JS/TS
169
+ "noAccumulatingSpread": "error",
170
+ "noAwaitInLoops": "error",
171
+ "noBarrelFile": "error",
172
+ "noDelete": "error",
173
+ "noDynamicNamespaceImportAccess": "error",
174
+ "noNamespaceImport": "error",
175
+ "noReExportAll": "error",
176
+ // "useSolidForComponent": "error",
177
+ "useTopLevelRegex": "error"
178
+ },
179
+ "security": {
180
+ "recommended": true,
181
+
182
+ // JS/TS
183
+ "noGlobalEval": "error",
184
+ "noSecrets": "error"
185
+ },
186
+ "style": {
187
+ "recommended": true,
188
+
189
+ // JS/TS
190
+ "noCommonJs": "error",
191
+ // "noDefaultExport": "error",
192
+ "noEnum": "error",
193
+ // "noExportedImports": "error",
194
+ "noImplicitBoolean": "error",
195
+ "noInferrableTypes": "error",
196
+ // "noMagicNumbers": "error",
197
+ "noNamespace": "error",
198
+ "noNegationElse": "error",
199
+ "noNestedTernary": "error",
200
+ // "noNonNullAssertion": "error",
201
+ // "noParameterAssign": "error",
202
+ // "noParameterProperties": "error",
203
+ // "noProcessEnv": "error",
204
+ // "noRestrictedGlobals": "error",
205
+ // "noRestrictedImports": "error",
206
+ // "noRestrictedTypes": "error",
207
+ // "noShoutyConstants": "error",
208
+ "noSubstr": "error",
209
+ "noUnusedTemplateLiteral": "error",
210
+ "noUselessElse": "error",
211
+ "noYodaExpression": "error",
212
+ // "useArrayLiterals": "error",
213
+ "useAsConstAssertion": "error",
214
+ "useAtIndex": "error",
215
+ // "useBlockStatements": "error",
216
+ "useCollapsedElseIf": "error",
217
+ // "useCollapsedIf": "error",
218
+ "useConsistentArrayType": "error",
219
+ "useConsistentBuiltinInstantiation": "error",
220
+ // "useConsistentCurlyBraces": "error",
221
+ // "useConsistentMemberAccessibility": "error",
222
+ // "useConsistentObjectDefinitions": "error",
223
+ // "useConsistentTypeDefinitions": "error",
224
+ "useConst": "error",
225
+ "useDefaultParameterLast": "error",
226
+ // "useDefaultSwitchClause": "error",
227
+ // "useEnumInitializers": "error",
228
+ // "useExplicitLengthCheck": "error",
229
+ "useExponentiationOperator": "error",
230
+ "useExportType": "error",
231
+ // "useExportsLast": "error",
232
+ "useFilenamingConvention": "error",
233
+ "useForOf": "error",
234
+ "useGroupedAccessorPairs": "error",
235
+ "useImportType": "error",
236
+ // "useLiteralEnumMembers": "error",
237
+ "useNamingConvention": "error",
238
+ "useNumberNamespace": "error",
239
+ // "useNumericSeparators": "error",
240
+ // "useObjectSpread": "error",
241
+ // "useReadonlyClassProperties": "error",
242
+ "useSelfClosingElements": "error",
243
+ "useShorthandAssign": "error",
244
+ "useShorthandFunctionType": "error",
245
+ "useSingleVarDeclarator": "error",
246
+ // "useSymbolDescription": "error",
247
+ "useTemplate": "error",
248
+ // "useThrowNewError": "error",
249
+ // "useThrowOnlyError": "error",
250
+ "useTrimStartEnd": "error"
251
+ // "useUnifiedTypeSignatures": "error"
252
+ },
253
+ "suspicious": {
254
+ "recommended": true,
255
+
256
+ // JS/TS
257
+ // "noApproximativeNumericConstant": "error",
258
+ // "noAssignInExpressions": "error",
259
+ // "noAsyncPromiseExecutor": "error",
260
+ // "noBitwiseOperators": "error",
261
+ // "noCatchAssign": "error",
262
+ // "noClassAssign": "error",
263
+ // "noCompareNegZero": "error",
264
+ // "noConfusingLabels": "error",
265
+ "noConfusingVoidType": "error",
266
+ "noConsole": "error",
267
+ // "noConstEnum": "error",
268
+ // "noConstantBinaryExpressions": "error",
269
+ // "noControlCharactersInRegex": "error",
270
+ "noDebugger": "error",
271
+ "noDoubleEquals": "error",
272
+ // "noDuplicateCase": "error",
273
+ // "noDuplicateClassMembers": "error",
274
+ // "noDuplicateElseIf": "error",
275
+ // "noDuplicateObjectKeys": "error",
276
+ // "noDuplicateParameters": "error",
277
+ "noEmptyBlockStatements": "error",
278
+ // "noEmptyInterface": "error",
279
+ "noEvolvingTypes": "error",
280
+ "noExplicitAny": "error",
281
+ // "noExtraNonNullAssertion": "error",
282
+ "noFallthroughSwitchClause": "error",
283
+ // "noFunctionAssign": "error",
284
+ // "noGlobalAssign": "error",
285
+ // "noGlobalIsFinite": "error",
286
+ // "noGlobalIsNan": "error",
287
+ "noImplicitAnyLet": "error",
288
+ // "noImportAssign": "error",
289
+ // "noIrregularWhitespace": "error",
290
+ // "noLabelVar": "error",
291
+ // "noMisleadingCharacterClass": "error",
292
+ // "noMisleadingInstantiator": "error",
293
+ // "noMisrefactoredShorthandAssign": "error",
294
+ "noNonNullAssertedOptionalChain": "error",
295
+ // "noOctalEscape": "error",
296
+ // "noPrototypeBuiltins": "error",
297
+ "noRedeclare": "error",
298
+ // "noRedundantUseStrict": "error",
299
+ "noSelfCompare": "error",
300
+ "noShadowRestrictedNames": "error",
301
+ // "noSparseArray": "error",
302
+ "noTemplateCurlyInString": "error",
303
+ // "noThenProperty": "error",
304
+ "noTsIgnore": "error",
305
+ // "noUnassignedVariables": "error",
306
+ // "noUnsafeDeclarationMerging": "error",
307
+ // "noUnsafeNegation": "error",
308
+ // "noUselessEscapeInString": "error",
309
+ // "noUselessRegexBackrefs": "error",
310
+ "noVar": "error",
311
+ // "noWith": "error",
312
+ // "useAdjacentOverloadSignatures": "error",
313
+ // "useAwait": "error",
314
+ "useDefaultSwitchClauseLast": "error",
315
+ "useErrorMessage": "error",
316
+ // "useGetterReturn": "error",
317
+ "useGuardForIn": "error"
318
+ // "useIsArray": "error",
319
+ // "useIterableCallbackReturn": "error",
320
+ // "useNamespaceKeyword": "error",
321
+ // "useNumberToFixedDigitsArgument": "error",
322
+ // "useStaticResponseMethods": "error",
323
+ // "useStrictMode": "error",
324
+
325
+ // JSON
326
+ // "noBiomeFirstException": "error",
327
+ // "noQuickfixBiome": "error",
328
+ // "useBiomeIgnoreFolder": "error"
329
+ }
330
+ }
331
+ },
332
+ "assist": {
333
+ "enabled": true,
334
+ // "includes": [],
335
+ "actions": {
336
+ "source": {
337
+ // "recommended": true,
338
+ "organizeImports": "on",
339
+ "useSortedAttributes": "on",
340
+ "useSortedProperties": "on",
341
+ "useSortedKeys": "on"
342
+ }
343
+ }
344
+ },
345
+ "formatter": {
346
+ "enabled": true,
347
+ // "includes": [],
348
+ "formatWithErrors": false,
349
+ "indentStyle": "space",
350
+ "indentWidth": 4,
351
+ "lineEnding": "lf",
352
+ "lineWidth": 120,
353
+ "attributePosition": "auto",
354
+ "bracketSpacing": true,
355
+ "expand": "auto",
356
+ "useEditorconfig": false
357
+ },
358
+ "javascript": {
359
+ "parser": {
360
+ "unsafeParameterDecoratorsEnabled": true,
361
+ "jsxEverywhere": true
362
+ },
363
+ "formatter": {
364
+ "enabled": true,
365
+ // "indentStyle": "space",
366
+ // "indentWidth": 4,
367
+ // "lineEnding": "lf",
368
+ // "lineWidth": 120,
369
+ "quoteStyle": "double",
370
+ "jsxQuoteStyle": "double",
371
+ "quoteProperties": "asNeeded",
372
+ "trailingCommas": "all",
373
+ "semicolons": "asNeeded",
374
+ "arrowParentheses": "always",
375
+ "bracketSameLine": true,
376
+ // "bracketSpacing": true,
377
+ // "attributePosition": "auto",
378
+ // "expand": "auto",
379
+ "operatorLinebreak": "before"
380
+ },
381
+ // "globals": [],
382
+ "jsxRuntime": "transparent",
383
+ "linter": {
384
+ "enabled": true
385
+ },
386
+ "assist": {
387
+ "enabled": true
388
+ }
389
+ },
390
+ "json": {
391
+ "parser": {
392
+ "allowComments": true,
393
+ "allowTrailingCommas": true
394
+ },
395
+ "formatter": {
396
+ "enabled": true,
397
+ // "indentStyle": "space",
398
+ // "indentWidth": 4,
399
+ // "lineEnding": "lf",
400
+ // "lineWidth": 120,
401
+ "trailingCommas": "all",
402
+ // "expand": "auto",
403
+ "bracketSpacing": true
404
+ },
405
+ "linter": {
406
+ "enabled": true
407
+ },
408
+ "assist": {
409
+ "enabled": true
410
+ }
411
+ },
412
+ "grit": {
413
+ "formatter": {
414
+ "enabled": true
415
+ // "indentStyle": "space",
416
+ // "indentWidth": 4,
417
+ // "lineEnding": "lf",
418
+ // "lineWidth": 120,
419
+ // "quoteStyle": "double"
420
+ },
421
+ "linter": {
422
+ "enabled": true
423
+ },
424
+ "assist": {
425
+ "enabled": true
426
+ }
427
+ }
428
+ // "overrides": []
429
+ }
package/src/dom.jsonc ADDED
@@ -0,0 +1,148 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "extends": ["./base.jsonc"],
4
+ "linter": {
5
+ "rules": {
6
+ "a11y": {
7
+ "recommended": true
8
+
9
+ // JS/TS
10
+ // "noAccessKey": "error",
11
+ // "noAriaHiddenOnFocusable": "error",
12
+ // "noAriaUnsupportedElements": "error",
13
+ // "noAutofocus": "error",
14
+ // "noDistractingElements": "error",
15
+ // "noHeaderScope": "error",
16
+ // "noInteractiveElementToNoninteractiveRole": "error",
17
+ // "noLabelWithoutControl": "error",
18
+ // "noNoninteractiveElementInteractions": "error",
19
+ // "noNoninteractiveElementToInteractiveRole": "error",
20
+ // "noNoninteractiveTabindex": "error",
21
+ // "noPositiveTabindex": "error",
22
+ // "noRedundantAlt": "error",
23
+ // "noRedundantRoles": "error",
24
+ // "noStaticElementInteractions": "error",
25
+ // "noSvgWithoutTitle": "error",
26
+ // "useAltText": "error",
27
+ // "useAnchorContent": "error",
28
+ // "useAriaActivedescendantWithTabindex": "error",
29
+ // "useAriaPropsForRole": "error",
30
+ // "useAriaPropsSupportedByRole": "error",
31
+ // "useButtonType": "error",
32
+ // "useFocusableInteractive": "error",
33
+ // "useHeadingContent": "error",
34
+ // "useHtmlLang": "error",
35
+ // "useIframeTitle": "error",
36
+ // "useKeyWithClickEvents": "error",
37
+ // "useKeyWithMouseEvents": "error",
38
+ // "useMediaCaption": "error",
39
+ // "useSemanticElements": "error",
40
+ // "useValidAnchor": "error",
41
+ // "useValidAriaProps": "error",
42
+ // "useValidAriaRole": "error",
43
+ // "useValidAriaValues": "error",
44
+ // "useValidAutocomplete": "error",
45
+ // "useValidLang": "error",
46
+
47
+ // CSS
48
+ // "useGenericFontNames": "error"
49
+ },
50
+ "complexity": {
51
+ // CSS
52
+ // "noImportantStyles": "error"
53
+ },
54
+ "correctness": {
55
+ // "noNodejsModules": "error",
56
+ // "noProcessGlobal": "error",
57
+ // "useImageSize": "error",
58
+ // CSS
59
+ // "noInvalidDirectionInLinearGradient": "error",
60
+ // "noInvalidGridAreas": "error",
61
+ // "noInvalidPositionAtImportRule": "error",
62
+ // "noMissingVarFunction": "error",
63
+ // "noUnknownFunction": "error",
64
+ // "noUnknownMediaFeatureName": "error",
65
+ // "noUnknownProperty": "error",
66
+ // "noUnknownPseudoClass": "error",
67
+ // "noUnknownPseudoElement": "error",
68
+ // "noUnknownTypeSelector": "error",
69
+ // "noUnknownUnit": "error",
70
+ // "noUnmatchableAnbSelector": "error"
71
+ },
72
+ "nursery": {
73
+ // "noAmbiguousAnchorText": "error",
74
+ // "noScriptUrl": "error",
75
+ // HTML
76
+ // "noDuplicateAttributes": "error"
77
+ },
78
+ "security": {
79
+ "noBlankTarget": "error",
80
+ "noDangerouslySetInnerHtml": "error",
81
+ "noDangerouslySetInnerHtmlWithChildren": "error"
82
+ },
83
+ "style": {
84
+ // CSS
85
+ // "noDescendingSpecificity": "error",
86
+ // "noValueAtRule": "error"
87
+ },
88
+ "suspicious": {
89
+ // "noAlert": "error",
90
+ // "noDocumentCookie": "error",
91
+ // CSS
92
+ // "noDuplicateAtImportRules": "error",
93
+ // "noDuplicateCustomProperties": "error",
94
+ // "noDuplicateFontNames": "error",
95
+ // "noDuplicateProperties": "error",
96
+ // "noDuplicateSelectorsKeyframeBlock": "error",
97
+ // "noEmptyBlock": "error",
98
+ // "noImportantInKeyframe": "error",
99
+ // "noShorthandPropertyOverrides": "error",
100
+ // "noUnknownAtRules": "error"
101
+ }
102
+ }
103
+ },
104
+ "css": {
105
+ "parser": {
106
+ "cssModules": true,
107
+ "tailwindDirectives": true
108
+ },
109
+ "formatter": {
110
+ "enabled": true,
111
+ // "indentStyle": "space",
112
+ // "indentWidth": 4,
113
+ // "lineEnding": "lf",
114
+ // "lineWidth": 120,
115
+ "quoteStyle": "double"
116
+ },
117
+ "linter": {
118
+ "enabled": true
119
+ },
120
+ "assist": {
121
+ "enabled": true
122
+ }
123
+ },
124
+ "html": {
125
+ // "experimentalFullSupportEnabled": true,
126
+ "parser": {
127
+ // "interpolation": false
128
+ },
129
+ "formatter": {
130
+ "enabled": true
131
+ // "indentStyle": "space",
132
+ // "indentWidth": 4,
133
+ // "lineEnding": "lf",
134
+ // "lineWidth": 120,
135
+ // "attributePosition": "auto",
136
+ // "bracketSameLine": false,
137
+ // "whitespaceSensitivity": "css",
138
+ // "indentScriptAndStyle": false,
139
+ // "selfCloseVoidElements": "never"
140
+ },
141
+ "linter": {
142
+ "enabled": true
143
+ },
144
+ "assist": {
145
+ "enabled": true
146
+ }
147
+ }
148
+ }
package/src/lib.jsonc ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "extends": ["./base.jsonc"],
4
+ "linter": {
5
+ "rules": {
6
+ "correctness": {
7
+ // "noGlobalDirnameFilename": "error",
8
+ // GraphQL
9
+ // "useGraphqlNamedOperations": "error"
10
+ },
11
+ "nursery": {
12
+ // GraphQL
13
+ // "noDuplicateArgumentNames": "error",
14
+ // "noDuplicateEnumValueNames": "error",
15
+ // "noDuplicateFieldDefinitionNames": "error",
16
+ // "noDuplicateGraphqlOperationName": "error",
17
+ // "noDuplicateInputFieldNames": "error",
18
+ // "noDuplicateVariableNames": "error",
19
+ // "noRootType": "error",
20
+ // "useConsistentGraphqlDescriptions": "error",
21
+ // "useDeprecatedDate": "error",
22
+ // "useLoneAnonymousOperation": "error",
23
+ // "useLoneExecutableDefinition": "error"
24
+ },
25
+ "style": {
26
+ // "useNodeAssertStrict": "error",
27
+ "useNodejsImportProtocol": "error"
28
+
29
+ // GraphQL
30
+ // "useDeprecatedReason": "error",
31
+ // "useGraphqlNamingConvention": "error"
32
+ },
33
+ "suspicious": {
34
+ // GraphQL
35
+ // "noDuplicateFields": "error"
36
+ }
37
+ }
38
+ },
39
+ "graphql": {
40
+ "formatter": {
41
+ "enabled": true,
42
+ // "indentStyle": "space",
43
+ // "indentWidth": 4,
44
+ // "lineEnding": "lf",
45
+ // "lineWidth": 120,
46
+ "quoteStyle": "double"
47
+ },
48
+ "linter": {
49
+ "enabled": true
50
+ },
51
+ "assist": {
52
+ "enabled": true
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "extends": ["./react.jsonc"],
4
+ "linter": {
5
+ "domains": {
6
+ "next": "all"
7
+ },
8
+ "rules": {
9
+ "nursery": {
10
+ // "noBeforeInteractiveScriptOutsideDocument": "error",
11
+ // "noNextAsyncClientComponent": "error",
12
+ // "noSyncScripts": "error",
13
+ // "useInlineScriptId": "error"
14
+ },
15
+ "performance": {
16
+ // "noImgElement": "error",
17
+ // "noUnwantedPolyfillio": "error",
18
+ // "useGoogleFontPreconnect": "error"
19
+ },
20
+ "style": {
21
+ // "noHeadElement": "error"
22
+ },
23
+ "suspicious": {
24
+ // "noDocumentImportInPage": "error",
25
+ // "noHeadImportInDocument": "error",
26
+ // "useGoogleFontDisplay": "error"
27
+ }
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "extends": ["./dom.jsonc"],
4
+ "linter": {
5
+ "domains": {
6
+ "react": "all"
7
+ },
8
+ "rules": {
9
+ "complexity": {
10
+ // "noUselessFragments": "error"
11
+ },
12
+ "correctness": {
13
+ // "noChildrenProp": "error",
14
+ // "noNestedComponentDefinitions": "error",
15
+ // "noReactPropAssignments": "error",
16
+ // "noRenderReturnValue": "error",
17
+ // "noVoidElementsWithChildren": "error",
18
+ // "useExhaustiveDependencies": "error",
19
+ // "useHookAtTopLevel": "error",
20
+ // "useJsxKeyInIterable": "error",
21
+ // "useUniqueElementIds": "error"
22
+ },
23
+ "nursery": {
24
+ // "noDuplicatedSpreadProps": "error",
25
+ // "noJsxLiterals": "error",
26
+ // "noJsxPropsBind": "error",
27
+ // "noLeakedRender": "error",
28
+ // "noReactForwardRef": "error"
29
+ },
30
+ "style": {
31
+ // "useComponentExportOnlyModules": "error",
32
+ // "useFragmentSyntax": "error",
33
+ // "useReactFunctionComponents": "error"
34
+ },
35
+ "suspicious": {
36
+ // "noArrayIndexKey": "error",
37
+ // "noCommentText": "error",
38
+ // "noDuplicateJsxProps": "error",
39
+ // "noReactSpecificProps": "error",
40
+ // "noSuspiciousSemicolonInJsx": "error"
41
+ }
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "linter": {
4
+ "domains": {
5
+ "test": "all"
6
+ },
7
+ "rules": {
8
+ "complexity": {
9
+ // "noExcessiveNestedTestSuites": "error"
10
+ },
11
+ "style": {
12
+ // "noDoneCallback": "error"
13
+ },
14
+ "suspicious": {
15
+ // "noDuplicateTestHooks": "error",
16
+ // "noExportsInTest": "error",
17
+ // "noFocusedTests": "error",
18
+ // "noMisplacedAssertion": "error",
19
+ // "noSkippedTests": "error"
20
+ }
21
+ }
22
+ }
23
+ }
package/src/vue.jsonc ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "../node_modules/@biomejs/biome/configuration_schema.json",
3
+ "extends": ["./dom.jsonc"],
4
+ "linter": {
5
+ "domains": {
6
+ "vue": "all"
7
+ },
8
+ "rules": {
9
+ "nursery": {
10
+ // "noVueDataObjectDeclaration": "error",
11
+ // "noVueDuplicateKeys": "error",
12
+ // "noVueOptionsApi": "error",
13
+ // "noVueReservedKeys": "error",
14
+ // "noVueReservedProps": "error",
15
+ // "noVueSetupPropsReactivityLoss": "error",
16
+ // "noVueVIfWithVFor": "error",
17
+ // "useVueConsistentDefinePropsDeclaration": "error",
18
+ // "useVueConsistentVBindStyle": "error",
19
+ // "useVueConsistentVOnStyle": "error",
20
+ // "useVueDefineMacrosOrder": "error",
21
+ // "useVueHyphenatedAttributes": "error",
22
+ // "useVueMultiWordComponentNames": "error",
23
+ // "useVueVForKey": "error",
24
+ // "useVueValidTemplateRoot": "error",
25
+ // "useVueValidVBind": "error",
26
+ // "useVueValidVCloak": "error",
27
+ // "useVueValidVElse": "error",
28
+ // "useVueValidVElseIf": "error",
29
+ // "useVueValidVHtml": "error",
30
+ // "useVueValidVIf": "error",
31
+ // "useVueValidVOn": "error",
32
+ // "useVueValidVOnce": "error",
33
+ // "useVueValidVPre": "error",
34
+ // "useVueValidVText": "error",
35
+ // "useVueVapor": "error"
36
+ }
37
+ }
38
+ }
39
+ }