UNPKG

@nx/js

Version:

The JS plugin for Nx contains executors and generators that provide the best experience for developing JavaScript and TypeScript projects.

102 lines (101 loc) 5.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.determineModuleFormatFromTsConfig = determineModuleFormatFromTsConfig; exports.createTypeScriptCompilationOptions = createTypeScriptCompilationOptions; exports.tscExecutor = tscExecutor; const ts = require("typescript"); const devkit_1 = require("@nx/devkit"); const copy_assets_handler_1 = require("../../utils/assets/copy-assets-handler"); const check_dependencies_1 = require("../../utils/check-dependencies"); const compiler_helper_dependency_1 = require("../../utils/compiler-helper-dependency"); const inline_1 = require("../../utils/inline"); const update_package_json_1 = require("../../utils/package-json/update-package-json"); const compile_typescript_files_1 = require("../../utils/typescript/compile-typescript-files"); const watch_for_single_file_changes_1 = require("../../utils/watch-for-single-file-changes"); const lib_1 = require("./lib"); const ts_config_1 = require("../../utils/typescript/ts-config"); const create_entry_points_1 = require("../../utils/package-json/create-entry-points"); function determineModuleFormatFromTsConfig(absolutePathToTsConfig) { const tsConfig = (0, ts_config_1.readTsConfig)(absolutePathToTsConfig); if (tsConfig.options.module === ts.ModuleKind.ES2015 || tsConfig.options.module === ts.ModuleKind.ES2020 || tsConfig.options.module === ts.ModuleKind.ES2022 || tsConfig.options.module === ts.ModuleKind.ESNext) { return 'esm'; } else { return 'cjs'; } } function createTypeScriptCompilationOptions(normalizedOptions, context) { return { outputPath: (0, devkit_1.joinPathFragments)(normalizedOptions.outputPath), projectName: context.projectName, projectRoot: normalizedOptions.projectRoot, rootDir: (0, devkit_1.joinPathFragments)(normalizedOptions.rootDir), tsConfig: (0, devkit_1.joinPathFragments)(normalizedOptions.tsConfig), watch: normalizedOptions.watch, deleteOutputPath: normalizedOptions.clean, getCustomTransformers: (0, lib_1.getCustomTrasformersFactory)(normalizedOptions.transformers), }; } async function* tscExecutor(_options, context) { const { sourceRoot, root } = context.projectsConfigurations.projects[context.projectName]; const options = (0, lib_1.normalizeOptions)(_options, context.root, sourceRoot, root); const { projectRoot, tmpTsConfig, target, dependencies } = (0, check_dependencies_1.checkDependencies)(context, options.tsConfig); if (tmpTsConfig) { options.tsConfig = tmpTsConfig; } const tsLibDependency = (0, compiler_helper_dependency_1.getHelperDependency)(compiler_helper_dependency_1.HelperDependency.tsc, options.tsConfig, dependencies, context.projectGraph); if (tsLibDependency) { dependencies.push(tsLibDependency); } const assetHandler = new copy_assets_handler_1.CopyAssetsHandler({ projectDir: projectRoot, rootDir: context.root, outputDir: _options.outputPath, assets: _options.assets, }); const tsCompilationOptions = createTypeScriptCompilationOptions(options, context); const inlineProjectGraph = (0, inline_1.handleInliningBuild)(context, options, tsCompilationOptions.tsConfig); if (!(0, inline_1.isInlineGraphEmpty)(inlineProjectGraph)) { tsCompilationOptions.rootDir = '.'; } const typescriptCompilation = (0, compile_typescript_files_1.compileTypeScriptFiles)(options, tsCompilationOptions, async () => { await assetHandler.processAllAssetsOnce(); if (options.generatePackageJson) { (0, update_package_json_1.updatePackageJson)({ ...options, additionalEntryPoints: (0, create_entry_points_1.createEntryPoints)(options.additionalEntryPoints, context.root), format: [determineModuleFormatFromTsConfig(options.tsConfig)], }, context, target, dependencies); } (0, inline_1.postProcessInlinedDependencies)(tsCompilationOptions.outputPath, tsCompilationOptions.projectRoot, inlineProjectGraph); }); if (!(0, devkit_1.isDaemonEnabled)() && options.watch) { devkit_1.output.warn({ title: 'Nx Daemon is not enabled. Assets and package.json files will not be updated when files change.', }); } if ((0, devkit_1.isDaemonEnabled)() && options.watch) { const disposeWatchAssetChanges = await assetHandler.watchAndProcessOnAssetChange(); let disposePackageJsonChanges; if (options.generatePackageJson) { disposePackageJsonChanges = await (0, watch_for_single_file_changes_1.watchForSingleFileChanges)(context.projectName, options.projectRoot, 'package.json', () => (0, update_package_json_1.updatePackageJson)({ ...options, additionalEntryPoints: (0, create_entry_points_1.createEntryPoints)(options.additionalEntryPoints, context.root), format: [determineModuleFormatFromTsConfig(options.tsConfig)], }, context, target, dependencies)); } const handleTermination = async (exitCode) => { await typescriptCompilation.close(); disposeWatchAssetChanges(); disposePackageJsonChanges?.(); process.exit(exitCode); }; process.on('SIGINT', () => handleTermination(128 + 2)); process.on('SIGTERM', () => handleTermination(128 + 15)); } return yield* typescriptCompilation.iterator; } exports.default = tscExecutor;