UNPKG

@ima/plugin-cli

Version:

IMA.js Plugin CLI tool to build, link, develop IMA.js plugins.

63 lines 2.52 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.typescriptDeclarationsPlugin = typescriptDeclarationsPlugin; const child_process_1 = require("child_process"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const logger_1 = require("@ima/dev-utils/logger"); /** * Resolves tsconfig paths in given directory and returns them. * We always use the first one. They are sorted by their priority. */ function resolveTsConfigs(cwd) { const tsConfigPaths = ['tsconfig.build.json', 'tsconfig.json']; return tsConfigPaths.filter(tsConfigPath => fs_1.default.existsSync(path_1.default.join(cwd, tsConfigPath))); } function typescriptDeclarationsPlugin(options) { let tsConfigPath; const allowFailure = options?.allowFailure ?? true; return async (context) => { [tsConfigPath] = options?.tsConfigPath ?? resolveTsConfigs(context.cwd); if (!tsConfigPath) { return; } if (context.command === 'build') { logger_1.logger.info('Generating typescript declaration files...', { trackTime: true, }); } await new Promise((resolve, reject) => { (0, child_process_1.spawn)(options?.tscPath ? options.tscPath : 'tsc', [ '--outDir', context.config.output[0].dir, '--project', tsConfigPath, '--emitDeclarationOnly', '--declarationMap', '--preserveWatchOutput', ...(['dev', 'link'].includes(context.command) ? ['--watch', '--incremental'] : []), ...(options?.additionalArgs ?? []), ].filter(Boolean), { stdio: 'inherit', cwd: context.cwd, shell: true, }) .on('close', code => { if (code !== 0 && !allowFailure) { return reject('Error generating declaration files.'); } return resolve(); }) .on('error', err => { logger_1.logger.error('Error generating declaration files.'); return reject(err); }); }); }; } //# sourceMappingURL=typescriptDeclarationsPlugin.js.map