UNPKG

ntts

Version:

A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.

73 lines (62 loc) 3.07 kB
import { existsSync, readFileSync, writeFileSync } from 'fs'; import VersionHandler from '../dependency-installer/version-handler/version-handler'; import Logger from '../logger/logger'; import ModuleSpecifierRefactorModel from '../models/module-specifier-refactor.model'; import tsconfig10 from '@tsconfig/node10/tsconfig.json'; import tsconfig12 from '@tsconfig/node12/tsconfig.json'; import tsconfig14 from '@tsconfig/node14/tsconfig.json'; import tsconfig16 from '@tsconfig/node16/tsconfig.json'; import tsconfig18 from '@tsconfig/node18/tsconfig.json'; import tsconfig20 from '@tsconfig/node20/tsconfig.json'; import defaultConfig from './tsconfig.default.json'; const nodeToConfigList = [ { version: 10, config: tsconfig10 }, { version: 12, config: tsconfig12 }, { version: 14, config: tsconfig14 }, { version: 16, config: tsconfig16 }, { version: 18, config: tsconfig18 }, { version: 20, config: tsconfig20 }, ]; interface TsconfigModel { [key: string]: unknown; } class TsconfigHandler { private static getTsconfig = (): TsconfigModel => { const [nodeMajorVersion] = VersionHandler.parsedNodeVersion(); return nodeToConfigList.reduce((bestConfig: TsconfigModel, {version, config}) => (nodeMajorVersion >= version ? config : bestConfig), defaultConfig); }; private static readConfig = (filename: string) => JSON.parse(readFileSync(filename, { encoding: 'utf-8' })); private static writeToConfig = (filename: string, tsconfig: TsconfigModel, partialConfig: TsconfigModel) => { writeFileSync( filename, JSON.stringify({ ...tsconfig, ...partialConfig }, null, 2), ); }; static tsconfigFileName = (): string => (existsSync('tsconfig.ntts.json') ? 'tsconfig.ntts.json' : 'tsconfig.json'); static addConfig = (path: string, ignores: string[]) => { Logger.info('Adding new TypeScript configuration file'); const tsconfig = this.getTsconfig(); const configName = existsSync('tsconfig.json') ? 'tsconfig.ntts.json' : 'tsconfig.json'; const partialConfig = path ? { include: [path], exclude: ignores } : { exclude: ignores }; TsconfigHandler.writeToConfig(configName, tsconfig, partialConfig); Logger.success(`Added ${configName} file`); }; static addCompilerOptions = (moduleSpecifierModel: ModuleSpecifierRefactorModel) => { const configName = this.tsconfigFileName(); const tsconfig = this.readConfig(configName); const compilerOptions = { ...tsconfig.compilerOptions, resolveJsonModule: moduleSpecifierModel.allowJson || false, allowJs: moduleSpecifierModel.allowJs || false, }; this.writeToConfig(configName, tsconfig, { compilerOptions }); }; static addModuleFile = (fileName: string) => { const configName = this.tsconfigFileName(); const tsconfig = this.readConfig(configName); const partialConfig = { ...tsconfig, files: [fileName] }; this.writeToConfig(configName, tsconfig, partialConfig); }; } export default TsconfigHandler;