167 lines
4.0 KiB
JavaScript
167 lines
4.0 KiB
JavaScript
const { RuleTester } = require('eslint');
|
|
const rule = require('./no-framework-imports');
|
|
|
|
const ruleTester = new RuleTester({
|
|
parser: require.resolve('@typescript-eslint/parser'),
|
|
parserOptions: {
|
|
ecmaVersion: 2020,
|
|
sourceType: 'module',
|
|
ecmaFeatures: {
|
|
jsx: false,
|
|
},
|
|
},
|
|
});
|
|
|
|
ruleTester.run('no-framework-imports', rule, {
|
|
valid: [
|
|
// Import from domain
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { UserId } from './UserId';",
|
|
},
|
|
// Import from application
|
|
{
|
|
filename: '/path/to/core/application/user/CreateUser.ts',
|
|
code: "import { CreateUserCommand } from './CreateUserCommand';",
|
|
},
|
|
// Import from shared
|
|
{
|
|
filename: '/path/to/core/shared/ValueObject.ts',
|
|
code: "import { ValueObject } from './ValueObject';",
|
|
},
|
|
// Import from ports
|
|
{
|
|
filename: '/path/to/core/ports/UserRepository.ts',
|
|
code: "import { User } from '../domain/user/User';",
|
|
},
|
|
// Import from external packages (not frameworks)
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { v4 as uuidv4 } from 'uuid';",
|
|
},
|
|
// Import from internal packages
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { SomeUtil } from '@core/shared/SomeUtil';",
|
|
},
|
|
// No imports
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "export class User {}",
|
|
},
|
|
// Multiple valid imports
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: `
|
|
import { UserId } from './UserId';
|
|
import { UserName } from './UserName';
|
|
import { ValueObject } from '../shared/ValueObject';
|
|
`,
|
|
},
|
|
],
|
|
|
|
invalid: [
|
|
// Import from @nestjs
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { Injectable } from '@nestjs/common';",
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: '@nestjs/common',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
// Import from @nestjs/core
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { Module } from '@nestjs/core';",
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: '@nestjs/core',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
// Import from express
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import express from 'express';",
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: 'express',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
// Import from react
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import React from 'react';",
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: 'react',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
// Import from next
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { useRouter } from 'next/router';",
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: 'next/router',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
// Import from @nestjs with subpath
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: "import { Controller } from '@nestjs/common';",
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: '@nestjs/common',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
// Multiple framework imports
|
|
{
|
|
filename: '/path/to/core/domain/user/User.ts',
|
|
code: `
|
|
import { Injectable } from '@nestjs/common';
|
|
import { UserId } from './UserId';
|
|
import React from 'react';
|
|
`,
|
|
errors: [
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: '@nestjs/common',
|
|
},
|
|
},
|
|
{
|
|
messageId: 'frameworkImport',
|
|
data: {
|
|
source: 'react',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
});
|