catalyst-core-internal 0.0.1-beta.67 → 0.0.1-beta.68

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.
package/dist/otel.js CHANGED
@@ -1,4 +1,31 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _api=require("@opentelemetry/api");var _sdkNode=require("@opentelemetry/sdk-node");var _resources=require("@opentelemetry/resources");var _sdkTraceNode=require("@opentelemetry/sdk-trace-node");var _sdkMetrics=require("@opentelemetry/sdk-metrics");var _exporterTraceOtlpHttp=require("@opentelemetry/exporter-trace-otlp-http");var _exporterMetricsOtlpHttp=require("@opentelemetry/exporter-metrics-otlp-http");var _autoInstrumentationsNode=require("@opentelemetry/auto-instrumentations-node");var _semanticConventions=require("@opentelemetry/semantic-conventions");function init(config={}){const{serviceName="catalyst-server",serviceVersion="1.0.0",environment="development",traceUrl="http://localhost:4318/v1/traces",metricUrl="http://localhost:4318/v1/metrics",traceHeaders={},metricHeaders={},exportIntervalMillis=10000,exportTimeoutMillis=10000}=config;try{const otlpTraceExporter=new _exporterTraceOtlpHttp.OTLPTraceExporter({url:traceUrl,headers:traceHeaders});const otlpMetricExporter=new _exporterMetricsOtlpHttp.OTLPMetricExporter({url:metricUrl,headers:metricHeaders});const sdk=new _sdkNode.NodeSDK({resource:(0,_resources.resourceFromAttributes)({[_semanticConventions.ATTR_SERVICE_NAME]:serviceName,[_semanticConventions.ATTR_SERVICE_VERSION]:serviceVersion,[_semanticConventions.ATTR_DEPLOYMENT_ENVIRONMENT]:environment}),spanProcessor:new _sdkTraceNode.BatchSpanProcessor(otlpTraceExporter,{exportTimeoutMillis,scheduledDelayMillis:exportIntervalMillis,maxQueueSize:100,maxExportBatchSize:10}),metricReader:new _sdkMetrics.PeriodicExportingMetricReader({exporter:otlpMetricExporter,exportIntervalMillis}),instrumentations:[(0,_autoInstrumentationsNode.getNodeAutoInstrumentations)()]});sdk.start();logger.info("✅ OpenTelemetry started successfully");const meter=initializeCustomMetrics(serviceName,serviceVersion);const gracefulShutdown=signal=>{logger.info(`📡 Received ${signal}, shutting down OpenTelemetry gracefully...`);sdk.shutdown().then(()=>logger.info("✅ OpenTelemetry shutdown completed")).catch(error=>{logger.error("❌ Error terminating OpenTelemetry:",error);}).finally(()=>process.exit());};process.on("SIGTERM",()=>gracefulShutdown("SIGTERM"));process.on("SIGINT",()=>gracefulShutdown("SIGINT"));return{sdk,meter};}catch(error){logger.error("❌ Failed to initialize OpenTelemetry:",error);throw error;}}function initializeCustomMetrics(serviceName,serviceVersion){let customMetrics={};const meter=_api.metrics.getMeter(serviceName,serviceVersion);// CPU usage gauge
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;exports.withObservability=withObservability;var _api=require("@opentelemetry/api");var _sdkNode=require("@opentelemetry/sdk-node");var _resources=require("@opentelemetry/resources");var _sdkTraceNode=require("@opentelemetry/sdk-trace-node");var _sdkMetrics=require("@opentelemetry/sdk-metrics");var _exporterTraceOtlpGrpc=require("@opentelemetry/exporter-trace-otlp-grpc");var _exporterMetricsOtlpGrpc=require("@opentelemetry/exporter-metrics-otlp-grpc");var _autoInstrumentationsNode=require("@opentelemetry/auto-instrumentations-node");var _exporterTraceOtlpHttp=require("@opentelemetry/exporter-trace-otlp-http");var _exporterMetricsOtlpHttp=require("@opentelemetry/exporter-metrics-otlp-http");var _semanticConventions=require("@opentelemetry/semantic-conventions");function init(config={}){const{serviceName="catalyst-server",serviceVersion="1.0.0",environment="development",traceUrl="http://localhost:4317",metricUrl="http://localhost:4317",traceProtocol="grpc",// "grpc" or "http"
2
+ metricProtocol,// "grpc" or "http" - if not provided, metrics will be disabled
3
+ traceHeaders={},metricHeaders={},batchProcessorConfig={},exportIntervalMillis=10000,instrumentations,samplingRate=1.0,grpcCredentials}=config;try{const otlpTraceExporter=createTraceExporter(traceProtocol,traceUrl,traceHeaders,grpcCredentials);// Create metric exporter only if metricProtocol is specified
4
+ let otlpMetricExporter=null;let metricReader=null;if(metricProtocol){otlpMetricExporter=createMetricExporter(metricProtocol,metricUrl,metricHeaders,grpcCredentials);metricReader=new _sdkMetrics.PeriodicExportingMetricReader({exporter:otlpMetricExporter,exportIntervalMillis});}const sampler=new _sdkTraceNode.ParentBasedSampler({root:new _sdkTraceNode.TraceIdRatioBasedSampler(samplingRate)});const sdkConfig={resource:(0,_resources.resourceFromAttributes)({[_semanticConventions.ATTR_SERVICE_NAME]:serviceName,[_semanticConventions.ATTR_SERVICE_VERSION]:serviceVersion,[_semanticConventions.ATTR_DEPLOYMENT_ENVIRONMENT]:environment}),spanProcessor:new _sdkTraceNode.BatchSpanProcessor(otlpTraceExporter,batchProcessorConfig),instrumentations:instrumentations??[(0,_autoInstrumentationsNode.getNodeAutoInstrumentations)()],sampler};// Add metric reader only if metrics are enabled
5
+ if(metricReader){sdkConfig.metricReader=metricReader;}const sdk=new _sdkNode.NodeSDK(sdkConfig);sdk.start();logger.info("✅ OpenTelemetry started successfully");// Initialize custom metrics only if metrics are enabled
6
+ let meter=null;if(metricProtocol){meter=initializeCustomMetrics(serviceName,serviceVersion);}const gracefulShutdown=signal=>{logger.info(`📡 Received ${signal}, shutting down OpenTelemetry gracefully...`);sdk.shutdown().then(()=>logger.info("✅ OpenTelemetry shutdown completed")).catch(error=>{logger.error("❌ Error terminating OpenTelemetry:",error);}).finally(()=>process.exit());};process.on("SIGTERM",()=>gracefulShutdown("SIGTERM"));process.on("SIGINT",()=>gracefulShutdown("SIGINT"));return{sdk,meter};}catch(error){logger.error("❌ Failed to initialize OpenTelemetry:",error);throw error;}}/**
7
+ * Creates a trace exporter based on the specified protocol
8
+ * @param {string} protocol - "grpc" or "http"
9
+ * @param {string} url - Exporter endpoint URL
10
+ * @param {object} headers - Headers to include in requests
11
+ * @param {Function} [grpcCredentials] - gRPC Credentials (optional)
12
+ * @returns {OTLPTraceExporter|OTLPTraceExporterHTTP} Configured trace exporter
13
+ */function createTraceExporter(protocol,url,headers={},grpcCredentials){if(protocol.toLowerCase()==="http"){logger.info(`📡 Creating HTTP trace exporter for URL: ${url}`);return new _exporterTraceOtlpHttp.OTLPTraceExporter({url:url,headers:headers});}else if(protocol.toLowerCase()==="grpc"){logger.info(`📡 Creating gRPC trace exporter for URL: ${url}`);return new _exporterTraceOtlpGrpc.OTLPTraceExporter({url:url,headers:headers,credentials:grpcCredentials});}else{throw new Error(`❌ Unsupported trace protocol: ${protocol}. Supported protocols are "grpc" and "http"`);}}/**
14
+ * Creates a metric exporter based on the specified protocol
15
+ * @param {string} protocol - "grpc" or "http"
16
+ * @param {string} url - Exporter endpoint URL
17
+ * @param {object} headers - Headers to include in requests
18
+ * @param {Function} [grpcCredentials] - gRPC Credentials (optional)
19
+ * @returns {OTLPMetricExporter|OTLPMetricExporterHTTP} Configured metric exporter
20
+ */function createMetricExporter(protocol,url,headers={},grpcCredentials){if(protocol.toLowerCase()==="http"){logger.info(`📊 Creating HTTP metric exporter for URL: ${url}`);return new _exporterMetricsOtlpHttp.OTLPMetricExporter({url:url,headers:headers});}else if(protocol.toLowerCase()==="grpc"){logger.info(`📊 Creating gRPC metric exporter for URL: ${url}`);return new _exporterMetricsOtlpGrpc.OTLPMetricExporter({url:url,headers:headers,credentials:grpcCredentials});}else{throw new Error(`❌ Unsupported metric protocol: ${protocol}. Supported protocols are "grpc" and "http"`);}}function initializeCustomMetrics(serviceName,serviceVersion){let customMetrics={};const meter=_api.metrics.getMeter(serviceName,serviceVersion);// CPU usage gauge
2
21
  customMetrics.cpuUsage=meter.createObservableGauge("process_cpu_usage_percent",{description:"Current CPU usage percentage"});// Memory usage gauges
3
22
  customMetrics.memoryUsage=meter.createObservableGauge("process_memory_usage_bytes",{description:"Current memory usage in bytes",unit:"bytes"});customMetrics.memoryHeapUsed=meter.createObservableGauge("process_memory_heap_used_bytes",{description:"Current heap memory used in bytes",unit:"bytes"});customMetrics.memoryHeapTotal=meter.createObservableGauge("process_memory_heap_total_bytes",{description:"Current heap memory total in bytes",unit:"bytes"});let lastCpuUsage=process.cpuUsage();let lastMeasureTime=process.hrtime.bigint();customMetrics.cpuUsage.addCallback(result=>{const currentCpuUsage=process.cpuUsage(lastCpuUsage);const currentTime=process.hrtime.bigint();const timeDiff=Number(currentTime-lastMeasureTime)/1000000;// Convert to milliseconds
4
- const cpuPercent=(currentCpuUsage.user+currentCpuUsage.system)/1000/timeDiff*100;result.observe(cpuPercent);lastCpuUsage=process.cpuUsage();lastMeasureTime=currentTime;});customMetrics.memoryUsage.addCallback(result=>{const memUsage=process.memoryUsage();result.observe(memUsage.rss,{type:"rss"});result.observe(memUsage.external,{type:"external"});result.observe(memUsage.arrayBuffers,{type:"arrayBuffers"});});customMetrics.memoryHeapUsed.addCallback(result=>{const memUsage=process.memoryUsage();result.observe(memUsage.heapUsed);});customMetrics.memoryHeapTotal.addCallback(result=>{const memUsage=process.memoryUsage();result.observe(memUsage.heapTotal);});return meter;}var _default=exports.default={init};
23
+ const cpuPercent=(currentCpuUsage.user+currentCpuUsage.system)/1000/timeDiff*100;result.observe(cpuPercent);lastCpuUsage=process.cpuUsage();lastMeasureTime=currentTime;});customMetrics.memoryUsage.addCallback(result=>{const memUsage=process.memoryUsage();result.observe(memUsage.rss,{type:"rss"});result.observe(memUsage.external,{type:"external"});result.observe(memUsage.arrayBuffers,{type:"arrayBuffers"});});customMetrics.memoryHeapUsed.addCallback(result=>{const memUsage=process.memoryUsage();result.observe(memUsage.heapUsed);});customMetrics.memoryHeapTotal.addCallback(result=>{const memUsage=process.memoryUsage();result.observe(memUsage.heapTotal);});return meter;}/**
24
+ * Wraps a function (sync or async) and measures total execution time.
25
+ * Creates a single OpenTelemetry span per function call.
26
+ *
27
+ * @param {string} serviceName - The name of the service
28
+ * @param {Function} fn - The function to wrap
29
+ * @param {string} name - Span name (optional)
30
+ * @returns {Function} Wrapped function
31
+ */function withObservability(serviceName,fn,name){const tracer=_api.trace.getTracer(serviceName);const spanName=name||fn.name||"anonymousFunction";return async function(...args){return tracer.startActiveSpan(spanName,async span=>{try{const result=await fn(...args);return result;}catch(err){span.recordException(err);span.setStatus({code:2,message:err.message});throw err;}finally{span.end();}});};}var _default=exports.default={init,withObservability};
@@ -1,3 +1,3 @@
1
- "use strict";const path=require("path");const{spawnSync}=require("child_process");const{green,cyan,yellow}=require("picocolors");const{name}=require(`${process.cwd()}/package.json`);const{BUILD_OUTPUT_PATH}=require(`${process.cwd()}/config/config.json`);const{arrayToObject,printBundleInformation}=require("./scriptUtils.js");/**
1
+ "use strict";const path=require("path");const{green,cyan,yellow}=require("picocolors");const{name}=require(`${process.cwd()}/package.json`);const{BUILD_OUTPUT_PATH}=require(`${process.cwd()}/config/config.json`);const{arrayToObject,printBundleInformation,runBuildCommands}=require("./scriptUtils.js");/**
2
2
  * @description - creates a production build of the application.
3
- */function build(){const isWindows=process.platform==="win32";const commandLineArguments=process.argv.slice(2);const argumentsObject=arrayToObject(commandLineArguments);const dirname=path.resolve(__dirname,"../../");const commands=["node ./dist/scripts/checkVersion",`${isWindows?"rd -r -fo":"rm -rf"} ${process.cwd()}/${BUILD_OUTPUT_PATH} & node ./dist/scripts/loadScriptsBeforeServerStarts.js`,`cross-env APPLICATION=${name||"catalyst_app"} webpack --config ./dist/webpack/production.client.babel.js --progress`,`cross-env APPLICATION=${name||"catalyst_app"} SSR=true webpack --config ./dist/webpack/production.ssr.babel.js`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ./dist/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --ignore '**/*.test.js,./dist/server/renderer/handler.js' --quiet`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ${process.cwd()}/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --quiet`];const command=commands.join(isWindows?" && ":" ; ");console.log("Creating an optimized production build...");const result=spawnSync(command,[],{cwd:dirname,stdio:"inherit",shell:true,env:{...process.env,src_path:process.cwd(),BUILD_OUTPUT_PATH:BUILD_OUTPUT_PATH,NODE_ENV:"production",IS_DEV_COMMAND:false,...argumentsObject}});if(result.error){console.error("Error occurred:",result.error);}else{console.log(green("Compiled successfully."));console.log("\nFile sizes after gzip:\n");printBundleInformation();console.log(`\nThe ${cyan(BUILD_OUTPUT_PATH)} folder is ready to be deployed.`);console.log("You may serve it with a serve command:");console.log(cyan("\n npm run serve"));console.log("\nFind out more about deployment here:");console.log(yellow("\n https://catalyst.1mg.com/public_docs/content/Deployment%20and%20Production/deployment\n"));}}build();
3
+ */function build(){const isWindows=process.platform==="win32";const commandLineArguments=process.argv.slice(2);const argumentsObject=arrayToObject(commandLineArguments);const dirname=path.resolve(__dirname,"../../");const commands=["node ./dist/scripts/checkVersion",`${isWindows?"rd -r -fo":"rm -rf"} ${process.cwd()}/${BUILD_OUTPUT_PATH} & node ./dist/scripts/loadScriptsBeforeServerStarts.js`,`cross-env APPLICATION=${name||"catalyst_app"} webpack --config ./dist/webpack/production.client.babel.js --progress`,`cross-env APPLICATION=${name||"catalyst_app"} SSR=true webpack --config ./dist/webpack/production.ssr.babel.js`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ./dist/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --ignore '**/*.test.js,./dist/server/renderer/handler.js' --quiet`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ${process.cwd()}/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --quiet`];console.log("Creating an optimized production build...");runBuildCommands({commands,cwd:dirname,env:{...process.env,src_path:process.cwd(),BUILD_OUTPUT_PATH:BUILD_OUTPUT_PATH,NODE_ENV:"production",IS_DEV_COMMAND:false,...argumentsObject}});console.log(green("Compiled successfully."));console.log("\nFile sizes after gzip:\n");printBundleInformation();console.log(`\nThe ${cyan(BUILD_OUTPUT_PATH)} folder is ready to be deployed.`);console.log("You may serve it with a serve command:");console.log(cyan("\n npm run serve"));console.log("\nFind out more about deployment here:");console.log(yellow("\n https://catalyst.1mg.com/public_docs/content/Deployment%20and%20Production/deployment\n"));}build();
@@ -1,3 +1,3 @@
1
- "use strict";const path=require("path");const{spawnSync}=require("child_process");const{green,cyan,yellow}=require("picocolors");const{name}=require(`${process.cwd()}/package.json`);const{BUILD_OUTPUT_PATH}=require(`${process.cwd()}/config/config.json`);const{arrayToObject,printBundleInformation}=require("./scriptUtils.js");/**
1
+ "use strict";const path=require("path");const{green,cyan,yellow}=require("picocolors");const{name}=require(`${process.cwd()}/package.json`);const{BUILD_OUTPUT_PATH}=require(`${process.cwd()}/config/config.json`);const{arrayToObject,printBundleInformation,runBuildCommands}=require("./scriptUtils.js");/**
2
2
  * @description - creates a production build of the application.
3
- */function devBuild(){const isWindows=process.platform==="win32";const commandLineArguments=process.argv.slice(2);const argumentsObject=arrayToObject(commandLineArguments);const dirname=path.resolve(__dirname,"../../");const commands=["node ./dist/scripts/checkVersion",`${isWindows?"rd -r -fo":"rm -rf"} ${process.cwd()}/${BUILD_OUTPUT_PATH} & node ./dist/scripts/loadScriptsBeforeServerStarts.js`,`cross-env APPLICATION=${name||"catalyst_app"} webpack --config ./dist/webpack/production.client.babel.js --progress`,` cross-env APPLICATION=${name||"catalyst_app"} SSR=true webpack --config ./dist/webpack/production.ssr.babel.js`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ./dist/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --ignore '**/*.test.js,./dist/server/renderer/handler.js' --quiet`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ${process.cwd()}/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --quiet`];const command=commands.join(isWindows?" && ":" ; ");console.log("Creating an optimized local build...");const result=spawnSync(command,[],{cwd:dirname,stdio:"inherit",shell:true,env:{...process.env,src_path:process.cwd(),BUILD_OUTPUT_PATH:BUILD_OUTPUT_PATH,NODE_ENV:"production",IS_DEV_COMMAND:true,...argumentsObject}});if(result.error){console.error("Error occurred:",result.error);}else{console.log(green("Compiled successfully."));console.log("\nFile sizes after gzip:\n");printBundleInformation();console.log(`\nThe ${cyan(BUILD_OUTPUT_PATH)} folder is ready to be deployed.`);console.log("You may serve it with a serve command:");console.log(cyan("\n npm run devServe"));console.log("\nFind out more about deployment here:");console.log(yellow("\n https://catalyst.1mg.com/public_docs/content/Deployment%20and%20Production/deployment\n"));}}devBuild();
3
+ */function devBuild(){const isWindows=process.platform==="win32";const commandLineArguments=process.argv.slice(2);const argumentsObject=arrayToObject(commandLineArguments);const dirname=path.resolve(__dirname,"../../");const commands=["node ./dist/scripts/checkVersion",`${isWindows?"rd -r -fo":"rm -rf"} ${process.cwd()}/${BUILD_OUTPUT_PATH} & node ./dist/scripts/loadScriptsBeforeServerStarts.js`,`cross-env APPLICATION=${name||"catalyst_app"} webpack --config ./dist/webpack/production.client.babel.js --progress`,`cross-env APPLICATION=${name||"catalyst_app"} SSR=true webpack --config ./dist/webpack/production.ssr.babel.js`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ./dist/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --ignore '**/*.test.js,./dist/server/renderer/handler.js' --quiet`,`cross-env APPLICATION=${name||"catalyst_app"} npx babel ${process.cwd()}/server --out-dir ${process.cwd()}/${BUILD_OUTPUT_PATH} --quiet`];console.log("Creating an optimized local build...");runBuildCommands({commands,cwd:dirname,env:{...process.env,src_path:process.cwd(),BUILD_OUTPUT_PATH:BUILD_OUTPUT_PATH,NODE_ENV:"production",IS_DEV_COMMAND:true,...argumentsObject}});console.log(green("Compiled successfully."));console.log("\nFile sizes after gzip:\n");printBundleInformation();console.log(`\nThe ${cyan(BUILD_OUTPUT_PATH)} folder is ready to be deployed.`);console.log("You may serve it with a serve command:");console.log(cyan("\n npm run devServe"));console.log("\nFind out more about deployment here:");console.log(yellow("\n https://catalyst.1mg.com/public_docs/content/Deployment%20and%20Production/deployment\n"));}devBuild();
@@ -3,4 +3,5 @@
3
3
  */const loadEnvironmentVariables=()=>{if(validateConfigFile(appConfig)){for(let k in appConfig){// below code provides support for object handling present in config.
4
4
  // However, for usage on client the client logic in define plugin needs to be checked and updated
5
5
  process.env[k]=typeof appConfig[k]==="object"?JSON.stringify(appConfig[k]):appConfig[k];}}// Load Sentry configuration if it exists
6
- try{const sentryConfig=require("@catalyst/template/config/sentry.config.json");process.env.SENTRY_CONFIG=JSON.stringify(sentryConfig);}catch(error){console.warn("Warning: Failed to load sentry.config.json");}};var _default=exports.default=loadEnvironmentVariables;
6
+ try{const sentryConfig=require("@catalyst/template/config/sentry.config.json");process.env.SENTRY_CONFIG=JSON.stringify(sentryConfig);}catch(error){// Sentry config is optional
7
+ }};var _default=exports.default=loadEnvironmentVariables;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.arrayToObject=arrayToObject;exports.printBundleInformation=void 0;const fs=require("fs");const path=require("path");const util=require("node:util");const{gray,cyan}=require("picocolors");const{BUILD_OUTPUT_PATH}=require(`${process.cwd()}/config/config.json`);// Function to get file size synchronously
2
- function getFileSizeSync(filePath){try{const stats=fs.statSync(filePath);return stats.size;}catch(err){console.error(`Error getting bundle information for file ${filePath}: ${err}`);return null;}}const printBundleInformation=()=>{let bundleList=[];const directoryPath=path.join(process.cwd(),`${BUILD_OUTPUT_PATH}/public`);try{const files=fs.readdirSync(directoryPath);files.forEach(file=>{if(!file.includes("txt")&&!file.includes("json")){const filePath=path.join(directoryPath,file);const fileSize=getFileSizeSync(filePath);if(fileSize!==null){bundleList.push({file,fileSize});}}});}catch(err){console.error("Unable to scan build folder: "+err);}bundleList.sort((a,b)=>b.fileSize-a.fileSize);bundleList.forEach(({file,fileSize})=>{const fileName=`${gray(`${BUILD_OUTPUT_PATH}/public/`)}${cyan(file)}`;const fileSizeInKb=(fileSize/1024).toFixed(2);const size=`\t${fileSizeInKb} kB`.padEnd(16);console.log(util.format(size,fileName));});};exports.printBundleInformation=printBundleInformation;function arrayToObject(array){const obj={};array.forEach(item=>{const[key,value]=item.split("=");if(value)obj[key]=value;});return obj;}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.arrayToObject=arrayToObject;exports.runBuildCommands=exports.printBundleInformation=void 0;const fs=require("fs");const path=require("path");const util=require("node:util");const{spawnSync}=require("child_process");const{gray,cyan}=require("picocolors");const{BUILD_OUTPUT_PATH}=require(`${process.cwd()}/config/config.json`);// Function to get file size synchronously
2
+ function getFileSizeSync(filePath){try{const stats=fs.statSync(filePath);return stats.size;}catch(err){console.error(`Error getting bundle information for file ${filePath}: ${err}`);return null;}}const printBundleInformation=()=>{let bundleList=[];const directoryPath=path.join(process.cwd(),`${BUILD_OUTPUT_PATH}/public`);try{const files=fs.readdirSync(directoryPath);files.forEach(file=>{if(!file.includes("txt")&&!file.includes("json")){const filePath=path.join(directoryPath,file);const fileSize=getFileSizeSync(filePath);if(fileSize!==null){bundleList.push({file,fileSize});}}});}catch(err){console.error("Unable to scan build folder: "+err);}bundleList.sort((a,b)=>b.fileSize-a.fileSize);bundleList.forEach(({file,fileSize})=>{const fileName=`${gray(`${BUILD_OUTPUT_PATH}/public/`)}${cyan(file)}`;const fileSizeInKb=(fileSize/1024).toFixed(2);const size=`\t${fileSizeInKb} kB`.padEnd(16);console.log(util.format(size,fileName));});};exports.printBundleInformation=printBundleInformation;function arrayToObject(array){const obj={};array.forEach(item=>{const[key,value]=item.split("=");if(value)obj[key]=value;});return obj;}const BUILD_FAILURE_MESSAGE="\nBuild Failed!";function shouldFailBuild(result){return result.error||result.signal||result.status!==null&&result.status!==0;}function logBuildFailure(result,failureMessage=BUILD_FAILURE_MESSAGE){console.error(failureMessage);if(result.error){console.error(`Error: ${result.error?.message||result.error}\n`);}if(result.signal){console.error(`Signal: ${result.signal}\n`);}if(result.status!==null){console.error(`Exit code: ${result.status}\n`);}}const runBuildCommands=({commands,cwd,env,failureMessage=BUILD_FAILURE_MESSAGE})=>{const command=commands.join(" && ");const result=spawnSync(command,[],{cwd,stdio:"inherit",shell:true,env});if(shouldFailBuild(result)){logBuildFailure(result,failureMessage);process.exit(result.status||1);}return result;};exports.runBuildCommands=runBuildCommands;
@@ -1,11 +1,11 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Body=Body;var _react=_interopRequireDefault(require("react"));var _propTypes=_interopRequireDefault(require("prop-types"));var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Body=Body;var _react=_interopRequireDefault(require("react"));var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/**
2
2
  * Body component which will be used in page component
3
3
  * @param {object} jsx - page jsx code
4
4
  * @param {object} initialState - initial state object for redux store
5
5
  * @param {object} firstFoldCss - style elements extracted for initial page load
6
6
  * @param {object} fetcherData - contains data from executing serverFetcher function
7
7
  * @param {object} children - contains any child elements defined within the component
8
- */function Body(props){const{jsx="",initialState={},fetcherData={},children}=props;return/*#__PURE__*/(0,_jsxRuntime.jsxs)("body",{children:[jsx,/*#__PURE__*/(0,_jsxRuntime.jsx)("script",{/* eslint-disable */dangerouslySetInnerHTML:{__html:`
8
+ */function Body({jsx="",initialState={},fetcherData={},children}){return/*#__PURE__*/(0,_jsxRuntime.jsxs)("body",{children:[jsx,/*#__PURE__*/(0,_jsxRuntime.jsx)("script",{/* eslint-disable */dangerouslySetInnerHTML:{__html:`
9
9
  window.__INITIAL_STATE__ = ${JSON.stringify(initialState)}
10
10
  window.__ROUTER_INITIAL_DATA__ = ${JSON.stringify(fetcherData)}
11
- `}}),children]});}Body.propTypes={initialState:_propTypes.default.object,jsx:_propTypes.default.any,fetcherData:_propTypes.default.object,children:_propTypes.default.node};
11
+ `}}),children]});}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Head=Head;var _react=_interopRequireDefault(require("react"));var _propTypes=_interopRequireDefault(require("prop-types"));var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Head=Head;var _react=_interopRequireDefault(require("react"));var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/**
2
2
  * Head component which will be used in page rendering
3
3
  * @param {boolean} isBot - checks if request is made by bot
4
4
  * @param {string} pageCss - includes all styles for page css
@@ -6,4 +6,4 @@
6
6
  * @param {array} metaTags - user defined function which returns meta tags in array
7
7
  * @param {string} publicAssetPath - public asset path for assets
8
8
  * @param {object} children - contains any child elements defined within the component
9
- */function Head(props){const{pageCss,preloadJSLinks,metaTags,isBot,publicAssetPath,children}=props;if(children){return/*#__PURE__*/(0,_jsxRuntime.jsxs)("head",{children:[children,metaTags&&metaTags,pageCss&&/*#__PURE__*/(0,_jsxRuntime.jsx)("style",{dangerouslySetInnerHTML:{__html:pageCss}}),!isBot&&preloadJSLinks]});}return/*#__PURE__*/(0,_jsxRuntime.jsxs)("head",{children:[/*#__PURE__*/(0,_jsxRuntime.jsx)("meta",{charSet:"utf-8"}),/*#__PURE__*/(0,_jsxRuntime.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),publicAssetPath&&/*#__PURE__*/(0,_jsxRuntime.jsx)("link",{rel:"preconnect",href:publicAssetPath}),publicAssetPath&&/*#__PURE__*/(0,_jsxRuntime.jsx)("link",{rel:"dns-prefetch",href:publicAssetPath}),metaTags&&metaTags,pageCss&&/*#__PURE__*/(0,_jsxRuntime.jsx)("style",{dangerouslySetInnerHTML:{__html:pageCss}}),!isBot&&preloadJSLinks]});}Head.propTypes={isBot:_propTypes.default.bool,preloadJSLinks:_propTypes.default.array,pageCss:_propTypes.default.string,metaTags:_propTypes.default.array,publicAssetPath:_propTypes.default.string,children:_propTypes.default.node};
9
+ */function Head({pageCss,preloadJSLinks,metaTags,isBot,publicAssetPath,children}){if(children){return/*#__PURE__*/(0,_jsxRuntime.jsxs)("head",{children:[children,metaTags&&metaTags,pageCss&&/*#__PURE__*/(0,_jsxRuntime.jsx)("style",{dangerouslySetInnerHTML:{__html:pageCss}}),!isBot&&preloadJSLinks]});}return/*#__PURE__*/(0,_jsxRuntime.jsxs)("head",{children:[/*#__PURE__*/(0,_jsxRuntime.jsx)("meta",{charSet:"utf-8"}),/*#__PURE__*/(0,_jsxRuntime.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),publicAssetPath&&/*#__PURE__*/(0,_jsxRuntime.jsx)("link",{rel:"preconnect",href:publicAssetPath}),publicAssetPath&&/*#__PURE__*/(0,_jsxRuntime.jsx)("link",{rel:"dns-prefetch",href:publicAssetPath}),metaTags&&metaTags,pageCss&&/*#__PURE__*/(0,_jsxRuntime.jsx)("style",{dangerouslySetInnerHTML:{__html:pageCss}}),!isBot&&preloadJSLinks]});}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.cacheAndFetchAssets=void 0;exports.cacheCSS=cacheCSS;exports.cachePreloadJSLinks=cachePreloadJSLinks;exports.default=_default;var _path=_interopRequireDefault(require("path"));var _fs=_interopRequireDefault(require("fs"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}function cachePreloadJSLinks(key,data){if(!process.preloadJSLinkCache){process.preloadJSLinkCache={};}let preloadJSLinks=[];if(Array.isArray(data)){try{preloadJSLinks=data.filter(asset=>asset?.props?.as==="script");}catch(error){logger.error("Error in filtering preloaded JS:"+error);}}process.preloadJSLinkCache[key]=preloadJSLinks;}/**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.cacheAndFetchAssets=void 0;exports.cacheCSS=cacheCSS;exports.cachePreloadJSLinks=cachePreloadJSLinks;exports.default=extract;var _path=_interopRequireDefault(require("path"));var _fs=_interopRequireDefault(require("fs"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}function cachePreloadJSLinks(key,data){if(!process.preloadJSLinkCache){process.preloadJSLinkCache={};}let preloadJSLinks=[];if(Array.isArray(data)){try{preloadJSLinks=data.filter(asset=>asset?.props?.as==="script");}catch(error){logger.error("Error in filtering preloaded JS:"+error);}}process.preloadJSLinkCache[key]=preloadJSLinks;}/**
2
2
  * Stores css chunks styles into cache in string format
3
3
  * @param {string} key - router path
4
4
  * @param {object} data - css elements array extracted through loadable chunk extracter
@@ -14,12 +14,12 @@ process.cssCache[key]={pageCss,listOfCachedAssets};}return pageCss;}/**
14
14
  * stores css and js in cache
15
15
  * @param {object} res - response object
16
16
  * @param {string} route - route path
17
- */function _default(res,route){try{const requestPath=route.path;const cachedCss=fetchCachedCSS(requestPath);const cachedPreloadJSLinks=fetchPreloadJSLinkCache(requestPath);if(cachedCss||cachedPreloadJSLinks){res.locals.pageCss=cachedCss;res.locals.preloadJSLinks=cachedPreloadJSLinks;return;}logger.info({message:"Cache Missed",uri:requestPath});}catch(error){logger.error("Error in extracting assets:"+error);}}const cacheAndFetchAssets=({webExtractor,res,isBot})=>{// For bot first fold css and js would become complete page css and js
17
+ */function extract(res,route){try{const requestPath=route.path;const cachedCss=fetchCachedCSS(requestPath);const cachedPreloadJSLinks=fetchPreloadJSLinkCache(requestPath);if(cachedCss||cachedPreloadJSLinks){res.locals.pageCss=cachedCss;res.locals.preloadJSLinks=cachedPreloadJSLinks;return;}logger.info({message:"Cache Missed",uri:requestPath});}catch(error){logger.error("Error in extracting assets:"+error);}}const cacheAndFetchAssets=({webExtractor,res,isBot})=>{// For bot first fold css and js would become complete page css and js
18
18
  let firstFoldCss="";let firstFoldJS="";const isProd=process.env.NODE_ENV==="production";const{routePath,preloadJSLinks}=res.locals;const linkElements=webExtractor.getLinkElements();// We want to cache/or check for update css on every call
19
19
  // We want to extract script tags for every call that will get added to body.
20
20
  // Their corresponding preloaded link script tags are already present in head.
21
21
  if(routePath){if(isProd){firstFoldCss=cacheCSS(routePath,linkElements);if(firstFoldCss?.length)firstFoldCss=`<style>${firstFoldCss}</style>`;}else{cacheCSS(routePath,linkElements);firstFoldCss=webExtractor.getStyleTags();}// firstFoldJS = webExtractor.getScriptTags({ nonce: cspNonce })
22
- firstFoldJS=webExtractor.getScriptTags();}// This block will run for the first time and cache preloaded JS Links for second render
22
+ firstFoldJS=!isBot?webExtractor.getScriptTags():"";}// This block will run for the first time and cache preloaded JS Links for second render
23
23
  // firstFoldJS ->scripts gets inject in body
24
24
  // firstFoldCss -> Inline css gets injected in body only for the first render
25
25
  if(!isProd||isBot||routePath&&!preloadJSLinks){// For production, we inject link tags with preload/prefetch using getLinkElements and inlining them via file reads
@@ -1,22 +1,27 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=_default;var _fs=_interopRequireDefault(require("fs"));var _path=_interopRequireDefault(require("path"));var _react=_interopRequireDefault(require("react"));var _extract=_interopRequireWildcard(require("./extract"));var _reactRedux=require("react-redux");var _document=require("./document");var _server=require("react-router-dom/server");var _ServerRouter=_interopRequireDefault(require("@catalyst/router/ServerRouter.js"));var _index=_interopRequireDefault(require("@catalyst/template/src/js/containers/App/index.js"));var _server2=require("@loadable/server");var _server3=require("react-dom/server");var _userAgentUtil=require("@catalyst/server/utils/userAgentUtil");var _router=require("@tata1mg/router");var _validator=require("@catalyst/server/utils/validator");var _document2=_interopRequireDefault(require("@catalyst/template/server/document.js"));var _utils=require("@catalyst/template/src/js/routes/utils.js");var _index2=require("@catalyst/template/server/index.js");var _jsxRuntime=require("react/jsx-runtime");function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n.default=e,t&&t.set(e,n),n;}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const storePath=_path.default.resolve(`${process.env.src_path}/src/js/store/index.js`);let createStore;if(_fs.default.existsSync(storePath)){try{const{default:configureStore}=require(`${process.env.src_path}/src/js/store/index.js`);createStore=configureStore;}catch(error){createStore=()=>{return{getState:()=>{}};};}}else{createStore=()=>{return{getState:()=>{}};};}const isProduction=process.env.NODE_ENV==="production";// matches request route with routes defined in the application.
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=handler;var _fs=_interopRequireDefault(require("fs"));var _path=_interopRequireDefault(require("path"));var _react=_interopRequireDefault(require("react"));var _extract=_interopRequireWildcard(require("./extract"));var _reactRedux=require("react-redux");var _document=require("./document");var _server=require("react-router-dom/server");var _ServerRouter=_interopRequireDefault(require("@catalyst/router/ServerRouter.js"));var _index=_interopRequireDefault(require("@catalyst/template/src/js/containers/App/index.js"));var _server2=require("@loadable/server");var _server3=require("react-dom/server");var _userAgentUtil=require("@catalyst/server/utils/userAgentUtil");var _router=require("@tata1mg/router");var _validator=require("@catalyst/server/utils/validator");var _document2=_interopRequireDefault(require("@catalyst/template/server/document.js"));var _utils=require("@catalyst/template/src/js/routes/utils.js");var _index2=require("@catalyst/template/server/index.js");var _jsxRuntime=require("react/jsx-runtime");function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n.default=e,t&&t.set(e,n),n;}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const storePath=_path.default.resolve(`${process.env.src_path}/src/js/store/index.js`);let createStore;if(_fs.default.existsSync(storePath)){try{const{default:configureStore}=require(`${process.env.src_path}/src/js/store/index.js`);createStore=configureStore;}catch(error){createStore=()=>{return{getState:()=>{}};};}}else{createStore=()=>{return{getState:()=>{}};};}const isProduction=process.env.NODE_ENV==="production";// matches request route with routes defined in the application.
2
2
  const getMatchRoutes=(routes,req,res,store,context,fetcherData,basePath="",webExtractor)=>{return routes.reduce((matches,route)=>{const{path}=route;const match=(0,_router.matchPath)({path:`${basePath}/${path}`,caseSensitive:false,end:true},req.baseUrl||"/");if(match){if(!res.locals.pageCss&&!res.locals.preloadJSLinks&&!res.locals.routePath){res.locals.routePath=path;(0,_extract.default)(res,route);}if(!res.locals.pageCss&&!res.locals.preloadJSLinks){//moving routing logic outside of the App and using ServerRoutes for creating routes on server instead
3
3
  (0,_server3.renderToString)(/*#__PURE__*/(0,_jsxRuntime.jsx)(_server2.ChunkExtractorManager,{extractor:webExtractor,children:/*#__PURE__*/(0,_jsxRuntime.jsx)(_reactRedux.Provider,{store:store,children:/*#__PURE__*/(0,_jsxRuntime.jsx)(_server.StaticRouter,{context:context,location:req.originalUrl,children:/*#__PURE__*/(0,_jsxRuntime.jsx)(_ServerRouter.default,{store:store,intialData:fetcherData})})})}));}const wc=route.component;matches.push({route,match,serverSideFunction:wc&&wc.serverSideFunction||(()=>Promise.resolve())});}if(!match&&route.children){// recursively try to match nested routes
4
4
  const nested=getMatchRoutes(route.children,req,res,store,context,fetcherData,`${basePath}/${path}`,webExtractor);if(nested.length){matches=matches.concat(nested);}}return matches;},[]);};// Preloads chunks required for rendering document
5
5
  const getComponent=(store,context,req,fetcherData)=>{return/*#__PURE__*/(0,_jsxRuntime.jsx)("div",{id:"app",children:/*#__PURE__*/(0,_jsxRuntime.jsx)(_reactRedux.Provider,{store:store,children:/*#__PURE__*/(0,_jsxRuntime.jsx)(_server.StaticRouter,{context:context,location:req.originalUrl,children:/*#__PURE__*/(0,_jsxRuntime.jsx)(_ServerRouter.default,{store:store,intialData:fetcherData})})})});};// sends document after rendering
6
6
  const renderMarkUp=async(errorCode,req,res,metaTags,fetcherData,store,matches,context,webExtractor)=>{const deviceDetails=(0,_userAgentUtil.getUserAgentDetails)(req.headers["user-agent"]||"");const isBot=deviceDetails.googleBot?true:false;let state=store.getState();const jsx=webExtractor.collectChunks(getComponent(store,context,req,fetcherData));const{IS_DEV_COMMAND,WEBPACK_DEV_SERVER_HOSTNAME,WEBPACK_DEV_SERVER_PORT}=process.env;let publicAssetPath=`${process.env.PUBLIC_STATIC_ASSET_URL}${process.env.PUBLIC_STATIC_ASSET_PATH}`;// serves assets from localhost on running devBuild and devServe command
7
- if(IS_DEV_COMMAND==="true"){publicAssetPath=`http://${WEBPACK_DEV_SERVER_HOSTNAME}:${WEBPACK_DEV_SERVER_PORT}/assets/`;}const finalProps={req,res,lang:"en",pageCss:res.locals.pageCss,preloadJSLinks:res.locals.preloadJSLinks,metaTags,isBot,publicAssetPath,jsx,initialState:state,fetcherData};let CompleteDocument=()=>{if((0,_validator.validateCustomDocument)(_document2.default)){return(0,_document2.default)(finalProps);}else{return/*#__PURE__*/(0,_jsxRuntime.jsxs)("html",{lang:finalProps.lang,children:[/*#__PURE__*/(0,_jsxRuntime.jsx)(_document.Head,{isBot:finalProps.isBot,pageCss:finalProps.pageCss,metaTags:finalProps.metaTags,preloadJSLinks:finalProps.preloadJSLinks,publicAssetPath:finalProps.publicAssetPath}),/*#__PURE__*/(0,_jsxRuntime.jsx)(_document.Body,{jsx:finalProps.jsx,fetcherData:finalProps.fetcherData,initialState:finalProps.initialState})]});}};try{let status=matches.length&&matches[0].match.path==="*"?404:200;res.set({"content-type":"text/html; charset=utf-8"});res.status(status);return new Promise((resolve,reject)=>{const{pipe}=(0,_server3.renderToPipeableStream)(/*#__PURE__*/(0,_jsxRuntime.jsx)(CompleteDocument,{}),{onShellReady(){res.setHeader("content-type","text/html");pipe(res);},onAllReady(){const{firstFoldCss,firstFoldJS}=(0,_extract.cacheAndFetchAssets)({webExtractor,res,isBot});res.write(firstFoldCss);res.write(firstFoldJS);res.end();resolve();},onError(error){logger.error({message:`\n Error while renderToPipeableStream : ${error.toString()}`});// function defined by user which needs to run if rendering fails
8
- (0,_validator.safeCall)(_index2.onRenderError);reject(error);}});});}catch(error){logger.error({message:`Error in rendering document on server - ${error}`,trace:error.stack,url:req.originalUrl});// function defined by user which needs to run if rendering fails
9
- (0,_validator.safeCall)(_index2.onRenderError);return Promise.reject(error);}};/**
7
+ if(IS_DEV_COMMAND==="true"){publicAssetPath=`http://${WEBPACK_DEV_SERVER_HOSTNAME}:${WEBPACK_DEV_SERVER_PORT}/assets/`;}const finalProps={req,res,lang:"en",pageCss:res.locals.pageCss,preloadJSLinks:res.locals.preloadJSLinks,metaTags,isBot,publicAssetPath,jsx,initialState:state,fetcherData};let CompleteDocument=()=>{if((0,_validator.validateCustomDocument)(_document2.default)){return(0,_document2.default)(finalProps);}else{return/*#__PURE__*/(0,_jsxRuntime.jsxs)("html",{lang:finalProps.lang,children:[/*#__PURE__*/(0,_jsxRuntime.jsx)(_document.Head,{isBot:finalProps.isBot,pageCss:finalProps.pageCss,metaTags:finalProps.metaTags,preloadJSLinks:finalProps.preloadJSLinks,publicAssetPath:finalProps.publicAssetPath}),/*#__PURE__*/(0,_jsxRuntime.jsx)(_document.Body,{jsx:finalProps.jsx,fetcherData:finalProps.fetcherData,initialState:finalProps.initialState})]});}};try{let status=errorCode||(matches.length&&matches[0].match.path==="*"?404:200);res.set({"content-type":"text/html; charset=utf-8"});res.status(status);return new Promise((resolve,reject)=>{const{pipe}=(0,_server3.renderToPipeableStream)(/*#__PURE__*/(0,_jsxRuntime.jsx)(CompleteDocument,{}),{onShellReady(){res.setHeader("content-type","text/html");pipe(res);},onAllReady(){const{firstFoldCss,firstFoldJS}=(0,_extract.cacheAndFetchAssets)({webExtractor,res,isBot});res.write(firstFoldCss);res.write(firstFoldJS);res.end();resolve();},onError(error){logger.error({message:`\n Error while renderToPipeableStream : ${error.toString()}`});// function defined by user which needs to run if rendering fails
8
+ (0,_validator.safeCall)(_index2.onRenderError,{req,res,store,error});reject(error);}});});}catch(error){logger.error({message:`Error in rendering document on server - ${error}`,trace:error.stack,url:req.originalUrl});// function defined by user which needs to run if rendering fails
9
+ (0,_validator.safeCall)(_index2.onRenderError,{req,res,store,error});return Promise.reject(error);}};/**
10
10
  * middleware for document handling
11
11
  * @param {object} req - request object
12
12
  * @param {object} res - response object
13
- */async function _default(req,res){try{let context={};let fetcherData={};let webStats=_path.default.join(__dirname,"../../..",`loadable-stats.json`);if(isProduction){webStats=_path.default.join(process.env.src_path,`${process.env.BUILD_OUTPUT_PATH}/public/loadable-stats.json`);}const webExtractor=new _server2.ChunkExtractor({statsFile:webStats,entrypoints:["app"]});// creates store
13
+ */async function handler(req,res){try{let context={};let fetcherData={};let webStats=_path.default.join(__dirname,"../../..",`loadable-stats.json`);if(isProduction){webStats=_path.default.join(process.env.src_path,`${process.env.BUILD_OUTPUT_PATH}/public/loadable-stats.json`);}const webExtractor=new _server2.ChunkExtractor({statsFile:webStats,entrypoints:["app"]});// creates store
14
14
  const store=(0,_validator.validateConfigureStore)(createStore)?createStore({},req,res):null;// user defined routes
15
15
  const routes=(0,_validator.validateGetRoutes)(_utils.getRoutes)?(0,_utils.getRoutes)():[];// Matches req url with routes
16
16
  const matches=getMatchRoutes(routes,req,res,store,context,fetcherData,undefined,webExtractor);const allMatches=(0,_router.matchRoutes)((0,_utils.getRoutes)(),req.baseUrl);let allTags=[];// function defined by user which needs to run after route is matched
17
- (0,_validator.safeCall)(_index2.onRouteMatch,{req,res,matches});if(res.headersSent){return Promise.resolve(res);}try{// Executing app server side function
18
- await _index.default.serverSideFunction({store,req,res});if(res.headersSent){return Promise.resolve(res);}try{// Executing serverFetcher functions with serverDataFetcher provided by router and returning document
19
- fetcherData=await(0,_router.serverDataFetcher)({routes:routes,req,res,url:req.originalUrl},{store});if(res.headersSent){return Promise.resolve(res);}allTags=(0,_router.getMetaData)(allMatches,fetcherData);// function defined by user which needs to run after SSR functions are executed
20
- (0,_validator.safeCall)(_index2.onFetcherSuccess,{req,res,fetcherData});if(res.headersSent){return Promise.resolve(res);}return new Promise((resolve,reject)=>{renderMarkUp(null,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}catch(error){// TODO: serverDataFetcher never throws any error
21
- logger.error("Error in executing serverFetcher functions: "+error);(0,_validator.safeCall)(_index2.onFetcherError,{req,res,error});if(res.headersSent){return Promise.reject(error);}return new Promise((resolve,reject)=>{renderMarkUp(404,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}}catch(error){logger.error("Error in executing serverSideFunction inside App: "+error);return new Promise((resolve,reject)=>{renderMarkUp(error.status_code,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}}catch(error){logger.error("Error in handling document request: "+error.toString());// function defined by user which needs to run when an error occurs in the handler
17
+ (0,_validator.safeCall)(_index2.onRouteMatch,{req,res,matches,store});if(res.headersSent){return Promise.resolve(res);}try{// Executing app server side function
18
+ await _index.default.serverSideFunction({store,req,res});// function defined by user which needs to run after app server side function succeeds
19
+ (0,_validator.safeCall)(_index2.onAppServerSideSuccess,{req,res,store});if(res.headersSent){return Promise.resolve(res);}try{// Executing serverFetcher functions with serverDataFetcher provided by router and returning document
20
+ fetcherData=await(0,_router.serverDataFetcher)({routes:routes,req,res,url:req.originalUrl},{store});if(res.headersSent){return Promise.resolve(res);}// Check if serverDataFetcher returned an error in the response
21
+ const err=fetcherData?.[req.originalUrl]?.error;allTags=(0,_router.getMetaData)(allMatches,fetcherData);if(err){// function defined by user which needs to run when serverDataFetcher returns an error
22
+ (0,_validator.safeCall)(_index2.onFetcherError,{req,res,store,error:err});if(res.headersSent){return Promise.reject(err);}// TODO: this seems very dependent on developers error handling, we are assuming they attach status_code key in their errors (same in App.serverSideFunction error)
23
+ const statusCode=err.status_code||404;return new Promise((resolve,reject)=>{renderMarkUp(statusCode,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}else{// function defined by user which needs to run after SSR functions are executed successfully
24
+ (0,_validator.safeCall)(_index2.onFetcherSuccess,{req,res,store});if(res.headersSent){return Promise.resolve(res);}return new Promise((resolve,reject)=>{renderMarkUp(null,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}}catch(error){// TODO: This catch block is kept for any unexpected errors from serverDataFetcher or getMetaData
25
+ logger.error("Error in executing serverFetcher functions: "+error);(0,_validator.safeCall)(_index2.onFetcherError,{req,res,store,error});if(res.headersSent){return Promise.reject(error);}return new Promise((resolve,reject)=>{renderMarkUp(404,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}}catch(error){logger.error("Error in executing serverSideFunction inside App: "+error);// function defined by user which needs to run after app server side function fails
26
+ (0,_validator.safeCall)(_index2.onAppServerSideError,{req,res,store,error});if(res.headersSent){return Promise.reject(error);}return new Promise((resolve,reject)=>{renderMarkUp(error.status_code,req,res,allTags,fetcherData,store,matches,context,webExtractor).then(resolve).catch(reject);});}}catch(error){logger.error("Error in handling document request: "+error.toString());// function defined by user which needs to run when an error occurs in the handler
22
27
  (0,_validator.safeCall)(_index2.onRequestError,{req,res,error});return Promise.reject(error);}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _express=_interopRequireDefault(require("express"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const router=_express.default.Router();if(process.env.NODE_ENV==="production"){const handler=require("./handler").default;router.use(handler);}else{const developmentHandler=require("../../../.catalyst-dev/server/renderer/handler.development.js").default;router.use(developmentHandler);}var _default=exports.default=router;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _express=_interopRequireDefault(require("express"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const router=_express.default.Router();router.use(function rendererMiddleware(req,res,next){let handler="";if(process.env.NODE_ENV==="production"){handler=require("./handler").default;}else{handler=require("../../../.catalyst-dev/server/renderer/handler.development.js").default;}if(res.locals.rendererWrapper){logger.debug({message:"Handler wrapped"});res.locals.rendererWrapper(handler)(req,res,next);}else{handler(req,res,next);}});var _default=exports.default=router;
@@ -1,6 +1,8 @@
1
1
  "use strict";var _fs=_interopRequireDefault(require("fs"));var _path=_interopRequireDefault(require("path"));var _nodeUtil=_interopRequireDefault(require("node:util"));var _chokidar=_interopRequireDefault(require("chokidar"));var _picocolors=require("picocolors");var _index=require("@catalyst/template/server/index.js");var _validator=require("@catalyst/server/utils/validator.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const env=process.env.NODE_ENV||"development";// function defined by user which needs to run before server starts
2
- (0,_validator.safeCall)(_index.preServerInit);process.on("uncaughtException",(err,origin)=>{console.log(process.stderr.fd);console.log(`Caught exception: ${err}\n`+`Exception origin: ${origin}`);});process.on("SIGINT",function(data){console.log("SIGINT");console.log(data);process.exit(0);});process.on("uncaughtExceptionMonitor",(err,origin)=>{console.log(err,origin);});process.on("message",function(msg){if(msg=="shutdown"){console.log("Closing all connections...");setTimeout(function(){console.log("Finished closing connections");process.exit(0);},1500);}});if(env==="development"){// Add better stack tracing for promises in dev mode
3
- process.on("unhandledRejection",r=>console.debug(r));}const port=process.env.NODE_SERVER_PORT??3005;const host=process.env.NODE_SERVER_HOSTNAME??"localhost";let statsPath=_path.default.join(__dirname,`../../`,".catalyst-dev","/server","/renderer","handler.development.js");if(env==="production"){statsPath=_path.default.join(process.env.src_path,`${process.env.BUILD_OUTPUT_PATH}/public/loadable-stats.json`);}const watcher=_chokidar.default.watch(statsPath,{persistent:true});let serverInstance=null;const restartServer=()=>{const server=require("./expressServer.js").default;const{APPLICATION,NODE_SERVER_HOSTNAME,NODE_SERVER_PORT}=process.env;serverInstance=server.listen({port,host});console.log("Server Restarted!");console.log(`You can now view ${APPLICATION} in the browser.`);console.log(_nodeUtil.default.format("Local:",(0,_picocolors.cyan)(`http://${NODE_SERVER_HOSTNAME}:${NODE_SERVER_PORT}`)));};const startServer=()=>{const server=require("./expressServer.js").default;serverInstance=server.listen({port,host},error=>{const{APPLICATION,NODE_SERVER_HOSTNAME,NODE_SERVER_PORT}=process.env;if(error){console.log("An error occured while starting the Application server : ",error);// function defined by user which needs to run if server fails
2
+ (0,_validator.safeCall)(_index.preServerInit);process.on("uncaughtException",(err,origin)=>{console.log(process.stderr.fd);console.log(`Caught exception: ${err}\n`+`Exception origin: ${origin}`);});process.on("SIGINT",function(data){console.log("SIGINT");console.log(data);process.exit(0);});process.on("uncaughtExceptionMonitor",(err,origin)=>{console.log(err,origin);});process.on("message",function(msg){if(msg=="shutdown"){console.log("Closing all connections...");setTimeout(function(){console.log("Finished closing connections");process.exit(0);},1500);}});// if (env === "development") {
3
+ // Add better stack tracing for promises in dev mode
4
+ function safeStringify(err){try{return JSON.stringify(err);}catch(e){console.log("error in safeStringify",e);return err;}}process.on("unhandledRejection",err=>console.log("unhandledRejection in Catalyst",safeStringify(err)));// }
5
+ const port=process.env.NODE_SERVER_PORT??3005;const host=process.env.NODE_SERVER_HOSTNAME??"localhost";let statsPath=_path.default.join(__dirname,`../../`,".catalyst-dev","/server","/renderer","handler.development.js");if(env==="production"){statsPath=_path.default.join(process.env.src_path,`${process.env.BUILD_OUTPUT_PATH}/public/loadable-stats.json`);}const watcher=_chokidar.default.watch(statsPath,{persistent:true});let serverInstance=null;const restartServer=()=>{const server=require("./expressServer.js").default;const{APPLICATION,NODE_SERVER_HOSTNAME,NODE_SERVER_PORT}=process.env;serverInstance=server.listen({port,host});console.log("Server Restarted!");console.log(`You can now view ${APPLICATION} in the browser.`);console.log(_nodeUtil.default.format("Local:",(0,_picocolors.cyan)(`http://${NODE_SERVER_HOSTNAME}:${NODE_SERVER_PORT}`)));};const startServer=()=>{const server=require("./expressServer.js").default;serverInstance=server.listen({port,host},error=>{const{APPLICATION,NODE_SERVER_HOSTNAME,NODE_SERVER_PORT}=process.env;if(error){console.log("An error occured while starting the Application server : ",error);// function defined by user which needs to run if server fails
4
6
  (0,_validator.safeCall)(_index.onServerError);return;}if(env==="development")console.log((0,_picocolors.green)("Compiled successfully!"));console.log(`\nYou can now view ${APPLICATION} in the browser.\n`);console.log(_nodeUtil.default.format("\tLocal:".padEnd(8),(0,_picocolors.cyan)(`http://${NODE_SERVER_HOSTNAME}:${NODE_SERVER_PORT}`)));if(env==="development"){console.log("\nNote that the development build is not optimized.");console.log("To create a production build, use "+(0,_picocolors.cyan)("npm run build"));}console.log("\nFind out more about deployment here:");console.log((0,_picocolors.yellow)("\n https://catalyst.1mg.com/public_docs/content/Deployment%20and%20Production/deployment\n"));});};if(_fs.default.existsSync(statsPath)){// if loadable-stats.json exist this block will start the server in development environment. This happens in dev environment when loadable stats already exists and developer is making changes to the files. lodable-stats.json will be updated after every change.
5
7
  watcher.on("change",()=>{watcher.close();if(serverInstance){serverInstance.close(()=>startServer());}else{startServer();}});// this block will start the server when your files have been compiled for production and lodable-stats.json exists.
6
8
  watcher.on("add",()=>{if(env==="production"){watcher.close();startServer();}});}else{// this block will start the server in development environment for the first time when loadable-stats.json does not exists.
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getUserAgentDetails=void 0;var _uaParserJs=_interopRequireDefault(require("ua-parser-js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const googleBots={"APIs-Google":"APIs-Google",AdSense:"Mediapartners-Google","AdsBot Mobile Web Android":"AdsBot-Google-Mobile","AdsBot Mobile Web":"AdsBot-Google-Mobile",AdsBot:"AdsBot-Google","Mobile AdSense":"Mediapartners-Google","Mobile Apps Android":"AdsBot-Google-Mobile-Apps",Feedfetcher:"FeedFetcher-Google","Google Read Aloud":"Google-Read-Aloud","Duplex on the Web":"DuplexWeb-Google","Google Favicon":"Google Favicon","Web Light":"googleweblight","Amp crawler":"Google-AMPHTM",Googlebot:"Googlebot"};/**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getUserAgentDetails=void 0;var _uaParserJs=_interopRequireDefault(require("ua-parser-js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const googleBots={"APIs-Google":"APIs-Google",AdSense:"Mediapartners-Google","AdsBot Mobile Web Android":"AdsBot-Google-Mobile","AdsBot Mobile Web":"AdsBot-Google-Mobile",AdsBot:"AdsBot-Google","Mobile AdSense":"Mediapartners-Google","Mobile Apps Android":"AdsBot-Google-Mobile-Apps",Feedfetcher:"FeedFetcher-Google","Google Read Aloud":"Google-Read-Aloud","Duplex on the Web":"DuplexWeb-Google","Google Favicon":"Google Favicon","Web Light":"googleweblight","Amp crawler":"Google-AMPHTM",Googlebot:"Googlebot","Google Inspection Tool":"Google-InspectionTool"};/**
2
2
  * check if user agent contains bot data
3
3
  * @param {string} ua - user agent
4
4
  * @return {string|null}
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=_default;/**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=removeClientCodePlugin;/**
2
2
  * @description babel plugin used to remove unwanted code from the build.
3
3
  * @return babel plugin object
4
- */function _default(){return{name:"ast-transform",// not required
4
+ */function removeClientCodePlugin(){return{name:"ast-transform",// not required
5
5
  visitor:{ImportDefaultSpecifier(path){path.parentPath.parent.body=path.parentPath.parent.body.map(astStructure=>{if(astStructure.type==="VariableDeclaration"){if(astStructure.declarations[0]?.init?.type==="ArrowFunctionExpression"&&astStructure.declarations[0]?.init?.body?.body?.length>0){astStructure.declarations[0].init.body.body=astStructure.declarations[0].init.body.body.filter(node=>!(node?.type==="ExpressionStatement"&&node?.expression?.callee?.name==="useEffect"));}}if(astStructure?.type==="FunctionDeclaration"&&astStructure?.body?.body?.length>0){astStructure.body.body=astStructure.body.body.filter(node=>!(node?.type==="ExpressionStatement"&&node?.expression?.callee?.name==="useEffect"));}return astStructure;});}}};}
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=_default;/**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=removeSsrCodePlugin;/**
2
2
  * @description babel plugin used to remove unwanted code from the build.
3
3
  * @return babel plugin object
4
- */function _default(){return{name:"ast-transform",// not required
4
+ */function removeSsrCodePlugin(){return{name:"ast-transform",// not required
5
5
  visitor:{ImportDefaultSpecifier(path){path.parentPath.parent.body=path.parentPath.parent.body.filter(val=>val?.expression?.left?.property?.name!=="serverSideFunction"&&val?.expression?.left?.property?.name!=="serverFetcher");}}};}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _webpackConfig=_interopRequireDefault(require("@catalyst/template/webpackConfig.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const isCompilerEnabled=!!_webpackConfig.default.reactCompiler;const reactCompilerOptions=typeof _webpackConfig.default.reactCompiler==="object"?_webpackConfig.default.reactCompiler:{target:"18"};var _default=exports.default={babelrc:false,presets:[["@babel/preset-typescript",{isTSX:true,allExtensions:true}],["@babel/preset-env",{targets:{browsers:"last 2 versions"}}],["@babel/preset-react",{runtime:"automatic"}]],plugins:[...(isCompilerEnabled?[["babel-plugin-react-compiler",reactCompilerOptions]]:[]),"@loadable/babel-plugin"],env:{production:{plugins:[require("./babel-plugins/remove-ssr.plugin").default,"transform-react-remove-prop-types"]},test:{presets:["@babel/preset-react"]}},ignore:["__TEST__"]};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _webpackConfig=_interopRequireDefault(require("@catalyst/template/webpackConfig.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const isCompilerEnabled=!!_webpackConfig.default.reactCompiler;const reactCompilerOptions=typeof _webpackConfig.default.reactCompiler==="object"?_webpackConfig.default.reactCompiler:{target:"18"};var _default=exports.default={babelrc:false,presets:[["@babel/preset-typescript",{isTSX:true,allExtensions:true}],["@babel/preset-env",{targets:{browsers:"last 2 versions"}}],["@babel/preset-react",{runtime:"automatic"}]],plugins:[...(isCompilerEnabled?[["babel-plugin-react-compiler",reactCompilerOptions]]:[]),"@loadable/babel-plugin"],env:{production:{plugins:[require("./babel-plugins/remove-ssr.plugin").default]},test:{presets:["@babel/preset-react"]}},ignore:["__TEST__"]};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _webpackConfig=_interopRequireDefault(require("@catalyst/template/webpackConfig.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const isCompilerEnabled=!!_webpackConfig.default.reactCompiler;const reactCompilerOptions=typeof _webpackConfig.default.reactCompiler==="object"?_webpackConfig.default.reactCompiler:{target:"18"};var _default=exports.default={babelrc:false,presets:[["@babel/preset-typescript",{isTSX:true,allExtensions:true}],["@babel/preset-env",{targets:{node:"current"}}],["@babel/preset-react",{runtime:"automatic"}]],plugins:[...(isCompilerEnabled?[["babel-plugin-react-compiler",reactCompilerOptions]]:[]),"@loadable/babel-plugin"],env:{development:{plugins:["react-refresh/babel"]},production:{plugins:[require("./babel-plugins/remove-client.plugin").default,"transform-react-remove-prop-types"]}},ignore:["__TEST__"]};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _webpackConfig=_interopRequireDefault(require("@catalyst/template/webpackConfig.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}const isCompilerEnabled=!!_webpackConfig.default.reactCompiler;const reactCompilerOptions=typeof _webpackConfig.default.reactCompiler==="object"?_webpackConfig.default.reactCompiler:{target:"18"};var _default=exports.default={babelrc:false,presets:[["@babel/preset-typescript",{isTSX:true,allExtensions:true}],["@babel/preset-env",{targets:{node:"current"}}],["@babel/preset-react",{runtime:"automatic"}]],plugins:[...(isCompilerEnabled?[["babel-plugin-react-compiler",reactCompilerOptions]]:[]),"@loadable/babel-plugin"],env:{development:{plugins:["react-refresh/babel"]},production:{plugins:[require("./babel-plugins/remove-client.plugin").default]}},ignore:["__TEST__"]};
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _registerAliases2=require("../scripts/registerAliases.js");require("../scripts/loadScriptsBeforeServerStarts.js");var _path=_interopRequireDefault(require("path"));var _webpackPlugin=_interopRequireDefault(require("@loadable/webpack-plugin"));var _miniCssExtractPlugin=_interopRequireDefault(require("mini-css-extract-plugin"));var _webpackMerge=require("webpack-merge");var _base=_interopRequireDefault(require("@catalyst/webpack/base.babel"));var _config=_interopRequireDefault(require("@catalyst/root/config.json"));var _webpackConfig=_interopRequireDefault(require("@catalyst/template/webpackConfig.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/* eslint-disable */const clientConfig=(0,_webpackMerge.mergeWithCustomize)({customizeArray:(0,_webpackMerge.customizeArray)({entry:"prepend",plugins:"append",module:"prepend"}),customizeObject:(0,_webpackMerge.customizeObject)({entry:"prepend",plugins:"append",module:"prepend"})})(_base.default,{mode:"production",stats:"errors-only",resolve:{alias:_registerAliases2.catalystResultMap},optimization:{runtimeChunk:"single",moduleIds:"deterministic",splitChunks:_webpackConfig.default.splitChunksConfig?_webpackConfig.default.splitChunksConfig:{cacheGroups:{commonVendor:{chunks:"all",test:/[\\/]node_modules[\\/](react|react-dom|react-redux|react-router|react-router-dom|redux|redux-thunk|axios|react-loadable-visibility|react-helmet-async|react-fast-compare|react-async-script|babel|@loadable\/component|catalyst)[\\/]/,name:"commonVendor",minSize:400000,maxSize:400000},utilityVendor:{maxInitialRequests:Infinity,chunks:"all",// minSize: 0, // Enable to replicate stand alone chunking for all packages
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _registerAliases2=require("../scripts/registerAliases.js");require("../scripts/loadScriptsBeforeServerStarts.js");var _path=_interopRequireDefault(require("path"));var _webpackPlugin=_interopRequireDefault(require("@loadable/webpack-plugin"));var _miniCssExtractPlugin=_interopRequireDefault(require("mini-css-extract-plugin"));var _webpackMerge=require("webpack-merge");var _base=_interopRequireDefault(require("@catalyst/webpack/base.babel"));var _config=_interopRequireDefault(require("@catalyst/root/config.json"));var _webpackConfig=_interopRequireDefault(require("@catalyst/template/webpackConfig.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/* eslint-disable */const clientConfig=(0,_webpackMerge.mergeWithCustomize)({customizeArray:(0,_webpackMerge.customizeArray)({entry:"prepend",plugins:"append",module:"prepend"}),customizeObject:(0,_webpackMerge.customizeObject)({entry:"prepend",plugins:"append",module:"prepend"})})(_base.default,{mode:"production",devtool:"source-map",stats:"errors-only",resolve:{alias:_registerAliases2.catalystResultMap},optimization:{runtimeChunk:"single",moduleIds:"deterministic",splitChunks:_webpackConfig.default.splitChunksConfig?_webpackConfig.default.splitChunksConfig:{cacheGroups:{commonVendor:{chunks:"all",test:/[\\/]node_modules[\\/](react|react-dom|react-redux|react-router|react-router-dom|redux|redux-thunk|axios|react-loadable-visibility|react-helmet-async|react-fast-compare|react-async-script|babel|@loadable\/component|catalyst)[\\/]/,name:"commonVendor",minSize:400000,maxSize:400000},utilityVendor:{maxInitialRequests:Infinity,chunks:"all",// minSize: 0, // Enable to replicate stand alone chunking for all packages
2
2
  reuseExistingChunk:true,// Disable to replicate stand alone chunking for all packages
3
3
  minRemainingSize:1000,// Disable to replicate stand alone chunking for all packages
4
4
  minSize:1000,maxSize:120000,test:/[\\/]node_modules[\\/]/,name(module){const moduleFileName=module.identifier().split("/").reverse().slice(0,3).reduce((item,current)=>{item=current+"."+item;return item;},[]);return`npm.${moduleFileName}`;}}},chunks:"all",name(module){const moduleFileName=module.identifier().split("/").reverse().slice(0,3).reduce((item,current)=>{item=current+"."+item;return item;},[]);return`npm.${moduleFileName}`;}}},plugins:[new _webpackPlugin.default({filename:"loadable-stats.json",writeToDisk:{filename:_path.default.join(__dirname,"../..")}}),new _miniCssExtractPlugin.default({filename:_config.default.cssChunkFileName,ignoreOrder:true}),..._webpackConfig.default.clientPlugins]});var _default=exports.default=clientConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catalyst-core-internal",
3
- "version": "0.0.1-beta.67",
3
+ "version": "0.0.1-beta.68",
4
4
  "main": "index.js",
5
5
  "description": "Web framework that provides great performance out of the box",
6
6
  "bin": {
@@ -55,7 +55,7 @@
55
55
  "@loadable/webpack-plugin": "^5.15.2",
56
56
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
57
57
  "@svgr/webpack": "^8.1.0",
58
- "@tata1mg/router": "0.0.1-beta.7",
58
+ "@tata1mg/router": "0.1.0-beta",
59
59
  "app-root-path": "^3.1.0",
60
60
  "babel-loader": "^9.1.3",
61
61
  "babel-plugin-react-compiler": "^19.0.0-beta-decd7b8-20250118",
@@ -77,13 +77,12 @@
77
77
  "picocolors": "^1.0.0",
78
78
  "postcss-loader": "^7.3.3",
79
79
  "postcss-scss": "^4.0.9",
80
- "react": "^18.2.0",
80
+ "react": "19.0.0",
81
+ "react-dom": "19.0.0",
81
82
  "react-compiler-runtime": "^19.0.0-beta-decd7b8-20250118",
82
- "react-dom": "^18.2.0",
83
- "react-redux": "^8.1.3",
83
+ "react-redux": "^9.2.0",
84
84
  "react-refresh": "^0.14.0",
85
85
  "react-router-dom": "^6.16.0",
86
- "redux": "^4.2.1",
87
86
  "sass": "^1.69.5",
88
87
  "sass-loader": "^13.3.2",
89
88
  "sass-resources-loader": "^2.2.5",
@@ -114,10 +113,21 @@
114
113
  "lint-staged": "^15.2.2",
115
114
  "prettier": "^3.2.5"
116
115
  },
116
+ "overrides": {
117
+ "@loadable/component": {
118
+ "react": "^16.3.0 || ^17.0.0 || ^18.0.0 || 19.0.0"
119
+ },
120
+ "@loadable/server": {
121
+ "react": "^16.3.0 || ^17.0.0 || ^18.0.0 || 19.0.0"
122
+ }
123
+ },
117
124
  "lint-staged": {
118
125
  "*.{js,jsx}": [
119
126
  "eslint .",
120
127
  "prettier . --write"
121
128
  ]
129
+ },
130
+ "engines": {
131
+ "node": "22.x"
122
132
  }
123
133
  }