UNPKG

create-ts-index

Version:
154 lines 17.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const chalk_1 = tslib_1.__importDefault(require("chalk")); const dayjs_1 = tslib_1.__importDefault(require("dayjs")); const debug_1 = tslib_1.__importDefault(require("debug")); const path = tslib_1.__importStar(require("path")); const ctircLoader_1 = require("../options/ctircLoader"); const CTILogger_1 = require("../tools/CTILogger"); const CTIUtility_1 = require("../tools/CTIUtility"); const exportStatement_1 = require("../tools/exportStatement"); const CommandModule_1 = require("./CommandModule"); const log = debug_1.default('cti:CreateCommandModule'); class CreateCommandModule { do(cliCwd, passed) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const cwd = CTIUtility_1.isNotEmpty(passed.globOptions) && CTIUtility_1.isNotEmpty(passed.globOptions.cwd) ? passed.globOptions.cwd : process.cwd(); const { readedFrom, option } = ctircLoader_1.ctircLoader({ cwd: cliCwd, fromCliOption: passed, inputDir: cwd, }); const logger = new CTILogger_1.CTILogger(option.verbose); logger.log(chalk_1.default.yellowBright('Configuration from: '), readedFrom === '' ? 'default' : readedFrom); try { logger.log(chalk_1.default.yellowBright('Option: '), option); log('opt: ', option); const targetFileGlob = option.targetExts.map((ext) => `*.${ext}`).join('|'); const allTsFiles = yield CommandModule_1.CommandModule.promisify.glob(`**/+(${targetFileGlob})`, option.globOptions); const tsFiles = CommandModule_1.CommandModule.targetFileFilter({ logger, option, filenames: allTsFiles, }); const dupLibDirs = tsFiles .filter((tsFile) => tsFile.split('/').length > 1) .map((tsFile) => { const splitted = tsFile.split('/'); const allPath = Array(splitted.length - 1) .fill(0) .map((_, index) => index + 1) .map((index) => { const a = splitted.slice(0, index).join('/'); return a; }); return allPath; }) .reduce((aggregated, libPath) => { return aggregated.concat(libPath); }, []); const dirSet = new Set(); dupLibDirs.forEach((dir) => dirSet.add(dir)); tsFiles.map((tsFile) => path.dirname(tsFile)).forEach((dir) => dirSet.add(dir)); const tsDirs = Array.from(dirSet); if (option.includeCWD && tsDirs.findIndex((dir) => path.resolve(dir) === path.resolve('.')) < 0) { tsDirs.push('.'); } tsDirs.sort((left, right) => { const llen = left.split('/').length; const rlen = right.split('/').length; if (llen > rlen) { return -1; } if (llen < rlen) { return 1; } return 0; }); log('tsDirs:: ', tsDirs); yield Promise.all(tsDirs.map((tsDir) => this.write({ option, logger, directory: tsDir, directories: tsDirs }))); logger.flog(chalk_1.default.green(`create succeeded: ${option.globOptions.cwd}`)); } catch (err) { log(err.message); log(err.stack); logger.ferror(chalk_1.default.red(err.message)); } }); } write({ directory, option, logger, }) { return tslib_1.__awaiter(this, void 0, void 0, function* () { try { logger.log(chalk_1.default.yellowBright('Current working directory: ', directory)); const resolvePath = path.resolve(option.globOptions.cwd || __dirname); const elements = yield CommandModule_1.CommandModule.promisify.readDir(path.join(resolvePath, directory)); const stats = yield Promise.all(elements.map((target) => CommandModule_1.CommandModule.promisify.stat(path.join(resolvePath, directory, target)))); const statMap = elements.reduce((map, element, index) => { map[element] = stats[index]; return map; }, {}); const targets = elements .filter((element) => statMap[element].isDirectory() || element !== 'index.ts') .filter((element) => statMap[element].isDirectory() || element !== 'entrypoint.ts'); const categorized = targets.reduce((result, target) => { if (statMap[target].isDirectory()) { result.dir.push(target); } else { result.allFiles.push(target); } return result; }, { dir: [], allFiles: [] }); const excludePatternFilteredDirs = categorized.dir.filter((element) => { return !option.excludes.reduce((result, excludePattern) => { return result || element.indexOf(excludePattern) >= 0; }, false); }); excludePatternFilteredDirs.sort(); categorized.allFiles = CommandModule_1.CommandModule.targetFileFilter({ logger, option, filenames: categorized.allFiles, }); const excludePatternFilteredFiles = categorized.allFiles.filter((element) => { return !option.fileExcludePatterns.reduce((result, excludePattern) => { return result || element.indexOf(excludePattern) >= 0; }, false); }); excludePatternFilteredFiles.sort(); const sorted = (() => { if (option.fileFirst) { return categorized.allFiles.concat(excludePatternFilteredDirs); } return excludePatternFilteredDirs.concat(excludePatternFilteredFiles); })(); const getExport = exportStatement_1.getExportStatementCreator(option, logger); const exportString = sorted.map((target) => getExport(target)); const _buildComment = () => { if (option.withoutComment) { return ''; } if (option.useTimestamp) { return `// created from ${option.quote}create-ts-index${option.quote} ${dayjs_1.default().format('YYYY-MM-DD HH:mm')}\n\n`; } return `// created from ${option.quote}create-ts-index${option.quote}\n\n`; }; const comment = _buildComment(); const fileContent = comment + CTIUtility_1.addNewline(option, exportString.join('\n')); logger.log(chalk_1.default.green('created: '), `${path.join(resolvePath, directory, 'index.ts')}`); yield CommandModule_1.CommandModule.promisify.writeFile(path.join(resolvePath, directory, 'index.ts'), fileContent, 'utf8'); } catch (err) { log(err.message); log(err.stack); logger.error(chalk_1.default.red('indexWriter: ', err.message)); } }); } } exports.CreateCommandModule = CreateCommandModule; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlYXRlQ29tbWFuZE1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9DcmVhdGVDb21tYW5kTW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBEQUEwQjtBQUMxQiwwREFBMEI7QUFDMUIsMERBQTBCO0FBQzFCLG1EQUE2QjtBQUM3Qix3REFBcUQ7QUFFckQsa0RBQStDO0FBQy9DLG9EQUE2RDtBQUM3RCw4REFBcUU7QUFDckUsbURBQWdEO0FBR2hELE1BQU0sR0FBRyxHQUFHLGVBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRTdDLE1BQWEsbUJBQW1CO0lBQ2pCLEVBQUUsQ0FBQyxNQUFjLEVBQUUsTUFBcUM7O1lBQ25FLE1BQU0sR0FBRyxHQUNQLHVCQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHVCQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQ2xFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUc7Z0JBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFcEIsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyx5QkFBVyxDQUFDO2dCQUN6QyxHQUFHLEVBQUUsTUFBTTtnQkFDWCxhQUFhLEVBQUUsTUFBTTtnQkFDckIsUUFBUSxFQUFFLEdBQUc7YUFDZCxDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTdDLE1BQU0sQ0FBQyxHQUFHLENBQ1IsZUFBSyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxFQUMxQyxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FDM0MsQ0FBQztZQUVGLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxl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