/* * Copyright 2023 Harness, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const path = require('path') const { container: { ModuleFederationPlugin }, DefinePlugin } = require('webpack') const MiniCssExtractPlugin = require('mini-css-extract-plugin') const HTMLWebpackPlugin = require('html-webpack-plugin') const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin') const GenerateStringTypesPlugin = require('../scripts/webpack/GenerateStringTypesPlugin').GenerateStringTypesPlugin const { RetryChunkLoadPlugin } = require('webpack-retry-chunk-load-plugin') const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin') const moduleFederationConfig = require('./moduleFederation.config') const moduleFederationConfigCDE = require('./cde/moduleFederation.config') const CONTEXT = process.cwd() const DEV = process.env.NODE_ENV === 'development' const getModuleFields = () => { if (process.env.MODULE === 'cde') { return { moduleFederationConfigEntryName: moduleFederationConfigCDE.name, moduleFederationPlugin: new ModuleFederationPlugin(moduleFederationConfigCDE) } } else { return { moduleFederationConfigEntryName: moduleFederationConfig.name, moduleFederationPlugin: new ModuleFederationPlugin(moduleFederationConfig) } } } const { moduleFederationConfigEntryName, moduleFederationPlugin } = getModuleFields() module.exports = { target: 'web', context: CONTEXT, stats: { modules: false, children: false }, entry: { [moduleFederationConfigEntryName]: './src/public-path' }, output: { publicPath: 'auto', pathinfo: false, filename: '[name].[contenthash:6].js', chunkFilename: '[name].[id].[contenthash:6].js' }, module: { rules: [ { test: /\.m?js$/, include: /node_modules/, type: 'javascript/auto' }, { test: /\.(j|t)sx?$/, exclude: /node_modules/, use: [ { loader: 'ts-loader', options: { transpileOnly: true } } ] }, { test: /\.module\.scss$/, exclude: /node_modules/, use: [ MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { importLoaders: 1, modules: { mode: 'local', localIdentName: DEV ? '[name]_[local]_[hash:base64:6]' : '[hash:base64:6]', exportLocalsConvention: 'camelCaseOnly' } } }, { loader: 'sass-loader', options: { sassOptions: { includePaths: [path.join(CONTEXT, 'src')] }, sourceMap: false, implementation: require('sass') } } ] }, { test: /(?