create-ts-index
Version:
Automatic create index.ts file
154 lines • 17.1 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: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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