import * as plugins from './plugins.js'; import type { CompilerOptions, ScriptTarget, ModuleKind } from 'typescript'; import { compiler, mergeCompilerOptions, emitCheck } from './tsbuild.classes.tsbuild.js'; export type { CompilerOptions, ScriptTarget, ModuleKind }; export * from './tsbuild.classes.tsbuild.js'; /** * compile am array of absolute file paths */ export let compileFileArray = ( fileStringArrayArg: string[], compilerOptionsArg: CompilerOptions = {}, argvArg?: any ): Promise => { return compiler(fileStringArrayArg, mergeCompilerOptions(compilerOptionsArg, argvArg), argvArg); }; /** * compile advanced glob configurations * @param globStringArrayArg a array of glob strings * { * './some/origin/folder/**\/*.ts': './some/destination/folder' * } */ export let compileGlobStringObject = async ( globStringObjectArg: Record, tsOptionsArg: CompilerOptions = {}, cwdArg: string = process.cwd(), argvArg?: any ) => { let compiledFiles: any[] = []; for (const keyArg in globStringObjectArg) { // Type safety check for key if (keyArg && typeof keyArg === 'string' && globStringObjectArg[keyArg]) { console.log( `TypeScript assignment: transpile from ${keyArg} to ${globStringObjectArg[keyArg]}` ); // Get files matching the glob pattern const fileTreeArray = await plugins.smartfile.fs.listFileTree(cwdArg, keyArg); // Ensure fileTreeArray contains only strings before transforming const stringFileTreeArray = Array.isArray(fileTreeArray) ? fileTreeArray.filter((item): item is string => typeof item === 'string') : []; // Transform to absolute paths const absoluteFilePathArray = plugins.smartpath.transform.toAbsolute( stringFileTreeArray, cwdArg ) as string[]; // Get destination directory as absolute path const destDir: string = plugins.smartpath.transform.toAbsolute( globStringObjectArg[keyArg], cwdArg ) as string; // Update compiler options with the output directory const updatedTsOptions: CompilerOptions = { ...tsOptionsArg, outDir: destDir, }; // Compile the files and correctly concat the results // Fixed: removed duplicating compiledFiles in the concat operation const newlyCompiledFiles = await compileFileArray(absoluteFilePathArray, updatedTsOptions, argvArg); compiledFiles = compiledFiles.concat(newlyCompiledFiles); } } return compiledFiles; };