@sitecore-jss/sitecore-jss-nextjs 21.7.0-canary.57 → 21.7.0-canary.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.
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EditingConfigMiddleware = void 0;
13
+ const constants_1 = require("./constants");
14
+ const utils_1 = require("../utils/utils");
15
+ const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
16
+ /**
17
+ * Middleware / handler used in the editing config API route in xmcloud add on (e.g. '/api/editing/config')
18
+ * provides configuration information to determine feature compatibility on Pages side.
19
+ */
20
+ class EditingConfigMiddleware {
21
+ /**
22
+ * @param {EditingConfigMiddlewareConfig} [config] Editing configuration middleware config
23
+ */
24
+ constructor(config) {
25
+ this.config = config;
26
+ this.handler = (_req, res) => __awaiter(this, void 0, void 0, function* () {
27
+ const secret = _req.query[constants_1.QUERY_PARAM_EDITING_SECRET];
28
+ if (secret !== (0, utils_1.getJssEditingSecret)()) {
29
+ sitecore_jss_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getJssEditingSecret)());
30
+ res.status(401).end('Missing or invalid editing secret');
31
+ }
32
+ const components = Array.isArray(this.config.components)
33
+ ? this.config.components
34
+ : Array.from(this.config.components.keys());
35
+ return res.status(200).json({
36
+ components,
37
+ packages: this.config.metadata.packages,
38
+ });
39
+ });
40
+ }
41
+ /**
42
+ * Gets the Next.js API route handler
43
+ * @returns middleware handler
44
+ */
45
+ getHandler() {
46
+ return this.handler;
47
+ }
48
+ }
49
+ exports.EditingConfigMiddleware = EditingConfigMiddleware;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VercelEditingDataCache = exports.editingDataService = exports.ServerlessEditingDataService = exports.BasicEditingDataService = exports.EditingRenderMiddleware = exports.EditingDataMiddleware = exports.EditingDataDiskCache = void 0;
3
+ exports.EditingConfigMiddleware = exports.VercelEditingDataCache = exports.editingDataService = exports.ServerlessEditingDataService = exports.BasicEditingDataService = exports.EditingRenderMiddleware = exports.EditingDataMiddleware = exports.EditingDataDiskCache = void 0;
4
4
  var editing_data_cache_1 = require("./editing-data-cache");
5
5
  Object.defineProperty(exports, "EditingDataDiskCache", { enumerable: true, get: function () { return editing_data_cache_1.EditingDataDiskCache; } });
6
6
  var editing_data_middleware_1 = require("./editing-data-middleware");
@@ -13,3 +13,5 @@ Object.defineProperty(exports, "ServerlessEditingDataService", { enumerable: tru
13
13
  Object.defineProperty(exports, "editingDataService", { enumerable: true, get: function () { return editing_data_service_1.editingDataService; } });
14
14
  var vercel_editing_data_cache_1 = require("./vercel-editing-data-cache");
15
15
  Object.defineProperty(exports, "VercelEditingDataCache", { enumerable: true, get: function () { return vercel_editing_data_cache_1.VercelEditingDataCache; } });
16
+ var editing_config_middleware_1 = require("./editing-config-middleware");
17
+ Object.defineProperty(exports, "EditingConfigMiddleware", { enumerable: true, get: function () { return editing_config_middleware_1.EditingConfigMiddleware; } });
@@ -18,7 +18,8 @@ const server_1 = require("next/server");
18
18
  const site_1 = require("@sitecore-jss/sitecore-jss/site");
19
19
  const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
20
20
  const middleware_1 = require("./middleware");
21
- const REGEXP_CONTEXT_SITE_LANG = new RegExp(/\$siteLang/, 'gi');
21
+ const REGEXP_CONTEXT_SITE_LANG = new RegExp(/\$siteLang/, 'i');
22
+ const REGEXP_ABSOLUTE_URL = new RegExp('^(?:[a-z]+:)?//', 'i');
22
23
  /**
23
24
  * Middleware / handler fetches all redirects from Sitecore instance by grapqhl service
24
25
  * compares with current url and redirects to target url
@@ -58,12 +59,13 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
58
59
  return res || server_1.NextResponse.next();
59
60
  }
60
61
  // Find context site language and replace token
61
- if (REGEXP_CONTEXT_SITE_LANG.test(existsRedirect.target)) {
62
+ if (REGEXP_CONTEXT_SITE_LANG.test(existsRedirect.target) &&
63
+ !(REGEXP_ABSOLUTE_URL.test(existsRedirect.target) &&
64
+ existsRedirect.target.includes(hostname))) {
62
65
  existsRedirect.target = existsRedirect.target.replace(REGEXP_CONTEXT_SITE_LANG, site.language);
63
66
  }
64
67
  const url = req.nextUrl.clone();
65
- const absoluteUrlRegex = new RegExp('^(?:[a-z]+:)?//', 'i');
66
- if (absoluteUrlRegex.test(existsRedirect.target)) {
68
+ if (REGEXP_ABSOLUTE_URL.test(existsRedirect.target)) {
67
69
  url.href = existsRedirect.target;
68
70
  url.locale = req.nextUrl.locale;
69
71
  }
@@ -0,0 +1,45 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { QUERY_PARAM_EDITING_SECRET } from './constants';
11
+ import { getJssEditingSecret } from '../utils/utils';
12
+ import { debug } from '@sitecore-jss/sitecore-jss';
13
+ /**
14
+ * Middleware / handler used in the editing config API route in xmcloud add on (e.g. '/api/editing/config')
15
+ * provides configuration information to determine feature compatibility on Pages side.
16
+ */
17
+ export class EditingConfigMiddleware {
18
+ /**
19
+ * @param {EditingConfigMiddlewareConfig} [config] Editing configuration middleware config
20
+ */
21
+ constructor(config) {
22
+ this.config = config;
23
+ this.handler = (_req, res) => __awaiter(this, void 0, void 0, function* () {
24
+ const secret = _req.query[QUERY_PARAM_EDITING_SECRET];
25
+ if (secret !== getJssEditingSecret()) {
26
+ debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, getJssEditingSecret());
27
+ res.status(401).end('Missing or invalid editing secret');
28
+ }
29
+ const components = Array.isArray(this.config.components)
30
+ ? this.config.components
31
+ : Array.from(this.config.components.keys());
32
+ return res.status(200).json({
33
+ components,
34
+ packages: this.config.metadata.packages,
35
+ });
36
+ });
37
+ }
38
+ /**
39
+ * Gets the Next.js API route handler
40
+ * @returns middleware handler
41
+ */
42
+ getHandler() {
43
+ return this.handler;
44
+ }
45
+ }
@@ -3,3 +3,4 @@ export { EditingDataMiddleware } from './editing-data-middleware';
3
3
  export { EditingRenderMiddleware, } from './editing-render-middleware';
4
4
  export { BasicEditingDataService, ServerlessEditingDataService, editingDataService, } from './editing-data-service';
5
5
  export { VercelEditingDataCache } from './vercel-editing-data-cache';
6
+ export { EditingConfigMiddleware, } from './editing-config-middleware';
@@ -12,7 +12,8 @@ import { NextResponse } from 'next/server';
12
12
  import { GraphQLRedirectsService, REDIRECT_TYPE_301, REDIRECT_TYPE_302, REDIRECT_TYPE_SERVER_TRANSFER, } from '@sitecore-jss/sitecore-jss/site';
13
13
  import { debug } from '@sitecore-jss/sitecore-jss';
14
14
  import { MiddlewareBase } from './middleware';
15
- const REGEXP_CONTEXT_SITE_LANG = new RegExp(/\$siteLang/, 'gi');
15
+ const REGEXP_CONTEXT_SITE_LANG = new RegExp(/\$siteLang/, 'i');
16
+ const REGEXP_ABSOLUTE_URL = new RegExp('^(?:[a-z]+:)?//', 'i');
16
17
  /**
17
18
  * Middleware / handler fetches all redirects from Sitecore instance by grapqhl service
18
19
  * compares with current url and redirects to target url
@@ -52,12 +53,13 @@ export class RedirectsMiddleware extends MiddlewareBase {
52
53
  return res || NextResponse.next();
53
54
  }
54
55
  // Find context site language and replace token
55
- if (REGEXP_CONTEXT_SITE_LANG.test(existsRedirect.target)) {
56
+ if (REGEXP_CONTEXT_SITE_LANG.test(existsRedirect.target) &&
57
+ !(REGEXP_ABSOLUTE_URL.test(existsRedirect.target) &&
58
+ existsRedirect.target.includes(hostname))) {
56
59
  existsRedirect.target = existsRedirect.target.replace(REGEXP_CONTEXT_SITE_LANG, site.language);
57
60
  }
58
61
  const url = req.nextUrl.clone();
59
- const absoluteUrlRegex = new RegExp('^(?:[a-z]+:)?//', 'i');
60
- if (absoluteUrlRegex.test(existsRedirect.target)) {
62
+ if (REGEXP_ABSOLUTE_URL.test(existsRedirect.target)) {
61
63
  url.href = existsRedirect.target;
62
64
  url.locale = req.nextUrl.locale;
63
65
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-nextjs",
3
- "version": "21.7.0-canary.57",
3
+ "version": "21.7.0-canary.59",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "sideEffects": false,
@@ -72,9 +72,9 @@
72
72
  "react-dom": "^18.2.0"
73
73
  },
74
74
  "dependencies": {
75
- "@sitecore-jss/sitecore-jss": "^21.7.0-canary.57",
76
- "@sitecore-jss/sitecore-jss-dev-tools": "^21.7.0-canary.57",
77
- "@sitecore-jss/sitecore-jss-react": "^21.7.0-canary.57",
75
+ "@sitecore-jss/sitecore-jss": "^21.7.0-canary.59",
76
+ "@sitecore-jss/sitecore-jss-dev-tools": "^21.7.0-canary.59",
77
+ "@sitecore-jss/sitecore-jss-react": "^21.7.0-canary.59",
78
78
  "@vercel/kv": "^0.2.1",
79
79
  "node-html-parser": "^6.1.4",
80
80
  "prop-types": "^15.8.1",
@@ -83,7 +83,7 @@
83
83
  },
84
84
  "description": "",
85
85
  "types": "types/index.d.ts",
86
- "gitHead": "6cae20dcb45cd56a486d630a56150ef51d797b1a",
86
+ "gitHead": "7905a71067fd07cd21dcd6f9dc1a63abcccd4abb",
87
87
  "files": [
88
88
  "dist",
89
89
  "types",
@@ -0,0 +1,29 @@
1
+ import { NextApiRequest, NextApiResponse } from 'next';
2
+ import { Metadata } from '@sitecore-jss/sitecore-jss-dev-tools';
3
+ export type EditingConfigMiddlewareConfig = {
4
+ /**
5
+ * Components available in the application
6
+ */
7
+ components: string[] | Map<string, unknown>;
8
+ /**
9
+ * Application metadata
10
+ */
11
+ metadata: Metadata;
12
+ };
13
+ /**
14
+ * Middleware / handler used in the editing config API route in xmcloud add on (e.g. '/api/editing/config')
15
+ * provides configuration information to determine feature compatibility on Pages side.
16
+ */
17
+ export declare class EditingConfigMiddleware {
18
+ protected config: EditingConfigMiddlewareConfig;
19
+ /**
20
+ * @param {EditingConfigMiddlewareConfig} [config] Editing configuration middleware config
21
+ */
22
+ constructor(config: EditingConfigMiddlewareConfig);
23
+ /**
24
+ * Gets the Next.js API route handler
25
+ * @returns middleware handler
26
+ */
27
+ getHandler(): (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
28
+ private handler;
29
+ }
@@ -4,3 +4,4 @@ export { EditingDataMiddleware, EditingDataMiddlewareConfig } from './editing-da
4
4
  export { EditingRenderMiddleware, EditingRenderMiddlewareConfig, } from './editing-render-middleware';
5
5
  export { EditingPreviewData, EditingDataService, BasicEditingDataService, BasicEditingDataServiceConfig, ServerlessEditingDataService, ServerlessEditingDataServiceConfig, editingDataService, } from './editing-data-service';
6
6
  export { VercelEditingDataCache } from './vercel-editing-data-cache';
7
+ export { EditingConfigMiddleware, EditingConfigMiddlewareConfig, } from './editing-config-middleware';