diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3b730ef..5e6c7fa 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,6 +8,10 @@ updates: time: '21:00' timezone: Asia/Shanghai open-pull-requests-limit: 10 + groups: + npm-dependencies: + patterns: + - '*' - package-ecosystem: github-actions directory: '/' @@ -17,3 +21,7 @@ updates: time: '21:00' timezone: Asia/Shanghai open-pull-requests-limit: 10 + groups: + github-actions: + patterns: + - '*' diff --git a/README.md b/README.md index b67c72a..04e693c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
Part of the Ant Design ecosystem.
Part of the Ant Design ecosystem.
π¦Ά Footer primitives for React, maintained in the Ant Design ecosystem.
diff --git a/README.zh-CN.md b/README.zh-CN.md index 51e2c33..4841447 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,6 +1,6 @@
Ant Design ηζηδΈι¨εγ
Ant Design ηζηδΈι¨εγ
π¦Ά React ι‘΅θεΈε±εΊη‘η»δ»ΆοΌζε‘δΊ Ant Design ηζι‘΅ι’γ
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000..f556e5a
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,88 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import js from '@eslint/js';
+import tsEslintPlugin from '@typescript-eslint/eslint-plugin';
+import { createRequire } from 'node:module';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const require = createRequire(import.meta.url);
+
+const compat = new FlatCompat({
+ baseDirectory: __dirname,
+ recommendedConfig: js.configs.recommended,
+ allConfig: js.configs.all,
+});
+
+const recommendedTsRules = new Set(
+ Object.keys(tsEslintPlugin.configs.recommended.rules || {}),
+);
+const noopRule = {
+ meta: { type: 'problem', docs: {}, schema: [] },
+ create: () => ({}),
+};
+
+function normalizeConfig(config) {
+ const next = { ...config };
+
+ if (next.plugins?.['@typescript-eslint']) {
+ next.plugins = { ...next.plugins };
+ delete next.plugins['@typescript-eslint'];
+ }
+
+ if (next.rules) {
+ next.rules = Object.fromEntries(
+ Object.entries(next.rules).filter(([ruleName]) => {
+ if (!ruleName.startsWith('@typescript-eslint/')) {
+ return true;
+ }
+ return (
+ recommendedTsRules.has(ruleName) ||
+ ruleName === '@typescript-eslint/ban-types'
+ );
+ }),
+ );
+ }
+
+ return next;
+}
+
+export default [
+ {
+ ignores: [
+ 'node_modules/',
+ 'coverage/',
+ 'es/',
+ 'lib/',
+ 'dist/',
+ 'docs-dist/',
+ '.dumi/',
+ '.doc/',
+ '.vercel/',
+ '.eslintrc.js',
+ 'src/index.d.ts',
+ ],
+ },
+ {
+ plugins: {
+ '@typescript-eslint': {
+ ...tsEslintPlugin,
+ rules: {
+ ...tsEslintPlugin.rules,
+ 'ban-types': noopRule,
+ 'consistent-type-exports': noopRule,
+ },
+ },
+ },
+ },
+ ...compat.config(require('./.eslintrc.js')).map(normalizeConfig),
+ {
+ rules: {
+ '@typescript-eslint/ban-types': 'off',
+ '@typescript-eslint/no-empty-object-type': 'off',
+ '@typescript-eslint/no-unsafe-function-type': 'off',
+ '@typescript-eslint/no-unused-vars': 'off',
+ },
+ },
+];
diff --git a/global.d.ts b/global.d.ts
new file mode 100644
index 0000000..bbd470e
--- /dev/null
+++ b/global.d.ts
@@ -0,0 +1,58 @@
+/// (
+ object: {} | null | undefined,
+ ): object is React.ReactElement ;
+ function cloneElement (
+ element: React.ReactElement ,
+ props?: (Partial & React.Attributes) | null,
+ ...children: React.ReactNode[]
+ ): React.ReactElement ;
+}
+
+declare module 'react-dom' {
+ function hydrate(
+ element: React.ReactNode,
+ container: Element | DocumentFragment,
+ ): void;
+}
diff --git a/tsconfig.json b/tsconfig.json
index bae44b8..4a04d8b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,49 +2,34 @@
"compilerOptions": {
"target": "esnext",
"module": "ESNext",
- "moduleResolution": "node",
- "baseUrl": "./",
- "lib": [
- "dom",
- "es2017"
- ],
+ "moduleResolution": "bundler",
+ "lib": ["dom", "es2017"],
"jsx": "react",
- "strict": true,
+ "strict": false,
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"skipLibCheck": true,
"declaration": true,
- "types": [
- "jest",
- "node"
- ],
"paths": {
- "@/*": [
- "src/*"
- ],
- "@@/*": [
- ".dumi/tmp/*"
- ],
- "@rc-component/footer": [
- "src/index.tsx"
- ],
- "@rc-component/footer/assets": [
- "assets"
- ],
- "@rc-component/footer/assets/*": [
- "assets/*"
- ],
- "@rc-component/footer/*": [
- "src/*"
- ],
- "rc-footer": [
- "src/index.tsx"
- ]
+ "@/*": ["./src/*"],
+ "@@/*": ["./.dumi/tmp/*"],
+ "@rc-component/footer": ["./src/index.tsx"],
+ "@rc-component/footer/assets": ["./assets"],
+ "@rc-component/footer/assets/*": ["./assets/*"],
+ "@rc-component/footer/*": ["./src/*"],
+ "rc-footer": ["./src/index.tsx"]
},
- "ignoreDeprecations": "5.0"
+ "noImplicitAny": false,
+ "strictNullChecks": false,
+ "strictPropertyInitialization": false,
+ "strictFunctionTypes": false,
+ "noImplicitThis": false,
+ "strictBindCallApply": false
},
"include": [
+ "react-compat.d.ts",
+ "global.d.ts",
".fatherrc.ts",
".dumirc.ts",
"src",
@@ -52,9 +37,5 @@
"docs/examples",
"type.d.ts"
],
- "exclude": [
- "docs-dist",
- "lib",
- "es"
- ]
+ "exclude": ["docs-dist", "lib", "es"]
}