Skip to content

Commit 1d3533f

Browse files
feat: move flat configs to new "flat" subpackage
1 parent 42a6299 commit 1d3533f

File tree

11 files changed

+216
-120
lines changed

11 files changed

+216
-120
lines changed

.eslintrc.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
"@typescript-eslint/no-unused-vars": "off",
120120
"@typescript-eslint/prefer-function-type": "off",
121121
"@typescript-eslint/consistent-generic-constructors": "off",
122+
"import/extensions": "off",
122123
"import/no-unresolved": "off",
123124
"init-declarations": "off",
124125
"jsdoc/require-jsdoc": "off",

GETTING_STARTED.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ pnpm add -D eslint @typescript-eslint/parser eslint-plugin-functional
3030

3131
## Usage
3232

33+
### Flat Config
34+
35+
If using the new [flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new),
36+
import from `eslint-plugin-functional/flat`.
37+
38+
```ts
39+
import functional from "eslint-plugin-functional/flat";
40+
```
41+
42+
### Classic Config
43+
3344
Add `functional` to the plugins section of your `.eslintrc` configuration file. Then configure the rules you want to use under the rules section.
3445

3546
```jsonc

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ Tidelift is working with the maintainers of `eslint-plugin-functional` and a gro
3535

3636
The following rulesets are made available by this plugin.
3737

38-
Note: if using a [flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) add a `flat/` prefix to the preset name
39-
(e.g. `functional.configs["flat/recommended"]`).
40-
4138
Presets:
4239

4340
- **Strict** (`plugin:functional/strict`)\

knip.jsonc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
22
"$schema": "node_modules/knip/schema-jsonc.json",
3-
"entry": ["src/index.ts!", "tests/**/*.test.ts", "cz-adapter/index.js"],
3+
"entry": [
4+
"src/flat.ts!",
5+
"src/classic.ts!",
6+
"tests/**/*.test.ts",
7+
"cz-adapter/index.js",
8+
],
49
"project": ["src/**/*.ts!", "tests/**/*.ts", "cz-adapter/**/*.{js,ts}"],
510
"ignore": ["tests/fixture/file.ts"],
611
"ignoreDependencies": ["@types/eslint", "@vitest/coverage-istanbul"],

package.json

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,25 @@
3434
"Jonas Kello"
3535
],
3636
"exports": {
37-
"types": {
38-
"import": "./lib/index.d.mts",
39-
"require": "./lib/index.d.cts"
37+
".": {
38+
"types": {
39+
"import": "./lib/classic.d.mts",
40+
"require": "./lib/classic.d.cts"
41+
},
42+
"import": "./lib/classic.mjs",
43+
"require": "./lib/classic.cjs"
4044
},
41-
"import": "./lib/index.mjs",
42-
"require": "./lib/index.cjs"
45+
"./flat": {
46+
"types": {
47+
"import": "./lib/flat.d.mts",
48+
"require": "./lib/flat.d.cts"
49+
},
50+
"import": "./lib/flat.mjs",
51+
"require": "./lib/flat.cjs"
52+
}
4353
},
44-
"main": "lib/index.cjs",
45-
"types": "lib/index.d.cts",
54+
"main": "lib/classic.cjs",
55+
"types": "lib/classic.d.cts",
4656
"files": [
4757
"lib/",
4858
"package.json",

rollup.config.ts

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ const treeshake = {
1212
unknownGlobalSideEffects: false,
1313
} satisfies RollupOptions["treeshake"];
1414

15-
const library = {
16-
input: "src/index.ts",
15+
const classic = {
16+
input: "src/classic.ts",
1717

1818
output: [
1919
{
20-
file: pkg.exports.import,
20+
file: pkg.exports["."].import,
2121
format: "esm",
2222
sourcemap: false,
2323
},
2424
{
25-
file: pkg.exports.require,
25+
file: pkg.exports["."].require,
2626
format: "cjs",
2727
sourcemap: false,
2828
},
@@ -42,4 +42,34 @@ const library = {
4242
treeshake,
4343
} satisfies RollupOptions;
4444

45-
export default [library];
45+
const flat = {
46+
input: "src/flat.ts",
47+
48+
output: [
49+
{
50+
file: pkg.exports["./flat"].import,
51+
format: "esm",
52+
sourcemap: false,
53+
},
54+
{
55+
file: pkg.exports["./flat"].require,
56+
format: "cjs",
57+
sourcemap: false,
58+
},
59+
],
60+
61+
plugins: [
62+
rollupPluginAutoExternal(),
63+
rollupPluginTs({
64+
transpileOnly: true,
65+
tsconfig: "tsconfig.build.json",
66+
}),
67+
rollupPluginDeassert({
68+
include: ["**/*.{js,ts}"],
69+
}),
70+
],
71+
72+
treeshake,
73+
} satisfies RollupOptions;
74+
75+
export default [classic, flat];

src/classic.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { type Linter } from "@typescript-eslint/utils/ts-eslint";
2+
3+
import all from "#eslint-plugin-functional/configs/all";
4+
import currying from "#eslint-plugin-functional/configs/currying";
5+
import disableTypeChecked from "#eslint-plugin-functional/configs/disable-type-checked";
6+
import externalTypeScriptRecommended from "#eslint-plugin-functional/configs/external-typescript-recommended";
7+
import externalVanillaRecommended from "#eslint-plugin-functional/configs/external-vanilla-recommended";
8+
import lite from "#eslint-plugin-functional/configs/lite";
9+
import noExceptions from "#eslint-plugin-functional/configs/no-exceptions";
10+
import noMutations from "#eslint-plugin-functional/configs/no-mutations";
11+
import noOtherParadigms from "#eslint-plugin-functional/configs/no-other-paradigms";
12+
import noStatements from "#eslint-plugin-functional/configs/no-statements";
13+
import off from "#eslint-plugin-functional/configs/off";
14+
import recommended from "#eslint-plugin-functional/configs/recommended";
15+
import strict from "#eslint-plugin-functional/configs/strict";
16+
import stylistic from "#eslint-plugin-functional/configs/stylistic";
17+
import { rules } from "#eslint-plugin-functional/rules";
18+
import { ruleNameScope } from "#eslint-plugin-functional/utils/misc";
19+
20+
export default {
21+
rules,
22+
configs: {
23+
all: { plugins: [ruleNameScope], rules: all },
24+
lite: { plugins: [ruleNameScope], rules: lite },
25+
recommended: { plugins: [ruleNameScope], rules: recommended },
26+
strict: { plugins: [ruleNameScope], rules: strict },
27+
off: { plugins: [ruleNameScope], rules: off },
28+
"disable-type-checked": {
29+
plugins: [ruleNameScope],
30+
rules: disableTypeChecked,
31+
},
32+
"external-vanilla-recommended": {
33+
plugins: [ruleNameScope],
34+
rules: externalVanillaRecommended,
35+
},
36+
"external-typescript-recommended": {
37+
plugins: [ruleNameScope],
38+
rules: externalTypeScriptRecommended,
39+
},
40+
currying: { plugins: [ruleNameScope], rules: currying },
41+
"no-exceptions": { plugins: [ruleNameScope], rules: noExceptions },
42+
"no-mutations": { plugins: [ruleNameScope], rules: noMutations },
43+
"no-other-paradigms": { plugins: [ruleNameScope], rules: noOtherParadigms },
44+
"no-statements": { plugins: [ruleNameScope], rules: noStatements },
45+
stylistic: { plugins: [ruleNameScope], rules: stylistic },
46+
},
47+
} as Linter.Plugin;

src/flat.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { type FlatConfig } from "@typescript-eslint/utils/ts-eslint";
2+
3+
import all from "#eslint-plugin-functional/configs/all";
4+
import currying from "#eslint-plugin-functional/configs/currying";
5+
import disableTypeChecked from "#eslint-plugin-functional/configs/disable-type-checked";
6+
import externalTypeScriptRecommended from "#eslint-plugin-functional/configs/external-typescript-recommended";
7+
import externalVanillaRecommended from "#eslint-plugin-functional/configs/external-vanilla-recommended";
8+
import lite from "#eslint-plugin-functional/configs/lite";
9+
import noExceptions from "#eslint-plugin-functional/configs/no-exceptions";
10+
import noMutations from "#eslint-plugin-functional/configs/no-mutations";
11+
import noOtherParadigms from "#eslint-plugin-functional/configs/no-other-paradigms";
12+
import noStatements from "#eslint-plugin-functional/configs/no-statements";
13+
import off from "#eslint-plugin-functional/configs/off";
14+
import recommended from "#eslint-plugin-functional/configs/recommended";
15+
import strict from "#eslint-plugin-functional/configs/strict";
16+
import stylistic from "#eslint-plugin-functional/configs/stylistic";
17+
import { rules } from "#eslint-plugin-functional/rules";
18+
import { __VERSION__ } from "#eslint-plugin-functional/utils/constants";
19+
20+
const functional = {
21+
meta: {
22+
name: "eslint-plugin-functional",
23+
version: __VERSION__,
24+
} as const,
25+
rules,
26+
} satisfies Omit<FlatConfig.Plugin, "configs">;
27+
28+
const configs = {
29+
all: { plugins: { functional }, rules: all },
30+
lite: { plugins: { functional }, rules: lite },
31+
recommended: { plugins: { functional }, rules: recommended },
32+
strict: { plugins: { functional }, rules: strict },
33+
off: { plugins: { functional }, rules: off },
34+
disableTypeChecked: {
35+
plugins: { functional },
36+
rules: disableTypeChecked,
37+
},
38+
externalVanillaRecommended: {
39+
plugins: { functional },
40+
rules: externalVanillaRecommended,
41+
},
42+
externalTypescriptRecommended: {
43+
plugins: { functional },
44+
rules: externalTypeScriptRecommended,
45+
},
46+
currying: { plugins: { functional }, rules: currying },
47+
noExceptions: { plugins: { functional }, rules: noExceptions },
48+
noMutations: { plugins: { functional }, rules: noMutations },
49+
noOtherParadigms: {
50+
plugins: { functional },
51+
rules: noOtherParadigms,
52+
},
53+
noStatements: { plugins: { functional }, rules: noStatements },
54+
stylistic: { plugins: { functional }, rules: stylistic },
55+
} satisfies Record<string, FlatConfig.Config>;
56+
57+
export default {
58+
...functional,
59+
configs,
60+
} as const;

src/index.ts

Lines changed: 0 additions & 96 deletions
This file was deleted.

0 commit comments

Comments
 (0)