catalyst-core-internal 0.0.1-beta.2 → 0.0.1-beta.21

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.
Files changed (110) hide show
  1. package/.eslintignore +9 -0
  2. package/.eslintrc +91 -0
  3. package/.husky/commit-msg +1 -0
  4. package/.husky/pre-commit +1 -0
  5. package/README.md +45 -43
  6. package/babel.config.json +2 -5
  7. package/bin/catalyst.js +33 -35
  8. package/caching.js +1 -16
  9. package/changelog.md +12 -0
  10. package/commitlint.config.js +11 -0
  11. package/config.json +1 -1
  12. package/index.js +1 -16
  13. package/license +10 -0
  14. package/logger.js +3 -89
  15. package/package.json +89 -83
  16. package/router/ClientRouter.js +2 -18
  17. package/router/ServerRouter.js +1 -19
  18. package/router.js +1 -16
  19. package/scripts/build.js +9 -28
  20. package/scripts/checkVersion.js +1 -5
  21. package/scripts/devBuild.js +10 -0
  22. package/scripts/devServe.js +5 -0
  23. package/scripts/loadEnvironmentVariables.js +4 -23
  24. package/scripts/loadScriptsBeforeServerStarts.js +5 -47
  25. package/scripts/resiterAliases.js +29 -0
  26. package/scripts/scriptUtils.js +2 -0
  27. package/scripts/serve.js +4 -29
  28. package/scripts/start.js +5 -25
  29. package/scripts/validator.js +1 -130
  30. package/server/expressServer.js +8 -49
  31. package/server/renderer/document/Body.js +6 -28
  32. package/server/renderer/document/Head.js +5 -39
  33. package/server/renderer/document/index.js +1 -27
  34. package/server/renderer/extract.js +6 -72
  35. package/server/renderer/handler.js +14 -241
  36. package/server/renderer/index.js +1 -12
  37. package/server/renderer/render.js +8 -60
  38. package/server/startServer.js +6 -65
  39. package/server/utils/userAgentUtil.js +3 -49
  40. package/server/utils/validator.js +1 -130
  41. package/webpack/babel-plugins/remove-client.plugin.js +3 -29
  42. package/webpack/babel-plugins/remove-ssr.plugin.js +3 -19
  43. package/webpack/babel.config.client.js +1 -24
  44. package/webpack/babel.config.ssr.js +1 -24
  45. package/webpack/base.babel.js +8 -167
  46. package/webpack/development.client.babel.js +4 -82
  47. package/webpack/production.client.babel.js +4 -78
  48. package/webpack/production.ssr.babel.js +4 -61
  49. package/webpack/scssParams.js +5 -31
  50. package/packages/create-framework-app/templates/redux-js/node_modules/@babel/core/lib/config/caching.js +0 -261
  51. package/packages/create-framework-app/templates/redux-js/node_modules/@remix-run/router/dist/router.js +0 -4327
  52. package/packages/create-framework-app/templates/redux-js/node_modules/catalyst/router.js +0 -15
  53. package/packages/create-framework-app/templates/redux-js/node_modules/catalyst/src/router.js +0 -1
  54. package/packages/create-framework-app/templates/redux-js/node_modules/http-proxy-middleware/dist/router.js +0 -46
  55. package/router/index.js +0 -32
  56. package/scripts/prepare.js +0 -19
  57. package/scripts/registerAliases.js +0 -30
  58. package/server/mainIndex.js +0 -65
  59. package/server/mainServer.js +0 -70
  60. package/server/renderer/userAgentUtil.js +0 -55
  61. package/types/caching.d.ts +0 -1
  62. package/types/config/config.d.ts +0 -19
  63. package/types/index.d.ts +0 -1
  64. package/types/logger/index.d.ts +0 -14
  65. package/types/reducer/index.d.ts +0 -22
  66. package/types/reducer/loadableConfigReducer.d.ts +0 -9
  67. package/types/router/ClientRouter.d.ts +0 -5
  68. package/types/router/ServerRouter.d.ts +0 -7
  69. package/types/router/index.d.ts +0 -8
  70. package/types/router.d.ts +0 -1
  71. package/types/scripts/build.d.ts +0 -1
  72. package/types/scripts/loadEnvironmentVariables.d.ts +0 -5
  73. package/types/scripts/loadScriptsBeforeServerStarts.d.ts +0 -1
  74. package/types/scripts/prepare.d.ts +0 -1
  75. package/types/scripts/registerAliases.d.ts +0 -1
  76. package/types/scripts/serve.d.ts +0 -1
  77. package/types/scripts/start.d.ts +0 -1
  78. package/types/scripts/validator.d.ts +0 -9
  79. package/types/scripts/verifyConfig.d.ts +0 -1
  80. package/types/server/mainIndex.d.ts +0 -1
  81. package/types/server/mainServer.d.ts +0 -2
  82. package/types/server/renderer/document/Body.d.ts +0 -11
  83. package/types/server/renderer/document/Head.d.ts +0 -11
  84. package/types/server/renderer/document/index.d.ts +0 -2
  85. package/types/server/renderer/extract.d.ts +0 -18
  86. package/types/server/renderer/handler.d.ts +0 -6
  87. package/types/server/renderer/index.d.ts +0 -2
  88. package/types/server/renderer/render.d.ts +0 -38
  89. package/types/server/renderer/userAgentUtil.d.ts +0 -1
  90. package/types/store/index.d.ts +0 -11
  91. package/types/store/index.dev.d.ts +0 -8
  92. package/types/store/index.prod.d.ts +0 -8
  93. package/types/webpack/babel-plugins/remove-client.plugin.d.ts +0 -10
  94. package/types/webpack/babel-plugins/remove-ssr.plugin.d.ts +0 -10
  95. package/types/webpack/babel.config.client.d.ts +0 -21
  96. package/types/webpack/babel.config.d.ts +0 -16
  97. package/types/webpack/babel.config.ssr.d.ts +0 -21
  98. package/types/webpack/base.babel.d.ts +0 -184
  99. package/types/webpack/development.client.babel.d.ts +0 -1
  100. package/types/webpack/plugins/mime-types.d.ts +0 -78
  101. package/types/webpack/plugins/route-manifest-plugin.d.ts +0 -1
  102. package/types/webpack/plugins/upload-assets-plugin.d.ts +0 -1
  103. package/types/webpack/production.client.babel.d.ts +0 -174
  104. package/types/webpack/production.ssr.babel.d.ts +0 -2
  105. package/types/webpack/scssParams.d.ts +0 -2
  106. package/webpack/babel.config.js +0 -20
  107. package/webpack/plugins/mime-types.js +0 -82
  108. package/webpack/plugins/route-manifest-copy.js +0 -122
  109. package/webpack/plugins/route-manifest-plugin.js +0 -122
  110. package/webpack/plugins/upload-assets-plugin.js +0 -181
@@ -1,244 +1,17 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- var _fs = _interopRequireDefault(require("fs"));
8
- var _path = _interopRequireDefault(require("path"));
9
- var _react = _interopRequireDefault(require("react"));
10
- var _render = _interopRequireDefault(require("./render"));
11
- var _App = _interopRequireDefault(require("@containers/App"));
12
- var _extract = _interopRequireDefault(require("./extract"));
13
- var _reactRedux = require("react-redux");
14
- var _document = require("./document");
15
- var _server = require("react-router-dom/server");
16
- var _ServerRouter = _interopRequireDefault(require("../../router/ServerRouter.js"));
17
- var _userAgentUtil = require("../utils/userAgentUtil");
18
- var _router = require("@tata1mg/router");
19
- var _server2 = require("@loadable/server");
20
- var _server3 = require("react-dom/server");
21
- var _validator = require("../utils/validator");
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
26
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
27
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
28
- const {
29
- getRoutes
30
- } = require(`${process.env.src_path}/src/js/routes/utils.js`);
31
- const {
32
- default: CustomDocument
33
- } = require(`${process.env.src_path}/server/document.js`);
34
- const storePath = `${process.env.src_path}/src/js/store/index.js`;
35
- let createStore;
36
- if (_fs.default.existsSync(storePath)) {
37
- const {
38
- default: configureStore
39
- } = require(storePath);
40
- createStore = configureStore;
41
- } else {
42
- createStore = () => {
43
- return {
44
- getState: () => {}
45
- };
46
- };
47
- }
48
- const isProduction = process.env.NODE_ENV === "production";
49
- let webStats = _path.default.join(__dirname, "../..", `loadable-stats.json`);
50
- if (isProduction) {
51
- webStats = _path.default.join(process.env.src_path, `${process.env.BUILD_OUTPUT_PATH}/public/loadable-stats.json`);
52
- }
53
- const webExtractor = new _server2.ChunkExtractor({
54
- statsFile: webStats,
55
- entrypoints: ["app"]
56
- });
57
-
58
- // matches request route with routes defined in the application.
59
- const getMatchRoutes = (routes, req, res, store, context, fetcherData) => {
60
- return routes.reduce((matches, route) => {
61
- const {
62
- path
63
- } = route;
64
- const match = (0, _router.matchPath)({
65
- path,
66
- caseSensitive: false,
67
- end: true
68
- }, req.baseUrl || "/");
69
- if (match) {
70
- if (isProduction && !res.locals.pageCss && !res.locals.pageJS && !res.locals.routePath) {
71
- (0, _extract.default)(res, route);
72
- }
73
- if (!res.locals.pageCss && !res.locals.pageJS && !res.locals.routePath) {
74
- res.locals.routePath = path;
75
- //moving routing logic outside of the App and using ServerRoutes for creating routes on server instead
76
- (0, _server3.renderToString)( /*#__PURE__*/_react.default.createElement(_server2.ChunkExtractorManager, {
77
- extractor: webExtractor
78
- }, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
79
- store: store
80
- }, /*#__PURE__*/_react.default.createElement(_server.StaticRouter, {
81
- context: context,
82
- location: req.originalUrl
83
- }, /*#__PURE__*/_react.default.createElement(_ServerRouter.default, {
84
- store: store,
85
- intialData: fetcherData
86
- })))));
87
- }
88
- const wc = route.component;
89
- matches.push({
90
- route,
91
- match,
92
- serverSideFunction: wc && wc.serverSideFunction || (() => Promise.resolve()),
93
- metaTagFunction: wc && wc.metaTagFunction || null,
94
- serverFetcher: wc && wc.serverFetcher || (() => Promise.resolve())
95
- });
96
- }
97
- if (!match && route.routes) {
98
- // recursively try to match nested routes
99
- const nested = getMatchRoutes(route.routes, req, res, store, context, fetcherData);
100
- if (nested.length) {
101
- matches = matches.concat(nested);
102
- }
103
- }
104
- return matches;
105
- }, []);
106
- };
107
-
108
- // Preloads chunks required for rendering document
109
- const getComponent = (store, context, req, fetcherData) => {
110
- return /*#__PURE__*/_react.default.createElement("div", {
111
- id: "app"
112
- }, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
113
- store: store
114
- }, /*#__PURE__*/_react.default.createElement(_server.StaticRouter, {
115
- context: context,
116
- location: req.originalUrl
117
- }, /*#__PURE__*/_react.default.createElement(_ServerRouter.default, {
118
- store: store,
119
- intialData: fetcherData
120
- }))));
121
- };
122
-
123
- // sends document after rendering
124
- const renderMarkUp = async (errorCode, req, res, metaTagFunction, fetcherData, store, matches, context) => {
125
- const deviceDetails = (0, _userAgentUtil.getUserAgentDetails)(req.headers["user-agent"] || "");
126
- const isBot = deviceDetails.googleBot ? true : false;
127
-
128
- // Transforms Head Props
129
- const shellStart = await _render.default.renderStart(res.locals.pageCss, res.locals.pageJS, metaTagFunction, isBot, fetcherData);
130
- let state = store.getState();
131
- const jsx = webExtractor.collectChunks(getComponent(store, context, req, fetcherData));
132
-
133
- // Transforms Body Props
134
- const shellEnd = _render.default.renderEnd(webExtractor, state, res, jsx, errorCode, fetcherData);
135
- const finalProps = _objectSpread(_objectSpread(_objectSpread({}, shellStart), shellEnd), {}, {
136
- jsx: jsx,
137
- req,
138
- res
139
- });
140
- let CompleteDocument = () => {
141
- if ((0, _validator.validateCustomDocument)(CustomDocument)) {
142
- return CustomDocument(finalProps);
143
- } else {
144
- return /*#__PURE__*/_react.default.createElement("html", {
145
- lang: finalProps.lang
146
- }, /*#__PURE__*/_react.default.createElement(_document.Head, {
147
- isBot: finalProps.isBot,
148
- pageJS: finalProps.pageJS,
149
- pageCss: finalProps.pageCss,
150
- fetcherData: finalProps.fetcherData,
151
- metaTagFunction: finalProps.metaTagFunction,
152
- publicAssetPath: finalProps.publicAssetPath
153
- }), /*#__PURE__*/_react.default.createElement(_document.Body, {
154
- initialState: finalProps.initialState,
155
- firstFoldCss: finalProps.firstFoldCss,
156
- firstFoldJS: finalProps.firstFoldJS,
157
- jsx: finalProps.jsx,
158
- statusCode: finalProps.statusCode,
159
- fetcherData: finalProps.fetcherData
160
- }));
161
- }
162
- };
163
- try {
164
- let status = matches.length && matches[0].match.path === "*" ? 404 : 200;
165
- res.set({
166
- "content-type": "text/html; charset=utf-8"
167
- });
168
- res.status(status);
169
- const {
170
- pipe
171
- } = (0, _server3.renderToPipeableStream)( /*#__PURE__*/_react.default.createElement(CompleteDocument, null), {
172
- onShellReady() {
173
- res.setHeader("content-type", "text/html");
174
- pipe(res);
175
- res.end();
176
- },
177
- onError(error) {
178
- logger.error({
179
- message: `\n Error while renderToPipeableStream : ${error.toString()}`
180
- });
181
- }
182
- });
183
- } catch (error) {
184
- logger.error("Error in rendering document on server:" + error);
185
- }
186
- };
187
-
188
- /**
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 _render=_interopRequireDefault(require("./render"));var _App=_interopRequireDefault(require("@containers/App"));var _extract=_interopRequireDefault(require("./extract"));var _reactRedux=require("react-redux");var _document=require("./document");var _server=require("react-router-dom/server");var _ServerRouter=_interopRequireDefault(require("../../router/ServerRouter.js"));var _userAgentUtil=require("../utils/userAgentUtil");var _router=require("@tata1mg/router");var _server2=require("@loadable/server");var _server3=require("react-dom/server");var _validator=require("../utils/validator");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const{getRoutes}=require(`${process.env.src_path}/src/js/routes/utils.js`);const{default:CustomDocument}=require(`${process.env.src_path}/server/document.js`);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
+ 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(isProduction&&!res.locals.pageCss&&!res.locals.pageJS&&!res.locals.routePath){(0,_extract.default)(res,route);}if(!res.locals.pageCss&&!res.locals.pageJS&&!res.locals.routePath){res.locals.routePath=path;//moving routing logic outside of the App and using ServerRoutes for creating routes on server instead
3
+ (0,_server3.renderToString)(/*#__PURE__*/_react.default.createElement(_server2.ChunkExtractorManager,{extractor:webExtractor},/*#__PURE__*/_react.default.createElement(_reactRedux.Provider,{store:store},/*#__PURE__*/_react.default.createElement(_server.StaticRouter,{context:context,location:req.originalUrl},/*#__PURE__*/_react.default.createElement(_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
+ 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
+ const getComponent=(store,context,req,fetcherData)=>{return/*#__PURE__*/_react.default.createElement("div",{id:"app"},/*#__PURE__*/_react.default.createElement(_reactRedux.Provider,{store:store},/*#__PURE__*/_react.default.createElement(_server.StaticRouter,{context:context,location:req.originalUrl},/*#__PURE__*/_react.default.createElement(_ServerRouter.default,{store:store,intialData:fetcherData}))));};// sends document after rendering
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;// Transforms Head Props
7
+ const shellStart=await _render.default.renderStart(res.locals.pageCss,res.locals.pageJS,metaTags,isBot,fetcherData);let state=store.getState();const jsx=webExtractor.collectChunks(getComponent(store,context,req,fetcherData));// Transforms Body Props
8
+ const shellEnd=_render.default.renderEnd(webExtractor,state,res,jsx,errorCode,fetcherData);const finalProps={...shellStart,...shellEnd,jsx:jsx,req,res};let CompleteDocument=()=>{if((0,_validator.validateCustomDocument)(CustomDocument)){return CustomDocument(finalProps);}else{return/*#__PURE__*/_react.default.createElement("html",{lang:finalProps.lang},/*#__PURE__*/_react.default.createElement(_document.Head,{isBot:finalProps.isBot,pageJS:finalProps.pageJS,pageCss:finalProps.pageCss,fetcherData:finalProps.fetcherData,metaTags:finalProps.metaTags,publicAssetPath:finalProps.publicAssetPath}),/*#__PURE__*/_react.default.createElement(_document.Body,{initialState:finalProps.initialState,firstFoldCss:finalProps.firstFoldCss,firstFoldJS:finalProps.firstFoldJS,jsx:finalProps.jsx,statusCode:finalProps.statusCode,fetcherData:finalProps.fetcherData}));}};try{let status=matches.length&&matches[0].match.path==="*"?404:200;res.set({"content-type":"text/html; charset=utf-8"});res.status(status);const{pipe}=(0,_server3.renderToPipeableStream)(/*#__PURE__*/_react.default.createElement(CompleteDocument,null),{onShellReady(){res.setHeader("content-type","text/html");pipe(res);res.end();},onError(error){logger.error({message:`\n Error while renderToPipeableStream : ${error.toString()}`});}});}catch(error){logger.error("Error in rendering document on server:"+error);}};/**
189
9
  * middleware for document handling
190
10
  * @param {object} req - request object
191
11
  * @param {object} res - response object
192
- */
193
- async function _default(req, res) {
194
- try {
195
- let context = {};
196
- let fetcherData = {};
197
- let metaTagFunction = null;
198
-
199
- // creates store
200
- const store = (0, _validator.validateConfigureStore)(createStore) ? createStore({}, req) : null;
201
-
202
- // user defined routes
203
- const routes = (0, _validator.validateGetRoutes)(getRoutes) ? getRoutes() : [];
204
-
205
- // Matches req url with routes
206
- const matches = getMatchRoutes(routes, req, res, store, context, fetcherData);
207
-
208
- // Executing app server side function
209
- _App.default.serverSideFunction({
210
- store,
211
- req
212
- }).then(() => {
213
- const serverSideFunction = matches.map(match => {
214
- if (match?.metaTagFunction) {
215
- metaTagFunction = match.metaTagFunction;
216
- }
217
- return match.serverSideFunction({
218
- store
219
- });
220
- });
221
-
222
- // Executing serverFetcher functions with serverDataFetcher provided by router and returning document
223
- Promise.all(serverSideFunction).then(() => {
224
- (0, _router.serverDataFetcher)({
225
- routes: routes,
226
- req,
227
- url: req.originalUrl
228
- }, {
229
- store
230
- }).then(res => {
231
- fetcherData = res;
232
- }).then(async () => await renderMarkUp(null, req, res, metaTagFunction, fetcherData, store, matches, context)).catch(async error => {
233
- logger.error("Error in executting serverFetcher functions: " + error);
234
- await renderMarkUp(404, req, res, metaTagFunction, fetcherData, store, matches, context);
235
- });
236
- });
237
- }).catch(error => {
238
- logger.error("Error in executing serverSideFunction inside App: " + error);
239
- renderMarkUp(error.status_code, req, res, metaTagFunction, fetcherData, store, matches, context);
240
- });
241
- } catch (error) {
242
- logger.error("Error in handling document request: " + error.toString());
243
- }
244
- }
12
+ */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
+ const store=(0,_validator.validateConfigureStore)(createStore)?createStore({},req):null;// user defined routes
14
+ const routes=(0,_validator.validateGetRoutes)(getRoutes)?getRoutes():[];// Matches req url with routes
15
+ const matches=getMatchRoutes(routes,req,res,store,context,fetcherData,undefined,webExtractor);const allMatches=(0,_router.matchRoutes)(getRoutes(),req.baseUrl);let allTags=[];// Executing app server side function
16
+ _App.default.serverSideFunction({store,req,res})// Executing serverFetcher functions with serverDataFetcher provided by router and returning document
17
+ .then(()=>{(0,_router.serverDataFetcher)({routes:routes,req,res,url:req.originalUrl},{store}).then(res=>{fetcherData=res;allTags=(0,_router.getMetaData)(allMatches,fetcherData);}).then(async()=>await renderMarkUp(null,req,res,allTags,fetcherData,store,matches,context,webExtractor)).catch(async error=>{logger.error("Error in executing serverFetcher functions: "+error);await renderMarkUp(404,req,res,allTags,fetcherData,store,matches,context,webExtractor);});}).catch(error=>{logger.error("Error in executing serverSideFunction inside App: "+error);renderMarkUp(error.status_code,req,res,allTags,fetcherData,store,matches,context,webExtractor);});}catch(error){logger.error("Error in handling document request: "+error.toString());}}
@@ -1,12 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _express = _interopRequireDefault(require("express"));
8
- var _handler = _interopRequireDefault(require("./handler"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- const router = _express.default.Router();
11
- router.use(_handler.default);
12
- var _default = exports.default = router;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _express=_interopRequireDefault(require("express"));var _handler=_interopRequireDefault(require("./handler"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const router=_express.default.Router();router.use(_handler.default);var _default=exports.default=router;
@@ -1,30 +1,12 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _extract = require("./extract");
8
- /**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _extract=require("./extract");/**
9
2
  * returns data which will be used in Head component for page rendering
10
3
  * @param {string} pageCss - cached styles for page
11
4
  * @param {string} pageJS - cached javscript elements for page
12
5
  * @param {function} metaTagFunction - user defined function which returns meta tags in array
13
6
  * @param {boolean} isBot - checks if request is made by bot
14
7
  * @param {object} fetcherData - router fetched data
15
- */
16
- const renderStart = (pageCss, pageJS, metaTagFunction, isBot, fetcherData) => {
17
- return {
18
- pageCss,
19
- pageJS,
20
- metaTagFunction,
21
- isBot,
22
- publicAssetPath: `${process.env.PUBLIC_STATIC_ASSET_URL}${process.env.PUBLIC_STATIC_ASSET_PATH}`,
23
- fetcherData
24
- };
25
- };
26
-
27
- /**
8
+ */const renderStart=(pageCss,pageJS,metaTags,isBot,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
9
+ if(JSON.parse(IS_DEV_COMMAND)){publicAssetPath=`http://${WEBPACK_DEV_SERVER_HOSTNAME}:${WEBPACK_DEV_SERVER_PORT}/assets/`;}return{pageCss,pageJS,metaTags,isBot,publicAssetPath,fetcherData};};/**
28
10
  * returns data which will be used in body component for page rendering
29
11
  * @param {object} webExtractor - loadable object which holds chunking function
30
12
  * @param {string} initialState - reducer initial state
@@ -32,42 +14,8 @@ const renderStart = (pageCss, pageJS, metaTagFunction, isBot, fetcherData) => {
32
14
  * @param {boolean} jsx - jsx which needs to be render on server side
33
15
  * @param {string|number|null} errorCode - error code
34
16
  * @param {object} fetcherData - router fetched data
35
- */
36
- const renderEnd = (webExtractor, initialState = {}, res, jsx, errorCode, fetcherData) => {
37
- // For bot first fold css and js would become complete page css and js
38
- let firstFoldCss = "";
39
- let firstFoldJS = "";
40
- const isProd = process.env.NODE_ENV === "production";
41
- const {
42
- routePath,
43
- pageCss,
44
- pageJS
45
- } = res.locals;
46
-
47
- // Development: Extracts styles and javascript elements for injecting in Body Component.
48
- // NOTE: Caching of styles and javascript is not enabled in development.
49
- if (!isProd) {
50
- firstFoldCss = webExtractor.getStyleElements();
51
- firstFoldJS = webExtractor.getScriptElements();
52
- }
53
-
54
- // Production: Extract styles and javscript elements if they are not found in cache and stores them in cache.
55
- if (isProd && routePath && (!pageCss || !pageJS)) {
56
- firstFoldCss = webExtractor.getStyleElements();
57
- firstFoldJS = webExtractor.getScriptElements();
58
- (0, _extract.cacheCSS)(routePath, webExtractor.getLinkElements());
59
- (0, _extract.cacheJS)(routePath, webExtractor.getScriptElements());
60
- }
61
- return {
62
- initialState,
63
- firstFoldCss,
64
- firstFoldJS,
65
- jsx,
66
- errorCode,
67
- fetcherData
68
- };
69
- };
70
- var _default = exports.default = {
71
- renderStart,
72
- renderEnd
73
- };
17
+ */const renderEnd=(webExtractor,initialState={},res,jsx,errorCode,fetcherData)=>{// For bot first fold css and js would become complete page css and js
18
+ let firstFoldCss="";let firstFoldJS="";const isProd=process.env.NODE_ENV==="production";const{routePath,pageCss,pageJS}=res.locals;// Development: Extracts styles and javascript elements for injecting in Body Component.
19
+ // NOTE: Caching of styles and javascript is not enabled in development.
20
+ if(!isProd){firstFoldCss=webExtractor.getStyleElements();firstFoldJS=webExtractor.getScriptElements();}// Production: Extract styles and javscript elements if they are not found in cache and stores them in cache.
21
+ if(isProd&&routePath&&(!pageCss||!pageJS)){firstFoldCss=webExtractor.getStyleElements();firstFoldJS=webExtractor.getScriptElements();(0,_extract.cacheCSS)(routePath,webExtractor.getLinkElements());(0,_extract.cacheJS)(routePath,webExtractor.getScriptElements());}return{initialState,firstFoldCss,firstFoldJS,jsx,errorCode,fetcherData};};var _default=exports.default={renderStart,renderEnd};
@@ -1,65 +1,6 @@
1
- "use strict";
2
-
3
- var _expressServer = _interopRequireDefault(require("./expressServer.js"));
4
- var _chokidar = _interopRequireDefault(require("chokidar"));
5
- var _path = _interopRequireDefault(require("path"));
6
- var _index = require("@server/index.js");
7
- var _validator = require("./utils/validator.js");
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
- const env = process.env.NODE_ENV || "development";
10
-
11
- // function defined by user which needs to run before server starts
12
- if ((0, _validator.validatePreInitServer)(_index.preServerInit)) (0, _index.preServerInit)();
13
- process.on("uncaughtException", (err, origin) => {
14
- console.log(process.stderr.fd);
15
- console.log(`Caught exception: ${err}\n` + `Exception origin: ${origin}`);
16
- });
17
- process.on("SIGINT", function (data) {
18
- console.log("SIGINT");
19
- console.log(data);
20
- process.exit(0);
21
- });
22
- process.on("uncaughtExceptionMonitor", (err, origin) => {
23
- console.log(err, origin);
24
- });
25
- process.on("message", function (msg) {
26
- if (msg == "shutdown") {
27
- console.log("Closing all connections...");
28
- setTimeout(function () {
29
- console.log("Finished closing connections");
30
- process.exit(0);
31
- }, 1500);
32
- }
33
- });
34
- if (env === "development") {
35
- // Add better stack tracing for promises in dev mode
36
- process.on("unhandledRejection", r => console.debug(r));
37
- }
38
- const port = process.env.NODE_SERVER_PORT ?? 3005;
39
- const host = process.env.NODE_SERVER_HOSTNAME ?? "localhost";
40
- let statsPath = _path.default.join(__dirname, `../`, "loadable-stats.json");
41
- if (env === "production") {
42
- statsPath = _path.default.join(process.env.src_path, `${process.env.BUILD_OUTPUT_PATH}/public/loadable-stats.json`);
43
- }
44
- const watcher = _chokidar.default.watch(statsPath, {
45
- persistent: true
46
- });
47
- console.log(`Waiting for chunks. Application server will be mounted when your assets are compiled.`);
48
- watcher.on("all", (event, path) => {
49
- if (event === "add") {
50
- if (env == "production") {
51
- watcher.close();
52
- }
53
- console.log("Starting Application Server...");
54
- _expressServer.default.listen({
55
- port,
56
- host
57
- }, error => {
58
- if (error) {
59
- console.log("An error occured while starting the Application server : ", error);
60
- } else {
61
- console.log(`Application server is mounted on http://${host}:${port}.`);
62
- }
63
- });
64
- }
65
- });
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 _index=require("@server/index.js");var _picocolors=require("picocolors");var _validator=require("./utils/validator.js");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const env=process.env.NODE_ENV||"development";// function defined by user which needs to run before server starts
2
+ if((0,_validator.validatePreInitServer)(_index.preServerInit))(0,_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,`../`,"loadable-stats.json");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;serverInstance=server.listen({port,host});};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);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\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.
4
+ 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.
5
+ 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.
6
+ watcher.on("add",()=>{watcher.close();if(serverInstance){serverInstance.close(()=>startServer());}else{startServer();}});}if(_fs.default.existsSync(statsPath)){if(env==="development"){restartServer();}}
@@ -1,55 +1,9 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getUserAgentDetails = void 0;
7
- var _uaParserJs = _interopRequireDefault(require("ua-parser-js"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
13
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
- const googleBots = {
15
- "APIs-Google": "APIs-Google",
16
- AdSense: "Mediapartners-Google",
17
- "AdsBot Mobile Web Android": "AdsBot-Google-Mobile",
18
- "AdsBot Mobile Web": "AdsBot-Google-Mobile",
19
- AdsBot: "AdsBot-Google",
20
- "Mobile AdSense": "Mediapartners-Google",
21
- "Mobile Apps Android": "AdsBot-Google-Mobile-Apps",
22
- Feedfetcher: "FeedFetcher-Google",
23
- "Google Read Aloud": "Google-Read-Aloud",
24
- "Duplex on the Web": "DuplexWeb-Google",
25
- "Google Favicon": "Google Favicon",
26
- "Web Light": "googleweblight",
27
- "Amp crawler": "Google-AMPHTM",
28
- Googlebot: "Googlebot"
29
- };
30
-
31
- /**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getUserAgentDetails=void 0;var _uaParserJs=_interopRequireDefault(require("ua-parser-js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}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"};/**
32
2
  * check if user agent contains bot data
33
3
  * @param {string} ua - user agent
34
4
  * @return {string|null}
35
- */
36
- const getGoogleBot = ua => {
37
- for (let key in googleBots) {
38
- if (ua.includes(googleBots[key])) return key;
39
- }
40
- return null;
41
- };
42
-
43
- /**
5
+ */const getGoogleBot=ua=>{for(let key in googleBots){if(ua.includes(googleBots[key]))return key;}return null;};/**
44
6
  * returns object which contains google bot and user-agent info
45
7
  * @param {string} ua - user agent
46
8
  * @return {object} - returns user agent
47
- */
48
- const getUserAgentDetails = ua => {
49
- const agentDetails = (0, _uaParserJs.default)(ua);
50
- const googleBot = getGoogleBot(ua);
51
- return _objectSpread(_objectSpread({}, agentDetails), {}, {
52
- googleBot
53
- });
54
- };
55
- exports.getUserAgentDetails = getUserAgentDetails;
9
+ */const getUserAgentDetails=ua=>{const agentDetails=(0,_uaParserJs.default)(ua);const googleBot=getGoogleBot(ua);return{...agentDetails,googleBot};};exports.getUserAgentDetails=getUserAgentDetails;
@@ -1,130 +1 @@
1
- "use strict";
2
-
3
- const pc = require("picocolors");
4
- const handleError = e => {
5
- console.log(pc.red("Failed to start server: "), e);
6
- };
7
- const validatePreInitServer = fn => {
8
- try {
9
- if (!fn) throw new Error("preServerInit named function should be defined in server/index.js");
10
- if (typeof fn !== "function") throw new Error("preServerInit should be function present in server/index.js");
11
- return true;
12
- } catch (e) {
13
- handleError(e);
14
- }
15
- };
16
- const validateMiddleware = fn => {
17
- try {
18
- if (!fn) throw new Error("addMiddlewares named function not found in server/server.js");
19
- if (typeof fn !== "function") throw new Error("addMiddlewares should be function present in server/server.js");
20
- return true;
21
- } catch (e) {
22
- handleError(e);
23
- }
24
- };
25
- const validateReducerFunction = fn => {
26
- try {
27
- if (!fn) throw new Error("reducer not found in src/js/containers/App/reducer");
28
- if (typeof fn !== "function") throw new Error("reducer should present in src/js/containers/App/reducer");
29
- return true;
30
- } catch (e) {
31
- handleError(e);
32
- }
33
- };
34
- const validateConfigFile = obj => {
35
- try {
36
- if (!obj) throw new Error("config not found in config folder");
37
- if (typeof obj !== "object") throw new Error("config object should be exported from config folder inside your project root directory");
38
- if (typeof obj === "object") {
39
- const requiredConfigKeys = {
40
- NODE_SERVER_HOSTNAME: "",
41
- NODE_SERVER_PORT: "",
42
- WEBPACK_DEV_SERVER_HOSTNAME: "",
43
- WEBPACK_DEV_SERVER_PORT: "",
44
- BUILD_OUTPUT_PATH: "",
45
- PUBLIC_STATIC_ASSET_PATH: "",
46
- PUBLIC_STATIC_ASSET_URL: "",
47
- NODE_ENV: "",
48
- BUILD_ENV: "",
49
- CLIENT_ENV_VARIABLES: [],
50
- ANALYZE_BUNDLE: ""
51
- };
52
- for (let key in requiredConfigKeys) {
53
- if (!(key in obj)) throw new Error(`${key} key not found inside config.json`);
54
- }
55
- }
56
- return true;
57
- } catch (e) {
58
- handleError(e);
59
- }
60
- };
61
- const validatePackageJson = obj => {
62
- try {
63
- if (!obj) throw new Error("package.json not found in the project");
64
- if (typeof obj !== "object") throw new Error("package.json should be defined in project root directory");
65
- return true;
66
- } catch (e) {
67
- handleError(e);
68
- }
69
- };
70
- const validateModuleAlias = obj => {
71
- try {
72
- if (!obj) throw new Error("moduleAliases not found in package.json file present in root directory.");
73
- if (typeof obj !== "object") throw new Error("moduleAliases named object should be exported from package.json");
74
- if (typeof obj === "object") {
75
- const requiredModuleAliases = {
76
- "@api": "api.js",
77
- "@containers": "src/js/containers",
78
- "@server": "server",
79
- "@config": "config",
80
- "@css": "src/static/css",
81
- "@routes": "src/js/routes/",
82
- "@store": "src/js/store/index.js"
83
- };
84
- for (let key in requiredModuleAliases) {
85
- if (!(key in obj)) throw new Error(`${key} module alias not defined inside package.json`);
86
- }
87
- }
88
- return true;
89
- } catch (e) {
90
- handleError(e);
91
- }
92
- };
93
- const validateConfigureStore = fn => {
94
- try {
95
- if (!fn) throw new Error("configureStore not found in file src/js/store/index.js");
96
- if (typeof fn !== "function") throw new Error("configureStore should be function exported from src/js/store/index.js");
97
- return true;
98
- } catch (e) {
99
- handleError(e);
100
- }
101
- };
102
- const validateGetRoutes = fn => {
103
- try {
104
- if (!fn) throw new Error("getRoutes not found in file src/js/routes/utils.js");
105
- if (typeof fn !== "function") throw new Error("getRoutes should be function exported from src/js/routers/index.js");
106
- return true;
107
- } catch (e) {
108
- handleError(e);
109
- }
110
- };
111
- const validateCustomDocument = fn => {
112
- try {
113
- if (!fn) throw new Error("document not found in file server/document.js");
114
- if (typeof fn !== "function") throw new Error("document should be a react component exported from server/document.js");
115
- return true;
116
- } catch (e) {
117
- handleError(e);
118
- }
119
- };
120
- module.exports = {
121
- validateConfigFile,
122
- validateConfigureStore,
123
- validateCustomDocument,
124
- validateGetRoutes,
125
- validatePackageJson,
126
- validateReducerFunction,
127
- validateModuleAlias,
128
- validatePreInitServer,
129
- validateMiddleware
130
- };
1
+ "use strict";const pc=require("picocolors");const handleError=e=>{console.log(pc.red("Failed to start server: "),e);};const validatePreInitServer=fn=>{try{if(!fn)throw new Error("preServerInit named function should be defined in server/index.js");if(typeof fn!=="function")throw new Error("preServerInit should be function present in server/index.js");return true;}catch(e){handleError(e);}};const validateMiddleware=fn=>{try{if(!fn)throw new Error("addMiddlewares named function not found in server/server.js");if(typeof fn!=="function")throw new Error("addMiddlewares should be function present in server/server.js");return true;}catch(e){handleError(e);}};const validateReducerFunction=fn=>{try{if(!fn)throw new Error("reducer not found in src/js/containers/App/reducer");if(typeof fn!=="function")throw new Error("reducer should present in src/js/containers/App/reducer");return true;}catch(e){handleError(e);}};const validateConfigFile=obj=>{try{if(!obj)throw new Error("config not found in config folder");if(typeof obj!=="object")throw new Error("config object should be exported from config folder inside your project root directory");if(typeof obj==="object"){const requiredConfigKeys={NODE_SERVER_HOSTNAME:"",NODE_SERVER_PORT:"",WEBPACK_DEV_SERVER_HOSTNAME:"",WEBPACK_DEV_SERVER_PORT:"",BUILD_OUTPUT_PATH:"",PUBLIC_STATIC_ASSET_PATH:"",PUBLIC_STATIC_ASSET_URL:"",CLIENT_ENV_VARIABLES:[],ANALYZE_BUNDLE:""};for(let key in requiredConfigKeys){if(!(key in obj))throw new Error(`${key} key not found inside config.json`);}}return true;}catch(e){handleError(e);}};const validatePackageJson=obj=>{try{if(!obj)throw new Error("package.json not found in the project");if(typeof obj!=="object")throw new Error("package.json should be defined in project root directory");return true;}catch(e){handleError(e);}};const validateModuleAlias=obj=>{try{if(!obj)throw new Error("moduleAliases not found in package.json file present in root directory.");if(typeof obj!=="object")throw new Error("moduleAliases named object should be exported from package.json");if(typeof obj==="object"){const requiredModuleAliases={"@api":"api.js","@containers":"src/js/containers","@server":"server","@config":"config","@css":"src/static/css","@routes":"src/js/routes/"};for(let key in requiredModuleAliases){if(!(key in obj))throw new Error(`${key} module alias not defined inside package.json`);}}return true;}catch(e){handleError(e);}};const validateConfigureStore=fn=>{try{if(!fn)throw new Error("configureStore not found in file src/js/store/index.js");if(typeof fn!=="function")throw new Error("configureStore should be function exported from src/js/store/index.js");return true;}catch(e){handleError(e);}};const validateGetRoutes=fn=>{try{if(!fn)throw new Error("getRoutes not found in file src/js/routes/utils.js");if(typeof fn!=="function")throw new Error("getRoutes should be function exported from src/js/routers/index.js");return true;}catch(e){handleError(e);}};const validateCustomDocument=fn=>{try{if(!fn)throw new Error("document not found in file server/document.js");if(typeof fn!=="function")throw new Error("document should be a react component exported from server/document.js");return true;}catch(e){handleError(e);}};module.exports={validateConfigFile,validateConfigureStore,validateCustomDocument,validateGetRoutes,validatePackageJson,validateReducerFunction,validateModuleAlias,validatePreInitServer,validateMiddleware};