@ai-partner-x/eslint-plugin-aiko-boot
v0.1.5
Published
ESLint plugin to enforce Java-compatible TypeScript code for Aiko Boot
Downloads
330
Readme
@aiko-boot/eslint-plugin
ESLint plugin to enforce Java-compatible TypeScript code for aiko-boot Framework.
Installation
pnpm add -D @aiko-boot/eslint-plugin @typescript-eslint/parserUsage
Basic Setup
In your .eslintrc.js or .eslintrc.json:
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2022,
sourceType: 'module',
},
plugins: ['@aiko-boot'],
extends: ['plugin:@aiko-boot/recommended'],
};Strict Mode
For maximum Java compatibility:
module.exports = {
parser: '@typescript-eslint/parser',
plugins: ['@aiko-boot'],
extends: ['plugin:@aiko-boot/strict'],
};Custom Configuration
module.exports = {
parser: '@typescript-eslint/parser',
plugins: ['@aiko-boot'],
rules: {
'@aiko-boot/no-arrow-methods': 'error',
'@aiko-boot/no-destructuring-in-methods': 'error',
'@aiko-boot/no-object-spread': 'warn',
'@aiko-boot/static-route-paths': 'error',
'@aiko-boot/require-rest-controller': 'error',
},
};Rules
@aiko-boot/no-arrow-methods (error)
Disallow arrow functions as class methods (not Java-compatible).
❌ Incorrect:
@RestController()
class UserController {
// ❌ Arrow function as method
getUser = async (id: number) => {
return this.userService.getUserById(id);
}
}✅ Correct:
@RestController()
class UserController {
// ✅ Regular method
async getUser(id: number) {
return this.userService.getUserById(id);
}
}@aiko-boot/no-destructuring-in-methods (error)
Disallow destructuring in class methods (not Java-compatible).
❌ Incorrect:
async createUser(dto: CreateUserDto) {
// ❌ Destructuring
const { username, email } = dto;
return this.userService.create(username, email);
}✅ Correct:
async createUser(dto: CreateUserDto) {
// ✅ Explicit property access
const username = dto.username;
const email = dto.email;
return this.userService.create(username, email);
}@aiko-boot/no-object-spread (warn)
Warn about object spread in class methods (difficult to translate to Java).
❌ Problematic:
async updateUser(id: number, dto: UpdateUserDto) {
// ⚠️ Object spread
const user = { ...dto, id };
return this.userRepository.save(user);
}✅ Recommended:
async updateUser(id: number, dto: UpdateUserDto) {
// ✅ Explicit assignment (translates to BeanUtils.copyProperties in Java)
const user = new User();
user.id = id;
user.username = dto.username;
user.email = dto.email;
return this.userRepository.save(user);
}@aiko-boot/static-route-paths (error)
Enforce static string literals for route paths.
❌ Incorrect:
const BASE_PATH = '/api/users';
@RestController({ path: BASE_PATH }) // ❌ Dynamic path
class UserController {}✅ Correct:
@RestController({ path: '/api/users' }) // ✅ Static string literal
class UserController {}@aiko-boot/require-rest-controller (error)
Require @RestController decorator for classes with route mapping decorators.
❌ Incorrect:
// ❌ Missing @RestController
class UserController {
@GetMapping('/:id')
async getUser(id: number) {}
}✅ Correct:
@RestController({ path: '/api/users' }) // ✅ Has @RestController
class UserController {
@GetMapping('/:id')
async getUser(id: number) {}
}Configuration Presets
plugin:@aiko-boot/recommended
Recommended rules for Java compatibility:
no-arrow-methods: errorno-destructuring-in-methods: errorno-object-spread: warnstatic-route-paths: errorrequire-rest-controller: error
plugin:@aiko-boot/strict
Strict mode (all rules as errors):
no-arrow-methods: errorno-destructuring-in-methods: errorno-object-spread: error (upgraded from warn)static-route-paths: errorrequire-rest-controller: error
License
MIT
