Files
gridpilot.gg/split.js
2025-12-17 14:04:11 +01:00

119 lines
5.3 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const filePath = 'apps/api/src/domain/league/dtos/LeagueDto.ts';
const content = fs.readFileSync(filePath, 'utf8');
const lines = content.split('\n');
let allImports = lines.filter(line => line.startsWith('import '));
let classBlocks = [];
let currentClassLines = [];
let inClass = false;
for (let i = 0; i < lines.length; i++) {
let line = lines[i];
if (line.startsWith('export class ')) {
if (inClass) {
classBlocks.push(currentClassLines);
currentClassLines = [];
}
inClass = true;
}
if (inClass) {
currentClassLines.push(line);
if (line.trim() === '}') {
classBlocks.push(currentClassLines);
currentClassLines = [];
inClass = false;
}
}
}
if (currentClassLines.length > 0) {
classBlocks.push(currentClassLines);
}
// Function to get imports for class
function getImportsForClass(classLines, className) {
let classContent = classLines.join('\n');
let neededImports = [];
// ApiProperty
if (classContent.includes('@ApiProperty')) {
neededImports.push("import { ApiProperty } from '@nestjs/swagger';");
}
// class-validator
let validators = [];
if (classContent.includes('@IsString')) validators.push('IsString');
if (classContent.includes('@IsNumber')) validators.push('IsNumber');
if (classContent.includes('@IsBoolean')) validators.push('IsBoolean');
if (classContent.includes('@IsDate')) validators.push('IsDate');
if (classContent.includes('@IsOptional')) validators.push('IsOptional');
if (classContent.includes('@IsEnum')) validators.push('IsEnum');
if (classContent.includes('@IsArray')) validators.push('IsArray');
if (classContent.includes('@ValidateNested')) validators.push('ValidateNested');
if (validators.length > 0) {
neededImports.push(`import { ${validators.join(', ')} } from 'class-validator';`);
}
// class-transformer
if (classContent.includes('@Type')) {
neededImports.push("import { Type } from 'class-transformer';");
}
// Other DTOs
if (classContent.includes('DriverDto')) {
neededImports.push("import { DriverDto } from '../../driver/dto/DriverDto';");
}
if (classContent.includes('RaceDto')) {
neededImports.push("import { RaceDto } from '../../race/dto/RaceDto';");
}
// Local DTOs
let localDTOs = ['LeagueSettingsDTO', 'LeagueWithCapacityDTO', 'LeagueSummaryDTO', 'AllLeaguesWithCapacityDTO', 'AllLeaguesWithCapacityAndScoringDTO', 'LeagueStatsDTO', 'ProtestDTO', 'SeasonDTO', 'LeagueJoinRequestDTO', 'GetLeagueJoinRequestsQueryDTO', 'ApproveJoinRequestInputDTO', 'ApproveJoinRequestOutputDTO', 'RejectJoinRequestInputDTO', 'RejectJoinRequestOutputDTO', 'GetLeagueAdminPermissionsInputDTO', 'LeagueAdminPermissionsDTO', 'RemoveLeagueMemberInputDTO', 'RemoveLeagueMemberOutputDTO', 'UpdateLeagueMemberRoleInputDTO', 'UpdateLeagueMemberRoleOutputDTO', 'GetLeagueOwnerSummaryQueryDTO', 'LeagueOwnerSummaryDTO', 'LeagueConfigFormModelBasicsDTO', 'LeagueConfigFormModelStructureDTO', 'LeagueConfigFormModelScoringDTO', 'LeagueConfigFormModelDropPolicyDTO', 'LeagueConfigFormModelStewardingDTO', 'LeagueConfigFormModelTimingsDTO', 'LeagueConfigFormModelDTO', 'GetLeagueAdminConfigQueryDTO', 'GetLeagueAdminConfigOutputDTO', 'LeagueAdminConfigDTO', 'GetLeagueProtestsQueryDTO', 'LeagueAdminProtestsDTO', 'GetLeagueSeasonsQueryDTO', 'LeagueSeasonSummaryDTO', 'LeagueAdminDTO', 'LeagueMemberDTO', 'LeagueMembershipsDTO', 'LeagueStandingDTO', 'LeagueStandingsDTO', 'LeagueScheduleDTO', 'LeagueStatsDTO', 'CreateLeagueInputDTO', 'CreateLeagueOutputDTO'];
for (let dto of localDTOs) {
if (dto !== className && classContent.includes(dto)) {
neededImports.push(`import { ${dto} } from './${dto}';`);
}
}
return neededImports;
}
for (let classLines of classBlocks) {
let classNameLine = classLines.find(line => line.startsWith('export class '));
if (classNameLine) {
let match = classNameLine.match(/export class (\w+)/);
if (match) {
let className = match[1];
// Rename
if (className.endsWith('ViewModel')) {
className = className.replace('ViewModel', 'DTO');
} else if (className.endsWith('Dto')) {
className = className.replace('Dto', 'DTO');
} else if (className.endsWith('Input')) {
className = className + 'DTO';
} else if (className.endsWith('Output')) {
className = className + 'DTO';
} else if (className.endsWith('Query')) {
className = className + 'DTO';
} else {
className = className + 'DTO';
}
let fileName = className + '.ts';
// Update class name in lines
classLines[0] = classLines[0].replace(/export class \w+/, 'export class ' + className);
// Update references in the class
for (let i = 1; i < classLines.length; i++) {
classLines[i] = classLines[i].replace(/ViewModel/g, 'DTO').replace(/Dto/g, 'DTO').replace(/Input\b/g, 'InputDTO').replace(/Output\b/g, 'OutputDTO').replace(/Query\b/g, 'QueryDTO');
classLines[i] = classLines[i].replace(/DriverDTO/g, 'DriverDto').replace(/RaceDTO/g, 'RaceDto');
}
let imports = getImportsForClass(classLines, className);
let fileContent = imports.join('\n') + '\n\n' + classLines.join('\n');
fs.writeFileSync(path.join('apps/api/src/domain/league/dtos', fileName), fileContent);
}
}
}