no-subdomain-deep-import.test.js
1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { RuleTester } from 'eslint'
import { describe, it } from 'vitest'
import { noSubdomainDeepImport } from '../no-subdomain-deep-import.js'
const ruleTester = new RuleTester({
languageOptions: { ecmaVersion: 2023, sourceType: 'module' },
})
// 模拟 @drama/assets 包内:character/ 与 scene/ 两个子域。
const sceneFile = '/repo/packages/assets/src/scene/load.js'
describe('no-subdomain-deep-import (规则 B)', () => {
it('valid/invalid 双向用例', () => {
ruleTester.run('no-subdomain-deep-import', noSubdomainDeepImport, {
valid: [
// 跨子域走对方 index(目录形式)→ 放行。
{
code: "import { Character } from '../character/index.js'",
filename: sceneFile,
},
// 同子域内部相对导入 → 放行(防误伤)。
{
code: "import { helper } from './internal/helper.js'",
filename: sceneFile,
},
// src 直属文件不属任何子域 → 不受管辖。
{
code: "import { x } from './scene/internal/x.js'",
filename: '/repo/packages/assets/src/index.js',
},
// 包名导入归规则 A,本规则放行。
{
code: "import { y } from '@drama/script'",
filename: sceneFile,
},
],
invalid: [
// 跨子域深入对方 internal → 报错。
{
code: "import { y } from '../character/internal/y.js'",
filename: sceneFile,
errors: [{ messageId: 'subdomainDeep' }],
},
{
code: "export { z } from '../character/repo/z.js'",
filename: sceneFile,
errors: [{ messageId: 'subdomainDeep' }],
},
{
code: "const z = require('../character/repo/z.js')",
filename: sceneFile,
errors: [{ messageId: 'subdomainDeep' }],
},
],
})
})
})