From dae865f419808088d468211543b2b8814ab18a30 Mon Sep 17 00:00:00 2001 From: ahmetkuslular Date: Mon, 6 Jun 2022 15:23:15 +0300 Subject: [PATCH] Minor updates --- config/string.js | 4 +-- src/render.js | 18 +++--------- src/renderMultiple.js | 28 ++++++++----------- src/universal/components/Preview.js | 4 +-- .../apiService/apiManager/BaseApiManager.js | 19 +++++++++++++ .../apiService/apiManager/ClientApiManager.js | 12 ++++++-- .../apiService/apiManager/ServerApiManager.js | 6 ++-- .../apiManagerCache/ClientApiManagerCache.js | 4 +-- .../apiManagerCache/ServerApiManagerCache.js | 4 +-- src/universal/partials/Welcome/partials.js | 4 +-- src/universal/service/CookieService.js | 27 ++++++++++++++++++ src/universal/service/RenderService.js | 15 ++-------- src/universal/utils/constants.js | 1 - src/universal/utils/previewHelper.js | 26 +++++++++++++++++ 14 files changed, 113 insertions(+), 59 deletions(-) create mode 100644 src/universal/service/CookieService.js create mode 100644 src/universal/utils/previewHelper.js diff --git a/config/string.js b/config/string.js index 0a766dd..bbab92d 100644 --- a/config/string.js +++ b/config/string.js @@ -39,9 +39,9 @@ function replaceString() { flags: 'g' }, { - search: '__V_PREVIEW_PAGES__', + search: '__V_PREVIEW__', replace: normalizeUrl( - voltranConfig.routing.previewPages || path.resolve(__dirname, './emptyModule.js') + voltranConfig.routing.preview || path.resolve(__dirname, './emptyModule.js') ), flags: 'g' }, diff --git a/src/render.js b/src/render.js index 7f28977..3ac3160 100644 --- a/src/render.js +++ b/src/render.js @@ -1,7 +1,6 @@ import xss from 'xss'; import { matchUrlInRouteConfigs } from './universal/core/route/routeUtils'; -import Preview from './universal/components/Preview'; import { BLACKLIST_OUTPUT, HTTP_STATUS_CODES } from './universal/utils/constants'; import metrics from './metrics'; import { @@ -14,20 +13,9 @@ import { import Component from './universal/model/Component'; import logger from './universal/utils/logger'; import omit from 'lodash/omit'; +import { getPreviewFile } from './universal/utils/previewHelper'; const appConfig = require('__APP_CONFIG__'); -const previewPages = require('__V_PREVIEW_PAGES__'); - -function getPreview(output) { - const { layouts = {} } = previewPages?.default || {}; - let PreviewFile = Preview; - - if (layouts.default) { - PreviewFile = layouts.default; - } - - return PreviewFile(output); -} const render = async (req, res) => { const isWithoutStateValue = isWithoutState(req.query); @@ -102,8 +90,10 @@ const render = async (req, res) => { context ); const requestDispatcherFullHtml = requestDispatcherResponse.fullHtml; + const PreviewFile = getPreviewFile(context.query); + const body = [requestDispatcherFullHtml, fullHtml].join('\n'); - const response = getPreview([requestDispatcherFullHtml, fullHtml].join('\n')); + const response = PreviewFile({ body, componentName }); res.status(statusCode).html(response); } else { diff --git a/src/renderMultiple.js b/src/renderMultiple.js index cdb367f..2d15571 100644 --- a/src/renderMultiple.js +++ b/src/renderMultiple.js @@ -3,19 +3,16 @@ import async from 'async'; import { matchUrlInRouteConfigs } from './universal/core/route/routeUtils'; import Component from './universal/model/Component'; import Renderer from './universal/model/Renderer'; -import Preview from './universal/components/Preview'; import { - isRequestDispatcher, + useRequestDispatcher, isPreview, isWithoutHTML, - isWithoutState, - getPreviewLayout + isWithoutState } from './universal/service/RenderService'; import metrics from './metrics'; import { HTTP_STATUS_CODES } from './universal/utils/constants'; import logger from './universal/utils/logger'; - -const previewPages = require('__V_PREVIEW_PAGES__'); +import { getPreviewFile } from './universal/utils/previewHelper'; const getRenderOptions = req => { const isPreviewValue = isPreview(req.query) || false; @@ -192,34 +189,33 @@ async function getResponses(renderers) { } async function getPreview(responses, requestCount, req) { - const layoutName = getPreviewLayout(req.query); - const { layouts = {} } = previewPages?.default || {}; const componentNames = Object.keys(responses); - let PreviewFile = Preview; - - if (layouts[layoutName]) { - PreviewFile = layouts[layoutName]; - } + const PreviewFile = getPreviewFile(req.query); const content = Object.keys(responses).map(name => { const componentName = responses?.[name]?.activeComponent?.componentName ?? ''; return getLayoutWithClass(componentName, responses[name].fullHtml); }); + const body = [...content].join('\n'); - return PreviewFile([...content].join('\n'), `${requestCount} request!`, componentNames); + return PreviewFile({ + body, + requestCount, + componentNames + }); } const DEFAULT_PARTIALS = ['RequestDispatcher']; export const getPartials = req => { - const useRequestDispatcher = isRequestDispatcher(req.query); + const requestDispatcherStatus = useRequestDispatcher(req.query); const reqPartials = req.params.components .split(',') .filter((value, index, self) => self.indexOf(value) === index) .filter(item => !DEFAULT_PARTIALS.includes(item)); - const partials = [...(useRequestDispatcher ? DEFAULT_PARTIALS : []), ...reqPartials]; + const partials = [...(requestDispatcherStatus ? DEFAULT_PARTIALS : []), ...reqPartials]; return partials; }; diff --git a/src/universal/components/Preview.js b/src/universal/components/Preview.js index 957ddae..af881ce 100644 --- a/src/universal/components/Preview.js +++ b/src/universal/components/Preview.js @@ -1,7 +1,7 @@ const appConfig = require('__APP_CONFIG__'); -export default (body, title = null) => { - const additionalTitle = title ? ` - ${title}` : ''; +export default ({ body, componentName = '' }) => { + const additionalTitle = componentName ? ` - ${componentName}` : ''; function cr(condition, ok, cancel) { return condition ? ok : cancel || ''; diff --git a/src/universal/core/apiService/apiManager/BaseApiManager.js b/src/universal/core/apiService/apiManager/BaseApiManager.js index 80a621d..98fca23 100644 --- a/src/universal/core/apiService/apiManager/BaseApiManager.js +++ b/src/universal/core/apiService/apiManager/BaseApiManager.js @@ -1,9 +1,12 @@ import axios from 'axios'; +import Cookies from 'js-cookie'; import { CONTENT_TYPE_HEADER, JSON_CONTENT_TYPE, REQUEST_TYPES_WITH_BODY } from '../../../utils/constants'; +import voltranConfig from '../../../../../voltran.config'; +import CookieService from '../../../service/CookieService'; function createBaseConfig() { return {}; @@ -22,6 +25,22 @@ class BaseApiManager { headers['Accept-Encoding'] = 'gzip, deflate'; } + if (process.env.BROWSER && voltranConfig.setCookiesToHeader) { + const cookieMap = CookieService.getAllItems(); + + Object.keys(cookieMap).forEach(key => { + if (voltranConfig.setCookiesToHeaderKeys.length > 0) { + voltranConfig.setCookiesToHeaderKeys.map(item => { + if (key.indexOf(item) === 0) { + headers[key] = cookieMap[key]; + } + }); + } else { + headers[key] = cookieMap[key]; + } + }); + } + this.api = this.createInstance({ ...createBaseConfig(), ...customConfig, diff --git a/src/universal/core/apiService/apiManager/ClientApiManager.js b/src/universal/core/apiService/apiManager/ClientApiManager.js index 574fc0d..14e9c9f 100644 --- a/src/universal/core/apiService/apiManager/ClientApiManager.js +++ b/src/universal/core/apiService/apiManager/ClientApiManager.js @@ -1,10 +1,16 @@ import createApiClient from '../utils/createApiClient'; import BaseApiManager from './BaseApiManager'; -export default (config, timeout) => { +export default (entity, serviceConfigs) => { + const baseURL = entity.clientUrl || entity.url || entity.serverUrl || '/'; + const config = { + ...serviceConfigs, + ...entity?.config + }; + const apiManager = new BaseApiManager({ - baseURL: config.clientUrl || config.url || config.serverUrl || '/', - timeout + baseURL, + ...config }); return createApiClient(apiManager); diff --git a/src/universal/core/apiService/apiManager/ServerApiManager.js b/src/universal/core/apiService/apiManager/ServerApiManager.js index acb7e5e..1126492 100644 --- a/src/universal/core/apiService/apiManager/ServerApiManager.js +++ b/src/universal/core/apiService/apiManager/ServerApiManager.js @@ -9,10 +9,10 @@ const BASE_HTTP_AGENT_CONFIG = { rejectUnauthorized: false }; -export default (config, timeout) => { +export default (entity, serviceConfigs) => { const apiManager = new BaseApiManager({ - timeout, - baseURL: config.serverUrl || config.url || config.clientUrl || '/', + baseURL: entity.serverUrl || entity.url || entity.clientUrl || '/', + ...serviceConfigs, httpAgent: new http.Agent(BASE_HTTP_AGENT_CONFIG), httpsAgent: new https.Agent(BASE_HTTP_AGENT_CONFIG) }); diff --git a/src/universal/core/apiService/apiManagerCache/ClientApiManagerCache.js b/src/universal/core/apiService/apiManagerCache/ClientApiManagerCache.js index 5dd1026..a92487a 100644 --- a/src/universal/core/apiService/apiManagerCache/ClientApiManagerCache.js +++ b/src/universal/core/apiService/apiManagerCache/ClientApiManagerCache.js @@ -2,8 +2,8 @@ import ClientApiManager from '../apiManager/ClientApiManager'; import createCache from '../utils/createCache'; -const { services, timeouts } = require('__APP_CONFIG__'); +const { services, serviceConfigs } = require('__APP_CONFIG__'); -const cache = createCache(ClientApiManager, services, timeouts.clientApiManager); +const cache = createCache(ClientApiManager, services, serviceConfigs?.client); export default cache; diff --git a/src/universal/core/apiService/apiManagerCache/ServerApiManagerCache.js b/src/universal/core/apiService/apiManagerCache/ServerApiManagerCache.js index 2a56eeb..11ae446 100644 --- a/src/universal/core/apiService/apiManagerCache/ServerApiManagerCache.js +++ b/src/universal/core/apiService/apiManagerCache/ServerApiManagerCache.js @@ -2,8 +2,8 @@ import ServerApiManager from '../apiManager/ServerApiManager'; import createCache from '../utils/createCache'; -const { services, timeouts } = require('__APP_CONFIG__'); +const { services, serviceConfigs } = require('__APP_CONFIG__'); -const cache = createCache(ServerApiManager, services, timeouts.serverApiManager); +const cache = createCache(ServerApiManager, services, serviceConfigs?.server); export default cache; diff --git a/src/universal/partials/Welcome/partials.js b/src/universal/partials/Welcome/partials.js index c734fec..91f1289 100644 --- a/src/universal/partials/Welcome/partials.js +++ b/src/universal/partials/Welcome/partials.js @@ -1,6 +1,6 @@ import components from '../../core/route/components'; -const previewPages = require('__V_PREVIEW_PAGES__'); +const preview = require('__V_PREVIEW__'); const partials = []; const BLACKLIST = ['REQUEST_DISPATCHER']; @@ -14,7 +14,7 @@ Object.keys(components).forEach(path => { }); } }); -const pages = previewPages?.default?.pages || []; +const pages = preview?.default?.pages || []; partials.push(...pages); export default partials; diff --git a/src/universal/service/CookieService.js b/src/universal/service/CookieService.js new file mode 100644 index 0000000..e62c0ed --- /dev/null +++ b/src/universal/service/CookieService.js @@ -0,0 +1,27 @@ +import Cookies from 'js-cookie'; + +const appConfig = require('__APP_CONFIG__'); + +const domain = appConfig.cookieStorageUrl; + +export default class CookieService { + static setItem(key, value, options) { + Cookies.set(key, value, { domain, ...options }); + } + + static getItem(key) { + return Cookies.get(key); + } + + static getAllItems() { + return Cookies.get(); + } + + static getJSON(key) { + return Cookies.getJSON(key); + } + + static removeItem(key, options) { + Cookies.remove(key, { domain, ...options }); + } +} diff --git a/src/universal/service/RenderService.js b/src/universal/service/RenderService.js index 78c3f5c..3328afe 100644 --- a/src/universal/service/RenderService.js +++ b/src/universal/service/RenderService.js @@ -65,20 +65,12 @@ const isPreview = query => { return false; }; -const getPreviewLayout = query => { - if (isPreview(query)) { - return query?.preview; - } - - return ''; -}; - const isWithoutState = query => { return query.withoutState === ''; }; -const isRequestDispatcher = query => { - return query.requestDispatcher === '' || query.requestDispatcher !== 'false'; +const useRequestDispatcher = query => { + return query?.requestDispatcher === 'true'; }; const renderComponent = async (component, context, predefinedInitialState = null) => { @@ -116,8 +108,7 @@ export { getStates, isWithoutHTML, isPreview, - getPreviewLayout, - isRequestDispatcher, + useRequestDispatcher, isWithoutState, renderComponent }; diff --git a/src/universal/utils/constants.js b/src/universal/utils/constants.js index 5bc9c28..c35bdaa 100644 --- a/src/universal/utils/constants.js +++ b/src/universal/utils/constants.js @@ -1,4 +1,3 @@ -const appConfig = require('__APP_CONFIG__'); const voltranConfig = require('../../../voltran.config'); const WINDOW_GLOBAL_PARAMS = { diff --git a/src/universal/utils/previewHelper.js b/src/universal/utils/previewHelper.js new file mode 100644 index 0000000..3945812 --- /dev/null +++ b/src/universal/utils/previewHelper.js @@ -0,0 +1,26 @@ +import Preview from '../components/Preview'; +import { isPreview } from '../service/RenderService'; + +const previewPages = require('__V_PREVIEW__'); + +const getPreviewLayout = query => { + if (isPreview(query)) { + return query?.preview; + } + + return ''; +}; + +export const getPreviewFile = query => { + const layoutName = getPreviewLayout(query); + const { previewLayouts = {} } = previewPages?.default || {}; + let PreviewFile = Preview; + + if (previewLayouts[layoutName]) { + PreviewFile = previewLayouts[layoutName]; + } else if (previewLayouts.default) { + PreviewFile = previewLayouts.default; + } + + return PreviewFile; +};