@blaze-cms/nextjs-tools 0.146.0-alpha.57 → 0.146.0-alpha.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +6 -0
- package/lib/components/DebugSidebar/index.js +2 -1
- package/lib/components/DebugSidebar/index.js.map +1 -1
- package/lib/constants.js +5 -1
- package/lib/constants.js.map +1 -1
- package/lib/containers/ContentContainer.js +2 -1
- package/lib/containers/ContentContainer.js.map +1 -1
- package/lib/helpers/check-for-gtm.js +3 -3
- package/lib/helpers/check-for-gtm.js.map +1 -1
- package/lib/helpers/check-url.js +99 -60
- package/lib/helpers/check-url.js.map +1 -1
- package/lib/helpers/get-page-data.js +13 -13
- package/lib/helpers/get-page-data.js.map +1 -1
- package/lib/helpers/get-search-filter.js +3 -3
- package/lib/helpers/get-search-filter.js.map +1 -1
- package/lib/helpers/handle-static-routes.js +3 -3
- package/lib/helpers/handle-static-routes.js.map +1 -1
- package/lib/helpers/index.js +2 -1
- package/lib/helpers/index.js.map +1 -1
- package/lib/helpers/render-apple-tags.js +0 -1
- package/lib/helpers/render-apple-tags.js.map +1 -1
- package/lib/helpers/static-route-handlers/generic-file-handler.js +15 -15
- package/lib/helpers/static-route-handlers/generic-file-handler.js.map +1 -1
- package/lib/helpers/static-route-handlers/index.js +2 -1
- package/lib/helpers/static-route-handlers/index.js.map +1 -1
- package/lib/hoc/withBlaze.js +39 -37
- package/lib/hoc/withBlaze.js.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/pages/Resolver.js +3 -3
- package/lib/pages/Resolver.js.map +1 -1
- package/lib/pages/document/_document.js +2 -1
- package/lib/pages/document/_document.js.map +1 -1
- package/lib/server/index.js +5 -5
- package/lib/server/index.js.map +1 -1
- package/lib-es/application/query/index.js.map +1 -1
- package/lib-es/components/DebugSidebar/index.js.map +1 -1
- package/lib-es/constants.js +5 -1
- package/lib-es/constants.js.map +1 -1
- package/lib-es/helpers/build-admin-href.js.map +1 -1
- package/lib-es/helpers/check-url.js +77 -30
- package/lib-es/helpers/check-url.js.map +1 -1
- package/lib-es/helpers/get-root-selector-classes.js.map +1 -1
- package/lib-es/helpers/static-route-handlers/robots-txt.js.map +1 -1
- package/lib-es/helpers/static-route-handlers/sitemap-file.js.map +1 -1
- package/lib-es/helpers/static-route-handlers/sitemap.js.map +1 -1
- package/lib-es/hoc/withBlaze.js +1 -1
- package/lib-es/hoc/withBlaze.js.map +1 -1
- package/package.json +2 -2
- package/src/constants.js +5 -1
- package/src/helpers/check-url.js +59 -24
- package/tests/unit/src/__snapshots__/constants.test.js.snap +3 -0
- package/tests/unit/src/helpers/check-url.test.js +37 -12
|
@@ -4,7 +4,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
4
4
|
import { parseUrl } from 'query-string';
|
|
5
5
|
import { getUnpublishedEntityName } from '@blaze-cms/react-page-builder';
|
|
6
6
|
import { checkAccessToken } from '@blaze-cms/core-auth-ui';
|
|
7
|
-
import { HTTPS, DOUBLE_SLASH, COLON, NOT_FOUND_STATUS_CODE, BLAZE_X_FRAME_OPTIONS_DEFAULT } from '../constants';
|
|
7
|
+
import { HTTPS, DOUBLE_SLASH, COLON, NOT_FOUND_STATUS_CODE, BLAZE_X_FRAME_OPTIONS_DEFAULT, ERROR_URLS } from '../constants';
|
|
8
8
|
import { checkUrlQuery } from '../application/query';
|
|
9
9
|
import checkParent from './check-parent';
|
|
10
10
|
import checkPreviewUrl from './check-preview-url';
|
|
@@ -96,14 +96,15 @@ const getFullUrl = (req, asPath) => {
|
|
|
96
96
|
const urlPort = port ? `${COLON}${port}` : '';
|
|
97
97
|
return `${protocol}${DOUBLE_SLASH}${hostname}${urlPort}${asPath}`;
|
|
98
98
|
};
|
|
99
|
-
const doUrlCheck = async
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
const doUrlCheck = async args => {
|
|
100
|
+
const {
|
|
101
|
+
asPath,
|
|
102
|
+
url,
|
|
103
|
+
apolloClient,
|
|
104
|
+
res,
|
|
105
|
+
blazeApp,
|
|
106
|
+
errorCheckCode = false
|
|
107
|
+
} = args;
|
|
107
108
|
try {
|
|
108
109
|
const {
|
|
109
110
|
data: {
|
|
@@ -120,21 +121,23 @@ const doUrlCheck = async ({
|
|
|
120
121
|
url
|
|
121
122
|
}
|
|
122
123
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const queryString = asPath.split('?')[1];
|
|
133
|
-
redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;
|
|
134
|
-
}
|
|
135
|
-
return doRedirect(res, redirectUrl);
|
|
124
|
+
setCustomCacheControlHeaders(pageData, res);
|
|
125
|
+
if (urlTo && (urlTo !== url || errorCheckCode)) {
|
|
126
|
+
return handleRedirect({
|
|
127
|
+
errorCheckCode,
|
|
128
|
+
url,
|
|
129
|
+
urlTo,
|
|
130
|
+
asPath,
|
|
131
|
+
res
|
|
132
|
+
});
|
|
136
133
|
}
|
|
137
134
|
const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());
|
|
135
|
+
if (errorCheckCode) {
|
|
136
|
+
blazeApp.events.emit('monitor:log', {
|
|
137
|
+
message: `Serving custom ${errorCheckCode} page`
|
|
138
|
+
});
|
|
139
|
+
if (res) res.statusCode = errorCheckCode;
|
|
140
|
+
}
|
|
138
141
|
return {
|
|
139
142
|
pageData,
|
|
140
143
|
rootSelectorClasses,
|
|
@@ -142,14 +145,7 @@ const doUrlCheck = async ({
|
|
|
142
145
|
itemEntity: getUnpublishedEntityName(itemEntity)
|
|
143
146
|
};
|
|
144
147
|
} catch (err) {
|
|
145
|
-
|
|
146
|
-
return handleError(err, res, handle404Error, blazeApp);
|
|
147
|
-
}
|
|
148
|
-
const parentPATH = checkParent(url);
|
|
149
|
-
if (handle404Error && parentPATH) {
|
|
150
|
-
return doRedirect(res, parentPATH);
|
|
151
|
-
}
|
|
152
|
-
return handleError(err, res, handle404Error, blazeApp);
|
|
148
|
+
return handleUrlError(err, args);
|
|
153
149
|
}
|
|
154
150
|
};
|
|
155
151
|
const handleError = (err, res, handle404Error, blazeApp) => {
|
|
@@ -171,6 +167,34 @@ const handleError = (err, res, handle404Error, blazeApp) => {
|
|
|
171
167
|
}
|
|
172
168
|
return {};
|
|
173
169
|
};
|
|
170
|
+
function handleRedirect({
|
|
171
|
+
errorCheckCode,
|
|
172
|
+
url,
|
|
173
|
+
urlTo,
|
|
174
|
+
asPath,
|
|
175
|
+
res
|
|
176
|
+
}) {
|
|
177
|
+
if (errorCheckCode) {
|
|
178
|
+
const errorMessage = `Cannot redirect ${url}`;
|
|
179
|
+
const customError = new Error(errorMessage);
|
|
180
|
+
customError.graphQLErrors = [errorMessage];
|
|
181
|
+
throw customError;
|
|
182
|
+
}
|
|
183
|
+
let redirectUrl = urlTo;
|
|
184
|
+
if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {
|
|
185
|
+
const queryString = asPath.split('?')[1];
|
|
186
|
+
redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;
|
|
187
|
+
}
|
|
188
|
+
return doRedirect(res, redirectUrl);
|
|
189
|
+
}
|
|
190
|
+
function setCustomCacheControlHeaders(pageData, res) {
|
|
191
|
+
const {
|
|
192
|
+
cacheControlMaxAge = null
|
|
193
|
+
} = pageData || {};
|
|
194
|
+
if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {
|
|
195
|
+
res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
174
198
|
function doRedirect(res, redirectUrl) {
|
|
175
199
|
if (res) {
|
|
176
200
|
res.writeHead(301, {
|
|
@@ -184,5 +208,28 @@ function doRedirect(res, redirectUrl) {
|
|
|
184
208
|
redirecting: true
|
|
185
209
|
};
|
|
186
210
|
}
|
|
211
|
+
function handleUrlError(err, args) {
|
|
212
|
+
const {
|
|
213
|
+
asPath,
|
|
214
|
+
res,
|
|
215
|
+
handle404Error,
|
|
216
|
+
blazeApp,
|
|
217
|
+
errorCheckCode
|
|
218
|
+
} = args;
|
|
219
|
+
if (!err.graphQLErrors || !err.graphQLErrors.length) {
|
|
220
|
+
return handleError(err, res, handle404Error, blazeApp);
|
|
221
|
+
}
|
|
222
|
+
if (!errorCheckCode) {
|
|
223
|
+
return doUrlCheck(_objectSpread(_objectSpread({}, args), {}, {
|
|
224
|
+
url: ERROR_URLS.custom404,
|
|
225
|
+
errorCheckCode: NOT_FOUND_STATUS_CODE
|
|
226
|
+
}));
|
|
227
|
+
}
|
|
228
|
+
const parentPATH = checkParent(asPath);
|
|
229
|
+
if (handle404Error && parentPATH) {
|
|
230
|
+
return doRedirect(res, parentPATH);
|
|
231
|
+
}
|
|
232
|
+
return handleError(err, res, handle404Error, blazeApp);
|
|
233
|
+
}
|
|
187
234
|
export default checkUrl;
|
|
188
235
|
//# sourceMappingURL=check-url.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-url.js","names":["parseUrl","getUnpublishedEntityName","checkAccessToken","HTTPS","DOUBLE_SLASH","COLON","NOT_FOUND_STATUS_CODE","BLAZE_X_FRAME_OPTIONS_DEFAULT","checkUrlQuery","checkParent","checkPreviewUrl","handleStaticRoutes","getPageData","getRootSelectorClasses","getRootClassesLimit","Number","process","env","BLAZE_ROOT_SELECTOR_CLASSES_LIMIT","checkUrl","props","asPath","apolloClient","res","req","query","blazeApp","disableSsr","fullUrl","getFullUrl","url","BLAZE_STATUS_URL","isStatusPage","handler","getHandler","setHeader","BLAZE_X_FRAME_OPTIONS","getHeader","BLAZE_CACHE_CONTROL_HEADER","previewData","_objectSpread","Object","keys","cache","extract","length","getPreviewData","urlCheckOptions","result","doUrlCheck","handle404Error","pageData","rootSelectorClasses","isPreview","getHost","headers","BLAZE_FRONTEND_HOST","host","location","protocol","hostname","port","window","urlPort","data","itemId","itemEntity","urlTo","variables","cacheControlMaxAge","redirectUrl","BLAZE_DISABLE_REDIRECT_WITH_QUERY","queryString","split","doRedirect","err","graphQLErrors","handleError","parentPATH","events","emit","error","networkError","writeHead","write","end","statusCode","errorCode","Location","href","redirecting"],"sources":["../../src/helpers/check-url.js"],"sourcesContent":["import { parseUrl } from 'query-string';\nimport { getUnpublishedEntityName } from '@blaze-cms/react-page-builder';\nimport { checkAccessToken } from '@blaze-cms/core-auth-ui';\nimport {\n HTTPS,\n DOUBLE_SLASH,\n COLON,\n NOT_FOUND_STATUS_CODE,\n BLAZE_X_FRAME_OPTIONS_DEFAULT\n} from '../constants';\nimport { checkUrlQuery } from '../application/query';\nimport checkParent from './check-parent';\nimport checkPreviewUrl from './check-preview-url';\nimport handleStaticRoutes from './handle-static-routes';\nimport getPageData from './get-page-data';\nimport getRootSelectorClasses from './get-root-selector-classes';\n\nconst getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT);\n\nconst checkUrl = async props => {\n const { asPath, apolloClient, res, req, query, blazeApp, disableSsr } = props;\n const fullUrl = getFullUrl(req, asPath);\n const { url } = parseUrl(asPath);\n\n if (process.env.BLAZE_STATUS_URL && url === process.env.BLAZE_STATUS_URL) {\n return { isStatusPage: true };\n }\n\n if (res) {\n const handler = handleStaticRoutes.getHandler(asPath);\n\n res.setHeader(\n 'X-Frame-Options',\n process.env.BLAZE_X_FRAME_OPTIONS || BLAZE_X_FRAME_OPTIONS_DEFAULT\n );\n\n if (!res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', process.env.BLAZE_CACHE_CONTROL_HEADER || '');\n }\n\n if (handler) {\n return handler(props);\n }\n }\n\n const previewData = checkPreviewUrl(url, query);\n\n if (!previewData && disableSsr) return { disableSsr: true };\n\n await checkAccessToken(apolloClient, {\n ...props,\n disableSsr: !Object.keys(apolloClient.cache.extract()).length // empty cache means SSR was disabled\n });\n\n if (previewData) return getPreviewData(previewData, apolloClient);\n const urlCheckOptions = { asPath, url, apolloClient, res };\n const result = await doUrlCheck({\n ...urlCheckOptions,\n handle404Error: true,\n blazeApp\n });\n return { ...result, fullUrl } || {};\n};\n\nconst getPreviewData = async (previewData, apolloClient) => {\n const result = await getPageData({ ...previewData, apolloClient });\n const { pageData: { url } = {} } = result;\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n return { ...previewData, rootSelectorClasses, ...result, isPreview: true };\n};\n\nconst getHost = ({ headers = {} }) =>\n process.env.BLAZE_FRONTEND_HOST ||\n headers['x-request-host'] ||\n headers['x-forwarded-host'] ||\n headers.host;\n\nconst getFullUrl = (req, asPath) => {\n if (req) {\n return `${HTTPS}${getHost(req)}${asPath}`;\n }\n const {\n location: { protocol, hostname, port }\n } = window;\n const urlPort = port ? `${COLON}${port}` : '';\n\n return `${protocol}${DOUBLE_SLASH}${hostname}${urlPort}${asPath}`;\n};\n\nconst doUrlCheck = async ({ asPath, url, apolloClient, res, handle404Error, blazeApp }) => {\n try {\n const {\n data: { checkUrl: { itemId, itemEntity, urlTo, pageData = {} } = {} } = {}\n } = await apolloClient.query({\n query: checkUrlQuery,\n variables: { url }\n });\n\n const { cacheControlMaxAge = null } = pageData || {};\n\n if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {\n res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);\n }\n\n if (urlTo && urlTo !== url) {\n let redirectUrl = urlTo;\n if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {\n const queryString = asPath.split('?')[1];\n redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;\n }\n\n return doRedirect(res, redirectUrl);\n }\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n return {\n pageData,\n rootSelectorClasses,\n itemId,\n itemEntity: getUnpublishedEntityName(itemEntity)\n };\n } catch (err) {\n if (!err.graphQLErrors || !err.graphQLErrors.length) {\n return handleError(err, res, handle404Error, blazeApp);\n }\n\n const parentPATH = checkParent(url);\n if (handle404Error && parentPATH) {\n return doRedirect(res, parentPATH);\n }\n\n return handleError(err, res, handle404Error, blazeApp);\n }\n};\n\nconst handleError = (err, res, handle404Error, blazeApp) => {\n blazeApp.events.emit('monitor:log', { error: err });\n\n if (!res) return {};\n if (err.networkError) {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.write('500 Internal Server Error\\n');\n res.end();\n } else if (handle404Error && err.graphQLErrors && err.graphQLErrors.length) {\n res.statusCode = NOT_FOUND_STATUS_CODE;\n return { errorCode: NOT_FOUND_STATUS_CODE };\n }\n\n return {};\n};\n\nfunction doRedirect(res, redirectUrl) {\n if (res) {\n res.writeHead(301, { Location: redirectUrl });\n res.end();\n } else {\n window.location.href = redirectUrl;\n }\n\n return { redirecting: true };\n}\n\nexport default checkUrl;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"check-url.js","names":["parseUrl","getUnpublishedEntityName","checkAccessToken","HTTPS","DOUBLE_SLASH","COLON","NOT_FOUND_STATUS_CODE","BLAZE_X_FRAME_OPTIONS_DEFAULT","ERROR_URLS","checkUrlQuery","checkParent","checkPreviewUrl","handleStaticRoutes","getPageData","getRootSelectorClasses","getRootClassesLimit","Number","process","env","BLAZE_ROOT_SELECTOR_CLASSES_LIMIT","checkUrl","props","asPath","apolloClient","res","req","query","blazeApp","disableSsr","fullUrl","getFullUrl","url","BLAZE_STATUS_URL","isStatusPage","handler","getHandler","setHeader","BLAZE_X_FRAME_OPTIONS","getHeader","BLAZE_CACHE_CONTROL_HEADER","previewData","_objectSpread","Object","keys","cache","extract","length","getPreviewData","urlCheckOptions","result","doUrlCheck","handle404Error","pageData","rootSelectorClasses","isPreview","getHost","headers","BLAZE_FRONTEND_HOST","host","location","protocol","hostname","port","window","urlPort","args","errorCheckCode","data","itemId","itemEntity","urlTo","variables","setCustomCacheControlHeaders","handleRedirect","events","emit","message","statusCode","err","handleUrlError","handleError","error","networkError","writeHead","write","end","graphQLErrors","errorCode","errorMessage","customError","Error","redirectUrl","BLAZE_DISABLE_REDIRECT_WITH_QUERY","queryString","split","doRedirect","cacheControlMaxAge","Location","href","redirecting","custom404","parentPATH"],"sources":["../../src/helpers/check-url.js"],"sourcesContent":["import { parseUrl } from 'query-string';\nimport { getUnpublishedEntityName } from '@blaze-cms/react-page-builder';\nimport { checkAccessToken } from '@blaze-cms/core-auth-ui';\nimport {\n HTTPS,\n DOUBLE_SLASH,\n COLON,\n NOT_FOUND_STATUS_CODE,\n BLAZE_X_FRAME_OPTIONS_DEFAULT,\n ERROR_URLS\n} from '../constants';\nimport { checkUrlQuery } from '../application/query';\nimport checkParent from './check-parent';\nimport checkPreviewUrl from './check-preview-url';\nimport handleStaticRoutes from './handle-static-routes';\nimport getPageData from './get-page-data';\nimport getRootSelectorClasses from './get-root-selector-classes';\n\nconst getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT);\n\nconst checkUrl = async props => {\n const { asPath, apolloClient, res, req, query, blazeApp, disableSsr } = props;\n const fullUrl = getFullUrl(req, asPath);\n const { url } = parseUrl(asPath);\n\n if (process.env.BLAZE_STATUS_URL && url === process.env.BLAZE_STATUS_URL) {\n return { isStatusPage: true };\n }\n\n if (res) {\n const handler = handleStaticRoutes.getHandler(asPath);\n\n res.setHeader(\n 'X-Frame-Options',\n process.env.BLAZE_X_FRAME_OPTIONS || BLAZE_X_FRAME_OPTIONS_DEFAULT\n );\n\n if (!res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', process.env.BLAZE_CACHE_CONTROL_HEADER || '');\n }\n\n if (handler) {\n return handler(props);\n }\n }\n\n const previewData = checkPreviewUrl(url, query);\n\n if (!previewData && disableSsr) return { disableSsr: true };\n\n await checkAccessToken(apolloClient, {\n ...props,\n disableSsr: !Object.keys(apolloClient.cache.extract()).length // empty cache means SSR was disabled\n });\n\n if (previewData) return getPreviewData(previewData, apolloClient);\n const urlCheckOptions = { asPath, url, apolloClient, res };\n const result = await doUrlCheck({\n ...urlCheckOptions,\n handle404Error: true,\n blazeApp\n });\n return { ...result, fullUrl } || {};\n};\n\nconst getPreviewData = async (previewData, apolloClient) => {\n const result = await getPageData({ ...previewData, apolloClient });\n const { pageData: { url } = {} } = result;\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n return { ...previewData, rootSelectorClasses, ...result, isPreview: true };\n};\n\nconst getHost = ({ headers = {} }) =>\n process.env.BLAZE_FRONTEND_HOST ||\n headers['x-request-host'] ||\n headers['x-forwarded-host'] ||\n headers.host;\n\nconst getFullUrl = (req, asPath) => {\n if (req) {\n return `${HTTPS}${getHost(req)}${asPath}`;\n }\n const {\n location: { protocol, hostname, port }\n } = window;\n const urlPort = port ? `${COLON}${port}` : '';\n\n return `${protocol}${DOUBLE_SLASH}${hostname}${urlPort}${asPath}`;\n};\n\nconst doUrlCheck = async args => {\n const { asPath, url, apolloClient, res, blazeApp, errorCheckCode = false } = args;\n try {\n const {\n data: { checkUrl: { itemId, itemEntity, urlTo, pageData = {} } = {} } = {}\n } = await apolloClient.query({\n query: checkUrlQuery,\n variables: { url }\n });\n\n setCustomCacheControlHeaders(pageData, res);\n\n if (urlTo && (urlTo !== url || errorCheckCode)) {\n return handleRedirect({ errorCheckCode, url, urlTo, asPath, res });\n }\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n\n if (errorCheckCode) {\n blazeApp.events.emit('monitor:log', { message: `Serving custom ${errorCheckCode} page` });\n if (res) res.statusCode = errorCheckCode;\n }\n\n return {\n pageData,\n rootSelectorClasses,\n itemId,\n itemEntity: getUnpublishedEntityName(itemEntity)\n };\n } catch (err) {\n return handleUrlError(err, args);\n }\n};\n\nconst handleError = (err, res, handle404Error, blazeApp) => {\n blazeApp.events.emit('monitor:log', { error: err });\n\n if (!res) return {};\n if (err.networkError) {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.write('500 Internal Server Error\\n');\n res.end();\n } else if (handle404Error && err.graphQLErrors && err.graphQLErrors.length) {\n res.statusCode = NOT_FOUND_STATUS_CODE;\n return { errorCode: NOT_FOUND_STATUS_CODE };\n }\n\n return {};\n};\n\nfunction handleRedirect({ errorCheckCode, url, urlTo, asPath, res }) {\n if (errorCheckCode) {\n const errorMessage = `Cannot redirect ${url}`;\n const customError = new Error(errorMessage);\n customError.graphQLErrors = [errorMessage];\n throw customError;\n }\n let redirectUrl = urlTo;\n if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {\n const queryString = asPath.split('?')[1];\n redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;\n }\n\n return doRedirect(res, redirectUrl);\n}\n\nfunction setCustomCacheControlHeaders(pageData, res) {\n const { cacheControlMaxAge = null } = pageData || {};\n\n if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {\n res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);\n }\n}\n\nfunction doRedirect(res, redirectUrl) {\n if (res) {\n res.writeHead(301, { Location: redirectUrl });\n res.end();\n } else {\n window.location.href = redirectUrl;\n }\n\n return { redirecting: true };\n}\n\nfunction handleUrlError(err, args) {\n const { asPath, res, handle404Error, blazeApp, errorCheckCode } = args;\n if (!err.graphQLErrors || !err.graphQLErrors.length) {\n return handleError(err, res, handle404Error, blazeApp);\n }\n\n if (!errorCheckCode) {\n return doUrlCheck({\n ...args,\n url: ERROR_URLS.custom404,\n errorCheckCode: NOT_FOUND_STATUS_CODE\n });\n }\n\n const parentPATH = checkParent(asPath);\n if (handle404Error && parentPATH) {\n return doRedirect(res, parentPATH);\n }\n\n return handleError(err, res, handle404Error, blazeApp);\n}\n\nexport default checkUrl;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-root-selector-classes.js","names":["ROOT_SELECTOR_SEPARATOR","ROOT_SELECTOR_CLASS_PREFIX","RESOLVER_CONTAINER_CLASS","getRootSelectorClasses","url","classesLimit","urlParts","split","filter","part","length","classes","slice","reduce","acc","urlSection","index","newClass","join","push"],"sources":["../../src/helpers/get-root-selector-classes.js"],"sourcesContent":["import {\n ROOT_SELECTOR_SEPARATOR,\n ROOT_SELECTOR_CLASS_PREFIX,\n RESOLVER_CONTAINER_CLASS\n} from '../constants';\n\nfunction getRootSelectorClasses(url, classesLimit = 0) {\n if (!classesLimit || !url) return RESOLVER_CONTAINER_CLASS;\n\n const urlParts = url.split('/').filter(part => part);\n if (!urlParts.length) return `${RESOLVER_CONTAINER_CLASS} ${ROOT_SELECTOR_CLASS_PREFIX}`;\n\n const classes = urlParts.slice(0, classesLimit).reduce((acc, urlSection, index) => {\n const newClass = [!index ? ROOT_SELECTOR_CLASS_PREFIX : acc[index - 1], urlSection].join(\n ROOT_SELECTOR_SEPARATOR\n );\n acc.push(newClass);\n return acc;\n }, []);\n\n return `${RESOLVER_CONTAINER_CLASS} ${classes.join(' ')}`;\n}\n\nexport default getRootSelectorClasses;\n"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,0BAA0B,EAC1BC,wBAAwB,QACnB,cAAc;AAErB,SAASC,sBAAsBA,CAACC,GAAG,EAAEC,YAAY,GAAG,CAAC,EAAE;EACrD,IAAI,CAACA,YAAY,IAAI,CAACD,GAAG,EAAE,OAAOF,wBAAwB;EAE1D,MAAMI,QAAQ,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAACC,IAAI,IAAIA,IAAI,CAAC;EACpD,IAAI,CAACH,QAAQ,CAACI,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"get-root-selector-classes.js","names":["ROOT_SELECTOR_SEPARATOR","ROOT_SELECTOR_CLASS_PREFIX","RESOLVER_CONTAINER_CLASS","getRootSelectorClasses","url","classesLimit","urlParts","split","filter","part","length","classes","slice","reduce","acc","urlSection","index","newClass","join","push"],"sources":["../../src/helpers/get-root-selector-classes.js"],"sourcesContent":["import {\n ROOT_SELECTOR_SEPARATOR,\n ROOT_SELECTOR_CLASS_PREFIX,\n RESOLVER_CONTAINER_CLASS\n} from '../constants';\n\nfunction getRootSelectorClasses(url, classesLimit = 0) {\n if (!classesLimit || !url) return RESOLVER_CONTAINER_CLASS;\n\n const urlParts = url.split('/').filter(part => part);\n if (!urlParts.length) return `${RESOLVER_CONTAINER_CLASS} ${ROOT_SELECTOR_CLASS_PREFIX}`;\n\n const classes = urlParts.slice(0, classesLimit).reduce((acc, urlSection, index) => {\n const newClass = [!index ? ROOT_SELECTOR_CLASS_PREFIX : acc[index - 1], urlSection].join(\n ROOT_SELECTOR_SEPARATOR\n );\n acc.push(newClass);\n return acc;\n }, []);\n\n return `${RESOLVER_CONTAINER_CLASS} ${classes.join(' ')}`;\n}\n\nexport default getRootSelectorClasses;\n"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,0BAA0B,EAC1BC,wBAAwB,QACnB,cAAc;AAErB,SAASC,sBAAsBA,CAACC,GAAG,EAAEC,YAAY,GAAG,CAAC,EAAE;EACrD,IAAI,CAACA,YAAY,IAAI,CAACD,GAAG,EAAE,OAAOF,wBAAwB;EAE1D,MAAMI,QAAQ,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAACC,IAAI,IAAIA,IAAI,CAAC;EACpD,IAAI,CAACH,QAAQ,CAACI,MAAM,EAAE,OAAQ,GAAER,wBAAyB,IAAGD,0BAA2B,EAAC;EAExF,MAAMU,OAAO,GAAGL,QAAQ,CAACM,KAAK,CAAC,CAAC,EAAEP,YAAY,CAAC,CAACQ,MAAM,CAAC,CAACC,GAAG,EAAEC,UAAU,EAAEC,KAAK,KAAK;IACjF,MAAMC,QAAQ,GAAG,CAAC,CAACD,KAAK,GAAGf,0BAA0B,GAAGa,GAAG,CAACE,KAAK,GAAG,CAAC,CAAC,EAAED,UAAU,CAAC,CAACG,IAAI,CACtFlB,uBACF,CAAC;IACDc,GAAG,CAACK,IAAI,CAACF,QAAQ,CAAC;IAClB,OAAOH,GAAG;EACZ,CAAC,EAAE,EAAE,CAAC;EAEN,OAAQ,GAAEZ,wBAAyB,IAAGS,OAAO,CAACO,IAAI,CAAC,GAAG,CAAE,EAAC;AAC3D;AAEA,eAAef,sBAAsB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots-txt.js","names":["gql","ROUTE_PATTERN_ROBOTS_TXT","BLAZE_STATIC_ROUTE_STORE_KEY","getHandler","storeKey","process","env","fileQuery","pattern","RegExp","handler"],"sources":["../../../src/helpers/static-route-handlers/robots-txt.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { ROUTE_PATTERN_ROBOTS_TXT, BLAZE_STATIC_ROUTE_STORE_KEY } from '../../constants';\nimport getHandler from './generic-file-handler';\n\nconst storeKey = process.env.BLAZE_STATIC_ROUTE_STORE_KEY || BLAZE_STATIC_ROUTE_STORE_KEY;\n\nexport const fileQuery = gql`\n query {\n files: getFiles(\n where: { storeKey: \"${storeKey}\", filename: \"robots.txt\" }\n limit: 1\n sort: [{ property: \"created\", direction: \"desc\" }]\n ) {\n mimetype\n url\n }\n }\n`;\n\nexport const pattern = new RegExp(ROUTE_PATTERN_ROBOTS_TXT);\n\nexport const handler = getHandler(fileQuery);\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,SAASC,wBAAwB,EAAEC,4BAA4B,QAAQ,iBAAiB;AACxF,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,MAAMC,QAAQ,GAAGC,OAAO,CAACC,GAAG,CAACJ,4BAA4B,IAAIA,4BAA4B;AAEzF,OAAO,MAAMK,SAAS,GAAGP,
|
|
1
|
+
{"version":3,"file":"robots-txt.js","names":["gql","ROUTE_PATTERN_ROBOTS_TXT","BLAZE_STATIC_ROUTE_STORE_KEY","getHandler","storeKey","process","env","fileQuery","pattern","RegExp","handler"],"sources":["../../../src/helpers/static-route-handlers/robots-txt.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { ROUTE_PATTERN_ROBOTS_TXT, BLAZE_STATIC_ROUTE_STORE_KEY } from '../../constants';\nimport getHandler from './generic-file-handler';\n\nconst storeKey = process.env.BLAZE_STATIC_ROUTE_STORE_KEY || BLAZE_STATIC_ROUTE_STORE_KEY;\n\nexport const fileQuery = gql`\n query {\n files: getFiles(\n where: { storeKey: \"${storeKey}\", filename: \"robots.txt\" }\n limit: 1\n sort: [{ property: \"created\", direction: \"desc\" }]\n ) {\n mimetype\n url\n }\n }\n`;\n\nexport const pattern = new RegExp(ROUTE_PATTERN_ROBOTS_TXT);\n\nexport const handler = getHandler(fileQuery);\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,SAASC,wBAAwB,EAAEC,4BAA4B,QAAQ,iBAAiB;AACxF,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,MAAMC,QAAQ,GAAGC,OAAO,CAACC,GAAG,CAACJ,4BAA4B,IAAIA,4BAA4B;AAEzF,OAAO,MAAMK,SAAS,GAAGP,GAAI;AAC7B;AACA;AACA,4BAA4BI,QAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,OAAO,GAAG,IAAIC,MAAM,CAACR,wBAAwB,CAAC;AAE3D,OAAO,MAAMS,OAAO,GAAGP,UAAU,CAACI,SAAS,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-file.js","names":["gql","ROUTE_PATTERN_SITEMAP_FILE_REGEX","SITEMAP_STORE_KEY","getHandler","fileQuery","getVariables","asPath","filename","split","slice","where","storeKey","pattern","handler"],"sources":["../../../src/helpers/static-route-handlers/sitemap-file.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport 'cross-fetch/polyfill';\nimport { ROUTE_PATTERN_SITEMAP_FILE_REGEX, SITEMAP_STORE_KEY } from '../../constants';\nimport getHandler from './generic-file-handler';\n\nexport const fileQuery = gql`\n query getFiles($where: JSON) {\n files: getFiles(where: $where, limit: 1, sort: [{ property: \"created\", direction: \"desc\" }]) {\n mimetype\n url\n }\n }\n`;\n\nfunction getVariables({ asPath }) {\n const filename = asPath.split('/').slice(-1)[0];\n const where = { storeKey: SITEMAP_STORE_KEY, filename };\n return { where };\n}\n\nexport const pattern = ROUTE_PATTERN_SITEMAP_FILE_REGEX;\n\nexport const handler = getHandler(fileQuery, getVariables);\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAO,sBAAsB;AAC7B,SAASC,gCAAgC,EAAEC,iBAAiB,QAAQ,iBAAiB;AACrF,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,OAAO,MAAMC,SAAS,GAAGJ,
|
|
1
|
+
{"version":3,"file":"sitemap-file.js","names":["gql","ROUTE_PATTERN_SITEMAP_FILE_REGEX","SITEMAP_STORE_KEY","getHandler","fileQuery","getVariables","asPath","filename","split","slice","where","storeKey","pattern","handler"],"sources":["../../../src/helpers/static-route-handlers/sitemap-file.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport 'cross-fetch/polyfill';\nimport { ROUTE_PATTERN_SITEMAP_FILE_REGEX, SITEMAP_STORE_KEY } from '../../constants';\nimport getHandler from './generic-file-handler';\n\nexport const fileQuery = gql`\n query getFiles($where: JSON) {\n files: getFiles(where: $where, limit: 1, sort: [{ property: \"created\", direction: \"desc\" }]) {\n mimetype\n url\n }\n }\n`;\n\nfunction getVariables({ asPath }) {\n const filename = asPath.split('/').slice(-1)[0];\n const where = { storeKey: SITEMAP_STORE_KEY, filename };\n return { where };\n}\n\nexport const pattern = ROUTE_PATTERN_SITEMAP_FILE_REGEX;\n\nexport const handler = getHandler(fileQuery, getVariables);\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAO,sBAAsB;AAC7B,SAASC,gCAAgC,EAAEC,iBAAiB,QAAQ,iBAAiB;AACrF,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,OAAO,MAAMC,SAAS,GAAGJ,GAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,SAASK,YAAYA,CAAC;EAAEC;AAAO,CAAC,EAAE;EAChC,MAAMC,QAAQ,GAAGD,MAAM,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,MAAMC,KAAK,GAAG;IAAEC,QAAQ,EAAET,iBAAiB;IAAEK;EAAS,CAAC;EACvD,OAAO;IAAEG;EAAM,CAAC;AAClB;AAEA,OAAO,MAAME,OAAO,GAAGX,gCAAgC;AAEvD,OAAO,MAAMY,OAAO,GAAGV,UAAU,CAACC,SAAS,EAAEC,YAAY,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap.js","names":["gql","ROUTE_PATTERN_SITEMAP","getHandler","fileQuery","pattern","RegExp","handler"],"sources":["../../../src/helpers/static-route-handlers/sitemap.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport 'cross-fetch/polyfill';\nimport { ROUTE_PATTERN_SITEMAP } from '../../constants';\nimport getHandler from './generic-file-handler';\n\nexport const fileQuery = gql`\n query {\n files: getFiles(\n where: { storeKey: \"default_sitemap\", filename: \"sitemap-index.xml\" }\n limit: 1\n sort: [{ property: \"created\", direction: \"desc\" }]\n ) {\n mimetype\n url\n }\n }\n`;\n\nexport const pattern = new RegExp(ROUTE_PATTERN_SITEMAP);\n\nexport const handler = getHandler(fileQuery);\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAO,sBAAsB;AAC7B,SAASC,qBAAqB,QAAQ,iBAAiB;AACvD,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,OAAO,MAAMC,SAAS,GAAGH,
|
|
1
|
+
{"version":3,"file":"sitemap.js","names":["gql","ROUTE_PATTERN_SITEMAP","getHandler","fileQuery","pattern","RegExp","handler"],"sources":["../../../src/helpers/static-route-handlers/sitemap.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport 'cross-fetch/polyfill';\nimport { ROUTE_PATTERN_SITEMAP } from '../../constants';\nimport getHandler from './generic-file-handler';\n\nexport const fileQuery = gql`\n query {\n files: getFiles(\n where: { storeKey: \"default_sitemap\", filename: \"sitemap-index.xml\" }\n limit: 1\n sort: [{ property: \"created\", direction: \"desc\" }]\n ) {\n mimetype\n url\n }\n }\n`;\n\nexport const pattern = new RegExp(ROUTE_PATTERN_SITEMAP);\n\nexport const handler = getHandler(fileQuery);\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAO,sBAAsB;AAC7B,SAASC,qBAAqB,QAAQ,iBAAiB;AACvD,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,OAAO,MAAMC,SAAS,GAAGH,GAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,OAAO,GAAG,IAAIC,MAAM,CAACJ,qBAAqB,CAAC;AAExD,OAAO,MAAMK,OAAO,GAAGJ,UAAU,CAACC,SAAS,CAAC","ignoreList":[]}
|
package/lib-es/hoc/withBlaze.js
CHANGED
|
@@ -58,7 +58,7 @@ function getWrappedApp(isSsr, config, blazeApp, App) {
|
|
|
58
58
|
});
|
|
59
59
|
if (!isSsr) return mainProps;
|
|
60
60
|
try {
|
|
61
|
-
const renderAndCheckPromises = [getDataFromTree(/*#__PURE__*/React.createElement(AppTree, _extends({}, appProps, {
|
|
61
|
+
const renderAndCheckPromises = [getDataFromTree( /*#__PURE__*/React.createElement(AppTree, _extends({}, appProps, {
|
|
62
62
|
Component: _Component,
|
|
63
63
|
router: router,
|
|
64
64
|
apolloClient: apolloClient
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withBlaze.js","names":["React","Component","getDataFromTree","getBlazeUi","setupCheckAccessToken","PropTypes","dynamic","AppContext","blazeConfig","getErrorMessage","ErrorBoundary","APP_LOG_NAMESPACE_MAIN","getWrappedApp","isSsr","config","blazeApp","App","_Class","getApolloClient","ctx","requestApp","apolloClient","getClient","createClient","getRequestApp","getInitialProps","context","_Component","router","AppTree","appProps","errorProps","req","res","init","events","emit","pageProps","mainProps","_objectSpread","renderAndCheckPromises","createElement","_extends","openQueryChecker","checkOpenQueries","Promise","race","error","errorCode","statusCode","log","apolloState","cache","extract","sortedState","Object","keys","sort","reduce","acc","key","processedBlazeEntities","getProcessedEntities","constructor","props","state","appLoaded","initComplete","componentDidMount","setState","setApolloClient","render","app","Provider","value","_defineProperty","object","undefined","withBlaze","buildConfig","forceSsr","window","logNameSpace"],"sources":["../../src/hoc/withBlaze.js"],"sourcesContent":["// see: https://github.com/zeit/next.js/blob/canary/examples/with-apollo-auth/lib/withApollo.js\nimport React, { Component } from 'react';\nimport { getDataFromTree } from '@apollo/client/react/ssr';\nimport getBlazeUi from '@blaze-cms/core-ui';\nimport { setupCheckAccessToken } from '@blaze-cms/core-auth-ui';\nimport PropTypes from 'prop-types';\nimport dynamic from 'next/dynamic'; // Next.js dynamic\nimport { AppContext } from '@blaze-cms/nextjs-components';\nimport blazeConfig from '../blaze.config';\nimport { getErrorMessage } from '../helpers';\n\nconst ErrorBoundary = dynamic(() => import('@blaze-cms/core-errors-ui'));\n\nconst APP_LOG_NAMESPACE_MAIN = 'main';\n\nfunction getWrappedApp(isSsr, config, blazeApp, App) {\n function getApolloClient(ctx, requestApp) {\n return ctx.apolloClient || requestApp.getClient() || requestApp.createClient();\n }\n\n function getRequestApp(requestApp) {\n return !requestApp && isSsr ? getBlazeUi({ config }) : blazeApp;\n }\n return class extends Component {\n static displayName = 'withBlaze(App)';\n\n static propTypes = {\n apolloState: PropTypes.object,\n apolloClient: PropTypes.object,\n processedBlazeEntities: PropTypes.object\n };\n\n static defaultProps = {\n apolloState: {},\n apolloClient: null,\n processedBlazeEntities: undefined\n };\n\n static async getInitialProps(context) {\n const { Component: _Component, router, AppTree, ctx } = context;\n let appProps = {};\n let errorProps = {};\n\n let requestApp = ctx.blazeApp;\n requestApp = getRequestApp(requestApp);\n\n requestApp.ctx.router = router;\n requestApp.ctx.req = ctx.req;\n requestApp.ctx.res = ctx.res;\n\n await blazeApp.init();\n await requestApp.init();\n\n const apolloClient = getApolloClient(ctx, requestApp);\n\n ctx.apolloClient = apolloClient;\n ctx.blazeApp = requestApp;\n\n requestApp.events.emit('page-load:get-initial-props:before', { ctx });\n\n if (App.getInitialProps) {\n appProps = await App.getInitialProps(context);\n }\n\n const { pageProps = {} } = appProps;\n const mainProps = {\n ...appProps,\n pageProps: { ...pageProps, ...errorProps }\n };\n\n if (!isSsr) return mainProps;\n\n try {\n const renderAndCheckPromises = [\n getDataFromTree(\n <AppTree\n {...appProps}\n Component={_Component}\n router={router}\n apolloClient={apolloClient}\n />\n ),\n requestApp.openQueryChecker.checkOpenQueries()\n ];\n // race is so that if getDataFromTree gets stuck the checkOpenQueries will resolve when outstanding queries are done\n await Promise.race(renderAndCheckPromises);\n } catch (error) {\n errorProps = getErrorMessage(error);\n if (errorProps.errorCode) ctx.res.statusCode = errorProps.errorCode;\n ctx.blazeApp.events.emit('monitor:log', { error });\n requestApp.log.error('Error while running `getDataFromTree`', error);\n }\n\n const apolloState = apolloClient.cache.extract();\n const sortedState = Object.keys(apolloState)\n .sort()\n .reduce((acc, key) => {\n acc[key] = apolloState[key];\n return acc;\n }, {});\n\n return {\n ...mainProps,\n pageProps: { ...mainProps.pageProps, ...errorProps },\n apolloState: sortedState,\n processedBlazeEntities: blazeApp.getProcessedEntities()\n };\n }\n\n constructor(props) {\n super(props);\n this.apolloClient = props.apolloClient;\n this.state = {\n appLoaded: isSsr || blazeApp.initComplete()\n };\n this.blazeApp = blazeApp;\n }\n\n async componentDidMount() {\n if (blazeApp.initComplete()) return;\n\n await blazeApp.init();\n\n this.setState({\n appLoaded: blazeApp.initComplete()\n });\n }\n\n setApolloClient() {\n if (!this.apolloClient) {\n const { apolloState, processedBlazeEntities } = this.props;\n this.apolloClient = blazeApp.createClient(apolloState, processedBlazeEntities);\n setupCheckAccessToken(this.apolloClient);\n }\n }\n\n render() {\n const { appLoaded } = this.state;\n\n if (!appLoaded && !isSsr) return '...loading';\n\n this.setApolloClient();\n\n return (\n <ErrorBoundary app={this.blazeApp}>\n <AppContext.Provider value={{ blazeApp: this.blazeApp }}>\n <App {...this.props} apolloClient={this.apolloClient} blazeApp={this.blazeApp} />\n </AppContext.Provider>\n </ErrorBoundary>\n );\n }\n };\n}\n\nconst withBlaze = (App, buildConfig, { forceSsr = false } = {}) => {\n const isSsr = forceSsr || typeof window === 'undefined';\n const config = buildConfig ? buildConfig(blazeConfig) : blazeConfig;\n const blazeApp = getBlazeUi({ config, logNameSpace: APP_LOG_NAMESPACE_MAIN });\n blazeApp.init();\n\n return getWrappedApp(isSsr, config, blazeApp, App);\n};\n\nexport default withBlaze;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"withBlaze.js","names":["React","Component","getDataFromTree","getBlazeUi","setupCheckAccessToken","PropTypes","dynamic","AppContext","blazeConfig","getErrorMessage","ErrorBoundary","APP_LOG_NAMESPACE_MAIN","getWrappedApp","isSsr","config","blazeApp","App","_Class","getApolloClient","ctx","requestApp","apolloClient","getClient","createClient","getRequestApp","getInitialProps","context","_Component","router","AppTree","appProps","errorProps","req","res","init","events","emit","pageProps","mainProps","_objectSpread","renderAndCheckPromises","createElement","_extends","openQueryChecker","checkOpenQueries","Promise","race","error","errorCode","statusCode","log","apolloState","cache","extract","sortedState","Object","keys","sort","reduce","acc","key","processedBlazeEntities","getProcessedEntities","constructor","props","state","appLoaded","initComplete","componentDidMount","setState","setApolloClient","render","app","Provider","value","_defineProperty","object","undefined","withBlaze","buildConfig","forceSsr","window","logNameSpace"],"sources":["../../src/hoc/withBlaze.js"],"sourcesContent":["// see: https://github.com/zeit/next.js/blob/canary/examples/with-apollo-auth/lib/withApollo.js\nimport React, { Component } from 'react';\nimport { getDataFromTree } from '@apollo/client/react/ssr';\nimport getBlazeUi from '@blaze-cms/core-ui';\nimport { setupCheckAccessToken } from '@blaze-cms/core-auth-ui';\nimport PropTypes from 'prop-types';\nimport dynamic from 'next/dynamic'; // Next.js dynamic\nimport { AppContext } from '@blaze-cms/nextjs-components';\nimport blazeConfig from '../blaze.config';\nimport { getErrorMessage } from '../helpers';\n\nconst ErrorBoundary = dynamic(() => import('@blaze-cms/core-errors-ui'));\n\nconst APP_LOG_NAMESPACE_MAIN = 'main';\n\nfunction getWrappedApp(isSsr, config, blazeApp, App) {\n function getApolloClient(ctx, requestApp) {\n return ctx.apolloClient || requestApp.getClient() || requestApp.createClient();\n }\n\n function getRequestApp(requestApp) {\n return !requestApp && isSsr ? getBlazeUi({ config }) : blazeApp;\n }\n return class extends Component {\n static displayName = 'withBlaze(App)';\n\n static propTypes = {\n apolloState: PropTypes.object,\n apolloClient: PropTypes.object,\n processedBlazeEntities: PropTypes.object\n };\n\n static defaultProps = {\n apolloState: {},\n apolloClient: null,\n processedBlazeEntities: undefined\n };\n\n static async getInitialProps(context) {\n const { Component: _Component, router, AppTree, ctx } = context;\n let appProps = {};\n let errorProps = {};\n\n let requestApp = ctx.blazeApp;\n requestApp = getRequestApp(requestApp);\n\n requestApp.ctx.router = router;\n requestApp.ctx.req = ctx.req;\n requestApp.ctx.res = ctx.res;\n\n await blazeApp.init();\n await requestApp.init();\n\n const apolloClient = getApolloClient(ctx, requestApp);\n\n ctx.apolloClient = apolloClient;\n ctx.blazeApp = requestApp;\n\n requestApp.events.emit('page-load:get-initial-props:before', { ctx });\n\n if (App.getInitialProps) {\n appProps = await App.getInitialProps(context);\n }\n\n const { pageProps = {} } = appProps;\n const mainProps = {\n ...appProps,\n pageProps: { ...pageProps, ...errorProps }\n };\n\n if (!isSsr) return mainProps;\n\n try {\n const renderAndCheckPromises = [\n getDataFromTree(\n <AppTree\n {...appProps}\n Component={_Component}\n router={router}\n apolloClient={apolloClient}\n />\n ),\n requestApp.openQueryChecker.checkOpenQueries()\n ];\n // race is so that if getDataFromTree gets stuck the checkOpenQueries will resolve when outstanding queries are done\n await Promise.race(renderAndCheckPromises);\n } catch (error) {\n errorProps = getErrorMessage(error);\n if (errorProps.errorCode) ctx.res.statusCode = errorProps.errorCode;\n ctx.blazeApp.events.emit('monitor:log', { error });\n requestApp.log.error('Error while running `getDataFromTree`', error);\n }\n\n const apolloState = apolloClient.cache.extract();\n const sortedState = Object.keys(apolloState)\n .sort()\n .reduce((acc, key) => {\n acc[key] = apolloState[key];\n return acc;\n }, {});\n\n return {\n ...mainProps,\n pageProps: { ...mainProps.pageProps, ...errorProps },\n apolloState: sortedState,\n processedBlazeEntities: blazeApp.getProcessedEntities()\n };\n }\n\n constructor(props) {\n super(props);\n this.apolloClient = props.apolloClient;\n this.state = {\n appLoaded: isSsr || blazeApp.initComplete()\n };\n this.blazeApp = blazeApp;\n }\n\n async componentDidMount() {\n if (blazeApp.initComplete()) return;\n\n await blazeApp.init();\n\n this.setState({\n appLoaded: blazeApp.initComplete()\n });\n }\n\n setApolloClient() {\n if (!this.apolloClient) {\n const { apolloState, processedBlazeEntities } = this.props;\n this.apolloClient = blazeApp.createClient(apolloState, processedBlazeEntities);\n setupCheckAccessToken(this.apolloClient);\n }\n }\n\n render() {\n const { appLoaded } = this.state;\n\n if (!appLoaded && !isSsr) return '...loading';\n\n this.setApolloClient();\n\n return (\n <ErrorBoundary app={this.blazeApp}>\n <AppContext.Provider value={{ blazeApp: this.blazeApp }}>\n <App {...this.props} apolloClient={this.apolloClient} blazeApp={this.blazeApp} />\n </AppContext.Provider>\n </ErrorBoundary>\n );\n }\n };\n}\n\nconst withBlaze = (App, buildConfig, { forceSsr = false } = {}) => {\n const isSsr = forceSsr || typeof window === 'undefined';\n const config = buildConfig ? buildConfig(blazeConfig) : blazeConfig;\n const blazeApp = getBlazeUi({ config, logNameSpace: APP_LOG_NAMESPACE_MAIN });\n blazeApp.init();\n\n return getWrappedApp(isSsr, config, blazeApp, App);\n};\n\nexport default withBlaze;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaze-cms/nextjs-tools",
|
|
3
|
-
"version": "0.146.0-alpha.
|
|
3
|
+
"version": "0.146.0-alpha.59",
|
|
4
4
|
"description": "Blaze nextjs tools",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-es/index.js",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"lib/*",
|
|
70
70
|
"lib-es/*"
|
|
71
71
|
],
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "9ff17cf8639e619bc74b891207c6c424b96e8e02"
|
|
73
73
|
}
|
package/src/constants.js
CHANGED
|
@@ -62,6 +62,9 @@ const NOT_FOUND_STATUS_CODE = 404;
|
|
|
62
62
|
const ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';
|
|
63
63
|
const ROOT_SELECTOR_SEPARATOR = '--';
|
|
64
64
|
const RESOLVER_CONTAINER_CLASS = 'resolver-container';
|
|
65
|
+
const ERROR_URLS = {
|
|
66
|
+
custom404: '/custom-error-404'
|
|
67
|
+
};
|
|
65
68
|
|
|
66
69
|
module.exports = {
|
|
67
70
|
APPLE_TAGS,
|
|
@@ -91,5 +94,6 @@ module.exports = {
|
|
|
91
94
|
ROOT_SELECTOR_CLASS_PREFIX,
|
|
92
95
|
ROOT_SELECTOR_SEPARATOR,
|
|
93
96
|
RESOLVER_CONTAINER_CLASS,
|
|
94
|
-
BLAZE_X_FRAME_OPTIONS_DEFAULT
|
|
97
|
+
BLAZE_X_FRAME_OPTIONS_DEFAULT,
|
|
98
|
+
ERROR_URLS
|
|
95
99
|
};
|
package/src/helpers/check-url.js
CHANGED
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
DOUBLE_SLASH,
|
|
7
7
|
COLON,
|
|
8
8
|
NOT_FOUND_STATUS_CODE,
|
|
9
|
-
BLAZE_X_FRAME_OPTIONS_DEFAULT
|
|
9
|
+
BLAZE_X_FRAME_OPTIONS_DEFAULT,
|
|
10
|
+
ERROR_URLS
|
|
10
11
|
} from '../constants';
|
|
11
12
|
import { checkUrlQuery } from '../application/query';
|
|
12
13
|
import checkParent from './check-parent';
|
|
@@ -87,7 +88,8 @@ const getFullUrl = (req, asPath) => {
|
|
|
87
88
|
return `${protocol}${DOUBLE_SLASH}${hostname}${urlPort}${asPath}`;
|
|
88
89
|
};
|
|
89
90
|
|
|
90
|
-
const doUrlCheck = async
|
|
91
|
+
const doUrlCheck = async args => {
|
|
92
|
+
const { asPath, url, apolloClient, res, blazeApp, errorCheckCode = false } = args;
|
|
91
93
|
try {
|
|
92
94
|
const {
|
|
93
95
|
data: { checkUrl: { itemId, itemEntity, urlTo, pageData = {} } = {} } = {}
|
|
@@ -96,22 +98,18 @@ const doUrlCheck = async ({ asPath, url, apolloClient, res, handle404Error, blaz
|
|
|
96
98
|
variables: { url }
|
|
97
99
|
});
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
setCustomCacheControlHeaders(pageData, res);
|
|
100
102
|
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
+
if (urlTo && (urlTo !== url || errorCheckCode)) {
|
|
104
|
+
return handleRedirect({ errorCheckCode, url, urlTo, asPath, res });
|
|
103
105
|
}
|
|
106
|
+
const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());
|
|
104
107
|
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
if (
|
|
108
|
-
const queryString = asPath.split('?')[1];
|
|
109
|
-
redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return doRedirect(res, redirectUrl);
|
|
108
|
+
if (errorCheckCode) {
|
|
109
|
+
blazeApp.events.emit('monitor:log', { message: `Serving custom ${errorCheckCode} page` });
|
|
110
|
+
if (res) res.statusCode = errorCheckCode;
|
|
113
111
|
}
|
|
114
|
-
|
|
112
|
+
|
|
115
113
|
return {
|
|
116
114
|
pageData,
|
|
117
115
|
rootSelectorClasses,
|
|
@@ -119,16 +117,7 @@ const doUrlCheck = async ({ asPath, url, apolloClient, res, handle404Error, blaz
|
|
|
119
117
|
itemEntity: getUnpublishedEntityName(itemEntity)
|
|
120
118
|
};
|
|
121
119
|
} catch (err) {
|
|
122
|
-
|
|
123
|
-
return handleError(err, res, handle404Error, blazeApp);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const parentPATH = checkParent(url);
|
|
127
|
-
if (handle404Error && parentPATH) {
|
|
128
|
-
return doRedirect(res, parentPATH);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return handleError(err, res, handle404Error, blazeApp);
|
|
120
|
+
return handleUrlError(err, args);
|
|
132
121
|
}
|
|
133
122
|
};
|
|
134
123
|
|
|
@@ -148,6 +137,30 @@ const handleError = (err, res, handle404Error, blazeApp) => {
|
|
|
148
137
|
return {};
|
|
149
138
|
};
|
|
150
139
|
|
|
140
|
+
function handleRedirect({ errorCheckCode, url, urlTo, asPath, res }) {
|
|
141
|
+
if (errorCheckCode) {
|
|
142
|
+
const errorMessage = `Cannot redirect ${url}`;
|
|
143
|
+
const customError = new Error(errorMessage);
|
|
144
|
+
customError.graphQLErrors = [errorMessage];
|
|
145
|
+
throw customError;
|
|
146
|
+
}
|
|
147
|
+
let redirectUrl = urlTo;
|
|
148
|
+
if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {
|
|
149
|
+
const queryString = asPath.split('?')[1];
|
|
150
|
+
redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return doRedirect(res, redirectUrl);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function setCustomCacheControlHeaders(pageData, res) {
|
|
157
|
+
const { cacheControlMaxAge = null } = pageData || {};
|
|
158
|
+
|
|
159
|
+
if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {
|
|
160
|
+
res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
151
164
|
function doRedirect(res, redirectUrl) {
|
|
152
165
|
if (res) {
|
|
153
166
|
res.writeHead(301, { Location: redirectUrl });
|
|
@@ -159,4 +172,26 @@ function doRedirect(res, redirectUrl) {
|
|
|
159
172
|
return { redirecting: true };
|
|
160
173
|
}
|
|
161
174
|
|
|
175
|
+
function handleUrlError(err, args) {
|
|
176
|
+
const { asPath, res, handle404Error, blazeApp, errorCheckCode } = args;
|
|
177
|
+
if (!err.graphQLErrors || !err.graphQLErrors.length) {
|
|
178
|
+
return handleError(err, res, handle404Error, blazeApp);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (!errorCheckCode) {
|
|
182
|
+
return doUrlCheck({
|
|
183
|
+
...args,
|
|
184
|
+
url: ERROR_URLS.custom404,
|
|
185
|
+
errorCheckCode: NOT_FOUND_STATUS_CODE
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const parentPATH = checkParent(asPath);
|
|
190
|
+
if (handle404Error && parentPATH) {
|
|
191
|
+
return doRedirect(res, parentPATH);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return handleError(err, res, handle404Error, blazeApp);
|
|
195
|
+
}
|
|
196
|
+
|
|
162
197
|
export default checkUrl;
|
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
import '@testing-library/jest-dom/extend-expect';
|
|
6
6
|
|
|
7
7
|
import checkUrl from '../../../../src/helpers/check-url';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
ROUTE_PATTERN_SITEMAP,
|
|
10
|
+
NOT_FOUND_STATUS_CODE,
|
|
11
|
+
ERROR_URLS
|
|
12
|
+
} from '../../../../src/constants';
|
|
9
13
|
import { checkUrlQuery } from '../../../../src/application/query';
|
|
10
14
|
|
|
11
15
|
import handleStaticRoutes from '../../../../src/helpers/handle-static-routes';
|
|
@@ -82,6 +86,11 @@ describe('Check url', () => {
|
|
|
82
86
|
|
|
83
87
|
const queryString = '?query=string';
|
|
84
88
|
const asPathWithQuery = `${asPath}${queryString}`;
|
|
89
|
+
const notFoundQueryMock = async () => {
|
|
90
|
+
const error = new Error('Not found');
|
|
91
|
+
error.graphQLErrors = ['error'];
|
|
92
|
+
throw error;
|
|
93
|
+
};
|
|
85
94
|
|
|
86
95
|
beforeAll(() => {
|
|
87
96
|
setEnvs(envs);
|
|
@@ -228,11 +237,9 @@ describe('Check url', () => {
|
|
|
228
237
|
});
|
|
229
238
|
|
|
230
239
|
it('should handle redirect to parent on not found', async () => {
|
|
231
|
-
apolloClient.query
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
throw error;
|
|
235
|
-
});
|
|
240
|
+
apolloClient.query
|
|
241
|
+
.mockImplementationOnce(notFoundQueryMock)
|
|
242
|
+
.mockImplementationOnce(notFoundQueryMock);
|
|
236
243
|
const parentChildAsPath = '/parent/child';
|
|
237
244
|
const result = await checkUrl({ ...props, asPath: parentChildAsPath });
|
|
238
245
|
expect(res.writeHead).toHaveBeenCalledWith(301, { Location: '/parent' });
|
|
@@ -241,12 +248,14 @@ describe('Check url', () => {
|
|
|
241
248
|
apolloQueryCheck(apolloClient, parentChildAsPath);
|
|
242
249
|
});
|
|
243
250
|
|
|
244
|
-
it('should handle redirect to parent on not found', async () => {
|
|
245
|
-
apolloClient.query
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
251
|
+
it('should handle redirect to parent on not found where custom 404 is redirect is returned', async () => {
|
|
252
|
+
apolloClient.query
|
|
253
|
+
.mockImplementationOnce(notFoundQueryMock)
|
|
254
|
+
.mockImplementationOnce(async () => ({
|
|
255
|
+
data: {
|
|
256
|
+
checkUrl: { urlTo: ERROR_URLS.custom404 }
|
|
257
|
+
}
|
|
258
|
+
}));
|
|
250
259
|
const result = await checkUrl({ ...props });
|
|
251
260
|
expect(result).toHaveProperty('errorCode', NOT_FOUND_STATUS_CODE);
|
|
252
261
|
expect(res.statusCode).toEqual(NOT_FOUND_STATUS_CODE);
|
|
@@ -257,6 +266,22 @@ describe('Check url', () => {
|
|
|
257
266
|
apolloQueryCheck(apolloClient, asPath);
|
|
258
267
|
});
|
|
259
268
|
|
|
269
|
+
it('should fetch custom-error-404 page when original URL is not found', async () => {
|
|
270
|
+
apolloClient.query.mockImplementationOnce(notFoundQueryMock);
|
|
271
|
+
const notFoundPageUrl = '/non-existent-page';
|
|
272
|
+
const result = await checkUrl({ ...props, asPath: notFoundPageUrl });
|
|
273
|
+
|
|
274
|
+
expect(result).toMatchObject({
|
|
275
|
+
itemEntity: 'page',
|
|
276
|
+
itemId: 'RECORD_ID',
|
|
277
|
+
rootSelectorClasses: rootClassesMockValue,
|
|
278
|
+
pageData: { pageData: true },
|
|
279
|
+
fullUrl: `https://localhost${notFoundPageUrl}`
|
|
280
|
+
});
|
|
281
|
+
expect(result.fullUrl.endsWith('/non-existent-page')).toBe(true);
|
|
282
|
+
expect(blazeApp.events.emit).toHaveBeenCalled();
|
|
283
|
+
});
|
|
284
|
+
|
|
260
285
|
it('should handle network error', async () => {
|
|
261
286
|
apolloClient.query.mockImplementationOnce(async () => {
|
|
262
287
|
const err = new Error('Network error');
|