@jabworks/oxlint-config 0.1.1 → 0.2.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 +48 -6
- package/dist/index.cjs +18 -0
- package/dist/index.d.cts +9 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +9 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +17 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,11 +4,15 @@ Opinionated [oxlint](https://oxc.rs/docs/guide/usage/linter/) presets ported fro
|
|
|
4
4
|
|
|
5
5
|
## Presets
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
| Preset | Extends | Use for |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `base` | — | Any JS/TS project |
|
|
10
|
+
| `typescript` | `base` | TypeScript-only additions (some type-aware, see below) |
|
|
11
|
+
| `react` | `typescript` | React libraries and apps |
|
|
12
|
+
| `next` | `typescript` | Next.js applications |
|
|
13
|
+
| `node` | `typescript` | Node.js backends and APIs |
|
|
14
|
+
| `library` | `typescript` | Framework-agnostic utility libraries |
|
|
15
|
+
| `vitest` | — | Vitest test files (composable overlay) |
|
|
12
16
|
|
|
13
17
|
## Installation
|
|
14
18
|
|
|
@@ -19,8 +23,9 @@ npm install -D oxlint oxlint-tsgolint @jabworks/oxlint-config
|
|
|
19
23
|
## Usage
|
|
20
24
|
|
|
21
25
|
```ts
|
|
22
|
-
// oxlint.config.ts
|
|
26
|
+
// oxlint.config.ts — pick the preset that matches your project
|
|
23
27
|
import { next } from '@jabworks/oxlint-config';
|
|
28
|
+
// or: import { node, library, react, typescript } from '@jabworks/oxlint-config';
|
|
24
29
|
import { defineConfig } from 'oxlint';
|
|
25
30
|
|
|
26
31
|
export default defineConfig({
|
|
@@ -56,6 +61,42 @@ export default defineConfig({ extends: [custom] });
|
|
|
56
61
|
|
|
57
62
|
The typescript preset enables type-aware rules (`typescript/no-misused-promises`, `typescript/consistent-type-exports`, `typescript/restrict-template-expressions`, …). These require [`oxlint-tsgolint`](https://github.com/oxc-project/tsgolint) installed in the consuming project and running oxlint with `--type-aware`; without it they are silently skipped.
|
|
58
63
|
|
|
64
|
+
## Node and library presets
|
|
65
|
+
|
|
66
|
+
### `node`
|
|
67
|
+
|
|
68
|
+
Sets `env.node: true` and enables the built-in `node` plugin with Node.js best practices:
|
|
69
|
+
|
|
70
|
+
- `node/no-process-exit` — use `process.exitCode` instead of `process.exit()`
|
|
71
|
+
- `node/no-path-concat` — use `path.join()` or `path.resolve()` over string concatenation
|
|
72
|
+
- `node/no-new-require` — disallow `new require(…)`
|
|
73
|
+
- `node/no-exports-assign` — disallow reassigning `exports`
|
|
74
|
+
- `node/handle-callback-err` — enforce error handling in callbacks
|
|
75
|
+
|
|
76
|
+
Also includes a vitest test-file override (same as `react`).
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
// oxlint.config.ts
|
|
80
|
+
import { node } from '@jabworks/oxlint-config';
|
|
81
|
+
import { defineConfig } from 'oxlint';
|
|
82
|
+
|
|
83
|
+
export default defineConfig({ extends: [node] });
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
> **Note:** `n/prefer-promises/fs`, `n/prefer-promises/dns`, and `n/prefer-global/*` from `eslint-plugin-n` have no oxlint built-in equivalent as of 1.69. Use the ESLint `node` config alongside for those rules.
|
|
87
|
+
|
|
88
|
+
### `library`
|
|
89
|
+
|
|
90
|
+
No environment globals — suitable for framework-agnostic packages (utility libraries, shared hooks, etc.). Activates `import/no-cycle` which is disabled in `base` for performance.
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
// oxlint.config.ts
|
|
94
|
+
import { library } from '@jabworks/oxlint-config';
|
|
95
|
+
import { defineConfig } from 'oxlint';
|
|
96
|
+
|
|
97
|
+
export default defineConfig({ extends: [library] });
|
|
98
|
+
```
|
|
99
|
+
|
|
59
100
|
## Rules not ported from @jabworks/eslint-plugin
|
|
60
101
|
|
|
61
102
|
Unsupported by oxlint 1.69 (verified with `oxlint --rules` and `@oxlint/migrate --details`):
|
|
@@ -64,4 +105,5 @@ Unsupported by oxlint 1.69 (verified with `oxlint --rules` and `@oxlint/migrate
|
|
|
64
105
|
- Import: `newline-after-import`, `no-extraneous-dependencies`, `no-relative-packages`, `no-useless-path-segments`, `no-deprecated`
|
|
65
106
|
- TypeScript: `method-signature-style`, `naming-convention`
|
|
66
107
|
- React: `function-component-definition`, `hook-use-state`, `jsx-no-leaked-render`, `jsx-sort-props`, `no-unstable-nested-components`
|
|
108
|
+
- Node: `n/prefer-promises/fs`, `n/prefer-promises/dns`, `n/no-callback-literal`, `n/prefer-global/*`
|
|
67
109
|
- Plugins with no oxlint equivalent: `simple-import-sort`, `eslint-comments`, `@stylistic` (formatting is Prettier's job)
|
package/dist/index.cjs
CHANGED
|
@@ -155,6 +155,7 @@ const typescript = mergeConfigs(base, {
|
|
|
155
155
|
"eslint/no-useless-constructor": "error"
|
|
156
156
|
}
|
|
157
157
|
});
|
|
158
|
+
const library = mergeConfigs(typescript, { rules: { "import/no-cycle": "error" } });
|
|
158
159
|
//#endregion
|
|
159
160
|
//#region src/configs/vitest.ts
|
|
160
161
|
/**
|
|
@@ -244,6 +245,19 @@ const next = mergeConfigs(react, {
|
|
|
244
245
|
}],
|
|
245
246
|
ignorePatterns: [".next/**"]
|
|
246
247
|
});
|
|
248
|
+
const node = mergeConfigs(typescript, {
|
|
249
|
+
plugins: ["node"],
|
|
250
|
+
env: { node: true },
|
|
251
|
+
rules: {
|
|
252
|
+
"node/no-process-exit": "error",
|
|
253
|
+
"node/no-path-concat": "error",
|
|
254
|
+
"node/no-new-require": "error",
|
|
255
|
+
"node/no-exports-assign": "error",
|
|
256
|
+
"node/handle-callback-err": "error",
|
|
257
|
+
"node/no-process-env": "off"
|
|
258
|
+
},
|
|
259
|
+
overrides: [vitestOverride]
|
|
260
|
+
});
|
|
247
261
|
//#endregion
|
|
248
262
|
//#region src/index.ts
|
|
249
263
|
const config = { configs: {
|
|
@@ -251,13 +265,17 @@ const config = { configs: {
|
|
|
251
265
|
typescript,
|
|
252
266
|
react,
|
|
253
267
|
next,
|
|
268
|
+
node,
|
|
269
|
+
library,
|
|
254
270
|
vitest
|
|
255
271
|
} };
|
|
256
272
|
//#endregion
|
|
257
273
|
exports.base = base;
|
|
258
274
|
exports.config = config;
|
|
275
|
+
exports.library = library;
|
|
259
276
|
exports.mergeConfigs = mergeConfigs;
|
|
260
277
|
exports.next = next;
|
|
278
|
+
exports.node = node;
|
|
261
279
|
exports.react = react;
|
|
262
280
|
exports.typescript = typescript;
|
|
263
281
|
exports.vitest = vitest;
|
package/dist/index.d.cts
CHANGED
|
@@ -31,6 +31,9 @@ interface OxlintConfig {
|
|
|
31
31
|
*/
|
|
32
32
|
declare const base: OxlintConfig;
|
|
33
33
|
//#endregion
|
|
34
|
+
//#region src/configs/library.d.ts
|
|
35
|
+
declare const library: OxlintConfig;
|
|
36
|
+
//#endregion
|
|
34
37
|
//#region src/configs/next.d.ts
|
|
35
38
|
/**
|
|
36
39
|
* Next.js preset, ported from `@jabworks/eslint-plugin` configs.next.
|
|
@@ -39,6 +42,9 @@ declare const base: OxlintConfig;
|
|
|
39
42
|
*/
|
|
40
43
|
declare const next: OxlintConfig;
|
|
41
44
|
//#endregion
|
|
45
|
+
//#region src/configs/node.d.ts
|
|
46
|
+
declare const node: OxlintConfig;
|
|
47
|
+
//#endregion
|
|
42
48
|
//#region src/configs/react.d.ts
|
|
43
49
|
declare const react: OxlintConfig;
|
|
44
50
|
//#endregion
|
|
@@ -64,9 +70,11 @@ declare const config: {
|
|
|
64
70
|
typescript: OxlintConfig;
|
|
65
71
|
react: OxlintConfig;
|
|
66
72
|
next: OxlintConfig;
|
|
73
|
+
node: OxlintConfig;
|
|
74
|
+
library: OxlintConfig;
|
|
67
75
|
vitest: OxlintConfig;
|
|
68
76
|
};
|
|
69
77
|
};
|
|
70
78
|
//#endregion
|
|
71
|
-
export { type OxlintConfig, type OxlintOverride, type OxlintRuleEntry, type OxlintSeverity, base, config, mergeConfigs, next, react, typescript, vitest };
|
|
79
|
+
export { type OxlintConfig, type OxlintOverride, type OxlintRuleEntry, type OxlintSeverity, base, config, library, mergeConfigs, next, node, react, typescript, vitest };
|
|
72
80
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/configs/base.ts","../src/configs/next.ts","../src/configs/react.ts","../src/configs/typescript.ts","../src/configs/vitest.ts","../src/lib/merge.ts","../src/index.ts"],"mappings":";KAAY,cAAA;AAAA,KAEA,eAAA,GAAkB,cAAA,IAAkB,cAAA;AAAA,UAE/B,cAAA;EACf,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,GAAA,GAAM,MAAA;AAAA;AAAA,UAGS,YAAA;EACf,OAAA;EACA,OAAA;EACA,UAAA,GAAa,MAAA,SAAe,cAAA;EAC5B,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,SAAA,GAAY,cAAA;EACZ,cAAA;EACA,GAAA,GAAM,MAAA;EACN,QAAA,GAAW,MAAA;AAAA;;;AAnBb;;;;;AAEA;;;;;AAFA,cCYM,IAAA,EAAM,YAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/configs/base.ts","../src/configs/library.ts","../src/configs/next.ts","../src/configs/node.ts","../src/configs/react.ts","../src/configs/typescript.ts","../src/configs/vitest.ts","../src/lib/merge.ts","../src/index.ts"],"mappings":";KAAY,cAAA;AAAA,KAEA,eAAA,GAAkB,cAAA,IAAkB,cAAA;AAAA,UAE/B,cAAA;EACf,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,GAAA,GAAM,MAAA;AAAA;AAAA,UAGS,YAAA;EACf,OAAA;EACA,OAAA;EACA,UAAA,GAAa,MAAA,SAAe,cAAA;EAC5B,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,SAAA,GAAY,cAAA;EACZ,cAAA;EACA,GAAA,GAAM,MAAA;EACN,QAAA,GAAW,MAAA;AAAA;;;AAnBb;;;;;AAEA;;;;;AAFA,cCYM,IAAA,EAAM,YAAA;;;cCKN,OAAA,EAAS,YAAA;;;AFjBf;;;;;AAAA,cGSM,IAAA,EAAM,YAAA;;;cCmBN,IAAA,EAAM,YAAA;;;cCUN,KAAA,EAAO,YAAA;;;cCKP,UAAA,EAAY,YAAA;;;cCrBZ,MAAA,EAAQ,YAAA;;;APtBd;;;;;AAEA;AAFA,cQQa,YAAA,MAAmB,OAAA,EAAS,YAAA,OAAiB,YAAA;;;cCG7C,MAAA;;UAUZ,YAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -31,6 +31,9 @@ interface OxlintConfig {
|
|
|
31
31
|
*/
|
|
32
32
|
declare const base: OxlintConfig;
|
|
33
33
|
//#endregion
|
|
34
|
+
//#region src/configs/library.d.ts
|
|
35
|
+
declare const library: OxlintConfig;
|
|
36
|
+
//#endregion
|
|
34
37
|
//#region src/configs/next.d.ts
|
|
35
38
|
/**
|
|
36
39
|
* Next.js preset, ported from `@jabworks/eslint-plugin` configs.next.
|
|
@@ -39,6 +42,9 @@ declare const base: OxlintConfig;
|
|
|
39
42
|
*/
|
|
40
43
|
declare const next: OxlintConfig;
|
|
41
44
|
//#endregion
|
|
45
|
+
//#region src/configs/node.d.ts
|
|
46
|
+
declare const node: OxlintConfig;
|
|
47
|
+
//#endregion
|
|
42
48
|
//#region src/configs/react.d.ts
|
|
43
49
|
declare const react: OxlintConfig;
|
|
44
50
|
//#endregion
|
|
@@ -64,9 +70,11 @@ declare const config: {
|
|
|
64
70
|
typescript: OxlintConfig;
|
|
65
71
|
react: OxlintConfig;
|
|
66
72
|
next: OxlintConfig;
|
|
73
|
+
node: OxlintConfig;
|
|
74
|
+
library: OxlintConfig;
|
|
67
75
|
vitest: OxlintConfig;
|
|
68
76
|
};
|
|
69
77
|
};
|
|
70
78
|
//#endregion
|
|
71
|
-
export { type OxlintConfig, type OxlintOverride, type OxlintRuleEntry, type OxlintSeverity, base, config, mergeConfigs, next, react, typescript, vitest };
|
|
79
|
+
export { type OxlintConfig, type OxlintOverride, type OxlintRuleEntry, type OxlintSeverity, base, config, library, mergeConfigs, next, node, react, typescript, vitest };
|
|
72
80
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/configs/base.ts","../src/configs/next.ts","../src/configs/react.ts","../src/configs/typescript.ts","../src/configs/vitest.ts","../src/lib/merge.ts","../src/index.ts"],"mappings":";KAAY,cAAA;AAAA,KAEA,eAAA,GAAkB,cAAA,IAAkB,cAAA;AAAA,UAE/B,cAAA;EACf,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,GAAA,GAAM,MAAA;AAAA;AAAA,UAGS,YAAA;EACf,OAAA;EACA,OAAA;EACA,UAAA,GAAa,MAAA,SAAe,cAAA;EAC5B,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,SAAA,GAAY,cAAA;EACZ,cAAA;EACA,GAAA,GAAM,MAAA;EACN,QAAA,GAAW,MAAA;AAAA;;;AAnBb;;;;;AAEA;;;;;AAFA,cCYM,IAAA,EAAM,YAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/configs/base.ts","../src/configs/library.ts","../src/configs/next.ts","../src/configs/node.ts","../src/configs/react.ts","../src/configs/typescript.ts","../src/configs/vitest.ts","../src/lib/merge.ts","../src/index.ts"],"mappings":";KAAY,cAAA;AAAA,KAEA,eAAA,GAAkB,cAAA,IAAkB,cAAA;AAAA,UAE/B,cAAA;EACf,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,GAAA,GAAM,MAAA;AAAA;AAAA,UAGS,YAAA;EACf,OAAA;EACA,OAAA;EACA,UAAA,GAAa,MAAA,SAAe,cAAA;EAC5B,KAAA,GAAQ,MAAA,SAAe,eAAA;EACvB,SAAA,GAAY,cAAA;EACZ,cAAA;EACA,GAAA,GAAM,MAAA;EACN,QAAA,GAAW,MAAA;AAAA;;;AAnBb;;;;;AAEA;;;;;AAFA,cCYM,IAAA,EAAM,YAAA;;;cCKN,OAAA,EAAS,YAAA;;;AFjBf;;;;;AAAA,cGSM,IAAA,EAAM,YAAA;;;cCmBN,IAAA,EAAM,YAAA;;;cCUN,KAAA,EAAO,YAAA;;;cCKP,UAAA,EAAY,YAAA;;;cCrBZ,MAAA,EAAQ,YAAA;;;APtBd;;;;;AAEA;AAFA,cQQa,YAAA,MAAmB,OAAA,EAAS,YAAA,OAAiB,YAAA;;;cCG7C,MAAA;;UAUZ,YAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -154,6 +154,7 @@ const typescript = mergeConfigs(base, {
|
|
|
154
154
|
"eslint/no-useless-constructor": "error"
|
|
155
155
|
}
|
|
156
156
|
});
|
|
157
|
+
const library = mergeConfigs(typescript, { rules: { "import/no-cycle": "error" } });
|
|
157
158
|
//#endregion
|
|
158
159
|
//#region src/configs/vitest.ts
|
|
159
160
|
/**
|
|
@@ -243,6 +244,19 @@ const next = mergeConfigs(react, {
|
|
|
243
244
|
}],
|
|
244
245
|
ignorePatterns: [".next/**"]
|
|
245
246
|
});
|
|
247
|
+
const node = mergeConfigs(typescript, {
|
|
248
|
+
plugins: ["node"],
|
|
249
|
+
env: { node: true },
|
|
250
|
+
rules: {
|
|
251
|
+
"node/no-process-exit": "error",
|
|
252
|
+
"node/no-path-concat": "error",
|
|
253
|
+
"node/no-new-require": "error",
|
|
254
|
+
"node/no-exports-assign": "error",
|
|
255
|
+
"node/handle-callback-err": "error",
|
|
256
|
+
"node/no-process-env": "off"
|
|
257
|
+
},
|
|
258
|
+
overrides: [vitestOverride]
|
|
259
|
+
});
|
|
246
260
|
//#endregion
|
|
247
261
|
//#region src/index.ts
|
|
248
262
|
const config = { configs: {
|
|
@@ -250,9 +264,11 @@ const config = { configs: {
|
|
|
250
264
|
typescript,
|
|
251
265
|
react,
|
|
252
266
|
next,
|
|
267
|
+
node,
|
|
268
|
+
library,
|
|
253
269
|
vitest
|
|
254
270
|
} };
|
|
255
271
|
//#endregion
|
|
256
|
-
export { base, config, mergeConfigs, next, react, typescript, vitest };
|
|
272
|
+
export { base, config, library, mergeConfigs, next, node, react, typescript, vitest };
|
|
257
273
|
|
|
258
274
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/configs/base.ts","../src/lib/merge.ts","../src/configs/typescript.ts","../src/configs/vitest.ts","../src/configs/react.ts","../src/configs/next.ts","../src/index.ts"],"sourcesContent":["import type { OxlintConfig } from '../types.js';\n\n/**\n * Base preset, ported from `@jabworks/eslint-plugin` configs.base.\n *\n * Dropped (no oxlint equivalent as of 1.58): no-floating-decimal,\n * no-implied-eval, no-octal-escape, prefer-regex-literals, object-shorthand,\n * no-unreachable-loop, camelcase, prefer-arrow-callback, no-undef-init,\n * import/newline-after-import, import/no-extraneous-dependencies,\n * import/no-relative-packages, import/no-useless-path-segments,\n * import/no-deprecated, simple-import-sort/*, eslint-comments/*, @stylistic/*.\n */\nconst base: OxlintConfig = {\n plugins: ['import', 'unicorn'],\n categories: {\n correctness: 'error',\n },\n env: {\n builtin: true,\n },\n rules: {\n // Best practices\n 'eslint/array-callback-return': ['error', { allowImplicit: true }],\n 'eslint/block-scoped-var': 'error',\n 'eslint/curly': ['warn', 'multi-line'],\n 'eslint/default-case-last': 'error',\n 'eslint/eqeqeq': 'error',\n 'eslint/grouped-accessor-pairs': 'error',\n 'eslint/no-alert': 'error',\n 'eslint/no-caller': 'error',\n 'eslint/no-constructor-return': 'error',\n 'eslint/no-else-return': 'warn',\n 'eslint/no-eval': 'error',\n 'eslint/no-extend-native': 'error',\n 'eslint/no-extra-bind': 'error',\n 'eslint/no-extra-label': 'error',\n 'eslint/no-implicit-coercion': 'error',\n 'eslint/no-iterator': 'error',\n 'eslint/no-labels': 'error',\n 'eslint/no-lone-blocks': 'error',\n 'eslint/no-new': 'error',\n 'eslint/no-new-func': 'error',\n 'eslint/no-new-wrappers': 'error',\n 'eslint/no-param-reassign': 'error',\n 'eslint/no-proto': 'error',\n 'eslint/no-return-assign': 'error',\n 'eslint/no-script-url': 'error',\n 'eslint/no-self-compare': 'error',\n 'eslint/no-sequences': 'error',\n 'eslint/no-useless-call': 'error',\n 'eslint/no-useless-concat': 'error',\n 'eslint/no-useless-return': 'warn',\n 'eslint/prefer-promise-reject-errors': ['error', { allowEmptyReject: true }],\n 'eslint/yoda': 'warn',\n // ES6\n 'eslint/no-useless-computed-key': 'warn',\n 'eslint/no-useless-rename': 'warn',\n 'eslint/no-var': 'error',\n 'eslint/prefer-const': 'warn',\n 'eslint/prefer-numeric-literals': 'error',\n 'eslint/prefer-rest-params': 'error',\n 'eslint/prefer-spread': 'error',\n 'eslint/prefer-template': 'warn',\n 'eslint/symbol-description': 'error',\n // Possible errors\n 'eslint/no-console': ['warn', { allow: ['error', 'warn'] }],\n 'eslint/no-constant-binary-expression': 'error',\n 'eslint/no-promise-executor-return': 'error',\n 'eslint/no-template-curly-in-string': 'error',\n // Stylistic\n 'eslint/func-names': ['error', 'as-needed'],\n 'eslint/new-cap': ['error', { capIsNew: false }],\n 'eslint/no-array-constructor': 'error',\n 'eslint/no-bitwise': 'error',\n 'eslint/no-lonely-if': 'warn',\n 'eslint/no-multi-assign': 'error',\n 'eslint/no-nested-ternary': 'error',\n 'eslint/no-unneeded-ternary': 'error',\n 'eslint/prefer-object-spread': 'warn',\n // Variables\n 'eslint/no-label-var': 'error',\n 'eslint/no-unused-vars': [\n 'error',\n {\n args: 'after-used',\n argsIgnorePattern: '^_',\n ignoreRestSiblings: false,\n vars: 'all',\n varsIgnorePattern: '^_',\n },\n ],\n // Import\n 'import/first': 'error',\n 'import/no-absolute-path': 'error',\n 'import/no-default-export': 'error',\n 'import/no-mutable-exports': 'error',\n 'import/no-self-import': 'error',\n // This rule is the most taxing on performance, so we disable it by default.\n 'import/no-cycle': 'off',\n 'import/named': 'off',\n // Unicorn\n 'unicorn/filename-case': ['error', { case: 'kebabCase' }],\n },\n ignorePatterns: [\n 'dist/**',\n 'build/**',\n 'out/**',\n 'coverage/**',\n 'node_modules/**',\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n '*.config.js',\n '*.config.mjs',\n '*.config.cjs',\n ],\n};\n\nexport default base;\n","import type { OxlintConfig } from '../types.js';\n\n/**\n * Merge oxlint configs left-to-right into a single standalone config.\n *\n * Plugins and ignorePatterns are unioned, categories/rules/env/settings are\n * shallow-merged (later configs win), and overrides are concatenated.\n */\nexport const mergeConfigs = (...configs: OxlintConfig[]): OxlintConfig => {\n const result: OxlintConfig = {};\n\n for (const config of configs) {\n if (config.plugins) result.plugins = [...new Set([...(result.plugins ?? []), ...config.plugins])];\n\n if (config.categories) result.categories = { ...result.categories, ...config.categories };\n\n if (config.rules) result.rules = { ...result.rules, ...config.rules };\n\n if (config.env) result.env = { ...result.env, ...config.env };\n\n if (config.settings) result.settings = { ...result.settings, ...config.settings };\n\n if (config.overrides) result.overrides = [...(result.overrides ?? []), ...config.overrides];\n\n if (config.ignorePatterns)\n result.ignorePatterns = [...new Set([...(result.ignorePatterns ?? []), ...config.ignorePatterns])];\n }\n\n return result;\n};\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport base from './base.js';\n\n/**\n * TypeScript preset, ported from `@jabworks/eslint-plugin` configs.typescript.\n *\n * Type-aware rules (consistent-type-exports, no-misused-promises,\n * no-redundant-type-constituents, no-unnecessary-qualifier,\n * prefer-regexp-exec, require-array-sort-compare,\n * restrict-template-expressions, switch-exhaustiveness-check) only run when\n * `oxlint-tsgolint` is installed and oxlint runs with `--type-aware`.\n *\n * Dropped (no oxlint equivalent as of 1.58): method-signature-style,\n * naming-convention.\n */\nexport const typescriptRules: OxlintConfig = {\n plugins: ['typescript'],\n rules: {\n 'typescript/consistent-type-exports': ['warn', { fixMixedExportsWithInlineTypeSpecifier: true }],\n 'typescript/consistent-type-imports': [\n 'warn',\n {\n disallowTypeAnnotations: true,\n fixStyle: 'inline-type-imports',\n prefer: 'type-imports',\n },\n ],\n 'typescript/no-misused-promises': ['error', { checksVoidReturn: { attributes: false } }],\n 'typescript/no-redundant-type-constituents': 'warn',\n 'typescript/no-unnecessary-qualifier': 'warn',\n 'typescript/prefer-regexp-exec': 'warn',\n 'typescript/require-array-sort-compare': ['error', { ignoreStringArrays: true }],\n 'typescript/restrict-template-expressions': ['error', { allowNumber: true }],\n 'typescript/switch-exhaustiveness-check': ['warn', { considerDefaultExhaustiveForUnions: true }],\n 'typescript/no-empty-object-type': ['error', { allowInterfaces: 'with-single-extends' }],\n // Extension rules: oxlint's eslint/* implementations handle TS sources.\n 'eslint/default-param-last': 'error',\n 'eslint/no-loop-func': 'error',\n 'eslint/no-useless-constructor': 'error',\n },\n};\n\nconst typescript: OxlintConfig = mergeConfigs(base, typescriptRules);\n\nexport default typescript;\n","import type { OxlintConfig, OxlintOverride } from '../types.js';\n\n/**\n * Vitest preset, ported from `@jabworks/eslint-plugin` configs.vitest.\n * Scoped to test files via an override, like the original flat config.\n */\nexport const vitestOverride: OxlintOverride = {\n files: ['**/*.test.{js,ts,mjs,cjs,jsx,tsx}', '**/__tests__/**', '**/tests/**'],\n plugins: ['vitest'],\n env: {\n node: true,\n vitest: true,\n },\n rules: {\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n 'vitest/no-commented-out-tests': 'error',\n 'vitest/no-disabled-tests': 'error',\n 'vitest/no-focused-tests': 'error',\n 'vitest/no-identical-title': 'error',\n },\n};\n\nconst vitest: OxlintConfig = {\n categories: {\n correctness: 'error',\n },\n overrides: [vitestOverride],\n};\n\nexport default vitest;\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport typescript from './typescript.js';\nimport { vitestOverride } from './vitest.js';\n\n/**\n * React preset, ported from `@jabworks/eslint-plugin` configs.react.\n * Includes the react-hooks rules (folded into oxlint's react plugin) and the\n * vitest override for test files.\n *\n * Dropped (no oxlint equivalent as of 1.58): function-component-definition,\n * hook-use-state, jsx-no-leaked-render, jsx-sort-props,\n * no-unstable-nested-components.\n */\nexport const reactRules: OxlintConfig = {\n plugins: ['react', 'jsx-a11y'],\n env: {\n browser: true,\n },\n rules: {\n 'react/react-in-jsx-scope': 'off',\n 'react/button-has-type': 'warn',\n 'react/jsx-boolean-value': 'warn',\n 'react/jsx-curly-brace-presence': 'warn',\n 'react/jsx-fragments': 'warn',\n 'react/jsx-no-target-blank': ['error', { allowReferrer: true }],\n 'react/jsx-no-useless-fragment': ['warn', { allowExpressions: true }],\n 'react/jsx-pascal-case': 'warn',\n 'react/no-array-index-key': 'warn',\n 'react/self-closing-comp': 'warn',\n // react-hooks rules live under oxlint's react plugin.\n 'react/rules-of-hooks': 'error',\n 'react/exhaustive-deps': 'warn',\n 'jsx-a11y/no-autofocus': 'off',\n },\n overrides: [vitestOverride],\n};\n\nconst react: OxlintConfig = mergeConfigs(typescript, reactRules);\n\nexport default react;\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport react from './react.js';\n\n/**\n * Next.js preset, ported from `@jabworks/eslint-plugin` configs.next.\n * The nextjs plugin's recommended/core-web-vitals rules are enabled through\n * the `correctness` category.\n */\nconst next: OxlintConfig = mergeConfigs(react, {\n plugins: ['nextjs'],\n overrides: [\n {\n files: [\n '*.config.js',\n '*.config.mjs',\n '*.config.cjs',\n '*.config.ts',\n '**/*.d.ts',\n '**/*.stories.ts',\n '**/*.stories.tsx',\n 'app/**/*error.tsx',\n 'app/**/layout.tsx',\n 'app/**/not-found.tsx',\n 'app/**/opengraph-image.tsx',\n 'app/**/page.tsx',\n 'app/apple-icon.tsx',\n 'app/robots.ts',\n 'app/sitemap.ts',\n 'next.config.mjs',\n 'src/app/**/*error.tsx',\n 'src/app/**/layout.tsx',\n 'src/app/**/not-found.tsx',\n 'src/app/**/opengraph-image.tsx',\n 'src/app/**/page.tsx',\n 'src/app/apple-icon.tsx',\n 'src/app/robots.ts',\n 'src/app/sitemap.ts',\n ],\n rules: {\n 'import/no-default-export': 'off',\n },\n },\n ],\n ignorePatterns: ['.next/**'],\n});\n\nexport default next;\n","import base from './configs/base.js';\nimport next from './configs/next.js';\nimport react from './configs/react.js';\nimport typescript from './configs/typescript.js';\nimport vitest from './configs/vitest.js';\n\nexport { mergeConfigs } from './lib/merge.js';\nexport type { OxlintConfig, OxlintOverride, OxlintRuleEntry, OxlintSeverity } from './types.js';\n\nexport const config = {\n configs: {\n base,\n typescript,\n react,\n next,\n vitest,\n },\n};\n\nexport { base, next, react, typescript, vitest };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/configs/base.ts","../src/lib/merge.ts","../src/configs/typescript.ts","../src/configs/library.ts","../src/configs/vitest.ts","../src/configs/react.ts","../src/configs/next.ts","../src/configs/node.ts","../src/index.ts"],"sourcesContent":["import type { OxlintConfig } from '../types.js';\n\n/**\n * Base preset, ported from `@jabworks/eslint-plugin` configs.base.\n *\n * Dropped (no oxlint equivalent as of 1.58): no-floating-decimal,\n * no-implied-eval, no-octal-escape, prefer-regex-literals, object-shorthand,\n * no-unreachable-loop, camelcase, prefer-arrow-callback, no-undef-init,\n * import/newline-after-import, import/no-extraneous-dependencies,\n * import/no-relative-packages, import/no-useless-path-segments,\n * import/no-deprecated, simple-import-sort/*, eslint-comments/*, @stylistic/*.\n */\nconst base: OxlintConfig = {\n plugins: ['import', 'unicorn'],\n categories: {\n correctness: 'error',\n },\n env: {\n builtin: true,\n },\n rules: {\n // Best practices\n 'eslint/array-callback-return': ['error', { allowImplicit: true }],\n 'eslint/block-scoped-var': 'error',\n 'eslint/curly': ['warn', 'multi-line'],\n 'eslint/default-case-last': 'error',\n 'eslint/eqeqeq': 'error',\n 'eslint/grouped-accessor-pairs': 'error',\n 'eslint/no-alert': 'error',\n 'eslint/no-caller': 'error',\n 'eslint/no-constructor-return': 'error',\n 'eslint/no-else-return': 'warn',\n 'eslint/no-eval': 'error',\n 'eslint/no-extend-native': 'error',\n 'eslint/no-extra-bind': 'error',\n 'eslint/no-extra-label': 'error',\n 'eslint/no-implicit-coercion': 'error',\n 'eslint/no-iterator': 'error',\n 'eslint/no-labels': 'error',\n 'eslint/no-lone-blocks': 'error',\n 'eslint/no-new': 'error',\n 'eslint/no-new-func': 'error',\n 'eslint/no-new-wrappers': 'error',\n 'eslint/no-param-reassign': 'error',\n 'eslint/no-proto': 'error',\n 'eslint/no-return-assign': 'error',\n 'eslint/no-script-url': 'error',\n 'eslint/no-self-compare': 'error',\n 'eslint/no-sequences': 'error',\n 'eslint/no-useless-call': 'error',\n 'eslint/no-useless-concat': 'error',\n 'eslint/no-useless-return': 'warn',\n 'eslint/prefer-promise-reject-errors': ['error', { allowEmptyReject: true }],\n 'eslint/yoda': 'warn',\n // ES6\n 'eslint/no-useless-computed-key': 'warn',\n 'eslint/no-useless-rename': 'warn',\n 'eslint/no-var': 'error',\n 'eslint/prefer-const': 'warn',\n 'eslint/prefer-numeric-literals': 'error',\n 'eslint/prefer-rest-params': 'error',\n 'eslint/prefer-spread': 'error',\n 'eslint/prefer-template': 'warn',\n 'eslint/symbol-description': 'error',\n // Possible errors\n 'eslint/no-console': ['warn', { allow: ['error', 'warn'] }],\n 'eslint/no-constant-binary-expression': 'error',\n 'eslint/no-promise-executor-return': 'error',\n 'eslint/no-template-curly-in-string': 'error',\n // Stylistic\n 'eslint/func-names': ['error', 'as-needed'],\n 'eslint/new-cap': ['error', { capIsNew: false }],\n 'eslint/no-array-constructor': 'error',\n 'eslint/no-bitwise': 'error',\n 'eslint/no-lonely-if': 'warn',\n 'eslint/no-multi-assign': 'error',\n 'eslint/no-nested-ternary': 'error',\n 'eslint/no-unneeded-ternary': 'error',\n 'eslint/prefer-object-spread': 'warn',\n // Variables\n 'eslint/no-label-var': 'error',\n 'eslint/no-unused-vars': [\n 'error',\n {\n args: 'after-used',\n argsIgnorePattern: '^_',\n ignoreRestSiblings: false,\n vars: 'all',\n varsIgnorePattern: '^_',\n },\n ],\n // Import\n 'import/first': 'error',\n 'import/no-absolute-path': 'error',\n 'import/no-default-export': 'error',\n 'import/no-mutable-exports': 'error',\n 'import/no-self-import': 'error',\n // This rule is the most taxing on performance, so we disable it by default.\n 'import/no-cycle': 'off',\n 'import/named': 'off',\n // Unicorn\n 'unicorn/filename-case': ['error', { case: 'kebabCase' }],\n },\n ignorePatterns: [\n 'dist/**',\n 'build/**',\n 'out/**',\n 'coverage/**',\n 'node_modules/**',\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n '*.config.js',\n '*.config.mjs',\n '*.config.cjs',\n ],\n};\n\nexport default base;\n","import type { OxlintConfig } from '../types.js';\n\n/**\n * Merge oxlint configs left-to-right into a single standalone config.\n *\n * Plugins and ignorePatterns are unioned, categories/rules/env/settings are\n * shallow-merged (later configs win), and overrides are concatenated.\n */\nexport const mergeConfigs = (...configs: OxlintConfig[]): OxlintConfig => {\n const result: OxlintConfig = {};\n\n for (const config of configs) {\n if (config.plugins) result.plugins = [...new Set([...(result.plugins ?? []), ...config.plugins])];\n\n if (config.categories) result.categories = { ...result.categories, ...config.categories };\n\n if (config.rules) result.rules = { ...result.rules, ...config.rules };\n\n if (config.env) result.env = { ...result.env, ...config.env };\n\n if (config.settings) result.settings = { ...result.settings, ...config.settings };\n\n if (config.overrides) result.overrides = [...(result.overrides ?? []), ...config.overrides];\n\n if (config.ignorePatterns)\n result.ignorePatterns = [...new Set([...(result.ignorePatterns ?? []), ...config.ignorePatterns])];\n }\n\n return result;\n};\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport base from './base.js';\n\n/**\n * TypeScript preset, ported from `@jabworks/eslint-plugin` configs.typescript.\n *\n * Type-aware rules (consistent-type-exports, no-misused-promises,\n * no-redundant-type-constituents, no-unnecessary-qualifier,\n * prefer-regexp-exec, require-array-sort-compare,\n * restrict-template-expressions, switch-exhaustiveness-check) only run when\n * `oxlint-tsgolint` is installed and oxlint runs with `--type-aware`.\n *\n * Dropped (no oxlint equivalent as of 1.58): method-signature-style,\n * naming-convention.\n */\nexport const typescriptRules: OxlintConfig = {\n plugins: ['typescript'],\n rules: {\n 'typescript/consistent-type-exports': ['warn', { fixMixedExportsWithInlineTypeSpecifier: true }],\n 'typescript/consistent-type-imports': [\n 'warn',\n {\n disallowTypeAnnotations: true,\n fixStyle: 'inline-type-imports',\n prefer: 'type-imports',\n },\n ],\n 'typescript/no-misused-promises': ['error', { checksVoidReturn: { attributes: false } }],\n 'typescript/no-redundant-type-constituents': 'warn',\n 'typescript/no-unnecessary-qualifier': 'warn',\n 'typescript/prefer-regexp-exec': 'warn',\n 'typescript/require-array-sort-compare': ['error', { ignoreStringArrays: true }],\n 'typescript/restrict-template-expressions': ['error', { allowNumber: true }],\n 'typescript/switch-exhaustiveness-check': ['warn', { considerDefaultExhaustiveForUnions: true }],\n 'typescript/no-empty-object-type': ['error', { allowInterfaces: 'with-single-extends' }],\n // Extension rules: oxlint's eslint/* implementations handle TS sources.\n 'eslint/default-param-last': 'error',\n 'eslint/no-loop-func': 'error',\n 'eslint/no-useless-constructor': 'error',\n },\n};\n\nconst typescript: OxlintConfig = mergeConfigs(base, typescriptRules);\n\nexport default typescript;\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport typescript from './typescript.js';\n\n/**\n * Framework-agnostic library preset (e.g. utility libraries, shared packages).\n *\n * No env globals — libraries should be environment-agnostic.\n * Enables import/no-cycle (disabled in base for performance) since library\n * consumers depend on clean, tree-shakeable module graphs.\n */\nexport const libraryRules: OxlintConfig = {\n rules: {\n 'import/no-cycle': 'error',\n },\n};\n\nconst library: OxlintConfig = mergeConfigs(typescript, libraryRules);\n\nexport default library;\n","import type { OxlintConfig, OxlintOverride } from '../types.js';\n\n/**\n * Vitest preset, ported from `@jabworks/eslint-plugin` configs.vitest.\n * Scoped to test files via an override, like the original flat config.\n */\nexport const vitestOverride: OxlintOverride = {\n files: ['**/*.test.{js,ts,mjs,cjs,jsx,tsx}', '**/__tests__/**', '**/tests/**'],\n plugins: ['vitest'],\n env: {\n node: true,\n vitest: true,\n },\n rules: {\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n 'vitest/no-commented-out-tests': 'error',\n 'vitest/no-disabled-tests': 'error',\n 'vitest/no-focused-tests': 'error',\n 'vitest/no-identical-title': 'error',\n },\n};\n\nconst vitest: OxlintConfig = {\n categories: {\n correctness: 'error',\n },\n overrides: [vitestOverride],\n};\n\nexport default vitest;\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport typescript from './typescript.js';\nimport { vitestOverride } from './vitest.js';\n\n/**\n * React preset, ported from `@jabworks/eslint-plugin` configs.react.\n * Includes the react-hooks rules (folded into oxlint's react plugin) and the\n * vitest override for test files.\n *\n * Dropped (no oxlint equivalent as of 1.58): function-component-definition,\n * hook-use-state, jsx-no-leaked-render, jsx-sort-props,\n * no-unstable-nested-components.\n */\nexport const reactRules: OxlintConfig = {\n plugins: ['react', 'jsx-a11y'],\n env: {\n browser: true,\n },\n rules: {\n 'react/react-in-jsx-scope': 'off',\n 'react/button-has-type': 'warn',\n 'react/jsx-boolean-value': 'warn',\n 'react/jsx-curly-brace-presence': 'warn',\n 'react/jsx-fragments': 'warn',\n 'react/jsx-no-target-blank': ['error', { allowReferrer: true }],\n 'react/jsx-no-useless-fragment': ['warn', { allowExpressions: true }],\n 'react/jsx-pascal-case': 'warn',\n 'react/no-array-index-key': 'warn',\n 'react/self-closing-comp': 'warn',\n // react-hooks rules live under oxlint's react plugin.\n 'react/rules-of-hooks': 'error',\n 'react/exhaustive-deps': 'warn',\n 'jsx-a11y/no-autofocus': 'off',\n },\n overrides: [vitestOverride],\n};\n\nconst react: OxlintConfig = mergeConfigs(typescript, reactRules);\n\nexport default react;\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport react from './react.js';\n\n/**\n * Next.js preset, ported from `@jabworks/eslint-plugin` configs.next.\n * The nextjs plugin's recommended/core-web-vitals rules are enabled through\n * the `correctness` category.\n */\nconst next: OxlintConfig = mergeConfigs(react, {\n plugins: ['nextjs'],\n overrides: [\n {\n files: [\n '*.config.js',\n '*.config.mjs',\n '*.config.cjs',\n '*.config.ts',\n '**/*.d.ts',\n '**/*.stories.ts',\n '**/*.stories.tsx',\n 'app/**/*error.tsx',\n 'app/**/layout.tsx',\n 'app/**/not-found.tsx',\n 'app/**/opengraph-image.tsx',\n 'app/**/page.tsx',\n 'app/apple-icon.tsx',\n 'app/robots.ts',\n 'app/sitemap.ts',\n 'next.config.mjs',\n 'src/app/**/*error.tsx',\n 'src/app/**/layout.tsx',\n 'src/app/**/not-found.tsx',\n 'src/app/**/opengraph-image.tsx',\n 'src/app/**/page.tsx',\n 'src/app/apple-icon.tsx',\n 'src/app/robots.ts',\n 'src/app/sitemap.ts',\n ],\n rules: {\n 'import/no-default-export': 'off',\n },\n },\n ],\n ignorePatterns: ['.next/**'],\n});\n\nexport default next;\n","import { mergeConfigs } from '../lib/merge.js';\nimport type { OxlintConfig } from '../types.js';\nimport typescript from './typescript.js';\nimport { vitestOverride } from './vitest.js';\n\n/**\n * Node.js preset, ported from `@jabworks/eslint-plugin` configs.node.\n *\n * Dropped (no oxlint equivalent as of 1.69): n/prefer-promises/fs,\n * n/prefer-promises/dns, n/no-callback-literal, n/prefer-global/*.\n */\nexport const nodeRules: OxlintConfig = {\n plugins: ['node'],\n env: {\n node: true,\n },\n rules: {\n 'node/no-process-exit': 'error',\n 'node/no-path-concat': 'error',\n 'node/no-new-require': 'error',\n 'node/no-exports-assign': 'error',\n 'node/handle-callback-err': 'error',\n // process.env access is allowed — use a secrets manager or dotenv in practice\n 'node/no-process-env': 'off',\n },\n overrides: [vitestOverride],\n};\n\nconst node: OxlintConfig = mergeConfigs(typescript, nodeRules);\n\nexport default node;\n","import base from './configs/base.js';\nimport library from './configs/library.js';\nimport next from './configs/next.js';\nimport node from './configs/node.js';\nimport react from './configs/react.js';\nimport typescript from './configs/typescript.js';\nimport vitest from './configs/vitest.js';\n\nexport { mergeConfigs } from './lib/merge.js';\nexport type { OxlintConfig, OxlintOverride, OxlintRuleEntry, OxlintSeverity } from './types.js';\n\nexport const config = {\n configs: {\n base,\n typescript,\n react,\n next,\n node,\n library,\n vitest,\n },\n};\n\nexport { base, library, next, node, react, typescript, vitest };\n"],"mappings":"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"}
|
package/package.json
CHANGED