mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-07 08:46:40 +08:00
ci: add observational ESLint check (#550)
This commit is contained in:
+25
-5
@@ -10,18 +10,20 @@ const javascriptFiles = [
|
||||
]
|
||||
|
||||
const typescriptFiles = [
|
||||
'**/*.{ts,tsx}',
|
||||
'**/*.{ts,tsx,mts,cts}',
|
||||
'**/*.vue',
|
||||
]
|
||||
|
||||
const managedScriptExtensions = 'js,mjs,cjs,jsx,ts,tsx,mts,cts'
|
||||
|
||||
const managedFiles = [
|
||||
...javascriptFiles,
|
||||
...typescriptFiles,
|
||||
]
|
||||
|
||||
const browserFiles = [
|
||||
'src/**/*.{js,jsx,ts,tsx,vue}',
|
||||
'examples/**/src/**/*.{js,jsx,ts,tsx,vue}',
|
||||
`src/**/*.{${managedScriptExtensions},vue}`,
|
||||
`examples/**/src/**/*.{${managedScriptExtensions},vue}`,
|
||||
]
|
||||
|
||||
const nodeFiles = [
|
||||
@@ -30,6 +32,16 @@ const nodeFiles = [
|
||||
'scripts/**/*.{js,mjs,cjs,ts,mts,cts}',
|
||||
]
|
||||
|
||||
// TypeScript 关闭核心 no-undef;显式禁止浏览器域中的 Node-only globals,保证 JS、TS 与 Vue 使用同一运行时边界。
|
||||
const browserGlobalNames = new Set(Object.keys(globals.browser))
|
||||
const nodeOnlyGlobalRestrictions = Object.keys(globals.node)
|
||||
.filter(name => !browserGlobalNames.has(name))
|
||||
.sort()
|
||||
.map(name => ({
|
||||
name,
|
||||
message: `'${name}' is only available in Node.js code.`,
|
||||
}))
|
||||
|
||||
const restrictedCoreSourcePattern = '/(?:^|\\/)@core(?:\\/|$)/'
|
||||
|
||||
// @layouts 是 @core 的下游依赖;禁止反向引用,避免两层形成直接循环。
|
||||
@@ -95,6 +107,7 @@ export default defineConfig([
|
||||
'**/dist/**',
|
||||
'**/coverage/**',
|
||||
'**/.worktrees/**',
|
||||
'**/vite.config.*.timestamp-*.mjs',
|
||||
'public/plugin_icon/**',
|
||||
'src/@iconify/**',
|
||||
'**/*.d.ts',
|
||||
@@ -136,6 +149,9 @@ export default defineConfig([
|
||||
languageOptions: {
|
||||
globals: globals.browser,
|
||||
},
|
||||
rules: {
|
||||
'no-restricted-globals': ['error', ...nodeOnlyGlobalRestrictions],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'moviepilot/node-globals',
|
||||
@@ -143,6 +159,10 @@ export default defineConfig([
|
||||
languageOptions: {
|
||||
globals: globals.node,
|
||||
},
|
||||
// Node 配置可能位于浏览器源码目录;显式覆盖浏览器专用限制,避免 flat config 合并后误报。
|
||||
rules: {
|
||||
'no-restricted-globals': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'moviepilot/sonarjs',
|
||||
@@ -154,7 +174,7 @@ export default defineConfig([
|
||||
},
|
||||
{
|
||||
name: 'moviepilot/sonarjs-locales',
|
||||
files: ['src/locales/**/*.{js,jsx,ts,tsx}'],
|
||||
files: [`src/locales/**/*.{${managedScriptExtensions}}`],
|
||||
rules: {
|
||||
'sonarjs/no-hardcoded-passwords': 'off',
|
||||
'sonarjs/no-hardcoded-secrets': 'off',
|
||||
@@ -169,7 +189,7 @@ export default defineConfig([
|
||||
},
|
||||
{
|
||||
name: 'moviepilot/layout-boundary',
|
||||
files: ['src/@layouts/**/*.{js,jsx,ts,tsx,vue}'],
|
||||
files: [`src/@layouts/**/*.{${managedScriptExtensions},vue}`],
|
||||
rules: {
|
||||
'no-restricted-syntax': [
|
||||
'error',
|
||||
|
||||
Reference in New Issue
Block a user