const CracoAlias = require("craco-alias"); const CracoBabelLoader = require("craco-babel-loader"); const path = require("path"); const webpack = require("webpack"); module.exports = { devServer: { client: { webSocketURL: { hostname: "127.0.0.1", pathname: "/ws", port: 3000, protocol: "ws", }, }, }, babel: { plugins: ["babel-plugin-lodash"], }, webpack: { configure: { resolve: { alias: { "lodash-es": "lodash", }, fallback: { assert: false, stream: false, util: false, fs: false, os: false, path: false, }, }, module: { rules: [ { test: /\.m?js/, resolve: { fullySpecified: false }, }, ], }, ignoreWarnings: [ function ignoreSourcemapsloaderWarnings(warning) { return ( warning.module && warning.module.resource.includes("node_modules") && warning.details && warning.details.includes("source-map-loader") ); }, ], plugins: [ // Replace BlueprintJS’s icon component with our own implementation // that code-splits icons away new webpack.NormalModuleReplacementPlugin( /@blueprintjs\/core\/lib\/\w+\/components\/icon\/icon\.\w+/, require.resolve( "./src/components/designSystems/blueprintjs/icon/index.js", ), ), ], }, }, plugins: [ { plugin: CracoAlias, options: { source: "tsconfig", // baseUrl SHOULD be specified // plugin does not take it from tsconfig baseUrl: "./src", // tsConfigPath should point to the file where "baseUrl" and "paths" are specified tsConfigPath: "./tsconfig.path.json", }, }, { plugin: CracoBabelLoader, options: { includes: [path.resolve("packages")], }, }, { plugin: "prismjs", options: { languages: ["javascript"], plugins: [], theme: "twilight", css: false, }, }, { // Prioritize the local src directory over node_modules. // This matters for cases where `src/` and `node_modules/` both exist – // e.g., when `` is `entities`: https://github.com/appsmithorg/appsmith/pull/20964#discussion_r1124782356 plugin: { overrideWebpackConfig: ({ webpackConfig }) => { webpackConfig.resolve.modules = [ path.resolve(__dirname, "src"), ...webpackConfig.resolve.modules, ]; return webpackConfig; }, }, }, ], };