create-ts-index
Version:
Automatic create index.ts file
154 lines • 17.6 kB
JavaScript
;
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:EntrypointCommandModule');
class EntrypointCommandModule {
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('configuration from: ', readedFrom === '' ? 'default' : readedFrom);
try {
logger.log(chalk_1.default.yellowBright('Option: '), 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;
});
yield this.write({ logger, option, directories: tsDirs });
logger.flog(chalk_1.default.green(`entrypoint create succeeded: ${option.globOptions.cwd}`));
}
catch (err) {
log('entrypoint: ', err.message);
log('entrypoint: ', err.stack);
logger.ferror(chalk_1.default.redBright(err));
}
});
}
write({ directories, option, logger, }) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
try {
const zipFiles = yield Promise.all(directories.map((directory) => {
return (() => tslib_1.__awaiter(this, void 0, void 0, function* () {
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 filesInDirectory = categorized.allFiles.filter((element) => {
return !option.fileExcludePatterns.reduce((result, excludePattern) => {
return result || element.indexOf(excludePattern) >= 0;
}, false);
});
filesInDirectory.sort();
return filesInDirectory.map((file) => path.relative(resolvePath, path.join(resolvePath, directory, file)));
}))();
}));
const files = zipFiles.reduce((aggregated, _files) => {
return aggregated.concat(_files);
});
const getExport = exportStatement_1.getExportStatementCreator(option, logger);
const exportString = files.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 sortedExportString = exportString.sort();
const fileContent = comment + CTIUtility_1.addNewline(option, sortedExportString.join('\n'));
const cwdPath = option.globOptions.cwd || __dirname;
logger.log(chalk_1.default.green('entrypoiny writed:', `${cwdPath}${path.sep}entrypoint.ts`));
yield CommandModule_1.CommandModule.promisify.writeFile(path.join(cwdPath, 'entrypoint.ts'), fileContent, 'utf8');
}
catch (err) {
logger.error(chalk_1.default.red('indexWriter: ', err.message));
logger.error(chalk_1.default.red('indexWriter: ', err.stack));
}
});
}
}
exports.EntrypointCommandModule = EntrypointCommandModule;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50cnlwb2ludENvbW1hbmRNb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvRW50cnlwb2ludENvbW1hbmRNb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMERBQTBCO0FBQzFCLDBEQUEwQjtBQUMxQiwwREFBMEI7QUFDMUIsbURBQTZCO0FBQzdCLHdEQUFxRDtBQUVyRCxrREFBK0M7QUFDL0Msb0RBQTZEO0FBQzdELDhEQUFxRTtBQUNyRSxtREFBZ0Q7QUFHaEQsTUFBTSxHQUFHLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFakQsTUFBYSx1QkFBdUI7SUFDckIsRUFBRSxDQUFDLE1BQWMsRUFBRSxNQUFxQzs7WUFDbkUsTUFBTSxHQUFHLEdBQ1AsdUJBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksdUJBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUVwQixNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLHlCQUFXLENBQUM7Z0JBQ3pDLEdBQUcsRUFBRSxNQUFNO2dCQUNYLGFBQWEsRUFBRSxNQUFNO2dCQUNyQixRQUFRLEVBQUUsR0FBRzthQUNkLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRS9FLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsWUFBWSxDQUFD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