import * as path from 'path' import * as fs from 'fs' import { wrapper, TypeOnEveryFile, TypeToolProp, TypeToolOptions } from '@asset-toolkit/core' /** * A tool to clone files. * @param props - { pathIn, pathOut } * @param options - { } * @returns { Promise(returns) } */ export interface TypePropsCloneFiles extends TypeToolOptions {} export const cloneFiles: (_props: TypeToolProp, options?: TypePropsCloneFiles) => Promise = wrapper( ({ pathIn, pathOut, file, next, log }: TypeOnEveryFile) => { if (fs.lstatSync(path.resolve(pathIn || pathOut, file)).isFile()) { log(file) fs.copyFileSync(path.resolve(pathIn || pathOut, file), path.resolve(pathOut, file)) } next() }, undefined, { name: 'Clone files' }, ) /** * A tool to remove files * @param props - { pathIn, pathOut } * @param options - { } * @returns { Promise(returns) } */ export interface TypePropsRemoveFiles extends TypeToolOptions { fileIncludes?: string[] } export const removeFiles: (_props: TypeToolProp, options?: TypePropsRemoveFiles) => Promise = wrapper( ({ pathOut, file, options, next, log }: TypeOnEveryFile) => { if (fs.lstatSync(path.resolve(pathOut, file)).isFile()) { if (options?.fileIncludes) { options.fileIncludes.forEach((element: string) => { if (file.includes(element)) { log(file) fs.rmSync(path.resolve(pathOut, file)) } }) } else { log(file) fs.rmSync(path.resolve(pathOut, file)) } } next() }, undefined, { name: 'Remove files' }, )