UNPKG

@nx/angular-rsbuild

Version:

Rsbuild Plugin for building Angular.

167 lines (166 loc) 7.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._createConfig = _createConfig; exports.createConfig = createConfig; const core_1 = require("@rsbuild/core"); const path_1 = require("path"); const normalize_options_1 = require("../models/normalize-options"); const plugin_angular_1 = require("../plugin/plugin-angular"); const plugin_hoisted_js_transformer_1 = require("../plugin/plugin-hoisted-js-transformer"); const helpers_1 = require("./helpers"); const dev_server_config_utils_1 = require("./dev-server-config-utils"); const styles_utils_1 = require("./styles-utils"); async function _createConfig(pluginOptions, rsbuildConfigOverrides) { const normalizedOptions = (0, normalize_options_1.normalizeOptions)(pluginOptions); const hashFormat = (0, helpers_1.getOutputHashFormat)(normalizedOptions.outputHashing); const browserPolyfills = [...normalizedOptions.polyfills, 'zone.js']; const serverPolyfills = [ ...normalizedOptions.polyfills, 'zone.js/node', '@angular/platform-server/init', ]; const isRunningDevServer = process.argv.at(2) === 'dev'; const isProd = process.env.NODE_ENV === 'production'; const stylePlugins = (0, styles_utils_1.getStylePlugins)(normalizedOptions); const { root } = normalizedOptions; const rsbuildPluginAngularConfig = (0, core_1.defineConfig)({ root, source: { tsconfigPath: normalizedOptions.tsConfig, }, plugins: [(0, plugin_hoisted_js_transformer_1.pluginHoistedJsTransformer)(normalizedOptions), ...stylePlugins], mode: // mode is set to production to enable optimizations normalizedOptions.optimization === false ? 'development' : isProd ? 'production' : 'development', dev: { ...(isRunningDevServer && normalizedOptions.hasServer ? { writeToDisk: (file) => !file.includes('.hot-update.'), client: { port: normalizedOptions.devServer?.port ?? 4200, host: 'localhost', }, hmr: false, liveReload: true, } : undefined), }, server: { host: 'localhost', port: normalizedOptions.devServer?.port ?? 4200, htmlFallback: false, historyApiFallback: { index: '/index.html', rewrites: [{ from: /^\/$/, to: 'index.html' }], }, https: normalizedOptions.devServer?.sslKey && normalizedOptions.devServer?.sslCert ? { key: (0, path_1.resolve)(root, normalizedOptions.devServer.sslKey), cert: (0, path_1.resolve)(root, normalizedOptions.devServer.sslCert), } : undefined, proxy: await (0, dev_server_config_utils_1.getProxyConfig)(root, normalizedOptions.devServer?.proxyConfig), }, tools: { rspack(config) { config.resolve ??= {}; config.resolve.extensionAlias = {}; config.resolve.symlinks = normalizedOptions.preserveSymlinks; }, }, environments: { browser: { plugins: [(0, plugin_angular_1.pluginAngular)(normalizedOptions)], source: { preEntry: [...browserPolyfills, ...normalizedOptions.styles], entry: { index: normalizedOptions.browser, }, define: { ...(isProd ? { ngDevMode: 'false' } : undefined), ngJitMode: normalizedOptions.aot ? undefined : 'true', // @TODO: use normalizedOptions ...normalizedOptions.define, }, }, output: { target: 'web', filename: { js: `[name]${hashFormat.chunk}.js`, css: `[name]${hashFormat.file}.css`, }, sourceMap: { js: normalizedOptions.sourceMap.scripts ? 'source-map' : false, css: normalizedOptions.sourceMap.styles, }, distPath: { root: normalizedOptions.outputPath.browser, js: '', media: normalizedOptions.outputPath.media, assets: normalizedOptions.outputPath.media, }, cleanDistPath: normalizedOptions.deleteOutputPath, copy: normalizedOptions.assets.map((srcPath) => ({ from: srcPath, to: (0, path_1.dirname)(srcPath), })), }, html: { template: normalizedOptions.index, }, }, ...(normalizedOptions.hasServer ? { server: { plugins: [(0, plugin_angular_1.pluginAngular)(normalizedOptions)], source: { preEntry: [...serverPolyfills], entry: { server: normalizedOptions.ssr.entry, }, define: { ngServerMode: true, ...(isProd ? { ngDevMode: 'false' } : undefined), ngJitMode: normalizedOptions.aot ? undefined : 'true', // @TODO: use normalizedOptions ...normalizedOptions.define, }, }, output: { target: 'node', polyfill: 'entry', distPath: { root: normalizedOptions.outputPath.server }, cleanDistPath: normalizedOptions.deleteOutputPath, externals: normalizedOptions.externalDependencies, }, }, } : {}), }, }); const userDefinedConfig = (0, core_1.defineConfig)(rsbuildConfigOverrides || {}); return (0, core_1.mergeRsbuildConfig)(rsbuildPluginAngularConfig, userDefinedConfig); } async function createConfig(defaultOptions, configurations = {}, configEnvVar = 'NGRS_CONFIG') { const configurationMode = process.env[configEnvVar] ?? 'production'; const isDefault = configurationMode === 'default'; const isModeConfigured = configurationMode in configurations; const modeOverrides = (!isDefault && isModeConfigured && configurations[configurationMode]?.options) || {}; const mergedBuildOptionsOptions = { ...defaultOptions.options, ...modeOverrides, }; let mergedRsbuildConfigOverrides = defaultOptions.rsbuildConfigOverrides ?? {}; if (!isDefault && isModeConfigured && configurations[configurationMode]?.rsbuildConfigOverrides) { mergedRsbuildConfigOverrides = (0, core_1.mergeRsbuildConfig)(mergedRsbuildConfigOverrides, configurations[configurationMode]?.rsbuildConfigOverrides ?? {}); } return await _createConfig(mergedBuildOptionsOptions, mergedRsbuildConfigOverrides); }