Initial miaojingAI project with image resolution guard
This commit is contained in:
52
eslint.config.mjs
Normal file
52
eslint.config.mjs
Normal file
@@ -0,0 +1,52 @@
|
||||
import nextTs from 'eslint-config-next/typescript';
|
||||
import nextVitals from 'eslint-config-next/core-web-vitals';
|
||||
import { defineConfig, globalIgnores } from 'eslint/config';
|
||||
|
||||
const syntaxRules = [
|
||||
{
|
||||
selector: 'JSXOpeningElement[name.name="head"]',
|
||||
message:
|
||||
'禁止使用 head 标签,优先使用 metadata。三方 CSS、字体等资源可以在 globals.css 中顶部通过 @import 引入或者使用 next/font;preload, preconnect, dns-prefetch 通过 ReactDOM 的 preload、preconnect、dns-prefetch 方法引入;json-ld 可阅读 https://nextjs.org/docs/app/guides/json-ld',
|
||||
},
|
||||
];
|
||||
|
||||
const nextConfigRestrictedSyntaxRules = [
|
||||
{
|
||||
selector:
|
||||
'Property[key.name=/^(root|outputFileTracingRoot)$/] > Literal[value=/^\\//]',
|
||||
message:
|
||||
'禁止在 next.config 中写死绝对路径,请改用 path.resolve(__dirname, ...)、import.meta.dirname 或 process.cwd() 动态拼接。',
|
||||
},
|
||||
];
|
||||
|
||||
const eslintConfig = defineConfig([
|
||||
...nextVitals,
|
||||
...nextTs,
|
||||
{
|
||||
rules: {
|
||||
'react-hooks/set-state-in-effect': 'off',
|
||||
'no-restricted-syntax': ['error', ...syntaxRules],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['next.config.ts'],
|
||||
rules: {
|
||||
'no-restricted-syntax': ['error', ...nextConfigRestrictedSyntaxRules],
|
||||
},
|
||||
},
|
||||
// Override default ignores of eslint-config-next.
|
||||
globalIgnores([
|
||||
// Default ignores of eslint-config-next:
|
||||
'.next/**',
|
||||
'out/**',
|
||||
'build/**',
|
||||
'next-env.d.ts',
|
||||
// Build artifacts:
|
||||
'server.js',
|
||||
'dist/**',
|
||||
// Script files (CommonJS):
|
||||
'scripts/**/*.js',
|
||||
]),
|
||||
]);
|
||||
|
||||
export default eslintConfig;
|
||||
Reference in New Issue
Block a user