@homer0/oxlint-config 1.1.0 → 2.0.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/README.md +68 -22
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/consts.ts +3 -0
- package/src/createConfig.ts +191 -50
- package/src/createNextjsConfig.ts +3 -1
- package/src/index.ts +1 -13
- package/src/rules/base.ts +6 -0
- package/src/types.ts +34 -24
package/README.md
CHANGED
|
@@ -25,12 +25,12 @@ Create an `oxlint.config.ts` file and export one composed config.
|
|
|
25
25
|
import { createConfig } from '@homer0/oxlint-config';
|
|
26
26
|
|
|
27
27
|
export default createConfig({
|
|
28
|
-
|
|
28
|
+
env: 'node',
|
|
29
29
|
tests: 'directory',
|
|
30
30
|
});
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
`
|
|
33
|
+
`env` selects one environment: `node` or `browser`. Native TypeScript policy is enabled by default; set `ts: false` to disable it. It does not enable type-aware rules or require the TypeScript compiler.
|
|
34
34
|
|
|
35
35
|
### Browser
|
|
36
36
|
|
|
@@ -38,32 +38,32 @@ export default createConfig({
|
|
|
38
38
|
import { createConfig } from '@homer0/oxlint-config';
|
|
39
39
|
|
|
40
40
|
export default createConfig({
|
|
41
|
-
|
|
41
|
+
env: 'browser',
|
|
42
42
|
});
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
### React
|
|
46
46
|
|
|
47
|
-
Use `
|
|
47
|
+
Use `createConfig` and send the `react` option to add React, JSX accessibility, and React-performance rules.
|
|
48
48
|
|
|
49
49
|
```ts
|
|
50
|
-
import {
|
|
50
|
+
import { createConfig } from '@homer0/oxlint-config';
|
|
51
51
|
|
|
52
|
-
export default
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
export default createConfig({
|
|
53
|
+
env: 'browser',
|
|
54
|
+
react: true,
|
|
55
55
|
});
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
### Tests
|
|
59
59
|
|
|
60
|
-
| `tests` value | Matching files | Environment and TypeScript policy
|
|
61
|
-
| ------------------ | --------------------------------------------- |
|
|
62
|
-
| Omitted or `false` | None | No test override.
|
|
63
|
-
| `true` | Both `*.test`/`*.spec` files and `tests/**` | Uses production settings and Vitest rules.
|
|
64
|
-
| `'colocated'` | `*.test` and `*.spec` files | Uses production settings and Vitest rules.
|
|
65
|
-
| `'directory'` | `tests/**` | Uses production settings and Vitest rules.
|
|
66
|
-
| Object | Built-in `files` convention or custom glob(s) | Uses custom `
|
|
60
|
+
| `tests` value | Matching files | Environment and TypeScript policy |
|
|
61
|
+
| ------------------ | --------------------------------------------- | --------------------------------------------------------------------------------- |
|
|
62
|
+
| Omitted or `false` | None | No test override. |
|
|
63
|
+
| `true` | Both `*.test`/`*.spec` files and `tests/**` | Uses production settings and Vitest rules. |
|
|
64
|
+
| `'colocated'` | `*.test` and `*.spec` files | Uses production settings and Vitest rules. |
|
|
65
|
+
| `'directory'` | `tests/**` | Uses production settings and Vitest rules. |
|
|
66
|
+
| Object | Built-in `files` convention or custom glob(s) | Uses custom `env` and `ts`, or production settings by default, with Vitest rules. |
|
|
67
67
|
|
|
68
68
|
A browser project can use Node TypeScript policy for its tests without changing production rules:
|
|
69
69
|
|
|
@@ -71,21 +71,67 @@ A browser project can use Node TypeScript policy for its tests without changing
|
|
|
71
71
|
import { createConfig } from '@homer0/oxlint-config';
|
|
72
72
|
|
|
73
73
|
export default createConfig({
|
|
74
|
-
|
|
74
|
+
env: 'browser',
|
|
75
|
+
tests: {
|
|
76
|
+
env: 'node',
|
|
77
|
+
files: 'directory',
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Overrides
|
|
83
|
+
|
|
84
|
+
Use `overrides` to change root rules, apply policy to matching files, or select a different environment for a file group. A rule-settings object extends the root policy and generated test policy:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
export default createConfig({
|
|
88
|
+
env: 'node',
|
|
89
|
+
overrides: {
|
|
90
|
+
'max-classes-per-file': ['warn', 3],
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Use an array to mix root rule settings with file overrides:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
export default createConfig({
|
|
99
|
+
env: 'browser',
|
|
100
|
+
overrides: [
|
|
101
|
+
{
|
|
102
|
+
'max-classes-per-file': ['warn', 3],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
files: ['src/**/*.dtos.ts'],
|
|
106
|
+
ignores: ['src/special.dtos.ts'],
|
|
107
|
+
rules: {
|
|
108
|
+
'no-magic-numbers': 'warn',
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
env: 'node',
|
|
113
|
+
files: ['utils/plugins/**/*.ts'],
|
|
114
|
+
tests: {
|
|
115
|
+
files: ['utils/plugins/**/*.test.ts'],
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
],
|
|
75
119
|
tests: {
|
|
76
|
-
|
|
120
|
+
env: 'node',
|
|
77
121
|
files: 'directory',
|
|
78
122
|
},
|
|
79
123
|
});
|
|
80
124
|
```
|
|
81
125
|
|
|
126
|
+
Root `ignores` exclude files from linting. Override `ignores` exclude matching files only from that override. Override tests require explicit file glob(s) and generate a sibling test override using the parent override's environment by default.
|
|
127
|
+
|
|
82
128
|
### Globals
|
|
83
129
|
|
|
84
130
|
Use `globals` to add named globals or `$`-prefixed global groups from the [`globals`](https://www.npmjs.com/package/globals) package. Named globals use Oxlint's `'readonly'`, `'writable'`, or `'off'` modes; `true` makes a named global writable. Groups use `true`. Added globals also apply to generated test overrides.
|
|
85
131
|
|
|
86
132
|
```ts
|
|
87
133
|
export default createConfig({
|
|
88
|
-
|
|
134
|
+
env: 'node',
|
|
89
135
|
globals: {
|
|
90
136
|
$browser: true,
|
|
91
137
|
__piMcpState: 'readonly',
|
|
@@ -101,7 +147,7 @@ Use `allowedDangleNames` to add exact identifiers to the base `no-underscore-dan
|
|
|
101
147
|
```ts
|
|
102
148
|
export default createConfig({
|
|
103
149
|
allowedDangleNames: ['__piMcpState'],
|
|
104
|
-
|
|
150
|
+
env: 'node',
|
|
105
151
|
});
|
|
106
152
|
```
|
|
107
153
|
|
|
@@ -111,7 +157,7 @@ Set `jsdoc: true` to opt into Oxlint's native JSDoc subset. It covers JSDoc acce
|
|
|
111
157
|
|
|
112
158
|
```ts
|
|
113
159
|
export default createConfig({
|
|
114
|
-
|
|
160
|
+
env: 'node',
|
|
115
161
|
jsdoc: true,
|
|
116
162
|
ts: true,
|
|
117
163
|
});
|
|
@@ -140,7 +186,7 @@ pnpm add --save-dev oxlint-tsgolint typescript
|
|
|
140
186
|
|
|
141
187
|
```ts
|
|
142
188
|
export default createConfig({
|
|
143
|
-
|
|
189
|
+
env: 'node',
|
|
144
190
|
ts: true,
|
|
145
191
|
typeAware: true,
|
|
146
192
|
});
|
|
@@ -152,7 +198,7 @@ Use `extensions` to add supported native rule settings without manually merging
|
|
|
152
198
|
|
|
153
199
|
```ts
|
|
154
200
|
createConfig({
|
|
155
|
-
|
|
201
|
+
env: 'node',
|
|
156
202
|
extensions: {
|
|
157
203
|
typescript: {
|
|
158
204
|
rules: {
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"globals";const t=[`coverage/`,`coverage-*/`,`dist/`,`node_modules/`],n={colocated:[`**/*.{test,spec}.{js,jsx,ts,tsx,mjs,cjs,mts,cts}`],directory:[`tests/**/*.{js,jsx,ts,tsx,mjs,cjs,mts,cts}`]},r={allow:[`__`],allowAfterThis:!0,allowAfterSuper:!0,enforceInMethodNames:!1},i=[`error`,r],a={"array-callback-return":[`error`,{allowImplicit:!0}],"block-scoped-var":`error`,complexity:[`warn`,30],"consistent-return":`error`,curly:`off`,"default-case":[`error`,{commentPattern:`^no default$`}],"default-case-last":`error`,"default-param-last":`error`,"dot-notation":[`error`,{allowKeywords:!0}],eqeqeq:[`error`,`always`,{null:`ignore`}],"grouped-accessor-pairs":`error`,"guard-for-in":`error`,"max-classes-per-file":[`error`,1],"no-alert":`warn`,"no-caller":`error`,"no-case-declarations":`error`,"no-constructor-return":`error`,"no-else-return":[`error`,{allowElseIf:!1}],"no-empty-function":[`error`,{allow:[`arrowFunctions`,`functions`,`methods`]}],"no-empty-pattern":`error`,"no-eval":`error`,"no-extend-native":`error`,"no-extra-bind":`error`,"no-extra-label":`error`,"no-fallthrough":`error`,"no-global-assign":[`error`,{exceptions:[]}],"no-implied-eval":`error`,"no-iterator":`error`,"no-labels":[`error`,{allowLoop:!1,allowSwitch:!1}],"no-lone-blocks":`error`,"no-loop-func":`error`,"no-magic-numbers":[`error`,{ignore:[0,1,-1,60,100,1e3],ignoreArrayIndexes:!0,enforceConst:!1,detectObjects:!1}],"no-multi-str":`error`,"no-new":`error`,"no-new-func":`error`,"no-new-wrappers":`error`,"no-nonoctal-decimal-escape":`error`,"no-param-reassign":[`error`,{props:!0,ignorePropertyModificationsFor:[`acc`,`accumulator`,`e`,`ctx`,`context`,`req`,`request`,`res`,`response`,`$scope`,`staticContext`,`state`,`ref`,`sacc`]}],"no-proto":`error`,"no-redeclare":`error`,"no-restricted-properties":[`error`,{object:`arguments`,property:`callee`,message:`arguments.callee is deprecated`},{object:`global`,property:`isFinite`,message:`Please use Number.isFinite instead`},{object:`self`,property:`isFinite`,message:`Please use Number.isFinite instead`},{object:`window`,property:`isFinite`,message:`Please use Number.isFinite instead`},{object:`global`,property:`isNaN`,message:`Please use Number.isNaN instead`},{object:`self`,property:`isNaN`,message:`Please use Number.isNaN instead`},{object:`window`,property:`isNaN`,message:`Please use Number.isNaN instead`},{property:`__defineGetter__`,message:`Please use Object.defineProperty instead.`},{property:`__defineSetter__`,message:`Please use Object.defineProperty instead.`},{object:`Math`,property:`pow`,message:`Use the exponentiation operator (**) instead.`}],"no-return-assign":[`error`,`always`],"no-script-url":`error`,"no-self-assign":[`error`,{props:!0}],"no-self-compare":`error`,"no-sequences":`error`,"no-throw-literal":`error`,"no-unmodified-loop-condition":`error`,"no-unused-expressions":[`error`,{allowShortCircuit:!1,allowTernary:!1,allowTaggedTemplates:!1}],"no-unused-labels":`error`,"no-useless-call":`error`,"no-useless-catch":`error`,"no-useless-concat":`error`,"no-useless-return":`error`,"no-void":`error`,"no-with":`error`,"prefer-promise-reject-errors":[`error`,{allowEmptyReject:!0}],"prefer-regex-literals":[`error`,{disallowRedundantWrapping:!0}],radix:`error`,"vars-on-top":`error`,yoda:`error`,"for-direction":`error`,"getter-return":[`error`,{allowImplicit:!0}],"no-async-promise-executor":`error`,"no-compare-neg-zero":`error`,"no-cond-assign":[`error`,`always`],"no-console":`warn`,"no-control-regex":`error`,"no-debugger":`error`,"no-dupe-else-if":`error`,"no-dupe-keys":`error`,"no-duplicate-case":`error`,"no-empty":`error`,"no-empty-character-class":`error`,"no-ex-assign":`error`,"no-extra-boolean-cast":`error`,"no-func-assign":`error`,"no-import-assign":`error`,"no-inner-declarations":`error`,"no-invalid-regexp":`error`,"no-irregular-whitespace":`error`,"no-loss-of-precision":`error`,"no-misleading-character-class":`error`,"no-obj-calls":`error`,"no-promise-executor-return":`error`,"no-prototype-builtins":`error`,"no-regex-spaces":`error`,"no-setter-return":`error`,"no-sparse-arrays":`error`,"no-template-curly-in-string":`error`,"no-unexpected-multiline":`off`,"no-unreachable":`error`,"no-unreachable-loop":[`error`,{ignore:[]}],"no-unsafe-finally":`error`,"no-unsafe-negation":`error`,"no-unsafe-optional-chaining":[`error`,{disallowArithmeticOperators:!0}],"no-useless-backreference":`error`,"use-isnan":`error`,"valid-typeof":[`error`,{requireStringLiterals:!0}],"func-names":`warn`,"new-cap":[`error`,{newIsCap:!0,newIsCapExceptions:[],capIsNew:!1,capIsNewExceptions:[`Immutable.Map`,`Immutable.Set`,`Immutable.List`]}],"no-array-constructor":`error`,"no-bitwise":`error`,"no-continue":`error`,"no-lonely-if":`error`,"no-multi-assign":[`error`],"no-nested-ternary":`error`,"no-underscore-dangle":i,"no-unneeded-ternary":[`error`,{defaultAssignment:!1}],"operator-assignment":[`error`,`always`],"prefer-exponentiation-operator":`error`,"prefer-object-spread":`error`,"unicode-bom":[`error`,`never`],"no-delete-var":`error`,"no-label-var":`error`,"no-shadow":`error`,"no-shadow-restricted-names":`error`,"no-undef":`error`,"no-unused-vars":[`error`,{vars:`all`,args:`after-used`,ignoreRestSiblings:!0}],"no-use-before-define":[`error`,{functions:!0,classes:!0,variables:!0}],"arrow-body-style":[`error`,`as-needed`,{requireReturnForObjectLiteral:!1}],"constructor-super":`error`,"no-class-assign":`error`,"no-const-assign":`error`,"no-dupe-class-members":`error`,"no-restricted-exports":[`error`,{restrictedNamedExports:[`default`,`then`]}],"no-this-before-super":`error`,"no-useless-computed-key":`error`,"no-useless-constructor":`error`,"no-useless-rename":[`error`,{ignoreDestructuring:!1,ignoreImport:!1,ignoreExport:!1}],"no-var":`error`,"object-shorthand":[`error`,`always`,{ignoreConstructors:!1,avoidQuotes:!0}],"prefer-arrow-callback":[`error`,{allowNamedFunctions:!1,allowUnboundThis:!0}],"prefer-const":[`error`,{destructuring:`any`,ignoreReadBeforeAssign:!0}],"prefer-destructuring":[`error`,{VariableDeclarator:{array:!1,object:!0},AssignmentExpression:{array:!0,object:!1}},{enforceForRenamedProperties:!1}],"prefer-numeric-literals":`error`,"prefer-rest-params":`error`,"prefer-spread":`error`,"prefer-template":`error`,"require-yield":`error`,"symbol-description":`error`,"import/named":`error`,"import/export":`error`,"import/no-named-as-default":`error`,"import/no-named-as-default-member":`error`,"import/no-mutable-exports":`error`,"import/no-amd":`error`,"import/first":`error`,"import/no-duplicates":`error`,"import/extensions":[`error`,`ignorePackages`,{js:`never`,mjs:`never`,jsx:`never`}],"import/newline-after-import":`error`,"import/no-absolute-path":`error`,"import/no-dynamic-require":`error`,"import/no-webpack-loader-syntax":`error`,"import/no-named-default":`error`,"import/no-self-import":`error`,"import/no-cycle":[`error`,{maxDepth:4294967295}]},o={},s={"jsdoc/check-access":`error`,"jsdoc/check-property-names":`error`,"jsdoc/check-tag-names":`error`,"jsdoc/implements-on-classes":`error`,"jsdoc/require-param":`error`,"jsdoc/require-param-description":`error`,"jsdoc/require-param-name":`error`,"jsdoc/require-param-type":`error`,"jsdoc/require-property":`error`,"jsdoc/require-property-description":`error`,"jsdoc/require-property-name":`error`,"jsdoc/require-property-type":`error`,"jsdoc/require-returns":`error`,"jsdoc/require-returns-type":`error`},c={"nextjs/google-font-display":`warn`,"nextjs/google-font-preconnect":`warn`,"nextjs/inline-script-id":`error`,"nextjs/next-script-for-ga":`warn`,"nextjs/no-assign-module-variable":`error`,"nextjs/no-async-client-component":`warn`,"nextjs/no-before-interactive-script-outside-document":`warn`,"nextjs/no-css-tags":`warn`,"nextjs/no-document-import-in-page":`error`,"nextjs/no-duplicate-head":`error`,"nextjs/no-head-element":`warn`,"nextjs/no-head-import-in-document":`error`,"nextjs/no-html-link-for-pages":`error`,"nextjs/no-img-element":`warn`,"nextjs/no-page-custom-font":`warn`,"nextjs/no-script-component-in-head":`error`,"nextjs/no-styled-jsx-in-document":`warn`,"nextjs/no-sync-scripts":`error`,"nextjs/no-title-in-document-head":`warn`,"nextjs/no-typos":`warn`,"nextjs/no-unwanted-polyfillio":`warn`},l={"node/no-exports-assign":`error`,"node/global-require":`error`,"node/handle-callback-err":[`error`,`^(err|error|\\w+Error)$`],"node/no-mixed-requires":`error`,"node/no-new-require":`error`,"node/no-path-concat":`error`,"node/no-process-env":`error`},u={"jsx-a11y/alt-text":`error`,"jsx-a11y/anchor-has-content":`error`,"jsx-a11y/anchor-is-valid":`error`,"jsx-a11y/aria-activedescendant-has-tabindex":`error`,"jsx-a11y/aria-props":`error`,"jsx-a11y/aria-proptypes":`error`,"jsx-a11y/aria-role":`error`,"jsx-a11y/aria-unsupported-elements":`error`,"jsx-a11y/autocomplete-valid":`error`,"jsx-a11y/click-events-have-key-events":`error`,"jsx-a11y/control-has-associated-label":`error`,"jsx-a11y/heading-has-content":`error`,"jsx-a11y/html-has-lang":`error`,"jsx-a11y/iframe-has-title":`error`,"jsx-a11y/img-redundant-alt":`error`,"jsx-a11y/interactive-supports-focus":[`error`,{tabbable:[`button`,`checkbox`,`link`,`searchbox`,`spinbutton`,`switch`,`textbox`]}],"jsx-a11y/label-has-associated-control":`error`,"jsx-a11y/media-has-caption":`error`,"jsx-a11y/mouse-events-have-key-events":`error`,"jsx-a11y/no-access-key":`error`,"jsx-a11y/no-autofocus":`error`,"jsx-a11y/no-distracting-elements":`error`,"jsx-a11y/no-interactive-element-to-noninteractive-role":[`error`,{tr:[`none`,`presentation`],canvas:[`img`]}],"jsx-a11y/no-noninteractive-element-interactions":[`error`,{handlers:[`onClick`,`onError`,`onLoad`,`onMouseDown`,`onMouseUp`,`onKeyPress`,`onKeyDown`,`onKeyUp`],alert:[`onKeyUp`,`onKeyDown`,`onKeyPress`],body:[`onError`,`onLoad`],dialog:[`onKeyUp`,`onKeyDown`,`onKeyPress`],iframe:[`onError`,`onLoad`],img:[`onError`,`onLoad`]}],"jsx-a11y/no-noninteractive-element-to-interactive-role":[`error`,{ul:[`listbox`,`menu`,`menubar`,`radiogroup`,`tablist`,`tree`,`treegrid`],ol:[`listbox`,`menu`,`menubar`,`radiogroup`,`tablist`,`tree`,`treegrid`],li:[`menuitem`,`menuitemradio`,`menuitemcheckbox`,`option`,`row`,`tab`,`treeitem`],table:[`grid`],td:[`gridcell`],fieldset:[`radiogroup`,`presentation`]}],"jsx-a11y/no-noninteractive-tabindex":[`error`,{tags:[],roles:[`tabpanel`],allowExpressionValues:!0}],"jsx-a11y/no-redundant-roles":`error`,"jsx-a11y/no-static-element-interactions":[`error`,{allowExpressionValues:!0,handlers:[`onClick`,`onMouseDown`,`onMouseUp`,`onKeyPress`,`onKeyDown`,`onKeyUp`]}],"jsx-a11y/role-has-required-aria-props":`error`,"jsx-a11y/role-supports-aria-props":`error`,"jsx-a11y/scope":`error`,"jsx-a11y/tabindex-no-positive":`error`,"react/display-name":2,"react/jsx-key":2,"react/jsx-no-comment-textnodes":2,"react/jsx-no-duplicate-props":2,"react/jsx-no-target-blank":2,"react/jsx-no-undef":2,"react/no-children-prop":2,"react/no-danger-with-children":2,"react/no-direct-mutation-state":2,"react/no-find-dom-node":2,"react/no-is-mounted":2,"react/no-render-return-value":2,"react/no-string-refs":2,"react/no-unescaped-entities":2,"react/no-unknown-property":2,"react/require-render-return":2,"react/rules-of-hooks":`error`,"react/exhaustive-deps":`warn`,"react-perf/jsx-no-new-array-as-prop":`error`,"react-perf/jsx-no-new-function-as-prop":`error`,"react-perf/jsx-no-new-object-as-prop":`error`,"no-use-before-define":`off`},d={"max-classes-per-file":`off`,"no-magic-numbers":`off`,"import/first":`off`},f={"typescript/no-deprecated":`error`,"typescript/no-floating-promises":`error`,"typescript/no-misused-promises":`error`},p={"typescript/ban-ts-comment":[`error`,{"ts-expect-error":`allow-with-description`,"ts-ignore":`allow-with-description`,"ts-nocheck":`allow-with-description`,"ts-check":`allow-with-description`}],"typescript/no-array-constructor":`error`,"typescript/no-duplicate-enum-values":`error`,"typescript/no-empty-object-type":`error`,"typescript/no-explicit-any":`error`,"typescript/no-extra-non-null-assertion":`error`,"typescript/no-misused-new":`error`,"typescript/no-namespace":`error`,"typescript/no-non-null-asserted-optional-chain":`error`,"typescript/no-require-imports":`error`,"typescript/no-this-alias":`error`,"typescript/no-unnecessary-type-constraint":`error`,"typescript/no-unsafe-declaration-merging":`error`,"typescript/no-unsafe-function-type":`error`,"typescript/no-unused-expressions":`error`,"typescript/no-unused-vars":`error`,"typescript/no-wrapper-object-types":`error`,"typescript/prefer-as-const":`error`,"typescript/prefer-namespace-keyword":`error`,"typescript/triple-slash-reference":`error`,"typescript/dot-notation":`error`,"no-array-constructor":`off`,"no-empty-function":`off`,"dot-notation":`off`,"no-unused-expressions":`off`,"no-unused-vars":`off`,"no-useless-constructor":`off`,"import/extensions":`off`},m={"vitest/no-focused-tests":`error`,"vitest/no-disabled-tests":`error`,"vitest/no-identical-title":`error`,"vitest/no-conditional-expect":`error`,"vitest/no-standalone-expect":`error`,"vitest/require-mock-type-parameters":`off`,"vitest/valid-expect":`error`},h={base:{globals:e.es2023,rules:a},browser:{globals:e.browser,rules:o},jsdoc:{rules:s},node:{globals:e.node,rules:l},react:{rules:u},tests:{rules:d},typescript:{rules:p}},g=(...e)=>e.reduce((e,t)=>(Object.assign(e,t?.rules),e),{}),_=(e,t=[])=>{if(t.length===0)return e;let n=e[`no-underscore-dangle`]||i;if(!Array.isArray(n))return e;let[a,o]=n,s=typeof o==`object`&&o?o:{};return{...e,"no-underscore-dangle":[a,{...r,...s,allow:Array.from(new Set([...r.allow,...s.allow||[],...t]))}]}},v=({globals:t={},doingTestsSetup:n})=>n?t:Object.entries(t).reduce((t,[n,r])=>{if(n.startsWith(`$`)){let r=n.slice(1);if(!Object.hasOwn(e,r))throw Error(`Unknown global group: "${r}".`);Object.assign(t,e[r])}else t[n]=r===!0?`writable`:r;return t},{}),y=e=>{if(e.length!==1)throw Error(`Exactly one environment config must be selected: "node" or "browser".`);let[t]=e;if(t===void 0)throw Error(`Exactly one environment config must be selected: "node" or "browser".`);return t},b=e=>e===void 0?[]:Array.isArray(e)?e.slice():Object.hasOwn(n,e)?n[e].slice():[e],x=({tests:e,productionConfig:t,productionTs:r})=>e===!0?{configs:[t],files:[...n.colocated,...n.directory],framework:`vitest`,ts:r}:typeof e==`string`?{configs:[t],files:n[e].slice(),framework:`vitest`,ts:r}:{configs:e.configs??[t],files:b(e.files),framework:e.framework||`vitest`,ts:e.ts??r},S=({config:e,testConfig:t,tests:n,ts:r=!1})=>t?{doingTestsSetup:!0,testConfig:t}:n?{doingTestsSetup:!1,testConfig:x({tests:n,productionConfig:e,productionTs:r})}:{doingTestsSetup:!1,testConfig:void 0},C=t=>{let{configs:n,extensions:r,globals:i,jsdoc:a,nextjs:o,react:s,ts:l=!0,typeAware:u,baseFragment:d=h.base,baseExtensionFragment:p}=t,g=p??r?.base,_=y(t.configs),{doingTestsSetup:b,testConfig:x}=S({config:_,testConfig:t.testConfig,tests:t.tests,ts:l}),C=[d,h[_]],w=v({globals:i,doingTestsSetup:b}),T=[`import`],E=[];return n.includes(`node`)&&T.push(`node`),a&&(C.push(h.jsdoc),T.push(`jsdoc`)),l&&C.push(h.typescript),u&&C.push({rules:f}),(l||u)&&T.push(`typescript`),s&&(C.push(h.react),T.push(`react`,`jsx-a11y`,`react-perf`)),o&&(C.push({rules:c}),T.push(`nextjs`)),x?.framework===`vitest`&&(T.push(`vitest`),b&&(C.push({rules:m}),E.push(e.vitest))),g&&C.push(g),r?.[_]&&C.push(r[_]),a&&r?.jsdoc&&C.push(r.jsdoc),l&&r?.typescript&&C.push(r.typescript),s&&r?.react&&C.push(r.react),{config:_,fragments:C,globals:w,plugins:T,testConfig:x,configGlobals:E.length>0?Object.assign({},...E):void 0}},w=({testConfig:e,allowedDangleNames:t,extensions:n,globals:r})=>{let{config:i,fragments:a,globals:o,configGlobals:s}=C({configs:e.configs,extensions:n,globals:r,testConfig:e,ts:e.ts,baseFragment:h.tests,baseExtensionFragment:n?.tests}),c=_(g(...a),t);if(e.files.length===0)throw Error(`Custom test configuration requires at least one file glob.`);return{files:e.files,globals:{...h[i].globals,...o,...s},rules:c}},T=e=>{let{fragments:n,globals:r,plugins:i,config:a,testConfig:o}=C(e),{allowedDangleNames:s,extensions:c,ignores:l,typeAware:u}=e,d=_(g(...n),s);return{globals:{...h.base.globals,...h[a].globals,...r},ignorePatterns:[...t,...l||[]],options:u?{typeAware:!0}:void 0,plugins:i,rules:d,overrides:o?[w({testConfig:o,allowedDangleNames:s,extensions:c,globals:r})]:void 0}},E=[`.next/`,`out/`,`build/`,`next-env.d.ts`],D=({ignores:e=[],...t})=>T({...t,configs:[`node`],ignores:[...E,...e],nextjs:!0,react:!0,ts:!0}),O=e=>T({...e,react:!0});export{T as createConfig,D as createNextjsConfig,O as createReactConfig,h as extensionFragments};
|
|
1
|
+
import e from"globals";const t=[`browser`,`node`],n=[`coverage/`,`coverage-*/`,`dist/`,`node_modules/`],r={colocated:[`**/*.{test,spec}.{js,jsx,ts,tsx,mjs,cjs,mts,cts}`],directory:[`tests/**/*.{js,jsx,ts,tsx,mjs,cjs,mts,cts}`]},i={allow:[`__`],allowAfterThis:!0,allowAfterSuper:!0,enforceInMethodNames:!1},a=[`error`,i],o={"array-callback-return":[`error`,{allowImplicit:!0}],"block-scoped-var":`error`,complexity:[`warn`,30],"consistent-return":`error`,curly:`off`,"default-case":[`error`,{commentPattern:`^no default$`}],"default-case-last":`error`,"default-param-last":`error`,"dot-notation":[`error`,{allowKeywords:!0}],eqeqeq:[`error`,`always`,{null:`ignore`}],"grouped-accessor-pairs":`error`,"guard-for-in":`error`,"max-classes-per-file":[`error`,1],"no-alert":`warn`,"no-caller":`error`,"no-case-declarations":`error`,"no-constructor-return":`error`,"no-else-return":[`error`,{allowElseIf:!1}],"no-empty-function":[`error`,{allow:[`arrowFunctions`,`functions`,`methods`]}],"no-empty-pattern":`error`,"no-eval":`error`,"no-extend-native":`error`,"no-extra-bind":`error`,"no-extra-label":`error`,"no-fallthrough":`error`,"no-global-assign":[`error`,{exceptions:[]}],"no-implied-eval":`error`,"no-iterator":`error`,"no-labels":[`error`,{allowLoop:!1,allowSwitch:!1}],"no-lone-blocks":`error`,"no-loop-func":`error`,"no-magic-numbers":[`error`,{ignore:[0,1,-1,60,100,1e3],ignoreArrayIndexes:!0,enforceConst:!1,detectObjects:!1}],"no-multi-str":`error`,"no-new":`error`,"no-new-func":`error`,"no-new-wrappers":`error`,"no-nonoctal-decimal-escape":`error`,"no-param-reassign":[`error`,{props:!0,ignorePropertyModificationsFor:[`acc`,`accumulator`,`e`,`ctx`,`context`,`req`,`request`,`res`,`response`,`$scope`,`staticContext`,`state`,`ref`,`sacc`]}],"no-proto":`error`,"no-redeclare":`error`,"no-restricted-properties":[`error`,{object:`arguments`,property:`callee`,message:`arguments.callee is deprecated`},{object:`global`,property:`isFinite`,message:`Please use Number.isFinite instead`},{object:`self`,property:`isFinite`,message:`Please use Number.isFinite instead`},{object:`window`,property:`isFinite`,message:`Please use Number.isFinite instead`},{object:`global`,property:`isNaN`,message:`Please use Number.isNaN instead`},{object:`self`,property:`isNaN`,message:`Please use Number.isNaN instead`},{object:`window`,property:`isNaN`,message:`Please use Number.isNaN instead`},{property:`__defineGetter__`,message:`Please use Object.defineProperty instead.`},{property:`__defineSetter__`,message:`Please use Object.defineProperty instead.`},{object:`Math`,property:`pow`,message:`Use the exponentiation operator (**) instead.`}],"no-return-assign":[`error`,`always`],"no-script-url":`error`,"no-self-assign":[`error`,{props:!0}],"no-self-compare":`error`,"no-sequences":`error`,"no-throw-literal":`error`,"no-unmodified-loop-condition":`error`,"no-unused-expressions":[`error`,{allowShortCircuit:!1,allowTernary:!1,allowTaggedTemplates:!1}],"no-unused-labels":`error`,"no-useless-call":`error`,"no-useless-catch":`error`,"no-useless-concat":`error`,"no-useless-escape":`off`,"no-useless-return":`error`,"no-void":`error`,"no-with":`error`,"prefer-promise-reject-errors":[`error`,{allowEmptyReject:!0}],"prefer-regex-literals":[`error`,{disallowRedundantWrapping:!0}],radix:`error`,"vars-on-top":`error`,yoda:`error`,"for-direction":`error`,"getter-return":[`error`,{allowImplicit:!0}],"no-async-promise-executor":`error`,"no-compare-neg-zero":`error`,"no-cond-assign":[`error`,`always`],"no-console":`warn`,"no-control-regex":`error`,"no-debugger":`error`,"no-dupe-else-if":`error`,"no-dupe-keys":`error`,"no-duplicate-case":`error`,"no-empty":`error`,"no-empty-character-class":`error`,"no-ex-assign":`error`,"no-extra-boolean-cast":`error`,"no-func-assign":`error`,"no-import-assign":`error`,"no-inner-declarations":`error`,"no-invalid-regexp":`error`,"no-irregular-whitespace":`error`,"no-loss-of-precision":`error`,"no-misleading-character-class":`error`,"no-obj-calls":`error`,"no-promise-executor-return":`error`,"no-prototype-builtins":`error`,"no-regex-spaces":`error`,"no-setter-return":`error`,"no-sparse-arrays":`error`,"no-template-curly-in-string":`error`,"no-unexpected-multiline":`off`,"no-unreachable":`error`,"no-unreachable-loop":[`error`,{ignore:[]}],"no-unsafe-finally":`error`,"no-unsafe-negation":`error`,"no-unsafe-optional-chaining":[`error`,{disallowArithmeticOperators:!0}],"no-useless-backreference":`error`,"use-isnan":`error`,"valid-typeof":[`error`,{requireStringLiterals:!0}],"func-names":`warn`,"new-cap":[`error`,{newIsCap:!0,newIsCapExceptions:[],capIsNew:!1,capIsNewExceptions:[`Immutable.Map`,`Immutable.Set`,`Immutable.List`]}],"no-array-constructor":`error`,"no-bitwise":`error`,"no-continue":`error`,"no-lonely-if":`error`,"no-multi-assign":[`error`],"no-nested-ternary":`error`,"no-underscore-dangle":a,"no-unneeded-ternary":[`error`,{defaultAssignment:!1}],"operator-assignment":[`error`,`always`],"prefer-exponentiation-operator":`error`,"prefer-object-spread":`error`,"unicode-bom":[`error`,`never`],"no-delete-var":`error`,"no-label-var":`error`,"no-shadow":`error`,"no-shadow-restricted-names":`error`,"no-undef":`error`,"no-unused-vars":[`error`,{vars:`all`,args:`after-used`,ignoreRestSiblings:!0}],"no-use-before-define":[`error`,{functions:!0,classes:!0,variables:!0}],"arrow-body-style":[`error`,`as-needed`,{requireReturnForObjectLiteral:!1}],"constructor-super":`error`,"no-class-assign":`error`,"no-const-assign":`error`,"no-dupe-class-members":`error`,"no-restricted-exports":[`error`,{restrictedNamedExports:[`default`,`then`]}],"no-this-before-super":`error`,"no-useless-computed-key":`error`,"no-useless-constructor":`error`,"no-useless-rename":[`error`,{ignoreDestructuring:!1,ignoreImport:!1,ignoreExport:!1}],"no-var":`error`,"object-shorthand":[`error`,`always`,{ignoreConstructors:!1,avoidQuotes:!0}],"prefer-arrow-callback":[`error`,{allowNamedFunctions:!1,allowUnboundThis:!0}],"prefer-const":[`error`,{destructuring:`any`,ignoreReadBeforeAssign:!0}],"prefer-destructuring":[`error`,{VariableDeclarator:{array:!1,object:!0},AssignmentExpression:{array:!0,object:!1}},{enforceForRenamedProperties:!1}],"prefer-numeric-literals":`error`,"prefer-rest-params":`error`,"prefer-spread":`error`,"prefer-template":`error`,"require-yield":`error`,"symbol-description":`error`,"import/named":`error`,"import/export":`error`,"import/no-named-as-default":`error`,"import/no-named-as-default-member":`error`,"import/no-mutable-exports":`error`,"import/no-amd":`error`,"import/first":`error`,"import/no-duplicates":`error`,"import/extensions":[`error`,`ignorePackages`,{js:`never`,mjs:`never`,jsx:`never`}],"import/newline-after-import":`error`,"import/no-absolute-path":`error`,"import/no-dynamic-require":`error`,"import/no-webpack-loader-syntax":`error`,"import/no-named-default":`error`,"import/no-self-import":`error`,"import/no-cycle":[`error`,{maxDepth:4294967295}]},s={},c={"jsdoc/check-access":`error`,"jsdoc/check-property-names":`error`,"jsdoc/check-tag-names":`error`,"jsdoc/implements-on-classes":`error`,"jsdoc/require-param":`error`,"jsdoc/require-param-description":`error`,"jsdoc/require-param-name":`error`,"jsdoc/require-param-type":`error`,"jsdoc/require-property":`error`,"jsdoc/require-property-description":`error`,"jsdoc/require-property-name":`error`,"jsdoc/require-property-type":`error`,"jsdoc/require-returns":`error`,"jsdoc/require-returns-type":`error`},l={"nextjs/google-font-display":`warn`,"nextjs/google-font-preconnect":`warn`,"nextjs/inline-script-id":`error`,"nextjs/next-script-for-ga":`warn`,"nextjs/no-assign-module-variable":`error`,"nextjs/no-async-client-component":`warn`,"nextjs/no-before-interactive-script-outside-document":`warn`,"nextjs/no-css-tags":`warn`,"nextjs/no-document-import-in-page":`error`,"nextjs/no-duplicate-head":`error`,"nextjs/no-head-element":`warn`,"nextjs/no-head-import-in-document":`error`,"nextjs/no-html-link-for-pages":`error`,"nextjs/no-img-element":`warn`,"nextjs/no-page-custom-font":`warn`,"nextjs/no-script-component-in-head":`error`,"nextjs/no-styled-jsx-in-document":`warn`,"nextjs/no-sync-scripts":`error`,"nextjs/no-title-in-document-head":`warn`,"nextjs/no-typos":`warn`,"nextjs/no-unwanted-polyfillio":`warn`},u={"node/no-exports-assign":`error`,"node/global-require":`error`,"node/handle-callback-err":[`error`,`^(err|error|\\w+Error)$`],"node/no-mixed-requires":`error`,"node/no-new-require":`error`,"node/no-path-concat":`error`,"node/no-process-env":`error`},d={"jsx-a11y/alt-text":`error`,"jsx-a11y/anchor-has-content":`error`,"jsx-a11y/anchor-is-valid":`error`,"jsx-a11y/aria-activedescendant-has-tabindex":`error`,"jsx-a11y/aria-props":`error`,"jsx-a11y/aria-proptypes":`error`,"jsx-a11y/aria-role":`error`,"jsx-a11y/aria-unsupported-elements":`error`,"jsx-a11y/autocomplete-valid":`error`,"jsx-a11y/click-events-have-key-events":`error`,"jsx-a11y/control-has-associated-label":`error`,"jsx-a11y/heading-has-content":`error`,"jsx-a11y/html-has-lang":`error`,"jsx-a11y/iframe-has-title":`error`,"jsx-a11y/img-redundant-alt":`error`,"jsx-a11y/interactive-supports-focus":[`error`,{tabbable:[`button`,`checkbox`,`link`,`searchbox`,`spinbutton`,`switch`,`textbox`]}],"jsx-a11y/label-has-associated-control":`error`,"jsx-a11y/media-has-caption":`error`,"jsx-a11y/mouse-events-have-key-events":`error`,"jsx-a11y/no-access-key":`error`,"jsx-a11y/no-autofocus":`error`,"jsx-a11y/no-distracting-elements":`error`,"jsx-a11y/no-interactive-element-to-noninteractive-role":[`error`,{tr:[`none`,`presentation`],canvas:[`img`]}],"jsx-a11y/no-noninteractive-element-interactions":[`error`,{handlers:[`onClick`,`onError`,`onLoad`,`onMouseDown`,`onMouseUp`,`onKeyPress`,`onKeyDown`,`onKeyUp`],alert:[`onKeyUp`,`onKeyDown`,`onKeyPress`],body:[`onError`,`onLoad`],dialog:[`onKeyUp`,`onKeyDown`,`onKeyPress`],iframe:[`onError`,`onLoad`],img:[`onError`,`onLoad`]}],"jsx-a11y/no-noninteractive-element-to-interactive-role":[`error`,{ul:[`listbox`,`menu`,`menubar`,`radiogroup`,`tablist`,`tree`,`treegrid`],ol:[`listbox`,`menu`,`menubar`,`radiogroup`,`tablist`,`tree`,`treegrid`],li:[`menuitem`,`menuitemradio`,`menuitemcheckbox`,`option`,`row`,`tab`,`treeitem`],table:[`grid`],td:[`gridcell`],fieldset:[`radiogroup`,`presentation`]}],"jsx-a11y/no-noninteractive-tabindex":[`error`,{tags:[],roles:[`tabpanel`],allowExpressionValues:!0}],"jsx-a11y/no-redundant-roles":`error`,"jsx-a11y/no-static-element-interactions":[`error`,{allowExpressionValues:!0,handlers:[`onClick`,`onMouseDown`,`onMouseUp`,`onKeyPress`,`onKeyDown`,`onKeyUp`]}],"jsx-a11y/role-has-required-aria-props":`error`,"jsx-a11y/role-supports-aria-props":`error`,"jsx-a11y/scope":`error`,"jsx-a11y/tabindex-no-positive":`error`,"react/display-name":2,"react/jsx-key":2,"react/jsx-no-comment-textnodes":2,"react/jsx-no-duplicate-props":2,"react/jsx-no-target-blank":2,"react/jsx-no-undef":2,"react/no-children-prop":2,"react/no-danger-with-children":2,"react/no-direct-mutation-state":2,"react/no-find-dom-node":2,"react/no-is-mounted":2,"react/no-render-return-value":2,"react/no-string-refs":2,"react/no-unescaped-entities":2,"react/no-unknown-property":2,"react/require-render-return":2,"react/rules-of-hooks":`error`,"react/exhaustive-deps":`warn`,"react-perf/jsx-no-new-array-as-prop":`error`,"react-perf/jsx-no-new-function-as-prop":`error`,"react-perf/jsx-no-new-object-as-prop":`error`,"no-use-before-define":`off`},f={"max-classes-per-file":`off`,"no-magic-numbers":`off`,"import/first":`off`},p={"typescript/no-deprecated":`error`,"typescript/no-floating-promises":`error`,"typescript/no-misused-promises":`error`},m={"typescript/ban-ts-comment":[`error`,{"ts-expect-error":`allow-with-description`,"ts-ignore":`allow-with-description`,"ts-nocheck":`allow-with-description`,"ts-check":`allow-with-description`}],"typescript/no-array-constructor":`error`,"typescript/no-duplicate-enum-values":`error`,"typescript/no-empty-object-type":`error`,"typescript/no-explicit-any":`error`,"typescript/no-extra-non-null-assertion":`error`,"typescript/no-misused-new":`error`,"typescript/no-namespace":`error`,"typescript/no-non-null-asserted-optional-chain":`error`,"typescript/no-require-imports":`error`,"typescript/no-this-alias":`error`,"typescript/no-unnecessary-type-constraint":`error`,"typescript/no-unsafe-declaration-merging":`error`,"typescript/no-unsafe-function-type":`error`,"typescript/no-unused-expressions":`error`,"typescript/no-unused-vars":`error`,"typescript/no-wrapper-object-types":`error`,"typescript/prefer-as-const":`error`,"typescript/prefer-namespace-keyword":`error`,"typescript/triple-slash-reference":`error`,"typescript/dot-notation":`error`,"no-array-constructor":`off`,"no-empty-function":`off`,"dot-notation":`off`,"no-unused-expressions":`off`,"no-unused-vars":`off`,"no-useless-constructor":`off`,"import/extensions":`off`},h={"vitest/no-focused-tests":`error`,"vitest/no-disabled-tests":`error`,"vitest/no-identical-title":`error`,"vitest/no-conditional-expect":`error`,"vitest/no-standalone-expect":`error`,"vitest/require-mock-type-parameters":`off`,"vitest/valid-expect":`error`},g={base:{globals:e.es2023,rules:o},browser:{globals:e.browser,rules:s},jsdoc:{rules:c},node:{globals:e.node,rules:u},react:{rules:d},tests:{rules:f},typescript:{rules:m}},_=(...e)=>e.reduce((e,t)=>(Object.assign(e,t?.rules),e),{}),v=(e,t=[])=>_(...e,...t.map(e=>({rules:e}))),y=e=>Object.fromEntries(Object.keys(g[e].globals).map(e=>[e,`off`])),b=e=>Object.hasOwn(e,`files`),x=e=>e?Array.isArray(e)?e.reduce((e,t)=>(b(t)?e.configOverrides.push(t):e.ruleOverrides.push(t),e),{configOverrides:[],ruleOverrides:[]}):{configOverrides:[],ruleOverrides:[e]}:{configOverrides:[],ruleOverrides:[]},S=(e,t=[])=>{if(t.length===0)return e;let n=e[`no-underscore-dangle`]||a;if(!Array.isArray(n))return e;let[r,o]=n,s=typeof o==`object`&&o?o:{};return{...e,"no-underscore-dangle":[r,{...i,...s,allow:Array.from(new Set([...i.allow,...s.allow||[],...t]))}]}},C=({globals:t={},doingTestsSetup:n})=>n?t:Object.entries(t).reduce((t,[n,r])=>{if(n.startsWith(`$`)){let r=n.slice(1);if(!Object.hasOwn(e,r))throw Error(`Unknown global group: "${r}".`);Object.assign(t,e[r])}else t[n]=r===!0?`writable`:r;return t},{}),w=e=>{if(!t.includes(e)){let e=t.map(e=>`"${e}"`).join(` or `);throw Error(`Environment must be ${e}.`)}return e},T=e=>Array.isArray(e)?e.slice():[e],E=e=>e===void 0?[]:typeof e==`string`&&Object.hasOwn(r,e)?r[e].slice():T(e),D=({tests:e,productionEnv:t,productionTs:n})=>e===!0?{env:t,files:[...r.colocated,...r.directory],framework:`vitest`,ts:n}:typeof e==`string`?{env:t,files:r[e].slice(),framework:`vitest`,ts:n}:{env:e.env??t,files:E(e.files),framework:e.framework||`vitest`,ts:e.ts??n},O=({env:e,testConfig:t,tests:n,ts:r=!1})=>t?{doingTestsSetup:!0,testConfig:t}:n?{doingTestsSetup:!1,testConfig:D({tests:n,productionEnv:e,productionTs:r})}:{doingTestsSetup:!1,testConfig:void 0},k=t=>{let{env:n,extensions:r,globals:i,jsdoc:a,nextjs:o,react:s,ts:c=!0,typeAware:u,baseFragment:d=g.base,baseExtensionFragment:f}=t,m=f??r?.base,_=w(n),{doingTestsSetup:v,testConfig:y}=O({env:_,testConfig:t.testConfig,tests:t.tests,ts:c}),b=[d,g[_]],x=C({globals:i,doingTestsSetup:v}),S=[`import`],T=[];return _===`node`&&S.push(`node`),a&&(b.push(g.jsdoc),S.push(`jsdoc`)),c&&b.push(g.typescript),u&&b.push({rules:p}),(c||u)&&S.push(`typescript`),s&&(b.push(g.react),S.push(`react`,`jsx-a11y`,`react-perf`)),o&&(b.push({rules:l}),S.push(`nextjs`)),y?.framework===`vitest`&&(S.push(`vitest`),v&&(b.push({rules:h}),T.push(e.vitest))),m&&b.push(m),r?.[_]&&b.push(r[_]),a&&r?.jsdoc&&b.push(r.jsdoc),c&&r?.typescript&&b.push(r.typescript),s&&r?.react&&b.push(r.react),{env:_,fragments:b,globals:x,plugins:S,testConfig:y,configGlobals:T.length>0?Object.assign({},...T):void 0}},A=({parentEnv:e,testConfig:t,allowedDangleNames:n,extensions:r,extraRules:i=[],globals:a})=>{let{env:o,fragments:s,globals:c,configGlobals:l}=k({env:t.env,extensions:r,globals:a,testConfig:t,ts:t.ts,baseFragment:g.tests,baseExtensionFragment:r?.tests}),u=S(v(s,i),n);if(t.files.length===0)throw Error(`Custom test configuration requires at least one file glob.`);return{files:t.files,globals:{...y(e),...g[o].globals,...c,...l},rules:u}},j=({override:e,options:t,parentEnv:n,rootRuleOverrides:r})=>{let{files:i,ignores:a,rules:o,tests:s,...c}=e,{env:l,fragments:u,globals:d,plugins:f,testConfig:p}=k({...t,...c,env:e.env??n,tests:s}),m=[...r,...o?[o]:[]];return{override:{excludeFiles:a,files:T(i),globals:{...y(n),...g[l].globals,...d},rules:S(v(u,m),t.allowedDangleNames)},plugins:f,testOverride:p?A({parentEnv:n,testConfig:p,allowedDangleNames:t.allowedDangleNames,extensions:c.extensions??t.extensions,extraRules:m,globals:c.globals??t.globals}):void 0}},M=e=>{let{fragments:t,globals:r,plugins:i,env:a,testConfig:o}=k(e),{allowedDangleNames:s,extensions:c,ignores:l,typeAware:u}=e,{configOverrides:d,ruleOverrides:f}=x(e.overrides),p=[],m=i.slice();o&&p.push(A({parentEnv:a,testConfig:o,allowedDangleNames:s,extensions:c,extraRules:f,globals:r}));for(let t of d){let n=j({override:t,options:e,parentEnv:a,rootRuleOverrides:f});p.push(n.override),n.testOverride&&p.push(n.testOverride);for(let e of n.plugins)m.includes(e)||m.push(e)}let h=S(v(t,f),s);return{globals:{...g.base.globals,...g[a].globals,...r},ignorePatterns:[...n,...l||[]],options:u?{typeAware:!0}:void 0,plugins:m,rules:h,overrides:p.length>0?p:void 0}},N=[`.next/`,`out/`,`build/`,`next-env.d.ts`],P=({globals:e={},ignores:t=[],...n})=>M({...n,env:`node`,globals:{$browser:!0,...e},ignores:[...N,...t],nextjs:!0,react:!0,ts:!0});export{M as createConfig,P as createNextjsConfig,g as extensionFragments};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|