import * as fs from 'fs' import * as path from 'path' import { GenerateIndexTsParams } from '@types' import { filterFileNameByExt } from './filterFileNameByExt' import { createIndexTsFileContent } from './createIndexTsFileContent' import { getFileNamesInDestinationContainExport } from './getFileNamesInDestinationContainExport' import { getFolderNamesInDestinationContainExport } from './getFolderNamesInDestinationContainExport' export const generateIndexTs = async ({ fileExts, stripFileExts, inputDirectoryNames, inputFileNames, generatedFileExt, currentWorkingDirectory, babelConfigPath, exclude = [], ignoreDirectory, }: GenerateIndexTsParams) => { // Ignore destination match destinations if (exclude.some(regex => regex.test(currentWorkingDirectory))) { return } // ignore input directory name and file names match ignoreMatchFileRegexes const filteredInputDirectoryNames = ignoreDirectory ? [] : inputDirectoryNames.filter(inputDirectoryName => { const inputDirectoryPath = path.resolve(currentWorkingDirectory, inputDirectoryName) for (let regex of exclude) { if (regex.test(inputDirectoryPath)) { return false } } return true }) const filteredInputFileNames = inputFileNames.filter(inputDirectoryName => { const inputFilePath = path.resolve(currentWorkingDirectory, inputDirectoryName) for (let regex of exclude) { if (regex.test(inputFilePath)) { return false } } return true }) const fileNamesMatchExt = filterFileNameByExt({ fileNames: filteredInputFileNames, fileExts, }) const [fileNames, folderNames] = await Promise.all([ getFileNamesInDestinationContainExport({ fileNames: fileNamesMatchExt, currentWorkingDirectory, babelConfigPath, }), getFolderNamesInDestinationContainExport({ folderNames: filteredInputDirectoryNames, currentWorkingDirectory, indexstring: generatedFileExt, }), ]) // create file content const fileContent = createIndexTsFileContent({ fileNames, folderNames, stripFileExts, }) if (!fileContent) { return } // Print generated file name with success color const indexFilePath = path.join(currentWorkingDirectory, `index.${generatedFileExt}`) console.log(`Generate ${indexFilePath}`) // create index file return fs.writeFileSync(indexFilePath, fileContent) }