@ima/plugin-cli
Version:
IMA.js Plugin CLI tool to build, link, develop IMA.js plugins.
63 lines • 2.52 kB
JavaScript
;
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