@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 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
- configs: ['node'],
28
+ env: 'node',
29
29
  tests: 'directory',
30
30
  });
31
31
  ```
32
32
 
33
- `configs` accepts exactly 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.
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
- configs: ['browser'],
41
+ env: 'browser',
42
42
  });
43
43
  ```
44
44
 
45
45
  ### React
46
46
 
47
- Use `createReactConfig` with the same options to add React, JSX accessibility, and React-performance rules.
47
+ Use `createConfig` and send the `react` option to add React, JSX accessibility, and React-performance rules.
48
48
 
49
49
  ```ts
50
- import { createReactConfig } from '@homer0/oxlint-config';
50
+ import { createConfig } from '@homer0/oxlint-config';
51
51
 
52
- export default createReactConfig({
53
- configs: ['browser'],
54
- tests: 'colocated',
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 `configs` and `ts`, or production settings by default, with Vitest rules. |
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
- configs: ['browser'],
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
- configs: ['node'],
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
- configs: ['node'],
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
- configs: ['node'],
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
- configs: ['node'],
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
- configs: ['node'],
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
- configs: ['node'],
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