catalyst-core 0.0.1-beta.4 → 0.0.1-beta.5

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