import { RuleTester } from 'eslint' import { describe, it } from 'vitest' import { noAppImport } from '../no-app-import.js' const ruleTester = new RuleTester({ languageOptions: { ecmaVersion: 2023, sourceType: 'module' }, }) describe('no-app-import (规则 D)', () => { it('valid/invalid 双向用例', () => { ruleTester.run('no-app-import', noAppImport, { valid: [ { code: "import { createApiClient } from '@drama/api-sdk'", filename: '/repo/apps/web/src/main.js', }, { code: "import { helper } from './local.js'", filename: '/repo/apps/web/src/main.js', }, { code: "import { page } from '../pages/index.js'", filename: '/repo/apps/web/src/router/index.js', }, ], invalid: [ { code: "import { buildApp } from '@app/server'", filename: '/repo/apps/visual-game-server/src/main.js', errors: [{ messageId: 'appPackage' }], }, { code: "export { createServer } from '@app/server/src/main.js'", filename: '/repo/packages/foo/src/index.js', errors: [{ messageId: 'appPackage' }], }, { code: "import { createObjectKeys } from '../../apps/server/src/assembly/object-keys.js'", filename: '/repo/tools/scripts/upload.js', errors: [{ messageId: 'crossApp' }], }, { code: "const m = await import('../../server/src/main.js')", filename: '/repo/apps/web/src/debug.js', errors: [{ messageId: 'crossApp' }], }, { code: "const server = require('@app/server')", filename: '/repo/tools/scripts/check.cjs', errors: [{ messageId: 'appPackage' }], }, { code: "const keys = require('../../apps/server/src/assembly/object-keys.js')", filename: '/repo/tools/scripts/upload.cjs', errors: [{ messageId: 'crossApp' }], }, ], }) }) })