UNPKG

@nrwl/workspace

Version:

The Workspace plugin contains executors and generators that are useful for any Nx workspace. It should be present in every Nx workspace and other plugins build on it.

120 lines 6.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.compileTypeScriptWatcher = exports.compileTypeScript = void 0; const tslib_1 = require("tslib"); const devkit_1 = require("@nrwl/devkit"); const fs_1 = require("fs"); const ts_config_1 = require("../ts-config"); const typescript_1 = require("../typescript"); let tsModule; function compileTypeScript(options) { const normalizedOptions = normalizeOptions(options); const tsConfig = getNormalizedTsConfig(normalizedOptions); if (normalizedOptions.deleteOutputPath) { (0, fs_1.rmSync)(normalizedOptions.outputPath, { recursive: true, force: true }); } return createProgram(tsConfig, normalizedOptions); } exports.compileTypeScript = compileTypeScript; function compileTypeScriptWatcher(options, callback) { if (!tsModule) { tsModule = (0, typescript_1.ensureTypescript)(); } const normalizedOptions = normalizeOptions(options); const tsConfig = getNormalizedTsConfig(normalizedOptions); if (normalizedOptions.deleteOutputPath) { (0, fs_1.rmSync)(normalizedOptions.outputPath, { recursive: true, force: true }); } const host = tsModule.createWatchCompilerHost(tsConfig.fileNames, tsConfig.options, tsModule.sys); const originalAfterProgramCreate = host.afterProgramCreate; host.afterProgramCreate = (builderProgram) => { const originalProgramEmit = builderProgram.emit; builderProgram.emit = (targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) => { var _a; const consumerCustomTransformers = (_a = options.getCustomTransformers) === null || _a === void 0 ? void 0 : _a.call(options, builderProgram.getProgram()); const mergedCustomTransformers = mergeCustomTransformers(customTransformers, consumerCustomTransformers); return originalProgramEmit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, mergedCustomTransformers); }; if (originalAfterProgramCreate) originalAfterProgramCreate(builderProgram); }; const originalOnWatchStatusChange = host.onWatchStatusChange; host.onWatchStatusChange = (a, b, c, d) => tslib_1.__awaiter(this, void 0, void 0, function* () { originalOnWatchStatusChange === null || originalOnWatchStatusChange === void 0 ? void 0 : originalOnWatchStatusChange(a, b, c, d); yield (callback === null || callback === void 0 ? void 0 : callback(a, b, c, d)); }); return tsModule.createWatchProgram(host); } exports.compileTypeScriptWatcher = compileTypeScriptWatcher; function mergeCustomTransformers(originalCustomTransformers, consumerCustomTransformers) { if (!consumerCustomTransformers) return originalCustomTransformers; const mergedCustomTransformers = {}; if (consumerCustomTransformers.before) { mergedCustomTransformers.before = (originalCustomTransformers === null || originalCustomTransformers === void 0 ? void 0 : originalCustomTransformers.before) ? [ ...originalCustomTransformers.before, ...consumerCustomTransformers.before, ] : consumerCustomTransformers.before; } if (consumerCustomTransformers.after) { mergedCustomTransformers.after = (originalCustomTransformers === null || originalCustomTransformers === void 0 ? void 0 : originalCustomTransformers.after) ? [ ...originalCustomTransformers.after, ...consumerCustomTransformers.after, ] : consumerCustomTransformers.after; } if (consumerCustomTransformers.afterDeclarations) { mergedCustomTransformers.afterDeclarations = (originalCustomTransformers === null || originalCustomTransformers === void 0 ? void 0 : originalCustomTransformers.afterDeclarations) ? [ ...originalCustomTransformers.afterDeclarations, ...consumerCustomTransformers.afterDeclarations, ] : consumerCustomTransformers.afterDeclarations; } return mergedCustomTransformers; } function getNormalizedTsConfig(options) { const tsConfig = (0, ts_config_1.readTsConfig)(options.tsConfig); tsConfig.options.outDir = options.outputPath; tsConfig.options.noEmitOnError = true; tsConfig.options.rootDir = options.rootDir; if (tsConfig.options.incremental && !tsConfig.options.tsBuildInfoFile) { tsConfig.options.tsBuildInfoFile = (0, devkit_1.joinPathFragments)(options.outputPath, 'tsconfig.tsbuildinfo'); } return tsConfig; } function createProgram(tsconfig, { projectName, getCustomTransformers }) { if (!tsModule) { tsModule = (0, typescript_1.ensureTypescript)(); } const host = tsModule.createCompilerHost(tsconfig.options); const program = tsModule.createProgram({ rootNames: tsconfig.fileNames, options: tsconfig.options, host, }); devkit_1.logger.info(`Compiling TypeScript files for project "${projectName}"...`); const results = program.emit(undefined, undefined, undefined, undefined, getCustomTransformers === null || getCustomTransformers === void 0 ? void 0 : getCustomTransformers(program)); if (results.emitSkipped) { const diagnostics = tsModule.formatDiagnosticsWithColorAndContext(results.diagnostics, { getCurrentDirectory: () => tsModule.sys.getCurrentDirectory(), getNewLine: () => tsModule.sys.newLine, getCanonicalFileName: (name) => name, }); devkit_1.logger.error(diagnostics); return { success: false }; } else { devkit_1.logger.info(`Done compiling TypeScript files for project "${projectName}".`); return { success: true }; } } function normalizeOptions(options) { var _a, _b; return Object.assign(Object.assign({}, options), { deleteOutputPath: (_a = options.deleteOutputPath) !== null && _a !== void 0 ? _a : true, rootDir: (_b = options.rootDir) !== null && _b !== void 0 ? _b : options.projectRoot }); } //# sourceMappingURL=compilation.js.map