@blaze-cms/nextjs-tools 0.146.0-alpha.56 → 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 CHANGED
@@ -3,6 +3,25 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.146.0-alpha.59](https://github.com/thebyte9/blaze/compare/v0.146.0-alpha.58...v0.146.0-alpha.59) (2025-07-29)
7
+
8
+
9
+ ### Features
10
+
11
+ * add support for custom 404 page using custom error 404 slug and fallback rendering ([#4839](https://github.com/thebyte9/blaze/issues/4839)) ([67554a3](https://github.com/thebyte9/blaze/commit/67554a3febc2871d73bd127753edf3b918a1a0b7))
12
+
13
+
14
+
15
+
16
+
17
+ # [0.146.0-alpha.57](https://github.com/thebyte9/blaze/compare/v0.146.0-alpha.56...v0.146.0-alpha.57) (2025-07-14)
18
+
19
+ **Note:** Version bump only for package @blaze-cms/nextjs-tools
20
+
21
+
22
+
23
+
24
+
6
25
  # [0.146.0-alpha.56](https://github.com/thebyte9/blaze/compare/v0.146.0-alpha.55...v0.146.0-alpha.56) (2025-07-09)
7
26
 
8
27
 
package/README.md CHANGED
@@ -81,6 +81,12 @@ If you want to make it stricter or more open you can override the default with t
81
81
 
82
82
  **Note** If you make it more open this could increase load on the frontend/api services as more paths will be checked with the api so if bot is targetting the server the load on both services will be higher.
83
83
 
84
+ ## Custom error not found (404) page
85
+
86
+ By default if a url is not found by the API the frontend app will show a simple error message saying "Page not found".
87
+
88
+ If is possible to create a custom error page by adding a page with the slug "custom-error-404". The frontend will check the api for this url and render the page if it is set. The requested url will still be shown in the browser and appropriate 404 HTTP header.
89
+
84
90
  ## Environment variables
85
91
 
86
92
  | Name | Description | Type | Default |
package/lib/constants.js CHANGED
@@ -64,6 +64,9 @@ var NOT_FOUND_STATUS_CODE = 404;
64
64
  var ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';
65
65
  var ROOT_SELECTOR_SEPARATOR = '--';
66
66
  var RESOLVER_CONTAINER_CLASS = 'resolver-container';
67
+ var ERROR_URLS = {
68
+ custom404: '/custom-error-404'
69
+ };
67
70
  module.exports = {
68
71
  APPLE_TAGS: APPLE_TAGS,
69
72
  ACTIVE_META_TAGS: ACTIVE_META_TAGS,
@@ -92,6 +95,7 @@ module.exports = {
92
95
  ROOT_SELECTOR_CLASS_PREFIX: ROOT_SELECTOR_CLASS_PREFIX,
93
96
  ROOT_SELECTOR_SEPARATOR: ROOT_SELECTOR_SEPARATOR,
94
97
  RESOLVER_CONTAINER_CLASS: RESOLVER_CONTAINER_CLASS,
95
- BLAZE_X_FRAME_OPTIONS_DEFAULT: BLAZE_X_FRAME_OPTIONS_DEFAULT
98
+ BLAZE_X_FRAME_OPTIONS_DEFAULT: BLAZE_X_FRAME_OPTIONS_DEFAULT,
99
+ ERROR_URLS: ERROR_URLS
96
100
  };
97
101
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["ACTIVE_META_TAGS","BLAZE_X_FRAME_OPTIONS_DEFAULT","META_TAGS_LOOKUP","description","apiKey","htmlTagName","tagKeyName","contentDataKeyName","canonical","PB_TYPE_IMAGE","PB_TYPE_TEXTBLOCK","PB_TYPE_CAROUSEL","SEARCH_FILTER","COLON","DOUBLE_SLASH","HTTPS","DEFAULT_ROUTE_REGEX","ROUTE_REGEX","process","env","BLAZE_ROUTE_REGEX","RegExp","PREVIEW_REGEX","PREVIEW_MODE","GTM_STRING","DEBUG_LOGO","SRC","ALT","PUBLISHED_","RESPONSE_404","SITEMAP_STORE_KEY","ROUTE_PATTERN_SITEMAP","BLAZE_ROUTE_PATTERN_SITEMAP","sitemapFilePrefix","BLAZE_CONTENT_SITEMAP_URL_PREFIX","ROUTE_PATTERN_SITEMAP_FILE_REGEX","concat","ROUTE_PATTERN_ROBOTS_TXT","BLAZE_STATIC_ROUTE_STORE_KEY","STATIC_FILE_FORWARD_HEADERS","APPLE_TAGS","href","rel","sizes","NOT_FOUND_STATUS_CODE","ROOT_SELECTOR_CLASS_PREFIX","ROOT_SELECTOR_SEPARATOR","RESOLVER_CONTAINER_CLASS","module","exports"],"sources":["../src/constants.js"],"sourcesContent":["const ACTIVE_META_TAGS = ['description', 'canonical'];\nconst BLAZE_X_FRAME_OPTIONS_DEFAULT = 'SAMEORIGIN';\n\nconst META_TAGS_LOOKUP = {\n description: {\n apiKey: 'metaDescription',\n htmlTagName: 'meta',\n tagKeyName: 'name',\n contentDataKeyName: 'content'\n },\n canonical: {\n apiKey: 'canonicalUrl',\n htmlTagName: 'link',\n tagKeyName: 'rel',\n contentDataKeyName: 'href'\n }\n};\n\nconst PB_TYPE_IMAGE = 'image';\nconst PB_TYPE_TEXTBLOCK = 'textblock';\nconst PB_TYPE_CAROUSEL = 'carousel';\nconst SEARCH_FILTER = 'searchfilter';\nconst COLON = ':';\nconst DOUBLE_SLASH = '//';\nconst HTTPS = 'https://';\n\nconst DEFAULT_ROUTE_REGEX = /^\\/[a-z0-9€_\\/]+(?:[-\\/\\.]{1,2}[a-z0-9\\/€_\\/]+)*$|^\\/$/i;\nconst ROUTE_REGEX = process.env.BLAZE_ROUTE_REGEX\n ? new RegExp(process.env.BLAZE_ROUTE_REGEX)\n : DEFAULT_ROUTE_REGEX;\nconst PREVIEW_REGEX = /^(\\/_preview)/;\nconst PREVIEW_MODE = 'Preview Mode';\nconst GTM_STRING = 'gtm';\n\nconst DEBUG_LOGO = {\n SRC: 'https://images.thisisblaze.com/logo-small-27-40.png',\n ALT: 'blaze-logo'\n};\n\nconst PUBLISHED_ = 'published_';\n\nconst RESPONSE_404 = '404 Not Found\\n';\n\nconst SITEMAP_STORE_KEY = 'default_sitemap';\nconst ROUTE_PATTERN_SITEMAP = process.env.BLAZE_ROUTE_PATTERN_SITEMAP || '/sitemap.xml';\nconst sitemapFilePrefix = process.env.BLAZE_CONTENT_SITEMAP_URL_PREFIX || 'sitemap';\nconst ROUTE_PATTERN_SITEMAP_FILE_REGEX = new RegExp(`/${sitemapFilePrefix}/.*\\.xml`);\nconst ROUTE_PATTERN_ROBOTS_TXT = '/robots.txt';\nconst BLAZE_STATIC_ROUTE_STORE_KEY = 'default';\n\nconst STATIC_FILE_FORWARD_HEADERS = ['content-length', 'last-modified', 'etag'];\n\nconst APPLE_TAGS = [\n { href: '/static/icons/touch-icon-iphone.png', rel: 'apple-touch-icon' },\n { href: '/static/icons/touch-icon-ipad.png', rel: 'apple-touch-icon', sizes: '152x152' },\n { href: '/static/icons/touch-icon-iphone-retina.png', rel: 'apple-touch-icon', sizes: '180x180' },\n { href: '/static/icons/touch-icon-ipad-retina.png', rel: 'apple-touch-icon', sizes: '167x167' }\n];\n\nconst NOT_FOUND_STATUS_CODE = 404;\n\nconst ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';\nconst ROOT_SELECTOR_SEPARATOR = '--';\nconst RESOLVER_CONTAINER_CLASS = 'resolver-container';\n\nmodule.exports = {\n APPLE_TAGS,\n ACTIVE_META_TAGS,\n COLON,\n DOUBLE_SLASH,\n GTM_STRING,\n HTTPS,\n META_TAGS_LOOKUP,\n SEARCH_FILTER,\n PB_TYPE_IMAGE,\n PB_TYPE_TEXTBLOCK,\n PB_TYPE_CAROUSEL,\n PREVIEW_MODE,\n ROUTE_REGEX,\n PREVIEW_REGEX,\n DEBUG_LOGO,\n PUBLISHED_,\n RESPONSE_404,\n NOT_FOUND_STATUS_CODE,\n SITEMAP_STORE_KEY,\n ROUTE_PATTERN_SITEMAP,\n ROUTE_PATTERN_SITEMAP_FILE_REGEX,\n ROUTE_PATTERN_ROBOTS_TXT,\n BLAZE_STATIC_ROUTE_STORE_KEY,\n STATIC_FILE_FORWARD_HEADERS,\n ROOT_SELECTOR_CLASS_PREFIX,\n ROOT_SELECTOR_SEPARATOR,\n RESOLVER_CONTAINER_CLASS,\n BLAZE_X_FRAME_OPTIONS_DEFAULT\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["ACTIVE_META_TAGS","BLAZE_X_FRAME_OPTIONS_DEFAULT","META_TAGS_LOOKUP","description","apiKey","htmlTagName","tagKeyName","contentDataKeyName","canonical","PB_TYPE_IMAGE","PB_TYPE_TEXTBLOCK","PB_TYPE_CAROUSEL","SEARCH_FILTER","COLON","DOUBLE_SLASH","HTTPS","DEFAULT_ROUTE_REGEX","ROUTE_REGEX","process","env","BLAZE_ROUTE_REGEX","RegExp","PREVIEW_REGEX","PREVIEW_MODE","GTM_STRING","DEBUG_LOGO","SRC","ALT","PUBLISHED_","RESPONSE_404","SITEMAP_STORE_KEY","ROUTE_PATTERN_SITEMAP","BLAZE_ROUTE_PATTERN_SITEMAP","sitemapFilePrefix","BLAZE_CONTENT_SITEMAP_URL_PREFIX","ROUTE_PATTERN_SITEMAP_FILE_REGEX","concat","ROUTE_PATTERN_ROBOTS_TXT","BLAZE_STATIC_ROUTE_STORE_KEY","STATIC_FILE_FORWARD_HEADERS","APPLE_TAGS","href","rel","sizes","NOT_FOUND_STATUS_CODE","ROOT_SELECTOR_CLASS_PREFIX","ROOT_SELECTOR_SEPARATOR","RESOLVER_CONTAINER_CLASS","ERROR_URLS","custom404","module","exports"],"sources":["../src/constants.js"],"sourcesContent":["const ACTIVE_META_TAGS = ['description', 'canonical'];\nconst BLAZE_X_FRAME_OPTIONS_DEFAULT = 'SAMEORIGIN';\n\nconst META_TAGS_LOOKUP = {\n description: {\n apiKey: 'metaDescription',\n htmlTagName: 'meta',\n tagKeyName: 'name',\n contentDataKeyName: 'content'\n },\n canonical: {\n apiKey: 'canonicalUrl',\n htmlTagName: 'link',\n tagKeyName: 'rel',\n contentDataKeyName: 'href'\n }\n};\n\nconst PB_TYPE_IMAGE = 'image';\nconst PB_TYPE_TEXTBLOCK = 'textblock';\nconst PB_TYPE_CAROUSEL = 'carousel';\nconst SEARCH_FILTER = 'searchfilter';\nconst COLON = ':';\nconst DOUBLE_SLASH = '//';\nconst HTTPS = 'https://';\n\nconst DEFAULT_ROUTE_REGEX = /^\\/[a-z0-9€_\\/]+(?:[-\\/\\.]{1,2}[a-z0-9\\/€_\\/]+)*$|^\\/$/i;\nconst ROUTE_REGEX = process.env.BLAZE_ROUTE_REGEX\n ? new RegExp(process.env.BLAZE_ROUTE_REGEX)\n : DEFAULT_ROUTE_REGEX;\nconst PREVIEW_REGEX = /^(\\/_preview)/;\nconst PREVIEW_MODE = 'Preview Mode';\nconst GTM_STRING = 'gtm';\n\nconst DEBUG_LOGO = {\n SRC: 'https://images.thisisblaze.com/logo-small-27-40.png',\n ALT: 'blaze-logo'\n};\n\nconst PUBLISHED_ = 'published_';\n\nconst RESPONSE_404 = '404 Not Found\\n';\n\nconst SITEMAP_STORE_KEY = 'default_sitemap';\nconst ROUTE_PATTERN_SITEMAP = process.env.BLAZE_ROUTE_PATTERN_SITEMAP || '/sitemap.xml';\nconst sitemapFilePrefix = process.env.BLAZE_CONTENT_SITEMAP_URL_PREFIX || 'sitemap';\nconst ROUTE_PATTERN_SITEMAP_FILE_REGEX = new RegExp(`/${sitemapFilePrefix}/.*\\.xml`);\nconst ROUTE_PATTERN_ROBOTS_TXT = '/robots.txt';\nconst BLAZE_STATIC_ROUTE_STORE_KEY = 'default';\n\nconst STATIC_FILE_FORWARD_HEADERS = ['content-length', 'last-modified', 'etag'];\n\nconst APPLE_TAGS = [\n { href: '/static/icons/touch-icon-iphone.png', rel: 'apple-touch-icon' },\n { href: '/static/icons/touch-icon-ipad.png', rel: 'apple-touch-icon', sizes: '152x152' },\n { href: '/static/icons/touch-icon-iphone-retina.png', rel: 'apple-touch-icon', sizes: '180x180' },\n { href: '/static/icons/touch-icon-ipad-retina.png', rel: 'apple-touch-icon', sizes: '167x167' }\n];\n\nconst NOT_FOUND_STATUS_CODE = 404;\n\nconst ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';\nconst ROOT_SELECTOR_SEPARATOR = '--';\nconst RESOLVER_CONTAINER_CLASS = 'resolver-container';\nconst ERROR_URLS = {\n custom404: '/custom-error-404'\n};\n\nmodule.exports = {\n APPLE_TAGS,\n ACTIVE_META_TAGS,\n COLON,\n DOUBLE_SLASH,\n GTM_STRING,\n HTTPS,\n META_TAGS_LOOKUP,\n SEARCH_FILTER,\n PB_TYPE_IMAGE,\n PB_TYPE_TEXTBLOCK,\n PB_TYPE_CAROUSEL,\n PREVIEW_MODE,\n ROUTE_REGEX,\n PREVIEW_REGEX,\n DEBUG_LOGO,\n PUBLISHED_,\n RESPONSE_404,\n NOT_FOUND_STATUS_CODE,\n SITEMAP_STORE_KEY,\n ROUTE_PATTERN_SITEMAP,\n ROUTE_PATTERN_SITEMAP_FILE_REGEX,\n ROUTE_PATTERN_ROBOTS_TXT,\n BLAZE_STATIC_ROUTE_STORE_KEY,\n STATIC_FILE_FORWARD_HEADERS,\n ROOT_SELECTOR_CLASS_PREFIX,\n ROOT_SELECTOR_SEPARATOR,\n RESOLVER_CONTAINER_CLASS,\n BLAZE_X_FRAME_OPTIONS_DEFAULT,\n ERROR_URLS\n};\n"],"mappings":"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","ignoreList":[]}
@@ -160,12 +160,12 @@ var getFullUrl = function getFullUrl(req, asPath) {
160
160
  return "".concat(protocol).concat(_constants.DOUBLE_SLASH).concat(hostname).concat(urlPort).concat(asPath);
161
161
  };
162
162
  var doUrlCheck = /*#__PURE__*/function () {
163
- var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref4) {
164
- var asPath, url, apolloClient, res, handle404Error, blazeApp, _yield$apolloClient$q, _yield$apolloClient$q2, _yield$apolloClient$q3, _yield$apolloClient$q4, _yield$apolloClient$q5, itemId, itemEntity, urlTo, _yield$apolloClient$q6, pageData, _ref6, _ref6$cacheControlMax, cacheControlMaxAge, redirectUrl, queryString, rootSelectorClasses, parentPATH;
163
+ var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(args) {
164
+ var asPath, url, apolloClient, res, blazeApp, _args$errorCheckCode, errorCheckCode, _yield$apolloClient$q, _yield$apolloClient$q2, _yield$apolloClient$q3, _yield$apolloClient$q4, _yield$apolloClient$q5, itemId, itemEntity, urlTo, _yield$apolloClient$q6, pageData, rootSelectorClasses;
165
165
  return _regenerator["default"].wrap(function _callee3$(_context3) {
166
166
  while (1) switch (_context3.prev = _context3.next) {
167
167
  case 0:
168
- asPath = _ref4.asPath, url = _ref4.url, apolloClient = _ref4.apolloClient, res = _ref4.res, handle404Error = _ref4.handle404Error, blazeApp = _ref4.blazeApp;
168
+ asPath = args.asPath, url = args.url, apolloClient = args.apolloClient, res = args.res, blazeApp = args.blazeApp, _args$errorCheckCode = args.errorCheckCode, errorCheckCode = _args$errorCheckCode === void 0 ? false : _args$errorCheckCode;
169
169
  _context3.prev = 1;
170
170
  _context3.next = 4;
171
171
  return apolloClient.query({
@@ -185,53 +185,44 @@ var doUrlCheck = /*#__PURE__*/function () {
185
185
  urlTo = _yield$apolloClient$q5.urlTo;
186
186
  _yield$apolloClient$q6 = _yield$apolloClient$q5.pageData;
187
187
  pageData = _yield$apolloClient$q6 === void 0 ? {} : _yield$apolloClient$q6;
188
- _ref6 = pageData || {}, _ref6$cacheControlMax = _ref6.cacheControlMaxAge, cacheControlMaxAge = _ref6$cacheControlMax === void 0 ? null : _ref6$cacheControlMax;
189
- if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {
190
- res.setHeader('Cache-Control', "max-age=".concat(cacheControlMaxAge));
191
- }
192
- if (!(urlTo && urlTo !== url)) {
193
- _context3.next = 20;
188
+ setCustomCacheControlHeaders(pageData, res);
189
+ if (!(urlTo && (urlTo !== url || errorCheckCode))) {
190
+ _context3.next = 17;
194
191
  break;
195
192
  }
196
- redirectUrl = urlTo;
197
- if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {
198
- queryString = asPath.split('?')[1];
199
- redirectUrl = queryString ? "".concat(urlTo, "?").concat(queryString) : urlTo;
200
- }
201
- return _context3.abrupt("return", doRedirect(res, redirectUrl));
202
- case 20:
193
+ return _context3.abrupt("return", handleRedirect({
194
+ errorCheckCode: errorCheckCode,
195
+ url: url,
196
+ urlTo: urlTo,
197
+ asPath: asPath,
198
+ res: res
199
+ }));
200
+ case 17:
203
201
  rootSelectorClasses = (0, _getRootSelectorClasses["default"])(url, getRootClassesLimit());
202
+ if (errorCheckCode) {
203
+ blazeApp.events.emit('monitor:log', {
204
+ message: "Serving custom ".concat(errorCheckCode, " page")
205
+ });
206
+ if (res) res.statusCode = errorCheckCode;
207
+ }
204
208
  return _context3.abrupt("return", {
205
209
  pageData: pageData,
206
210
  rootSelectorClasses: rootSelectorClasses,
207
211
  itemId: itemId,
208
212
  itemEntity: (0, _reactPageBuilder.getUnpublishedEntityName)(itemEntity)
209
213
  });
210
- case 24:
211
- _context3.prev = 24;
214
+ case 22:
215
+ _context3.prev = 22;
212
216
  _context3.t0 = _context3["catch"](1);
213
- if (!(!_context3.t0.graphQLErrors || !_context3.t0.graphQLErrors.length)) {
214
- _context3.next = 28;
215
- break;
216
- }
217
- return _context3.abrupt("return", handleError(_context3.t0, res, handle404Error, blazeApp));
218
- case 28:
219
- parentPATH = (0, _checkParent["default"])(url);
220
- if (!(handle404Error && parentPATH)) {
221
- _context3.next = 31;
222
- break;
223
- }
224
- return _context3.abrupt("return", doRedirect(res, parentPATH));
225
- case 31:
226
- return _context3.abrupt("return", handleError(_context3.t0, res, handle404Error, blazeApp));
227
- case 32:
217
+ return _context3.abrupt("return", handleUrlError(_context3.t0, args));
218
+ case 25:
228
219
  case "end":
229
220
  return _context3.stop();
230
221
  }
231
- }, _callee3, null, [[1, 24]]);
222
+ }, _callee3, null, [[1, 22]]);
232
223
  }));
233
224
  return function doUrlCheck(_x4) {
234
- return _ref5.apply(this, arguments);
225
+ return _ref4.apply(this, arguments);
235
226
  };
236
227
  }();
237
228
  var handleError = function handleError(err, res, handle404Error, blazeApp) {
@@ -253,6 +244,33 @@ var handleError = function handleError(err, res, handle404Error, blazeApp) {
253
244
  }
254
245
  return {};
255
246
  };
247
+ function handleRedirect(_ref5) {
248
+ var errorCheckCode = _ref5.errorCheckCode,
249
+ url = _ref5.url,
250
+ urlTo = _ref5.urlTo,
251
+ asPath = _ref5.asPath,
252
+ res = _ref5.res;
253
+ if (errorCheckCode) {
254
+ var errorMessage = "Cannot redirect ".concat(url);
255
+ var customError = new Error(errorMessage);
256
+ customError.graphQLErrors = [errorMessage];
257
+ throw customError;
258
+ }
259
+ var redirectUrl = urlTo;
260
+ if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {
261
+ var queryString = asPath.split('?')[1];
262
+ redirectUrl = queryString ? "".concat(urlTo, "?").concat(queryString) : urlTo;
263
+ }
264
+ return doRedirect(res, redirectUrl);
265
+ }
266
+ function setCustomCacheControlHeaders(pageData, res) {
267
+ var _ref6 = pageData || {},
268
+ _ref6$cacheControlMax = _ref6.cacheControlMaxAge,
269
+ cacheControlMaxAge = _ref6$cacheControlMax === void 0 ? null : _ref6$cacheControlMax;
270
+ if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {
271
+ res.setHeader('Cache-Control', "max-age=".concat(cacheControlMaxAge));
272
+ }
273
+ }
256
274
  function doRedirect(res, redirectUrl) {
257
275
  if (res) {
258
276
  res.writeHead(301, {
@@ -266,5 +284,26 @@ function doRedirect(res, redirectUrl) {
266
284
  redirecting: true
267
285
  };
268
286
  }
287
+ function handleUrlError(err, args) {
288
+ var asPath = args.asPath,
289
+ res = args.res,
290
+ handle404Error = args.handle404Error,
291
+ blazeApp = args.blazeApp,
292
+ errorCheckCode = args.errorCheckCode;
293
+ if (!err.graphQLErrors || !err.graphQLErrors.length) {
294
+ return handleError(err, res, handle404Error, blazeApp);
295
+ }
296
+ if (!errorCheckCode) {
297
+ return doUrlCheck(_objectSpread(_objectSpread({}, args), {}, {
298
+ url: _constants.ERROR_URLS.custom404,
299
+ errorCheckCode: _constants.NOT_FOUND_STATUS_CODE
300
+ }));
301
+ }
302
+ var parentPATH = (0, _checkParent["default"])(asPath);
303
+ if (handle404Error && parentPATH) {
304
+ return doRedirect(res, parentPATH);
305
+ }
306
+ return handleError(err, res, handle404Error, blazeApp);
307
+ }
269
308
  var _default = exports["default"] = checkUrl;
270
309
  //# sourceMappingURL=check-url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-url.js","names":["_queryString","require","_reactPageBuilder","_coreAuthUi","_constants","_query","_checkParent","_interopRequireDefault","_checkPreviewUrl","_handleStaticRoutes","_getPageData","_getRootSelectorClasses","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","getRootClassesLimit","Number","process","env","BLAZE_ROOT_SELECTOR_CLASSES_LIMIT","checkUrl","_ref","_asyncToGenerator2","_regenerator","mark","_callee","props","asPath","apolloClient","res","req","query","blazeApp","disableSsr","fullUrl","_parseUrl","url","handler","previewData","urlCheckOptions","result","wrap","_callee$","_context","prev","next","getFullUrl","parseUrl","BLAZE_STATUS_URL","abrupt","isStatusPage","handleStaticRoutes","getHandler","setHeader","BLAZE_X_FRAME_OPTIONS","BLAZE_X_FRAME_OPTIONS_DEFAULT","getHeader","BLAZE_CACHE_CONTROL_HEADER","checkPreviewUrl","checkAccessToken","cache","extract","getPreviewData","doUrlCheck","handle404Error","sent","stop","_x","_ref2","_callee2","_result$pageData","_result$pageData2","rootSelectorClasses","_callee2$","_context2","getPageData","pageData","getRootSelectorClasses","isPreview","_x2","_x3","getHost","_ref3","_ref3$headers","headers","BLAZE_FRONTEND_HOST","host","concat","HTTPS","_window","window","_window$location","location","protocol","hostname","port","urlPort","COLON","DOUBLE_SLASH","_ref5","_callee3","_ref4","_yield$apolloClient$q","_yield$apolloClient$q2","_yield$apolloClient$q3","_yield$apolloClient$q4","_yield$apolloClient$q5","itemId","itemEntity","urlTo","_yield$apolloClient$q6","_ref6","_ref6$cacheControlMax","cacheControlMaxAge","redirectUrl","queryString","parentPATH","_callee3$","_context3","checkUrlQuery","variables","data","BLAZE_DISABLE_REDIRECT_WITH_QUERY","split","doRedirect","getUnpublishedEntityName","t0","graphQLErrors","handleError","checkParent","_x4","err","events","emit","error","networkError","writeHead","write","end","statusCode","NOT_FOUND_STATUS_CODE","errorCode","Location","href","redirecting","_default","exports"],"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":["_queryString","require","_reactPageBuilder","_coreAuthUi","_constants","_query","_checkParent","_interopRequireDefault","_checkPreviewUrl","_handleStaticRoutes","_getPageData","_getRootSelectorClasses","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","getRootClassesLimit","Number","process","env","BLAZE_ROOT_SELECTOR_CLASSES_LIMIT","checkUrl","_ref","_asyncToGenerator2","_regenerator","mark","_callee","props","asPath","apolloClient","res","req","query","blazeApp","disableSsr","fullUrl","_parseUrl","url","handler","previewData","urlCheckOptions","result","wrap","_callee$","_context","prev","next","getFullUrl","parseUrl","BLAZE_STATUS_URL","abrupt","isStatusPage","handleStaticRoutes","getHandler","setHeader","BLAZE_X_FRAME_OPTIONS","BLAZE_X_FRAME_OPTIONS_DEFAULT","getHeader","BLAZE_CACHE_CONTROL_HEADER","checkPreviewUrl","checkAccessToken","cache","extract","getPreviewData","doUrlCheck","handle404Error","sent","stop","_x","_ref2","_callee2","_result$pageData","_result$pageData2","rootSelectorClasses","_callee2$","_context2","getPageData","pageData","getRootSelectorClasses","isPreview","_x2","_x3","getHost","_ref3","_ref3$headers","headers","BLAZE_FRONTEND_HOST","host","concat","HTTPS","_window","window","_window$location","location","protocol","hostname","port","urlPort","COLON","DOUBLE_SLASH","_ref4","_callee3","args","_args$errorCheckCode","errorCheckCode","_yield$apolloClient$q","_yield$apolloClient$q2","_yield$apolloClient$q3","_yield$apolloClient$q4","_yield$apolloClient$q5","itemId","itemEntity","urlTo","_yield$apolloClient$q6","_callee3$","_context3","checkUrlQuery","variables","data","setCustomCacheControlHeaders","handleRedirect","events","emit","message","statusCode","getUnpublishedEntityName","t0","handleUrlError","_x4","handleError","err","error","networkError","writeHead","write","end","graphQLErrors","NOT_FOUND_STATUS_CODE","errorCode","_ref5","errorMessage","customError","Error","redirectUrl","BLAZE_DISABLE_REDIRECT_WITH_QUERY","queryString","split","doRedirect","_ref6","_ref6$cacheControlMax","cacheControlMaxAge","Location","href","redirecting","ERROR_URLS","custom404","parentPATH","checkParent","_default","exports"],"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":[]}
@@ -59,6 +59,9 @@ const NOT_FOUND_STATUS_CODE = 404;
59
59
  const ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';
60
60
  const ROOT_SELECTOR_SEPARATOR = '--';
61
61
  const RESOLVER_CONTAINER_CLASS = 'resolver-container';
62
+ const ERROR_URLS = {
63
+ custom404: '/custom-error-404'
64
+ };
62
65
  module.exports = {
63
66
  APPLE_TAGS,
64
67
  ACTIVE_META_TAGS,
@@ -87,6 +90,7 @@ module.exports = {
87
90
  ROOT_SELECTOR_CLASS_PREFIX,
88
91
  ROOT_SELECTOR_SEPARATOR,
89
92
  RESOLVER_CONTAINER_CLASS,
90
- BLAZE_X_FRAME_OPTIONS_DEFAULT
93
+ BLAZE_X_FRAME_OPTIONS_DEFAULT,
94
+ ERROR_URLS
91
95
  };
92
96
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["ACTIVE_META_TAGS","BLAZE_X_FRAME_OPTIONS_DEFAULT","META_TAGS_LOOKUP","description","apiKey","htmlTagName","tagKeyName","contentDataKeyName","canonical","PB_TYPE_IMAGE","PB_TYPE_TEXTBLOCK","PB_TYPE_CAROUSEL","SEARCH_FILTER","COLON","DOUBLE_SLASH","HTTPS","DEFAULT_ROUTE_REGEX","ROUTE_REGEX","process","env","BLAZE_ROUTE_REGEX","RegExp","PREVIEW_REGEX","PREVIEW_MODE","GTM_STRING","DEBUG_LOGO","SRC","ALT","PUBLISHED_","RESPONSE_404","SITEMAP_STORE_KEY","ROUTE_PATTERN_SITEMAP","BLAZE_ROUTE_PATTERN_SITEMAP","sitemapFilePrefix","BLAZE_CONTENT_SITEMAP_URL_PREFIX","ROUTE_PATTERN_SITEMAP_FILE_REGEX","ROUTE_PATTERN_ROBOTS_TXT","BLAZE_STATIC_ROUTE_STORE_KEY","STATIC_FILE_FORWARD_HEADERS","APPLE_TAGS","href","rel","sizes","NOT_FOUND_STATUS_CODE","ROOT_SELECTOR_CLASS_PREFIX","ROOT_SELECTOR_SEPARATOR","RESOLVER_CONTAINER_CLASS","module","exports"],"sources":["../src/constants.js"],"sourcesContent":["const ACTIVE_META_TAGS = ['description', 'canonical'];\nconst BLAZE_X_FRAME_OPTIONS_DEFAULT = 'SAMEORIGIN';\n\nconst META_TAGS_LOOKUP = {\n description: {\n apiKey: 'metaDescription',\n htmlTagName: 'meta',\n tagKeyName: 'name',\n contentDataKeyName: 'content'\n },\n canonical: {\n apiKey: 'canonicalUrl',\n htmlTagName: 'link',\n tagKeyName: 'rel',\n contentDataKeyName: 'href'\n }\n};\n\nconst PB_TYPE_IMAGE = 'image';\nconst PB_TYPE_TEXTBLOCK = 'textblock';\nconst PB_TYPE_CAROUSEL = 'carousel';\nconst SEARCH_FILTER = 'searchfilter';\nconst COLON = ':';\nconst DOUBLE_SLASH = '//';\nconst HTTPS = 'https://';\n\nconst DEFAULT_ROUTE_REGEX = /^\\/[a-z0-9€_\\/]+(?:[-\\/\\.]{1,2}[a-z0-9\\/€_\\/]+)*$|^\\/$/i;\nconst ROUTE_REGEX = process.env.BLAZE_ROUTE_REGEX\n ? new RegExp(process.env.BLAZE_ROUTE_REGEX)\n : DEFAULT_ROUTE_REGEX;\nconst PREVIEW_REGEX = /^(\\/_preview)/;\nconst PREVIEW_MODE = 'Preview Mode';\nconst GTM_STRING = 'gtm';\n\nconst DEBUG_LOGO = {\n SRC: 'https://images.thisisblaze.com/logo-small-27-40.png',\n ALT: 'blaze-logo'\n};\n\nconst PUBLISHED_ = 'published_';\n\nconst RESPONSE_404 = '404 Not Found\\n';\n\nconst SITEMAP_STORE_KEY = 'default_sitemap';\nconst ROUTE_PATTERN_SITEMAP = process.env.BLAZE_ROUTE_PATTERN_SITEMAP || '/sitemap.xml';\nconst sitemapFilePrefix = process.env.BLAZE_CONTENT_SITEMAP_URL_PREFIX || 'sitemap';\nconst ROUTE_PATTERN_SITEMAP_FILE_REGEX = new RegExp(`/${sitemapFilePrefix}/.*\\.xml`);\nconst ROUTE_PATTERN_ROBOTS_TXT = '/robots.txt';\nconst BLAZE_STATIC_ROUTE_STORE_KEY = 'default';\n\nconst STATIC_FILE_FORWARD_HEADERS = ['content-length', 'last-modified', 'etag'];\n\nconst APPLE_TAGS = [\n { href: '/static/icons/touch-icon-iphone.png', rel: 'apple-touch-icon' },\n { href: '/static/icons/touch-icon-ipad.png', rel: 'apple-touch-icon', sizes: '152x152' },\n { href: '/static/icons/touch-icon-iphone-retina.png', rel: 'apple-touch-icon', sizes: '180x180' },\n { href: '/static/icons/touch-icon-ipad-retina.png', rel: 'apple-touch-icon', sizes: '167x167' }\n];\n\nconst NOT_FOUND_STATUS_CODE = 404;\n\nconst ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';\nconst ROOT_SELECTOR_SEPARATOR = '--';\nconst RESOLVER_CONTAINER_CLASS = 'resolver-container';\n\nmodule.exports = {\n APPLE_TAGS,\n ACTIVE_META_TAGS,\n COLON,\n DOUBLE_SLASH,\n GTM_STRING,\n HTTPS,\n META_TAGS_LOOKUP,\n SEARCH_FILTER,\n PB_TYPE_IMAGE,\n PB_TYPE_TEXTBLOCK,\n PB_TYPE_CAROUSEL,\n PREVIEW_MODE,\n ROUTE_REGEX,\n PREVIEW_REGEX,\n DEBUG_LOGO,\n PUBLISHED_,\n RESPONSE_404,\n NOT_FOUND_STATUS_CODE,\n SITEMAP_STORE_KEY,\n ROUTE_PATTERN_SITEMAP,\n ROUTE_PATTERN_SITEMAP_FILE_REGEX,\n ROUTE_PATTERN_ROBOTS_TXT,\n BLAZE_STATIC_ROUTE_STORE_KEY,\n STATIC_FILE_FORWARD_HEADERS,\n ROOT_SELECTOR_CLASS_PREFIX,\n ROOT_SELECTOR_SEPARATOR,\n RESOLVER_CONTAINER_CLASS,\n BLAZE_X_FRAME_OPTIONS_DEFAULT\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["ACTIVE_META_TAGS","BLAZE_X_FRAME_OPTIONS_DEFAULT","META_TAGS_LOOKUP","description","apiKey","htmlTagName","tagKeyName","contentDataKeyName","canonical","PB_TYPE_IMAGE","PB_TYPE_TEXTBLOCK","PB_TYPE_CAROUSEL","SEARCH_FILTER","COLON","DOUBLE_SLASH","HTTPS","DEFAULT_ROUTE_REGEX","ROUTE_REGEX","process","env","BLAZE_ROUTE_REGEX","RegExp","PREVIEW_REGEX","PREVIEW_MODE","GTM_STRING","DEBUG_LOGO","SRC","ALT","PUBLISHED_","RESPONSE_404","SITEMAP_STORE_KEY","ROUTE_PATTERN_SITEMAP","BLAZE_ROUTE_PATTERN_SITEMAP","sitemapFilePrefix","BLAZE_CONTENT_SITEMAP_URL_PREFIX","ROUTE_PATTERN_SITEMAP_FILE_REGEX","ROUTE_PATTERN_ROBOTS_TXT","BLAZE_STATIC_ROUTE_STORE_KEY","STATIC_FILE_FORWARD_HEADERS","APPLE_TAGS","href","rel","sizes","NOT_FOUND_STATUS_CODE","ROOT_SELECTOR_CLASS_PREFIX","ROOT_SELECTOR_SEPARATOR","RESOLVER_CONTAINER_CLASS","ERROR_URLS","custom404","module","exports"],"sources":["../src/constants.js"],"sourcesContent":["const ACTIVE_META_TAGS = ['description', 'canonical'];\nconst BLAZE_X_FRAME_OPTIONS_DEFAULT = 'SAMEORIGIN';\n\nconst META_TAGS_LOOKUP = {\n description: {\n apiKey: 'metaDescription',\n htmlTagName: 'meta',\n tagKeyName: 'name',\n contentDataKeyName: 'content'\n },\n canonical: {\n apiKey: 'canonicalUrl',\n htmlTagName: 'link',\n tagKeyName: 'rel',\n contentDataKeyName: 'href'\n }\n};\n\nconst PB_TYPE_IMAGE = 'image';\nconst PB_TYPE_TEXTBLOCK = 'textblock';\nconst PB_TYPE_CAROUSEL = 'carousel';\nconst SEARCH_FILTER = 'searchfilter';\nconst COLON = ':';\nconst DOUBLE_SLASH = '//';\nconst HTTPS = 'https://';\n\nconst DEFAULT_ROUTE_REGEX = /^\\/[a-z0-9€_\\/]+(?:[-\\/\\.]{1,2}[a-z0-9\\/€_\\/]+)*$|^\\/$/i;\nconst ROUTE_REGEX = process.env.BLAZE_ROUTE_REGEX\n ? new RegExp(process.env.BLAZE_ROUTE_REGEX)\n : DEFAULT_ROUTE_REGEX;\nconst PREVIEW_REGEX = /^(\\/_preview)/;\nconst PREVIEW_MODE = 'Preview Mode';\nconst GTM_STRING = 'gtm';\n\nconst DEBUG_LOGO = {\n SRC: 'https://images.thisisblaze.com/logo-small-27-40.png',\n ALT: 'blaze-logo'\n};\n\nconst PUBLISHED_ = 'published_';\n\nconst RESPONSE_404 = '404 Not Found\\n';\n\nconst SITEMAP_STORE_KEY = 'default_sitemap';\nconst ROUTE_PATTERN_SITEMAP = process.env.BLAZE_ROUTE_PATTERN_SITEMAP || '/sitemap.xml';\nconst sitemapFilePrefix = process.env.BLAZE_CONTENT_SITEMAP_URL_PREFIX || 'sitemap';\nconst ROUTE_PATTERN_SITEMAP_FILE_REGEX = new RegExp(`/${sitemapFilePrefix}/.*\\.xml`);\nconst ROUTE_PATTERN_ROBOTS_TXT = '/robots.txt';\nconst BLAZE_STATIC_ROUTE_STORE_KEY = 'default';\n\nconst STATIC_FILE_FORWARD_HEADERS = ['content-length', 'last-modified', 'etag'];\n\nconst APPLE_TAGS = [\n { href: '/static/icons/touch-icon-iphone.png', rel: 'apple-touch-icon' },\n { href: '/static/icons/touch-icon-ipad.png', rel: 'apple-touch-icon', sizes: '152x152' },\n { href: '/static/icons/touch-icon-iphone-retina.png', rel: 'apple-touch-icon', sizes: '180x180' },\n { href: '/static/icons/touch-icon-ipad-retina.png', rel: 'apple-touch-icon', sizes: '167x167' }\n];\n\nconst NOT_FOUND_STATUS_CODE = 404;\n\nconst ROOT_SELECTOR_CLASS_PREFIX = 'root-selector';\nconst ROOT_SELECTOR_SEPARATOR = '--';\nconst RESOLVER_CONTAINER_CLASS = 'resolver-container';\nconst ERROR_URLS = {\n custom404: '/custom-error-404'\n};\n\nmodule.exports = {\n APPLE_TAGS,\n ACTIVE_META_TAGS,\n COLON,\n DOUBLE_SLASH,\n GTM_STRING,\n HTTPS,\n META_TAGS_LOOKUP,\n SEARCH_FILTER,\n PB_TYPE_IMAGE,\n PB_TYPE_TEXTBLOCK,\n PB_TYPE_CAROUSEL,\n PREVIEW_MODE,\n ROUTE_REGEX,\n PREVIEW_REGEX,\n DEBUG_LOGO,\n PUBLISHED_,\n RESPONSE_404,\n NOT_FOUND_STATUS_CODE,\n SITEMAP_STORE_KEY,\n ROUTE_PATTERN_SITEMAP,\n ROUTE_PATTERN_SITEMAP_FILE_REGEX,\n ROUTE_PATTERN_ROBOTS_TXT,\n BLAZE_STATIC_ROUTE_STORE_KEY,\n STATIC_FILE_FORWARD_HEADERS,\n ROOT_SELECTOR_CLASS_PREFIX,\n ROOT_SELECTOR_SEPARATOR,\n RESOLVER_CONTAINER_CLASS,\n BLAZE_X_FRAME_OPTIONS_DEFAULT,\n ERROR_URLS\n};\n"],"mappings":"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","ignoreList":[]}
@@ -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
- asPath,
101
- url,
102
- apolloClient,
103
- res,
104
- handle404Error,
105
- blazeApp
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
- const {
124
- cacheControlMaxAge = null
125
- } = pageData || {};
126
- if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {
127
- res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);
128
- }
129
- if (urlTo && urlTo !== url) {
130
- let redirectUrl = urlTo;
131
- if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {
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
- if (!err.graphQLErrors || !err.graphQLErrors.length) {
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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/nextjs-tools",
3
- "version": "0.146.0-alpha.56",
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",
@@ -35,13 +35,13 @@
35
35
  "@blaze-cms/nextjs-components": "0.146.0-alpha.28",
36
36
  "@blaze-cms/plugin-auth-fe": "0.146.0-alpha.50",
37
37
  "@blaze-cms/plugin-auth-local-fe": "0.146.0-alpha.50",
38
- "@blaze-cms/plugin-google-maps-fe": "0.146.0-alpha.56",
39
- "@blaze-cms/plugin-gtm-fe": "0.146.0-alpha.56",
40
- "@blaze-cms/plugin-page-builder-fe": "0.146.0-alpha.56",
38
+ "@blaze-cms/plugin-google-maps-fe": "0.146.0-alpha.57",
39
+ "@blaze-cms/plugin-gtm-fe": "0.146.0-alpha.57",
40
+ "@blaze-cms/plugin-page-builder-fe": "0.146.0-alpha.57",
41
41
  "@blaze-cms/plugin-preview-fe": "0.146.0-alpha.42",
42
- "@blaze-cms/plugin-search-ui": "0.146.0-alpha.56",
42
+ "@blaze-cms/plugin-search-ui": "0.146.0-alpha.57",
43
43
  "@blaze-cms/plugin-structured-data-fe": "^0.140.3",
44
- "@blaze-cms/react-page-builder": "0.146.0-alpha.56",
44
+ "@blaze-cms/react-page-builder": "0.146.0-alpha.57",
45
45
  "@blaze-cms/setup-ui": "^0.140.3",
46
46
  "autoprefixer": "^10.2.3",
47
47
  "core-js": "^3.2.1",
@@ -69,5 +69,5 @@
69
69
  "lib/*",
70
70
  "lib-es/*"
71
71
  ],
72
- "gitHead": "eaaeadb33fd0b215b136a9c6fbdb1c634bd294a3"
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
  };
@@ -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 ({ asPath, url, apolloClient, res, handle404Error, blazeApp }) => {
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
- const { cacheControlMaxAge = null } = pageData || {};
101
+ setCustomCacheControlHeaders(pageData, res);
100
102
 
101
- if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {
102
- res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);
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 (urlTo && urlTo !== url) {
106
- let redirectUrl = urlTo;
107
- if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {
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
- const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());
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
- if (!err.graphQLErrors || !err.graphQLErrors.length) {
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;
@@ -35,6 +35,9 @@ Object {
35
35
  "SRC": "https://images.thisisblaze.com/logo-small-27-40.png",
36
36
  },
37
37
  "DOUBLE_SLASH": "//",
38
+ "ERROR_URLS": Object {
39
+ "custom404": "/custom-error-404",
40
+ },
38
41
  "GTM_STRING": "gtm",
39
42
  "HTTPS": "https://",
40
43
  "META_TAGS_LOOKUP": Object {
@@ -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 { ROUTE_PATTERN_SITEMAP, NOT_FOUND_STATUS_CODE } from '../../../../src/constants';
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.mockImplementationOnce(async () => {
232
- const error = new Error('Not found');
233
- error.graphQLErrors = ['error'];
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.mockImplementationOnce(async () => {
246
- const err = new Error('Not found');
247
- err.graphQLErrors = ['error'];
248
- throw err;
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');