import { logger } from './logging.js'; import * as plugins from './plugins.js'; import * as interfaces from './interfaces/index.js'; import { PublishModule } from './classes.publishmodule.js'; export class TsPublish { constructor() {} public async publish(monorepoDirArg: string) { const publishModules = await this.getModuleSubDirs(monorepoDirArg); logger.log('info', `Found ${Object.keys(publishModules).length} publish modules:`); for (const publishModule of Object.keys(publishModules)) { logger.log( 'info', `Publishing module: ${publishModule} -> ${publishModules[publishModule].name}`, ); } for (const publishModule of Object.keys(publishModules)) { // lets check wether there is a name if (!publishModules[publishModule].name) { logger.log('warn', `no name found in tspublish.json for ${publishModule}. Skipping...`); continue; } const publishModuleInstance = new PublishModule({ monoRepoDir: monorepoDirArg, packageSubFolder: publishModule, }); await publishModuleInstance.init(); await publishModuleInstance.createPublishModuleDir(); await publishModuleInstance.build(); await publishModuleInstance.publish(); } } public async getModuleSubDirs(dirArg: string) { const subDirs = await plugins.smartfile.fs.listFolders(dirArg); const publishModules: { [key: string]: interfaces.ITsPublishJson } = {}; for (const subDir of subDirs) { if (!subDir.startsWith('ts')) { continue; } const fileTree = await plugins.smartfile.fs.listFileTree(subDir, '**/*'); const hasPublishJson = fileTree.includes('tspublish.json'); if (!hasPublishJson) { continue; } logger.log('info', `found publish module: ${subDir}`); publishModules[subDir] = JSON.parse( plugins.smartfile.fs.toStringSync(plugins.path.join(subDir, 'tspublish.json')), ); } logger.log('ok', `found ${Object.keys(publishModules).length} publish modules`); logger.log('info', `Ordering publish modules...`); return publishModules; } }