Skip to content

Commit 77a22fa

Browse files
committed
feat: more work on the configs
Signed-off-by: prisis <[email protected]>
1 parent ad31ce6 commit 77a22fa

File tree

15 files changed

+9703
-10723
lines changed

15 files changed

+9703
-10723
lines changed

packages/eslint-config/scripts/typegen.ts

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,46 @@
11
import fs from "node:fs/promises";
22

3-
import { flatConfigsToRulesDTS } from "eslint-typegen/core";
3+
import type { NormalizedPackageJson } from "@visulima/package";
44
import { builtinRules } from "eslint/use-at-your-own-risk";
5-
import combine from "../src/utils/combine";
5+
import { flatConfigsToRulesDTS } from "eslint-typegen/core";
6+
import { sortPackageJson } from "sort-package-json";
67

7-
import yaml from "../src/config/plugins/yml";
8+
import bestPractices from "../src/config/best-practices";
9+
import errors from "../src/config/errors";
10+
import antfu from "../src/config/plugins/antfu";
811
import comments from "../src/config/plugins/comments";
12+
import compat from "../src/config/plugins/compat";
13+
import html from "../src/config/plugins/html";
914
import imports from "../src/config/plugins/imports";
10-
import jsxA11y from "../src/config/plugins/jsx-a11y";
15+
import javascript from "../src/config/plugins/javascript";
1116
import jsdoc from "../src/config/plugins/jsdoc";
1217
import jsonc from "../src/config/plugins/jsonc";
18+
import jsxA11y from "../src/config/plugins/jsx-a11y";
1319
import markdown from "../src/config/plugins/markdown";
14-
import perfectionist from "../src/config/plugins/perfectionist";
15-
import react from "../src/config/plugins/react";
16-
import { sortPackageJson } from "sort-package-json";
17-
import stylistic from "../src/config/plugins/stylistic";
18-
import toml from "../src/config/plugins/toml";
19-
import regexp from "../src/config/plugins/regexp";
20-
import unicorn from "../src/config/plugins/unicorn";
21-
import node from "../src/config/plugins/node";
22-
import vitest from "../src/config/plugins/vitest";
23-
import antfu from "../src/config/plugins/antfu";
24-
import compat from "../src/config/plugins/compat";
25-
import html from "../src/config/plugins/html";
2620
import noSecrets from "../src/config/plugins/no-secrets";
2721
import noUnsanitized from "../src/config/plugins/no-unsanitized";
22+
import node from "../src/config/plugins/node";
23+
import perfectionist from "../src/config/plugins/perfectionist";
2824
import playwright from "../src/config/plugins/playwright";
2925
import promise from "../src/config/plugins/promise";
26+
import react from "../src/config/plugins/react";
27+
import regexp from "../src/config/plugins/regexp";
3028
import simpleImportSort from "../src/config/plugins/simple-import-sort";
3129
import sonarjs from "../src/config/plugins/sonarjs";
3230
import storybook from "../src/config/plugins/storybook";
31+
import stylistic from "../src/config/plugins/stylistic";
3332
import tailwindcss from "../src/config/plugins/tailwindcss";
3433
import tanstackQuery from "../src/config/plugins/tanstack-query";
34+
import toml from "../src/config/plugins/toml";
3535
import tsdoc from "../src/config/plugins/tsdoc";
36+
import typescript from "../src/config/plugins/typescript";
37+
import unicorn from "../src/config/plugins/unicorn";
3638
import validateJsxNesting from "../src/config/plugins/validate-jsx-nesting";
37-
import bestPractices from "../src/config/best-practices";
38-
import variables from "../src/config/variables";
39+
import vitest from "../src/config/plugins/vitest";
40+
import yaml from "../src/config/plugins/yml";
3941
import style from "../src/config/style";
40-
import errors from "../src/config/errors";
41-
import typescript from "../src/config/plugins/typescript";
42-
import javascript from "../src/config/plugins/javascript";
43-
44-
45-
import type { NormalizedPackageJson } from "@visulima/package";
42+
import variables from "../src/config/variables";
43+
import combine from "../src/utils/combine";
4644

4745
const fakePackageJson = {} as NormalizedPackageJson;
4846

@@ -77,9 +75,12 @@ const configs = await combine(
7775
comments({}),
7876
// formatters(),
7977
imports({
78+
cwd: "",
79+
packageJson: fakePackageJson,
80+
}),
81+
javascript({
8082
packageJson: fakePackageJson,
8183
}),
82-
javascript({}),
8384
jsxA11y({}),
8485
jsdoc({
8586
packageJson: fakePackageJson,
@@ -112,15 +113,15 @@ const configs = await combine(
112113
yaml({}),
113114
);
114115

115-
const configNames = configs.map((i) => i.name).filter(Boolean) as string[];
116+
const configNames = configs.map(i => i.name).filter(Boolean) as string[];
116117

117118
let dts = await flatConfigsToRulesDTS(configs, {
118119
includeAugmentation: false,
119120
});
120121

121122
dts += `
122123
// Names of all the configs
123-
export type ConfigNames = ${configNames.map((i) => `'${i}'`).join(" | ")}
124+
export type ConfigNames = ${configNames.map(i => `'${i}'`).join(" | ")}
124125
`;
125126

126127
await fs.writeFile("src/typegen.d.ts", dts);

packages/eslint-config/src/config/best-practices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Linter } from "eslint";
1+
import type { Linter } from "eslint";
22

33
import type { OptionsFiles } from "../types";
44
import { createConfig, getFilesGlobs } from "../utils/create-config";

packages/eslint-config/src/config/errors.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Linter } from "eslint";
1+
import type { Linter } from "eslint";
22

33
import type { OptionsFiles } from "../types";
44
import { createConfig, getFilesGlobs } from "../utils/create-config";

packages/eslint-config/src/config/es6.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Linter } from "eslint";
1+
import type { Linter } from "eslint";
22

33
import type { OptionsFiles } from "../types";
44
import { createConfig, getFilesGlobs } from "../utils/create-config";

packages/eslint-config/src/config/plugins/javascript.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import globals from "globals";
22

3+
import type { OptionsPackageJson } from "../../types";
34
import { createConfig } from "../../utils/create-config";
45
import interopDefault from "../../utils/interop-default";
56

6-
export default createConfig("js", async () => {
7+
export default createConfig<OptionsPackageJson>("js", async (config) => {
8+
const { packageJson } = config;
9+
710
const eslintJs = await interopDefault(import("@eslint/js"));
811

912
return [
@@ -17,6 +20,19 @@ export default createConfig("js", async () => {
1720
document: "readonly",
1821
navigator: "readonly",
1922
window: "readonly",
23+
...packageJson.type === "module"
24+
? {
25+
__dirname: "off",
26+
__filename: "off",
27+
exports: "off",
28+
require: "off",
29+
}
30+
: {
31+
__dirname: true,
32+
__filename: true,
33+
exports: true,
34+
require: true,
35+
},
2036
},
2137
parserOptions: {
2238
ecmaFeatures: {
@@ -33,5 +49,30 @@ export default createConfig("js", async () => {
3349
name: "anolilab/javascript/setup",
3450
},
3551
eslintJs.configs.recommended,
52+
{
53+
env: {
54+
commonjs: true,
55+
},
56+
files: ["**/*.cjs"],
57+
// inside *.cjs files. restore commonJS "globals"
58+
globals: {
59+
__dirname: true,
60+
__filename: true,
61+
exports: true,
62+
require: true,
63+
},
64+
},
65+
{
66+
env: {
67+
commonjs: false,
68+
},
69+
files: ["**/*.mjs"],
70+
globals: {
71+
__dirname: "off",
72+
__filename: "off",
73+
exports: "off",
74+
require: "off",
75+
},
76+
},
3677
];
3778
});

packages/eslint-config/src/config/plugins/react.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export default createConfig<
142142
"error",
143143
{
144144
...noUnderscoreDangle,
145-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-explicit-any
145+
146146
allow: [...noUnderscoreDangle.allow, "__REDUX_DEVTOOLS_EXTENSION_COMPOSE__"],
147147
},
148148
],

packages/eslint-config/src/config/style.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Linter } from "eslint";
1+
import type { Linter } from "eslint";
22

33
import type { OptionsFiles, OptionsHasPrettier } from "../types";
44
import { createConfig, getFilesGlobs } from "../utils/create-config";

packages/eslint-config/src/config/variables.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import confusingBrowserGlobals from "confusing-browser-globals";
2-
import { Linter } from "eslint";
2+
import type { Linter } from "eslint";
33

44
import type { OptionsFiles } from "../types";
55
import { createConfig, getFilesGlobs } from "../utils/create-config";

packages/eslint-config/src/engine-node-overwrite.ts

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

packages/eslint-config/src/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export const getFiles = <K extends keyof OptionsConfig>(options: OptionsConfig,
9595
*/
9696
export const createConfig = async (
9797
options: Omit<TypedFlatConfigItem, "files"> & OptionsConfig = {},
98-
...userConfigs: Awaitable<TypedFlatConfigItem | TypedFlatConfigItem[] | FlatConfigComposer<any, any> | Linter.Config[]>[]
98+
...userConfigs: Awaitable<FlatConfigComposer<any, any> | Linter.Config[] | TypedFlatConfigItem | TypedFlatConfigItem[]>[]
9999
): Promise<FlatConfigComposer<TypedFlatConfigItem, ConfigNames>> => {
100100
if ("files" in options) {
101101
throw new Error(
@@ -177,7 +177,9 @@ export const createConfig = async (
177177
// Base configs
178178
configs.push(
179179
ignores(options.ignores),
180-
javascript({}),
180+
javascript({
181+
packageJson,
182+
}),
181183
bestPractices({}),
182184
errors({}),
183185
style({}),
@@ -443,7 +445,8 @@ export const createConfig = async (
443445
// User can optionally pass a flat config item to the first argument
444446
// We pick the known keys as ESLint would do schema validation
445447
const fusedConfig = flatConfigProps.reduce((acc, key) => {
446-
if (key in options) acc[key] = options[key] as any;
448+
if (key in options)
449+
acc[key] = options[key] as any;
447450

448451
return acc;
449452
}, {} as TypedFlatConfigItem);

0 commit comments

Comments
 (0)