@zengenti/contensis-react-base 4.0.1-beta.10 → 4.0.1-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,7 +13,7 @@ var path__default = /*#__PURE__*/_interopDefault(path);
13
13
  * `process.cwd()` = consumer project root) and injects the development
14
14
  * defines as global variables.
15
15
  */
16
- const defineConfigPath = path__default.default.resolve(process.cwd(), 'webpack', 'define-config');
16
+ const defineConfigPath = process.env.CRB_GLOBALS_PATH || path__default.default.resolve(process.cwd(), 'webpack', 'define-config');
17
17
  const defineConfig = require(defineConfigPath).development;
18
18
  Object.entries(defineConfig).forEach(([key, value]) => {
19
19
  global[key] = value;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server-globals.js","sources":["../src/build/dev-server-runtime-globals.ts"],"sourcesContent":["/**\n * This file is emitted as a standalone `cjs/dev-server-globals.js` by rollup.\n * It is loaded by nodemon via the `-r` flag in the SSR server child process.\n * It resolves the consumer's `webpack/define-config` at runtime (using\n * `process.cwd()` = consumer project root) and injects the development\n * defines as global variables.\n */\nimport path from 'path';\n\nconst defineConfigPath = path.resolve(process.cwd(), 'webpack', 'define-config');\n\nconst defineConfig = require(defineConfigPath).development as Record<string, string>;\n\nObject.entries(defineConfig).forEach(([key, value]) => {\n global[key] = value;\n});\n"],"names":["defineConfigPath","path","resolve","process","cwd","defineConfig","require","development","Object","entries","forEach","key","value","global"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAMA,gBAAgB,GAAGC,qBAAI,CAACC,OAAO,CAACC,OAAO,CAACC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC;AAEhF,MAAMC,YAAY,GAAGC,OAAO,CAACN,gBAAgB,CAAC,CAACO,WAAqC;AAEpFC,MAAM,CAACC,OAAO,CAACJ,YAAY,CAAC,CAACK,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;AACrDC,EAAAA,MAAM,CAACF,GAAG,CAAC,GAAGC,KAAK;AACrB,CAAC,CAAC;;"}
1
+ {"version":3,"file":"dev-server-globals.js","sources":["../src/build/dev-server-runtime-globals.ts"],"sourcesContent":["/**\n * This file is emitted as a standalone `cjs/dev-server-globals.js` by rollup.\n * It is loaded by nodemon via the `-r` flag in the SSR server child process.\n * It resolves the consumer's `webpack/define-config` at runtime (using\n * `process.cwd()` = consumer project root) and injects the development\n * defines as global variables.\n */\nimport path from 'path';\n\nconst defineConfigPath =\n process.env.CRB_GLOBALS_PATH ||\n path.resolve(process.cwd(), 'webpack', 'define-config');\n\nconst defineConfig = require(defineConfigPath).development as Record<string, string>;\n\nObject.entries(defineConfig).forEach(([key, value]) => {\n global[key] = value;\n});\n"],"names":["defineConfigPath","process","env","CRB_GLOBALS_PATH","path","resolve","cwd","defineConfig","require","development","Object","entries","forEach","key","value","global"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAMA,gBAAgB,GACpBC,OAAO,CAACC,GAAG,CAACC,gBAAgB,IAC5BC,qBAAI,CAACC,OAAO,CAACJ,OAAO,CAACK,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC;AAEzD,MAAMC,YAAY,GAAGC,OAAO,CAACR,gBAAgB,CAAC,CAACS,WAAqC;AAEpFC,MAAM,CAACC,OAAO,CAACJ,YAAY,CAAC,CAACK,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;AACrDC,EAAAA,MAAM,CAACF,GAAG,CAAC,GAAGC,KAAK;AACrB,CAAC,CAAC;;"}
package/esm/build.js CHANGED
@@ -10,8 +10,46 @@ import WebpackDevServer from 'webpack-dev-server';
10
10
 
11
11
  const projectRoot = process.cwd();
12
12
  const DEVSERVER_RUNTIME_GLOBALS = path.resolve(__dirname, 'dev-server-globals.js');
13
+ function resolveConfigPath(configArg) {
14
+ if (configArg) {
15
+ const resolved = path.resolve(projectRoot, configArg);
16
+ if (fs.existsSync(resolved)) return resolved;
17
+ console.error(`[crb] ❌ Error: Config file not found: ${resolved}`);
18
+ process.exit(1);
19
+ }
20
+ const defaults = ['webpack.config.js', 'webpack/webpack.config.js'];
21
+ for (const candidate of defaults) {
22
+ const resolved = path.resolve(projectRoot, candidate);
23
+ if (fs.existsSync(resolved)) return resolved;
24
+ }
25
+ console.error(`[crb] ❌ Error: No webpack config found. Tried:\n ${defaults.map(d => path.resolve(projectRoot, d)).join('\n ')}\nProvide one with --config <path>.`);
26
+ process.exit(1);
27
+ }
28
+ function resolveGlobalsPath(globalsPathArg,
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ configModule) {
31
+ if (globalsPathArg) {
32
+ const resolved = path.resolve(projectRoot, globalsPathArg);
33
+ if (fs.existsSync(resolved)) return resolved;
34
+ console.warn(`[crb] ⚠️ Warning: Globals file not found: ${resolved}`);
35
+ return undefined;
36
+ }
37
+ const devGlobals = configModule.devGlobals;
38
+ if (devGlobals !== undefined) {
39
+ if (typeof devGlobals === 'string') {
40
+ const resolved = path.resolve(projectRoot, devGlobals);
41
+ if (fs.existsSync(resolved)) return resolved;
42
+ console.warn(`[crb] ⚠️ Warning: Globals file from devGlobals not found: ${resolved}`);
43
+ } else {
44
+ console.warn(`[crb] ⚠️ Warning: devGlobals must be a string path, got ${typeof devGlobals}. Falling through.`);
45
+ }
46
+ }
47
+ const fallback = path.resolve(projectRoot, 'webpack', 'define-config.js');
48
+ if (fs.existsSync(fallback)) return fallback;
49
+ console.warn('[crb] ⚠️ Warning: No globals file found. Continuing without injecting globals.');
50
+ return undefined;
51
+ }
13
52
  function runDev(args) {
14
- const configPath = args.config;
15
53
  const devHost = args.devHost || 'localhost';
16
54
  const devPort = args.devPort || '3000';
17
55
  const devListen = args.devListen || '0.0.0.0';
@@ -21,21 +59,8 @@ function runDev(args) {
21
59
  // A bare flag (no port value) resolves to true in cac — treat that as the default port.
22
60
  const resolveInspectPort = val => val === true || val === undefined ? '9229' : String(val);
23
61
  const inspectNodeArg = args.inspectBrk !== undefined ? `--inspect-brk=${resolveInspectPort(args.inspectBrk)}` : `--inspect=${resolveInspectPort(args.inspect)}`;
24
-
25
- // Validate --config option
26
- if (!configPath) {
27
- console.error('[crb] ❌ Error: --config option is required');
28
- console.log('Usage: crb dev --config <path-to-webpack-config> [--dev-host <host>] [--dev-port <port>] [--dev-listen <host>] [--inspect[=port]] [--inspect-brk[=port]]');
29
- process.exit(1);
30
- }
31
62
  console.info('[crb] 🚀 Starting SSR dev server pipeline');
32
- const resolvedConfigPath = path.resolve(projectRoot, configPath);
33
-
34
- // Check config file exists
35
- if (!fs.existsSync(resolvedConfigPath)) {
36
- console.error(`[crb] ❌ Error: Config file not found: ${resolvedConfigPath}`);
37
- process.exit(1);
38
- }
63
+ const resolvedConfigPath = resolveConfigPath(args.config);
39
64
 
40
65
  // Set default host and port
41
66
  process.env.DEV_HOST = devHost;
@@ -78,6 +103,12 @@ function runDev(args) {
78
103
  }
79
104
  const [clientConfig, serverConfig] = webpackConfig;
80
105
 
106
+ // Resolve globals path and pass to nodemon child via env var
107
+ const resolvedGlobalsPath = resolveGlobalsPath(args.globalsPath, webpackConfig);
108
+ if (resolvedGlobalsPath) {
109
+ process.env.CRB_GLOBALS_PATH = resolvedGlobalsPath;
110
+ }
111
+
81
112
  // State flags for orchestration
82
113
  let clientReady = false;
83
114
  let serverReady = false;
@@ -198,7 +229,7 @@ function runDev(args) {
198
229
  const cli = cac('crb');
199
230
 
200
231
  // Dev subcommand
201
- cli.command('dev', 'Start the SSR dev server pipeline').option('--config <path>', 'Path to webpack config file (required)').option('--env-file <path>', 'Path to .env file (default: .env)').option('--dev-host <host>', 'webpack publicPath / HMR host (default: localhost)').option('--dev-port <port>', 'webpack-dev-server listen port (default: 3000)').option('--dev-listen <host>', 'webpack-dev-server listen host (default: 0.0.0.0)').option('--open', 'Open the browser when the SSR server starts. Use --no-open to disable. (default: true)').option('--inspect [port]', 'Enable the V8 inspector on the SSR server. Optionally specify a port (default: 9229)').option('--inspect-brk [port]', 'Enable the V8 inspector and break before the script starts — useful for debugging server startup. Optionally specify a port (default: 9229). Takes precedence over --inspect.').action(runDev);
232
+ cli.command('dev', 'Start the SSR dev server pipeline').option('--config <path>', 'Path to webpack config file (default: webpack.config.js)').option('--globals-path <path>', 'Path to runtime globals shim file (default: webpack/define-config.js)').option('--env-file <path>', 'Path to .env file (default: .env)').option('--dev-host <host>', 'webpack publicPath / HMR host (default: localhost)').option('--dev-port <port>', 'webpack-dev-server listen port (default: 3000)').option('--dev-listen <host>', 'webpack-dev-server listen host (default: 0.0.0.0)').option('--open', 'Open the browser when the SSR server starts. Use --no-open to disable. (default: true)').option('--inspect [port]', 'Enable the V8 inspector on the SSR server. Optionally specify a port (default: 9229)').option('--inspect-brk [port]', 'Enable the V8 inspector and break before the script starts — useful for debugging server startup. Optionally specify a port (default: 9229). Takes precedence over --inspect.').action(runDev);
202
233
  cli.help();
203
234
  cli.parse();
204
235
  if (!cli.matchedCommand) {
package/esm/build.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sources":["../src/build/dev-server.ts","../src/build/cli.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport path from 'path';\nimport fs from 'fs';\nimport dotenv from 'dotenv';\n// @ts-ignore — nodemon has no type definitions\nimport nodemon from 'nodemon';\nimport webpack from 'webpack';\nimport WebpackDevServer from 'webpack-dev-server';\nconst projectRoot = process.cwd();\nconst DEVSERVER_RUNTIME_GLOBALS = path.resolve(__dirname, 'dev-server-globals.js');\n\ninterface DevOptions {\n config?: string;\n envFile?: string;\n devHost?: string;\n devPort?: string;\n devListen?: string;\n open?: boolean;\n inspect?: boolean | string;\n inspectBrk?: boolean | string;\n}\n\nexport function runDev(args: DevOptions): void {\n const configPath = args.config;\n const devHost = args.devHost || 'localhost';\n const devPort = args.devPort || '3000';\n const devListen = args.devListen || '0.0.0.0';\n const openBrowser = args.open !== false;\n\n // --inspect-brk takes precedence over --inspect.\n // A bare flag (no port value) resolves to true in cac — treat that as the default port.\n const resolveInspectPort = (val: boolean | string | undefined) =>\n val === true || val === undefined ? '9229' : String(val);\n const inspectNodeArg =\n args.inspectBrk !== undefined\n ? `--inspect-brk=${resolveInspectPort(args.inspectBrk)}`\n : `--inspect=${resolveInspectPort(args.inspect)}`;\n\n // Validate --config option\n if (!configPath) {\n console.error('[crb] ❌ Error: --config option is required');\n console.log(\n 'Usage: crb dev --config <path-to-webpack-config> [--dev-host <host>] [--dev-port <port>] [--dev-listen <host>] [--inspect[=port]] [--inspect-brk[=port]]'\n );\n process.exit(1);\n }\n\n console.info('[crb] 🚀 Starting SSR dev server pipeline');\n\n const resolvedConfigPath = path.resolve(projectRoot, configPath);\n\n // Check config file exists\n if (!fs.existsSync(resolvedConfigPath)) {\n console.error(\n `[crb] ❌ Error: Config file not found: ${resolvedConfigPath}`\n );\n process.exit(1);\n }\n\n // Set default host and port\n process.env.DEV_HOST = devHost;\n process.env.DEV_PORT = devPort;\n\n // Load .env file\n const envFilePath = path.resolve(projectRoot, args.envFile || '.env');\n try {\n dotenv.config({ path: envFilePath });\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(\n `[crb] ❌ Error: Failed to load env file (${envFilePath}): ${msg}`\n );\n process.exit(1);\n }\n\n // Validate required environment variables\n const REQUIRED_ENV: string[] = ['ALIAS', 'PROJECT', 'ACCESS_TOKEN'];\n const missingEnv = REQUIRED_ENV.filter(\n (k) => !process.env[k] || !process.env[k].trim()\n );\n if (missingEnv.length) {\n console.error(\n `[crb] ❌ Error: Cannot start dev server. Missing required env vars: ${missingEnv.join(', ')}. ` +\n `Set them in a .env file at the project root or export them in your shell.`\n );\n process.exit(1);\n }\n\n // Load project webpack config\n let webpackConfig: unknown;\n try {\n webpackConfig = require(resolvedConfigPath);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(\n `[crb] ❌ Error: Failed to load webpack config: ${msg}`\n );\n process.exit(1);\n }\n\n // Validate webpack config is an array (dual-target mode)\n if (!Array.isArray(webpackConfig)) {\n console.error(\n `[crb] ❌ Error: webpack config must be an array [clientConfig, serverConfig]. ` +\n `The config appears to be a single object (CSR/ANALYZE mode). ` +\n `Use the unified webpack.config.js for SSR dev mode.`\n );\n process.exit(1);\n }\n\n const [clientConfig, serverConfig] = webpackConfig as [webpack.Configuration, webpack.Configuration];\n\n // State flags for orchestration\n let clientReady = false;\n let serverReady = false;\n let nodemonStarted = false;\n let browserOpened = false;\n\n // Nodemon reference for cleanup\n let nodemonInstance: ReturnType<typeof nodemon> | null = null;\n\n // Dev server options\n const devServerOptions = {\n host: devListen,\n port: parseInt(devPort, 10),\n headers: { 'Access-Control-Allow-Origin': '*' },\n hot: true,\n historyApiFallback: true,\n devMiddleware: {\n index: 'index_csr.html',\n writeToDisk: true,\n },\n // TODO: Add proxy config from bundle-info.js (DEVSERVER_PROXIES)\n // to proxy API calls and reverse proxy paths to CMS/IIS\n };\n\n // Create dual webpack compilers (single config each → single Compiler, not MultiCompiler)\n const clientCompiler = webpack(clientConfig);\n const nodeServerCompiler = webpack(serverConfig);\n\n // Start nodemon when both compilers are ready\n function startNodemon(): void {\n if (nodemonStarted) return;\n nodemonStarted = true;\n\n console.info('[crb] 🎯 Starting nodemon...');\n nodemonInstance = nodemon({\n script: 'dist/server-dev.js',\n ext: 'js json',\n watch: ['dist/server-dev.js'],\n nodeArgs: [\n inspectNodeArg,\n '-r',\n DEVSERVER_RUNTIME_GLOBALS,\n ],\n })\n .on('start', () => {\n console.info(\n '[nodemon] started. Now starting local web server at port 3001, with hot-reload enabled.'\n );\n if (openBrowser && !browserOpened) {\n browserOpened = true;\n try {\n const cmd =\n process.platform === 'win32'\n ? 'start'\n : process.platform === 'darwin'\n ? 'open'\n : 'xdg-open';\n execSync(`${cmd} http://${process.env.DEV_HOST}:3001/`, {\n windowsHide: true,\n });\n } catch {\n console.info(\n `Please open http://${process.env.DEV_HOST}:3001/ in your browser`\n );\n }\n }\n })\n .on('crash', () => {\n console.error('[nodemon] crashed');\n });\n }\n\n // Server afterEmit -> start nodemon when both compilers are ready\n nodeServerCompiler.hooks.afterEmit.tap('serverAfterEmitPlugin', () => {\n if (serverReady) return;\n serverReady = true;\n\n if (clientReady) {\n startNodemon();\n }\n });\n\n // Start server compiler watch immediately\n console.info('[crb] 📦 Starting server compiler...');\n nodeServerCompiler.watch({}, (err, stats) => {\n if (err) {\n return console.error(err);\n }\n const statString = stats!.toString();\n process.stdout.write(statString + '\\n');\n });\n\n // Client afterEmit -> start nodemon if server is already ready\n clientCompiler.hooks.afterEmit.tap('clientAfterEmitPlugin', () => {\n if (clientReady) return;\n clientReady = true;\n\n if (serverReady) {\n startNodemon();\n }\n });\n\n // Start webpack dev server\n const devServer = new WebpackDevServer(devServerOptions, clientCompiler);\n\n devServer.startCallback((err) => {\n if (err) {\n console.error('[webpack] devServer listening failed');\n return console.error(err);\n }\n console.info(`[webpack] devServer listening on port ${devPort}`);\n });\n\n // Cleanup on SIGTERM/SIGINT\n function cleanup(): void {\n console.info('[crb] 🛑 Shutting down...');\n if (nodemonInstance) {\n nodemonInstance.emit('quit');\n }\n devServer.stopCallback(() => {\n console.info('[webpack] devServer stopped');\n clientCompiler.close(() => {\n console.info('[webpack] client compiler closed');\n nodeServerCompiler.close(() => {\n console.info('[webpack] server compiler closed');\n process.exit(0);\n });\n });\n });\n }\n\n process.on('SIGTERM', cleanup);\n process.on('SIGINT', cleanup);\n}\n","#!/usr/bin/env node\n\nimport { cac } from 'cac';\nimport { runDev } from './dev-server';\n\nconst cli = cac('crb');\n\n// Dev subcommand\ncli\n .command('dev', 'Start the SSR dev server pipeline')\n .option('--config <path>', 'Path to webpack config file (required)')\n .option('--env-file <path>', 'Path to .env file (default: .env)')\n .option(\n '--dev-host <host>',\n 'webpack publicPath / HMR host (default: localhost)'\n )\n .option('--dev-port <port>', 'webpack-dev-server listen port (default: 3000)')\n .option(\n '--dev-listen <host>',\n 'webpack-dev-server listen host (default: 0.0.0.0)'\n )\n .option(\n '--open',\n 'Open the browser when the SSR server starts. Use --no-open to disable. (default: true)'\n )\n .option(\n '--inspect [port]',\n 'Enable the V8 inspector on the SSR server. Optionally specify a port (default: 9229)'\n )\n .option(\n '--inspect-brk [port]',\n 'Enable the V8 inspector and break before the script starts — useful for debugging server startup. Optionally specify a port (default: 9229). Takes precedence over --inspect.'\n )\n .action(runDev);\n\ncli.help();\n\ncli.parse();\nif (!cli.matchedCommand) {\n cli.outputHelp();\n process.exit(1);\n}\n"],"names":["projectRoot","process","cwd","DEVSERVER_RUNTIME_GLOBALS","path","resolve","__dirname","runDev","args","configPath","config","devHost","devPort","devListen","openBrowser","open","resolveInspectPort","val","undefined","String","inspectNodeArg","inspectBrk","inspect","console","error","log","exit","info","resolvedConfigPath","fs","existsSync","env","DEV_HOST","DEV_PORT","envFilePath","envFile","dotenv","e","msg","Error","message","REQUIRED_ENV","missingEnv","filter","k","trim","length","join","webpackConfig","require","Array","isArray","clientConfig","serverConfig","clientReady","serverReady","nodemonStarted","browserOpened","nodemonInstance","devServerOptions","host","port","parseInt","headers","hot","historyApiFallback","devMiddleware","index","writeToDisk","clientCompiler","webpack","nodeServerCompiler","startNodemon","nodemon","script","ext","watch","nodeArgs","on","cmd","platform","execSync","windowsHide","hooks","afterEmit","tap","err","stats","statString","toString","stdout","write","devServer","WebpackDevServer","startCallback","cleanup","emit","stopCallback","close","cli","cac","command","option","action","help","parse","matchedCommand","outputHelp"],"mappings":";;;;;;;;;;AAQA,MAAMA,WAAW,GAAGC,OAAO,CAACC,GAAG,EAAE;AACjC,MAAMC,yBAAyB,GAAGC,IAAI,CAACC,OAAO,CAACC,SAAS,EAAE,uBAAuB,CAAC;AAa3E,SAASC,MAAMA,CAACC,IAAgB,EAAQ;AAC7C,EAAA,MAAMC,UAAU,GAAGD,IAAI,CAACE,MAAM;AAC9B,EAAA,MAAMC,OAAO,GAAGH,IAAI,CAACG,OAAO,IAAI,WAAW;AAC3C,EAAA,MAAMC,OAAO,GAAGJ,IAAI,CAACI,OAAO,IAAI,MAAM;AACtC,EAAA,MAAMC,SAAS,GAAGL,IAAI,CAACK,SAAS,IAAI,SAAS;AAC7C,EAAA,MAAMC,WAAW,GAAGN,IAAI,CAACO,IAAI,KAAK,KAAK;;AAEvC;AACA;AACA,EAAA,MAAMC,kBAAkB,GAAIC,GAAiC,IAC3DA,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAKC,SAAS,GAAG,MAAM,GAAGC,MAAM,CAACF,GAAG,CAAC;EAC1D,MAAMG,cAAc,GAClBZ,IAAI,CAACa,UAAU,KAAKH,SAAS,GACzB,CAAA,cAAA,EAAiBF,kBAAkB,CAACR,IAAI,CAACa,UAAU,CAAC,CAAA,CAAE,GACtD,CAAA,UAAA,EAAaL,kBAAkB,CAACR,IAAI,CAACc,OAAO,CAAC,CAAA,CAAE;;AAErD;EACA,IAAI,CAACb,UAAU,EAAE;AACfc,IAAAA,OAAO,CAACC,KAAK,CAAC,4CAA4C,CAAC;AAC3DD,IAAAA,OAAO,CAACE,GAAG,CACT,0JACF,CAAC;AACDxB,IAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,EAAA;AAEAH,EAAAA,OAAO,CAACI,IAAI,CAAC,2CAA2C,CAAC;EAEzD,MAAMC,kBAAkB,GAAGxB,IAAI,CAACC,OAAO,CAACL,WAAW,EAAES,UAAU,CAAC;;AAEhE;AACA,EAAA,IAAI,CAACoB,EAAE,CAACC,UAAU,CAACF,kBAAkB,CAAC,EAAE;AACtCL,IAAAA,OAAO,CAACC,KAAK,CACX,CAAA,sCAAA,EAAyCI,kBAAkB,EAC7D,CAAC;AACD3B,IAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,EAAA;;AAEA;AACAzB,EAAAA,OAAO,CAAC8B,GAAG,CAACC,QAAQ,GAAGrB,OAAO;AAC9BV,EAAAA,OAAO,CAAC8B,GAAG,CAACE,QAAQ,GAAGrB,OAAO;;AAE9B;AACA,EAAA,MAAMsB,WAAW,GAAG9B,IAAI,CAACC,OAAO,CAACL,WAAW,EAAEQ,IAAI,CAAC2B,OAAO,IAAI,MAAM,CAAC;EACrE,IAAI;IACFC,MAAM,CAAC1B,MAAM,CAAC;AAAEN,MAAAA,IAAI,EAAE8B;AAAY,KAAC,CAAC;EACtC,CAAC,CAAC,OAAOG,CAAU,EAAE;AACnB,IAAA,MAAMC,GAAG,GAAGD,CAAC,YAAYE,KAAK,GAAGF,CAAC,CAACG,OAAO,GAAGrB,MAAM,CAACkB,CAAC,CAAC;IACtDd,OAAO,CAACC,KAAK,CACX,CAAA,wCAAA,EAA2CU,WAAW,CAAA,GAAA,EAAMI,GAAG,EACjE,CAAC;AACDrC,IAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,EAAA;;AAEA;EACA,MAAMe,YAAsB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC;EACnE,MAAMC,UAAU,GAAGD,YAAY,CAACE,MAAM,CACnCC,CAAC,IAAK,CAAC3C,OAAO,CAAC8B,GAAG,CAACa,CAAC,CAAC,IAAI,CAAC3C,OAAO,CAAC8B,GAAG,CAACa,CAAC,CAAC,CAACC,IAAI,EAChD,CAAC;EACD,IAAIH,UAAU,CAACI,MAAM,EAAE;AACrBvB,IAAAA,OAAO,CAACC,KAAK,CACX,CAAA,mEAAA,EAAsEkB,UAAU,CAACK,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,GAC7F,2EACJ,CAAC;AACD9C,IAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,EAAA;;AAEA;AACA,EAAA,IAAIsB,aAAsB;EAC1B,IAAI;AACFA,IAAAA,aAAa,GAAGC,OAAO,CAACrB,kBAAkB,CAAC;EAC7C,CAAC,CAAC,OAAOS,CAAU,EAAE;AACnB,IAAA,MAAMC,GAAG,GAAGD,CAAC,YAAYE,KAAK,GAAGF,CAAC,CAACG,OAAO,GAAGrB,MAAM,CAACkB,CAAC,CAAC;AACtDd,IAAAA,OAAO,CAACC,KAAK,CACX,CAAA,8CAAA,EAAiDc,GAAG,EACtD,CAAC;AACDrC,IAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,EAAA;;AAEA;AACA,EAAA,IAAI,CAACwB,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,EAAE;IACjCzB,OAAO,CAACC,KAAK,CACX,CAAA,6EAAA,CAA+E,GAC7E,CAAA,6DAAA,CAA+D,GAC/D,qDACJ,CAAC;AACDvB,IAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,EAAA;AAEA,EAAA,MAAM,CAAC0B,YAAY,EAAEC,YAAY,CAAC,GAAGL,aAA+D;;AAEpG;EACA,IAAIM,WAAW,GAAG,KAAK;EACvB,IAAIC,WAAW,GAAG,KAAK;EACvB,IAAIC,cAAc,GAAG,KAAK;EAC1B,IAAIC,aAAa,GAAG,KAAK;;AAEzB;EACA,IAAIC,eAAkD,GAAG,IAAI;;AAE7D;AACA,EAAA,MAAMC,gBAAgB,GAAG;AACvBC,IAAAA,IAAI,EAAE/C,SAAS;AACfgD,IAAAA,IAAI,EAAEC,QAAQ,CAAClD,OAAO,EAAE,EAAE,CAAC;AAC3BmD,IAAAA,OAAO,EAAE;AAAE,MAAA,6BAA6B,EAAE;KAAK;AAC/CC,IAAAA,GAAG,EAAE,IAAI;AACTC,IAAAA,kBAAkB,EAAE,IAAI;AACxBC,IAAAA,aAAa,EAAE;AACbC,MAAAA,KAAK,EAAE,gBAAgB;AACvBC,MAAAA,WAAW,EAAE;AACf;AACA;AACA;GACD;;AAED;AACA,EAAA,MAAMC,cAAc,GAAGC,OAAO,CAAClB,YAAY,CAAC;AAC5C,EAAA,MAAMmB,kBAAkB,GAAGD,OAAO,CAACjB,YAAY,CAAC;;AAEhD;EACA,SAASmB,YAAYA,GAAS;AAC5B,IAAA,IAAIhB,cAAc,EAAE;AACpBA,IAAAA,cAAc,GAAG,IAAI;AAErBjC,IAAAA,OAAO,CAACI,IAAI,CAAC,8BAA8B,CAAC;IAC5C+B,eAAe,GAAGe,OAAO,CAAC;AACxBC,MAAAA,MAAM,EAAE,oBAAoB;AAC5BC,MAAAA,GAAG,EAAE,SAAS;MACdC,KAAK,EAAE,CAAC,oBAAoB,CAAC;AAC7BC,MAAAA,QAAQ,EAAE,CACRzD,cAAc,EACd,IAAI,EACJjB,yBAAyB;AAE7B,KAAC,CAAC,CACC2E,EAAE,CAAC,OAAO,EAAE,MAAM;AACjBvD,MAAAA,OAAO,CAACI,IAAI,CACV,yFACF,CAAC;AACD,MAAA,IAAIb,WAAW,IAAI,CAAC2C,aAAa,EAAE;AACjCA,QAAAA,aAAa,GAAG,IAAI;QACpB,IAAI;AACF,UAAA,MAAMsB,GAAG,GACP9E,OAAO,CAAC+E,QAAQ,KAAK,OAAO,GACxB,OAAO,GACP/E,OAAO,CAAC+E,QAAQ,KAAK,QAAQ,GAC3B,MAAM,GACN,UAAU;UAClBC,QAAQ,CAAC,CAAA,EAAGF,GAAG,CAAA,QAAA,EAAW9E,OAAO,CAAC8B,GAAG,CAACC,QAAQ,CAAA,MAAA,CAAQ,EAAE;AACtDkD,YAAAA,WAAW,EAAE;AACf,WAAC,CAAC;AACJ,QAAA,CAAC,CAAC,MAAM;UACN3D,OAAO,CAACI,IAAI,CACV,CAAA,mBAAA,EAAsB1B,OAAO,CAAC8B,GAAG,CAACC,QAAQ,CAAA,sBAAA,CAC5C,CAAC;AACH,QAAA;AACF,MAAA;AACF,IAAA,CAAC,CAAC,CACD8C,EAAE,CAAC,OAAO,EAAE,MAAM;AACjBvD,MAAAA,OAAO,CAACC,KAAK,CAAC,mBAAmB,CAAC;AACpC,IAAA,CAAC,CAAC;AACN,EAAA;;AAEA;EACA+C,kBAAkB,CAACY,KAAK,CAACC,SAAS,CAACC,GAAG,CAAC,uBAAuB,EAAE,MAAM;AACpE,IAAA,IAAI9B,WAAW,EAAE;AACjBA,IAAAA,WAAW,GAAG,IAAI;AAElB,IAAA,IAAID,WAAW,EAAE;AACfkB,MAAAA,YAAY,EAAE;AAChB,IAAA;AACF,EAAA,CAAC,CAAC;;AAEF;AACAjD,EAAAA,OAAO,CAACI,IAAI,CAAC,sCAAsC,CAAC;EACpD4C,kBAAkB,CAACK,KAAK,CAAC,EAAE,EAAE,CAACU,GAAG,EAAEC,KAAK,KAAK;AAC3C,IAAA,IAAID,GAAG,EAAE;AACP,MAAA,OAAO/D,OAAO,CAACC,KAAK,CAAC8D,GAAG,CAAC;AAC3B,IAAA;AACA,IAAA,MAAME,UAAU,GAAGD,KAAK,CAAEE,QAAQ,EAAE;IACpCxF,OAAO,CAACyF,MAAM,CAACC,KAAK,CAACH,UAAU,GAAG,IAAI,CAAC;AACzC,EAAA,CAAC,CAAC;;AAEF;EACAnB,cAAc,CAACc,KAAK,CAACC,SAAS,CAACC,GAAG,CAAC,uBAAuB,EAAE,MAAM;AAChE,IAAA,IAAI/B,WAAW,EAAE;AACjBA,IAAAA,WAAW,GAAG,IAAI;AAElB,IAAA,IAAIC,WAAW,EAAE;AACfiB,MAAAA,YAAY,EAAE;AAChB,IAAA;AACF,EAAA,CAAC,CAAC;;AAEF;EACA,MAAMoB,SAAS,GAAG,IAAIC,gBAAgB,CAAClC,gBAAgB,EAAEU,cAAc,CAAC;AAExEuB,EAAAA,SAAS,CAACE,aAAa,CAAER,GAAG,IAAK;AAC/B,IAAA,IAAIA,GAAG,EAAE;AACP/D,MAAAA,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;AACrD,MAAA,OAAOD,OAAO,CAACC,KAAK,CAAC8D,GAAG,CAAC;AAC3B,IAAA;AACA/D,IAAAA,OAAO,CAACI,IAAI,CAAC,CAAA,sCAAA,EAAyCf,OAAO,EAAE,CAAC;AAClE,EAAA,CAAC,CAAC;;AAEF;EACA,SAASmF,OAAOA,GAAS;AACvBxE,IAAAA,OAAO,CAACI,IAAI,CAAC,2BAA2B,CAAC;AACzC,IAAA,IAAI+B,eAAe,EAAE;AACnBA,MAAAA,eAAe,CAACsC,IAAI,CAAC,MAAM,CAAC;AAC9B,IAAA;IACAJ,SAAS,CAACK,YAAY,CAAC,MAAM;AAC3B1E,MAAAA,OAAO,CAACI,IAAI,CAAC,6BAA6B,CAAC;MAC3C0C,cAAc,CAAC6B,KAAK,CAAC,MAAM;AACzB3E,QAAAA,OAAO,CAACI,IAAI,CAAC,kCAAkC,CAAC;QAChD4C,kBAAkB,CAAC2B,KAAK,CAAC,MAAM;AAC7B3E,UAAAA,OAAO,CAACI,IAAI,CAAC,kCAAkC,CAAC;AAChD1B,UAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,EAAA;AAEAzB,EAAAA,OAAO,CAAC6E,EAAE,CAAC,SAAS,EAAEiB,OAAO,CAAC;AAC9B9F,EAAAA,OAAO,CAAC6E,EAAE,CAAC,QAAQ,EAAEiB,OAAO,CAAC;AAC/B;;AChPA,MAAMI,GAAG,GAAGC,GAAG,CAAC,KAAK,CAAC;;AAEtB;AACAD,GAAG,CACAE,OAAO,CAAC,KAAK,EAAE,mCAAmC,CAAC,CACnDC,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC,CACnEA,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC,CAChEA,MAAM,CACL,mBAAmB,EACnB,oDACF,CAAC,CACAA,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC,CAC7EA,MAAM,CACL,qBAAqB,EACrB,mDACF,CAAC,CACAA,MAAM,CACL,QAAQ,EACR,wFACF,CAAC,CACAA,MAAM,CACL,kBAAkB,EAClB,sFACF,CAAC,CACAA,MAAM,CACL,sBAAsB,EACtB,+KACF,CAAC,CACAC,MAAM,CAAChG,MAAM,CAAC;AAEjB4F,GAAG,CAACK,IAAI,EAAE;AAEVL,GAAG,CAACM,KAAK,EAAE;AACX,IAAI,CAACN,GAAG,CAACO,cAAc,EAAE;EACvBP,GAAG,CAACQ,UAAU,EAAE;AAChB1G,EAAAA,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACjB"}
1
+ {"version":3,"file":"build.js","sources":["../src/build/dev-server.ts","../src/build/cli.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport path from 'path';\nimport fs from 'fs';\nimport dotenv from 'dotenv';\n// @ts-ignore — nodemon has no type definitions\nimport nodemon from 'nodemon';\nimport webpack from 'webpack';\nimport WebpackDevServer from 'webpack-dev-server';\nconst projectRoot = process.cwd();\nconst DEVSERVER_RUNTIME_GLOBALS = path.resolve(__dirname, 'dev-server-globals.js');\n\ninterface DevOptions {\n config?: string;\n globalsPath?: string;\n envFile?: string;\n devHost?: string;\n devPort?: string;\n devListen?: string;\n open?: boolean;\n inspect?: boolean | string;\n inspectBrk?: boolean | string;\n}\n\nfunction resolveConfigPath(configArg: string | undefined): string {\n if (configArg) {\n const resolved = path.resolve(projectRoot, configArg);\n if (fs.existsSync(resolved)) return resolved;\n console.error(`[crb] ❌ Error: Config file not found: ${resolved}`);\n process.exit(1);\n }\n\n const defaults = ['webpack.config.js', 'webpack/webpack.config.js'];\n for (const candidate of defaults) {\n const resolved = path.resolve(projectRoot, candidate);\n if (fs.existsSync(resolved)) return resolved;\n }\n\n console.error(\n `[crb] ❌ Error: No webpack config found. Tried:\\n ${defaults.map((d) => path.resolve(projectRoot, d)).join('\\n ')}\\nProvide one with --config <path>.`\n );\n process.exit(1);\n}\n\nfunction resolveGlobalsPath(\n globalsPathArg: string | undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n configModule: any\n): string | undefined {\n if (globalsPathArg) {\n const resolved = path.resolve(projectRoot, globalsPathArg);\n if (fs.existsSync(resolved)) return resolved;\n console.warn(\n `[crb] ⚠️ Warning: Globals file not found: ${resolved}`\n );\n return undefined;\n }\n\n const devGlobals = configModule.devGlobals;\n if (devGlobals !== undefined) {\n if (typeof devGlobals === 'string') {\n const resolved = path.resolve(projectRoot, devGlobals);\n if (fs.existsSync(resolved)) return resolved;\n console.warn(\n `[crb] ⚠️ Warning: Globals file from devGlobals not found: ${resolved}`\n );\n } else {\n console.warn(\n `[crb] ⚠️ Warning: devGlobals must be a string path, got ${typeof devGlobals}. Falling through.`\n );\n }\n }\n\n const fallback = path.resolve(projectRoot, 'webpack', 'define-config.js');\n if (fs.existsSync(fallback)) return fallback;\n\n console.warn(\n '[crb] ⚠️ Warning: No globals file found. Continuing without injecting globals.'\n );\n return undefined;\n}\n\nexport function runDev(args: DevOptions): void {\n const devHost = args.devHost || 'localhost';\n const devPort = args.devPort || '3000';\n const devListen = args.devListen || '0.0.0.0';\n const openBrowser = args.open !== false;\n\n // --inspect-brk takes precedence over --inspect.\n // A bare flag (no port value) resolves to true in cac — treat that as the default port.\n const resolveInspectPort = (val: boolean | string | undefined) =>\n val === true || val === undefined ? '9229' : String(val);\n const inspectNodeArg =\n args.inspectBrk !== undefined\n ? `--inspect-brk=${resolveInspectPort(args.inspectBrk)}`\n : `--inspect=${resolveInspectPort(args.inspect)}`;\n\n console.info('[crb] 🚀 Starting SSR dev server pipeline');\n\n const resolvedConfigPath = resolveConfigPath(args.config);\n\n // Set default host and port\n process.env.DEV_HOST = devHost;\n process.env.DEV_PORT = devPort;\n\n // Load .env file\n const envFilePath = path.resolve(projectRoot, args.envFile || '.env');\n try {\n dotenv.config({ path: envFilePath });\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(\n `[crb] ❌ Error: Failed to load env file (${envFilePath}): ${msg}`\n );\n process.exit(1);\n }\n\n // Validate required environment variables\n const REQUIRED_ENV: string[] = ['ALIAS', 'PROJECT', 'ACCESS_TOKEN'];\n const missingEnv = REQUIRED_ENV.filter(\n (k) => !process.env[k] || !process.env[k].trim()\n );\n if (missingEnv.length) {\n console.error(\n `[crb] ❌ Error: Cannot start dev server. Missing required env vars: ${missingEnv.join(', ')}. ` +\n `Set them in a .env file at the project root or export them in your shell.`\n );\n process.exit(1);\n }\n\n // Load project webpack config\n let webpackConfig: unknown;\n try {\n webpackConfig = require(resolvedConfigPath);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(\n `[crb] ❌ Error: Failed to load webpack config: ${msg}`\n );\n process.exit(1);\n }\n\n // Validate webpack config is an array (dual-target mode)\n if (!Array.isArray(webpackConfig)) {\n console.error(\n `[crb] ❌ Error: webpack config must be an array [clientConfig, serverConfig]. ` +\n `The config appears to be a single object (CSR/ANALYZE mode). ` +\n `Use the unified webpack.config.js for SSR dev mode.`\n );\n process.exit(1);\n }\n\n const [clientConfig, serverConfig] = webpackConfig as [webpack.Configuration, webpack.Configuration];\n\n // Resolve globals path and pass to nodemon child via env var\n const resolvedGlobalsPath = resolveGlobalsPath(\n args.globalsPath,\n webpackConfig\n );\n if (resolvedGlobalsPath) {\n process.env.CRB_GLOBALS_PATH = resolvedGlobalsPath;\n }\n\n // State flags for orchestration\n let clientReady = false;\n let serverReady = false;\n let nodemonStarted = false;\n let browserOpened = false;\n\n // Nodemon reference for cleanup\n let nodemonInstance: ReturnType<typeof nodemon> | null = null;\n\n // Dev server options\n const devServerOptions = {\n host: devListen,\n port: parseInt(devPort, 10),\n headers: { 'Access-Control-Allow-Origin': '*' },\n hot: true,\n historyApiFallback: true,\n devMiddleware: {\n index: 'index_csr.html',\n writeToDisk: true,\n },\n // TODO: Add proxy config from bundle-info.js (DEVSERVER_PROXIES)\n // to proxy API calls and reverse proxy paths to CMS/IIS\n };\n\n // Create dual webpack compilers (single config each → single Compiler, not MultiCompiler)\n const clientCompiler = webpack(clientConfig);\n const nodeServerCompiler = webpack(serverConfig);\n\n // Start nodemon when both compilers are ready\n function startNodemon(): void {\n if (nodemonStarted) return;\n nodemonStarted = true;\n\n console.info('[crb] 🎯 Starting nodemon...');\n nodemonInstance = nodemon({\n script: 'dist/server-dev.js',\n ext: 'js json',\n watch: ['dist/server-dev.js'],\n nodeArgs: [\n inspectNodeArg,\n '-r',\n DEVSERVER_RUNTIME_GLOBALS,\n ],\n })\n .on('start', () => {\n console.info(\n '[nodemon] started. Now starting local web server at port 3001, with hot-reload enabled.'\n );\n if (openBrowser && !browserOpened) {\n browserOpened = true;\n try {\n const cmd =\n process.platform === 'win32'\n ? 'start'\n : process.platform === 'darwin'\n ? 'open'\n : 'xdg-open';\n execSync(`${cmd} http://${process.env.DEV_HOST}:3001/`, {\n windowsHide: true,\n });\n } catch {\n console.info(\n `Please open http://${process.env.DEV_HOST}:3001/ in your browser`\n );\n }\n }\n })\n .on('crash', () => {\n console.error('[nodemon] crashed');\n });\n }\n\n // Server afterEmit -> start nodemon when both compilers are ready\n nodeServerCompiler.hooks.afterEmit.tap('serverAfterEmitPlugin', () => {\n if (serverReady) return;\n serverReady = true;\n\n if (clientReady) {\n startNodemon();\n }\n });\n\n // Start server compiler watch immediately\n console.info('[crb] 📦 Starting server compiler...');\n nodeServerCompiler.watch({}, (err, stats) => {\n if (err) {\n return console.error(err);\n }\n const statString = stats!.toString();\n process.stdout.write(statString + '\\n');\n });\n\n // Client afterEmit -> start nodemon if server is already ready\n clientCompiler.hooks.afterEmit.tap('clientAfterEmitPlugin', () => {\n if (clientReady) return;\n clientReady = true;\n\n if (serverReady) {\n startNodemon();\n }\n });\n\n // Start webpack dev server\n const devServer = new WebpackDevServer(devServerOptions, clientCompiler);\n\n devServer.startCallback((err) => {\n if (err) {\n console.error('[webpack] devServer listening failed');\n return console.error(err);\n }\n console.info(`[webpack] devServer listening on port ${devPort}`);\n });\n\n // Cleanup on SIGTERM/SIGINT\n function cleanup(): void {\n console.info('[crb] 🛑 Shutting down...');\n if (nodemonInstance) {\n nodemonInstance.emit('quit');\n }\n devServer.stopCallback(() => {\n console.info('[webpack] devServer stopped');\n clientCompiler.close(() => {\n console.info('[webpack] client compiler closed');\n nodeServerCompiler.close(() => {\n console.info('[webpack] server compiler closed');\n process.exit(0);\n });\n });\n });\n }\n\n process.on('SIGTERM', cleanup);\n process.on('SIGINT', cleanup);\n}\n","#!/usr/bin/env node\n\nimport { cac } from 'cac';\nimport { runDev } from './dev-server';\n\nconst cli = cac('crb');\n\n// Dev subcommand\ncli\n .command('dev', 'Start the SSR dev server pipeline')\n .option(\n '--config <path>',\n 'Path to webpack config file (default: webpack.config.js)'\n )\n .option(\n '--globals-path <path>',\n 'Path to runtime globals shim file (default: webpack/define-config.js)'\n )\n .option('--env-file <path>', 'Path to .env file (default: .env)')\n .option(\n '--dev-host <host>',\n 'webpack publicPath / HMR host (default: localhost)'\n )\n .option('--dev-port <port>', 'webpack-dev-server listen port (default: 3000)')\n .option(\n '--dev-listen <host>',\n 'webpack-dev-server listen host (default: 0.0.0.0)'\n )\n .option(\n '--open',\n 'Open the browser when the SSR server starts. Use --no-open to disable. (default: true)'\n )\n .option(\n '--inspect [port]',\n 'Enable the V8 inspector on the SSR server. Optionally specify a port (default: 9229)'\n )\n .option(\n '--inspect-brk [port]',\n 'Enable the V8 inspector and break before the script starts — useful for debugging server startup. Optionally specify a port (default: 9229). Takes precedence over --inspect.'\n )\n .action(runDev);\n\ncli.help();\n\ncli.parse();\nif (!cli.matchedCommand) {\n cli.outputHelp();\n process.exit(1);\n}\n"],"names":["projectRoot","process","cwd","DEVSERVER_RUNTIME_GLOBALS","path","resolve","__dirname","resolveConfigPath","configArg","resolved","fs","existsSync","console","error","exit","defaults","candidate","map","d","join","resolveGlobalsPath","globalsPathArg","configModule","warn","undefined","devGlobals","fallback","runDev","args","devHost","devPort","devListen","openBrowser","open","resolveInspectPort","val","String","inspectNodeArg","inspectBrk","inspect","info","resolvedConfigPath","config","env","DEV_HOST","DEV_PORT","envFilePath","envFile","dotenv","e","msg","Error","message","REQUIRED_ENV","missingEnv","filter","k","trim","length","webpackConfig","require","Array","isArray","clientConfig","serverConfig","resolvedGlobalsPath","globalsPath","CRB_GLOBALS_PATH","clientReady","serverReady","nodemonStarted","browserOpened","nodemonInstance","devServerOptions","host","port","parseInt","headers","hot","historyApiFallback","devMiddleware","index","writeToDisk","clientCompiler","webpack","nodeServerCompiler","startNodemon","nodemon","script","ext","watch","nodeArgs","on","cmd","platform","execSync","windowsHide","hooks","afterEmit","tap","err","stats","statString","toString","stdout","write","devServer","WebpackDevServer","startCallback","cleanup","emit","stopCallback","close","cli","cac","command","option","action","help","parse","matchedCommand","outputHelp"],"mappings":"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"}
@@ -1089,13 +1089,24 @@ const getBundleTags = (loadableExtractor, scripts, staticRoutePath = 'static') =
1089
1089
  return startupTag;
1090
1090
  };
1091
1091
 
1092
+ /**
1093
+ * Arguably deprecated functionality driven by a version.json file
1094
+ * injected into the container from the CI build process.
1095
+ * This is used to provide version information for the application
1096
+ * such as the commit id and the build number.
1097
+ * @param staticFolderPath if the app is not built into the `dist/static` folder, we can provide a different path to the static folder.
1098
+ * @returns version.json as a JSON object, or an empty object if the file cannot be read.
1099
+ */
1092
1100
  const getVersionInfo = staticFolderPath => {
1093
1101
  try {
1094
1102
  const versionData = fs.readFileSync(`dist/${staticFolderPath}/version.json`, 'utf8');
1095
1103
  const versionInfo = JSON.parse(versionData);
1096
1104
  return versionInfo;
1097
1105
  } catch (ex) {
1098
- console.error(`Unable to read from "version.json"`, ex);
1106
+ // We don't need to log this error as it is just noise in the logs
1107
+ // when the version.json file is not constructed and injected into
1108
+ // the build container or a development stub included in the project.
1109
+ // console.error(`Unable to read from "version.json"`, ex);
1099
1110
  return {};
1100
1111
  }
1101
1112
  };