@sitecore-content-sdk/nextjs 0.1.0-beta.2 → 0.1.0-beta.21
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/client.d.ts +1 -0
- package/client.js +1 -0
- package/component-props-loader.d.ts +1 -0
- package/component-props-loader.js +3 -0
- package/config.d.ts +1 -0
- package/config.js +1 -0
- package/dist/cjs/client/index.js +10 -0
- package/dist/cjs/client/sitecore-nextjs-client.js +109 -0
- package/dist/cjs/components/Link.js +8 -2
- package/dist/cjs/components/RichText.js +16 -4
- package/dist/cjs/config/define-cli-config.js +71 -0
- package/dist/cjs/config/index.js +7 -0
- package/dist/cjs/index.js +12 -14
- package/dist/cjs/middleware/index.js +3 -1
- package/dist/cjs/middleware/middleware.js +53 -8
- package/dist/cjs/middleware/multisite-middleware.js +50 -54
- package/dist/cjs/middleware/personalize-middleware.js +108 -111
- package/dist/cjs/middleware/redirects-middleware.js +99 -105
- package/dist/cjs/services/component-props-service.js +37 -50
- package/dist/cjs/sharedTypes/sitecore-page-props.js +2 -0
- package/dist/cjs/tools/component-props.loader.js +101 -0
- package/dist/cjs/tools/index.js +24 -0
- package/dist/cjs/tools/templating/byoc-component.js +69 -0
- package/dist/cjs/tools/templating/default-component.js +48 -0
- package/dist/cjs/tools/templating/generate-component-builder.js +71 -0
- package/dist/cjs/tools/templating/index.js +7 -0
- package/dist/cjs/tools/templating/templates/component-builder.js +59 -0
- package/dist/cjs/tools/templating/utils.js +18 -0
- package/dist/cjs/utils/index.js +2 -1
- package/dist/cjs/utils/utils.js +10 -1
- package/dist/esm/client/index.js +2 -0
- package/dist/esm/client/sitecore-nextjs-client.js +105 -0
- package/dist/esm/components/Link.js +8 -2
- package/dist/esm/components/RichText.js +14 -2
- package/dist/esm/config/define-cli-config.js +34 -0
- package/dist/esm/config/index.js +2 -0
- package/dist/esm/index.js +1 -2
- package/dist/esm/middleware/index.js +1 -1
- package/dist/esm/middleware/middleware.js +50 -7
- package/dist/esm/middleware/multisite-middleware.js +50 -54
- package/dist/esm/middleware/personalize-middleware.js +104 -107
- package/dist/esm/middleware/redirects-middleware.js +99 -105
- package/dist/esm/services/component-props-service.js +37 -50
- package/dist/esm/sharedTypes/sitecore-page-props.js +1 -0
- package/dist/esm/tools/component-props.loader.js +65 -0
- package/dist/esm/tools/index.js +2 -0
- package/dist/esm/tools/templating/byoc-component.js +61 -0
- package/dist/esm/tools/templating/default-component.js +40 -0
- package/dist/esm/tools/templating/generate-component-builder.js +63 -0
- package/dist/esm/tools/templating/index.js +2 -0
- package/dist/esm/tools/templating/templates/component-builder.js +55 -0
- package/dist/esm/tools/templating/utils.js +12 -0
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/utils.js +8 -0
- package/package.json +8 -6
- package/tools.d.ts +1 -0
- package/tools.js +1 -0
- package/types/client/index.d.ts +2 -0
- package/types/client/sitecore-nextjs-client.d.ts +40 -0
- package/types/components/Link.d.ts +5 -0
- package/types/components/RichText.d.ts +7 -1
- package/types/config/define-cli-config.d.ts +8 -0
- package/types/config/index.d.ts +2 -0
- package/types/editing/editing-config-middleware.d.ts +1 -1
- package/types/editing/editing-render-middleware.d.ts +1 -29
- package/types/editing/index.d.ts +1 -1
- package/types/index.d.ts +4 -4
- package/types/middleware/index.d.ts +1 -1
- package/types/middleware/middleware.d.ts +42 -16
- package/types/middleware/multisite-middleware.d.ts +4 -13
- package/types/middleware/personalize-middleware.d.ts +7 -21
- package/types/middleware/redirects-middleware.d.ts +3 -13
- package/types/services/component-props-service.d.ts +6 -23
- package/types/sharedTypes/sitecore-page-props.d.ts +5 -0
- package/types/tools/component-props.loader.d.ts +7 -0
- package/types/tools/index.d.ts +2 -0
- package/types/tools/templating/byoc-component.d.ts +12 -0
- package/types/tools/templating/default-component.d.ts +12 -0
- package/types/tools/templating/generate-component-builder.d.ts +45 -0
- package/types/tools/templating/index.d.ts +2 -0
- package/types/tools/templating/templates/component-builder.d.ts +7 -0
- package/types/tools/templating/utils.d.ts +6 -0
- package/types/utils/index.d.ts +1 -1
- package/types/utils/utils.d.ts +2 -0
- package/dist/cjs/graphql/index.js +0 -7
- package/dist/cjs/services/base-graphql-sitemap-service.js +0 -206
- package/dist/cjs/services/graphql-sitemap-service.js +0 -64
- package/dist/cjs/services/mutisite-graphql-sitemap-service.js +0 -81
- package/dist/esm/graphql/index.js +0 -1
- package/dist/esm/services/base-graphql-sitemap-service.js +0 -201
- package/dist/esm/services/graphql-sitemap-service.js +0 -59
- package/dist/esm/services/mutisite-graphql-sitemap-service.js +0 -77
- package/graphql.d.ts +0 -1
- package/graphql.js +0 -1
- package/types/graphql/index.d.ts +0 -1
- package/types/services/base-graphql-sitemap-service.d.ts +0 -148
- package/types/services/graphql-sitemap-service.d.ts +0 -51
- package/types/services/mutisite-graphql-sitemap-service.d.ts +0 -42
package/client.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types/client/index';
|
package/client.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/cjs/client/index');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types/tools/component-props.loader';
|
package/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types/config/index';
|
package/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/cjs/config/index');
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SitecoreClient = exports.createGraphQLClientFactory = exports.getEdgeProxyContentUrl = exports.GraphQLRequestClient = exports.DefaultRetryStrategy = void 0;
|
|
4
|
+
var client_1 = require("@sitecore-content-sdk/core/client");
|
|
5
|
+
Object.defineProperty(exports, "DefaultRetryStrategy", { enumerable: true, get: function () { return client_1.DefaultRetryStrategy; } });
|
|
6
|
+
Object.defineProperty(exports, "GraphQLRequestClient", { enumerable: true, get: function () { return client_1.GraphQLRequestClient; } });
|
|
7
|
+
Object.defineProperty(exports, "getEdgeProxyContentUrl", { enumerable: true, get: function () { return client_1.getEdgeProxyContentUrl; } });
|
|
8
|
+
Object.defineProperty(exports, "createGraphQLClientFactory", { enumerable: true, get: function () { return client_1.createGraphQLClientFactory; } });
|
|
9
|
+
var sitecore_nextjs_client_1 = require("./sitecore-nextjs-client");
|
|
10
|
+
Object.defineProperty(exports, "SitecoreClient", { enumerable: true, get: function () { return sitecore_nextjs_client_1.SitecoreNextjsClient; } });
|
|
@@ -0,0 +1,109 @@
|
|
|
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.SitecoreNextjsClient = void 0;
|
|
13
|
+
const client_1 = require("@sitecore-content-sdk/core/client");
|
|
14
|
+
const component_props_service_1 = require("../services/component-props-service");
|
|
15
|
+
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
16
|
+
const personalize_1 = require("@sitecore-content-sdk/core/personalize");
|
|
17
|
+
class SitecoreNextjsClient extends client_1.SitecoreClient {
|
|
18
|
+
constructor(initOptions) {
|
|
19
|
+
super(initOptions);
|
|
20
|
+
this.initOptions = initOptions;
|
|
21
|
+
this.componentPropsService = this.getComponentPropsService();
|
|
22
|
+
}
|
|
23
|
+
// since path rewrite we rely on is only working in nextjs
|
|
24
|
+
resolveSiteFromPath(path) {
|
|
25
|
+
const resolvedPath = super.parsePath(path);
|
|
26
|
+
// Get site name (from path rewritten in middleware)
|
|
27
|
+
const siteData = (0, site_1.getSiteRewriteData)(resolvedPath, this.initOptions.defaultSite);
|
|
28
|
+
// Resolve site by name
|
|
29
|
+
const site = this.siteResolver.getByName(siteData.siteName);
|
|
30
|
+
return site;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Normalizes a nextjs path that could have been rewritten
|
|
34
|
+
* @param {string | string[]} path nextjs path
|
|
35
|
+
* @returns path string without nextjs prefixes
|
|
36
|
+
*/
|
|
37
|
+
parsePath(path) {
|
|
38
|
+
const basePath = super.parsePath(path);
|
|
39
|
+
return (0, site_1.normalizeSiteRewrite)((0, personalize_1.normalizePersonalizedRewrite)(basePath));
|
|
40
|
+
}
|
|
41
|
+
getPage(path, pageOptions, options) {
|
|
42
|
+
const _super = Object.create(null, {
|
|
43
|
+
parsePath: { get: () => super.parsePath },
|
|
44
|
+
getPage: { get: () => super.getPage }
|
|
45
|
+
});
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
const resolvedPath = this.parsePath(path);
|
|
48
|
+
// Get variant(s) for personalization (from path), must ensure path is of type string
|
|
49
|
+
const personalizeData = pageOptions.personalize || (0, personalize_1.getPersonalizedRewriteData)(_super.parsePath.call(this, path));
|
|
50
|
+
const site = pageOptions.site || this.resolveSiteFromPath(path).name;
|
|
51
|
+
const page = yield _super.getPage.call(this, resolvedPath, {
|
|
52
|
+
locale: pageOptions.locale,
|
|
53
|
+
site,
|
|
54
|
+
personalize: personalizeData,
|
|
55
|
+
}, options);
|
|
56
|
+
return page;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Retrieves preview page and layout details
|
|
61
|
+
* @param {PreviewData} previewData - The editing preview data for metadata mode.
|
|
62
|
+
* @param {FetchOptions} [fetchOptions] Additional fetch fetch options to override GraphQL requests (like retries and fetch)
|
|
63
|
+
*/
|
|
64
|
+
getPreview(previewData, fetchOptions) {
|
|
65
|
+
const _super = Object.create(null, {
|
|
66
|
+
getPreview: { get: () => super.getPreview }
|
|
67
|
+
});
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
return _super.getPreview.call(this, previewData, fetchOptions);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parses components from nextjs component factory and layoutData, executes getServerProps/getStaticProps methods
|
|
74
|
+
* and returns resulting props from components
|
|
75
|
+
* @param {LayoutServiceData} layoutData layout data to parse compnents from
|
|
76
|
+
* @param {PreviewData} context Nextjs preview data
|
|
77
|
+
* @param {ModuleFactory} moduleFactory module factory to use for component parsing
|
|
78
|
+
* @returns {ComponentPropsCollection} component props
|
|
79
|
+
*/
|
|
80
|
+
getComponentData(layoutData, context, moduleFactory) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
let componentProps = {};
|
|
83
|
+
if (!layoutData.sitecore.route)
|
|
84
|
+
return componentProps;
|
|
85
|
+
// Retrieve component props using side-effects defined on components level
|
|
86
|
+
componentProps = yield this.componentPropsService.fetchComponentProps({
|
|
87
|
+
layoutData: layoutData,
|
|
88
|
+
context,
|
|
89
|
+
moduleFactory,
|
|
90
|
+
});
|
|
91
|
+
const errors = Object.keys(componentProps)
|
|
92
|
+
.map((id) => {
|
|
93
|
+
const component = componentProps[id];
|
|
94
|
+
return component.error
|
|
95
|
+
? `\nUnable to get component props for ${component.componentName} (${id}): ${component.error}`
|
|
96
|
+
: '';
|
|
97
|
+
})
|
|
98
|
+
.join('');
|
|
99
|
+
if (errors.length) {
|
|
100
|
+
throw new Error(errors);
|
|
101
|
+
}
|
|
102
|
+
return componentProps;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
getComponentPropsService() {
|
|
106
|
+
return new component_props_service_1.ComponentPropsService();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.SitecoreNextjsClient = SitecoreNextjsClient;
|
|
@@ -73,14 +73,20 @@ exports.Link = (0, react_1.forwardRef)((props, ref) => {
|
|
|
73
73
|
const isFileUrl = FILE_EXTENSION_MATCHER.test(href);
|
|
74
74
|
// determine if a link is a route or not. File extensions are not routes and should not be pre-fetched.
|
|
75
75
|
if (isMatching && !isFileUrl) {
|
|
76
|
-
return (react_1.default.createElement(link_1.default, Object.assign({ href: { pathname: href, query: querystring, hash: anchor }, key: "link", locale: false, title: value.title, target: value.target, className: value.class }, htmlLinkProps, { ref: ref }, (process.env.TEST
|
|
76
|
+
return (react_1.default.createElement(link_1.default, Object.assign({ href: { pathname: href, query: querystring, hash: anchor }, key: "link", locale: false, title: value.title, target: value.target, className: value.class, prefetch: props.prefetch }, htmlLinkProps, { ref: ref }, (process.env.TEST
|
|
77
|
+
? {
|
|
78
|
+
'data-nextjs-link': true,
|
|
79
|
+
'data-nextjs-prefetch': props.prefetch,
|
|
80
|
+
}
|
|
81
|
+
: {})),
|
|
77
82
|
text,
|
|
78
83
|
children));
|
|
79
84
|
}
|
|
80
85
|
}
|
|
81
|
-
// prevent passing internalLinkMatcher as it is an invalid DOM element prop
|
|
86
|
+
// prevent passing internalLinkMatcher or prefetch as it is an invalid DOM element prop
|
|
82
87
|
const reactLinkProps = Object.assign({}, props);
|
|
83
88
|
delete reactLinkProps.internalLinkMatcher;
|
|
89
|
+
delete reactLinkProps.prefetch;
|
|
84
90
|
return (react_1.default.createElement(react_2.Link, Object.assign({}, reactLinkProps, { ref: ref }, (process.env.TEST ? { 'data-react-link': true } : {}))));
|
|
85
91
|
});
|
|
86
92
|
exports.Link.displayName = 'NextLink';
|
|
@@ -47,12 +47,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47
47
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
48
|
};
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.RichText = void 0;
|
|
50
|
+
exports.RichText = exports.prefetched = void 0;
|
|
51
51
|
const react_1 = __importStar(require("react"));
|
|
52
52
|
const prop_types_1 = __importDefault(require("prop-types"));
|
|
53
53
|
const router_1 = require("next/router");
|
|
54
54
|
const react_2 = require("@sitecore-content-sdk/react");
|
|
55
|
-
|
|
55
|
+
exports.prefetched = {};
|
|
56
56
|
const RichText = (props) => {
|
|
57
57
|
const { internalLinksSelector = 'a[href^="/"]', prefetchLinks = true, editable = true } = props, rest = __rest(props, ["internalLinksSelector", "prefetchLinks", "editable"]);
|
|
58
58
|
const hasText = props.field && props.field.value;
|
|
@@ -81,9 +81,21 @@ const RichText = (props) => {
|
|
|
81
81
|
internalLinks.forEach((link) => {
|
|
82
82
|
if (link.target === '_blank')
|
|
83
83
|
return;
|
|
84
|
-
|
|
84
|
+
const prefetch = () => {
|
|
85
85
|
router.prefetch(link.pathname, undefined, { locale: false });
|
|
86
|
-
prefetched[link.pathname] = true;
|
|
86
|
+
exports.prefetched[link.pathname] = true;
|
|
87
|
+
};
|
|
88
|
+
if (!exports.prefetched[link.pathname] && prefetchLinks !== false) {
|
|
89
|
+
if (prefetchLinks === true) {
|
|
90
|
+
prefetch();
|
|
91
|
+
}
|
|
92
|
+
if (prefetchLinks === 'hover') {
|
|
93
|
+
const mouseOverHandler = () => {
|
|
94
|
+
prefetch();
|
|
95
|
+
link.removeEventListener('mouseover', mouseOverHandler);
|
|
96
|
+
};
|
|
97
|
+
link.addEventListener('mouseover', mouseOverHandler, false);
|
|
98
|
+
}
|
|
87
99
|
}
|
|
88
100
|
link.addEventListener('click', routeHandler, false);
|
|
89
101
|
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.defineCliConfig = void 0;
|
|
37
|
+
const config_1 = require("@sitecore-content-sdk/core/config");
|
|
38
|
+
const byocTemplate = __importStar(require("../tools/templating/byoc-component"));
|
|
39
|
+
const defaultTemplate = __importStar(require("../tools/templating/default-component"));
|
|
40
|
+
/**
|
|
41
|
+
* Accepts a `SitecoreCliConfigInput` object and returns the Sitecore Content SDK CLI configuration from the specified file,
|
|
42
|
+
* updated with the required default values.
|
|
43
|
+
* @param {SitecoreCliConfigInput} cliConfig the cli configuration provided by the application
|
|
44
|
+
* @returns {SitecoreCliConfig} full sitecore cli configuration to use with cli
|
|
45
|
+
*/
|
|
46
|
+
const defineCliConfig = (cliConfig) => {
|
|
47
|
+
addDefaultScaffoldTemplates(cliConfig);
|
|
48
|
+
return (0, config_1.defineCliConfig)(cliConfig);
|
|
49
|
+
};
|
|
50
|
+
exports.defineCliConfig = defineCliConfig;
|
|
51
|
+
/**
|
|
52
|
+
* Adds default scaffold templates to the CLI configuration.
|
|
53
|
+
* @param {SitecoreCliConfigInput} cliConfig - The CLI configuration object
|
|
54
|
+
*/
|
|
55
|
+
function addDefaultScaffoldTemplates(cliConfig) {
|
|
56
|
+
if (!cliConfig.scaffold) {
|
|
57
|
+
cliConfig.scaffold = {};
|
|
58
|
+
}
|
|
59
|
+
if (!cliConfig.scaffold.templates) {
|
|
60
|
+
cliConfig.scaffold.templates = [];
|
|
61
|
+
}
|
|
62
|
+
cliConfig.scaffold.templates.unshift({
|
|
63
|
+
name: config_1.ComponentTemplateType.DEFAULT,
|
|
64
|
+
generateTemplate: defaultTemplate.generateTemplate,
|
|
65
|
+
getNextSteps: defaultTemplate.getNextSteps,
|
|
66
|
+
}, {
|
|
67
|
+
name: config_1.ComponentTemplateType.BYOC,
|
|
68
|
+
generateTemplate: byocTemplate.generateTemplate,
|
|
69
|
+
getNextSteps: byocTemplate.getNextSteps,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineCliConfig = exports.defineConfig = void 0;
|
|
4
|
+
var config_1 = require("@sitecore-content-sdk/core/config");
|
|
5
|
+
Object.defineProperty(exports, "defineConfig", { enumerable: true, get: function () { return config_1.defineConfig; } });
|
|
6
|
+
var define_cli_config_1 = require("./define-cli-config");
|
|
7
|
+
Object.defineProperty(exports, "defineCliConfig", { enumerable: true, get: function () { return define_cli_config_1.defineCliConfig; } });
|
package/dist/cjs/index.js
CHANGED
|
@@ -33,8 +33,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ComponentLibraryLayout = exports.File = exports.getComponentLibraryStylesheetLinks = exports.BYOCComponent = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.DateField = exports.Text = exports.Image = exports.ComponentBuilder = exports.BYOCWrapper = exports.FEaaSWrapper = exports.NextImage = exports.Placeholder = exports.RichText = exports.Link = exports.useComponentProps = exports.ComponentPropsContext = exports.ComponentPropsReactContext = exports.normalizeSiteRewrite = exports.getSiteRewriteData = exports.getSiteRewrite = exports.GraphQLSiteInfoService = exports.SiteResolver = exports.GraphQLRobotsService = exports.GraphQLErrorPagesService = exports.GraphQLSitemapXmlService = exports.
|
|
37
|
-
exports.EditingScripts = exports.withEmptyFieldEditingComponent = exports.withFieldMetadata = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.DefaultEmptyFieldEditingComponentText =
|
|
36
|
+
exports.DefaultEmptyFieldEditingComponentImage = exports.ComponentLibraryLayout = exports.File = exports.getComponentLibraryStylesheetLinks = exports.BYOCComponent = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.DateField = exports.Text = exports.Image = exports.ComponentBuilder = exports.BYOCWrapper = exports.FEaaSWrapper = exports.NextImage = exports.Placeholder = exports.RichText = exports.Link = exports.useComponentProps = exports.ComponentPropsContext = exports.ComponentPropsReactContext = exports.normalizeSiteRewrite = exports.getSiteRewriteData = exports.getSiteRewrite = exports.GraphQLSiteInfoService = exports.SiteResolver = exports.GraphQLRobotsService = exports.GraphQLErrorPagesService = exports.GraphQLSitemapXmlService = exports.GraphQLSitePathService = exports.ComponentPropsService = exports.CdpHelper = exports.normalizePersonalizedRewrite = exports.getGroomedVariantIds = exports.getPersonalizedRewriteData = exports.getPersonalizedRewrite = exports.personalizeLayout = exports.GraphQLDictionaryService = exports.mediaApi = exports.RestComponentLayoutService = exports.EditMode = exports.getContentStylesheetLink = exports.getFieldValue = exports.getChildPlaceholder = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.MemoryCacheClient = exports.debug = exports.enableDebug = exports.NativeDataFetcher = exports.constants = void 0;
|
|
37
|
+
exports.EditingScripts = exports.withEmptyFieldEditingComponent = exports.withFieldMetadata = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.DefaultEmptyFieldEditingComponentText = void 0;
|
|
38
38
|
var core_1 = require("@sitecore-content-sdk/core");
|
|
39
39
|
Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return core_1.constants; } });
|
|
40
40
|
// generic data access
|
|
@@ -64,19 +64,17 @@ Object.defineProperty(exports, "normalizePersonalizedRewrite", { enumerable: tru
|
|
|
64
64
|
Object.defineProperty(exports, "CdpHelper", { enumerable: true, get: function () { return personalize_1.CdpHelper; } });
|
|
65
65
|
var component_props_service_1 = require("./services/component-props-service");
|
|
66
66
|
Object.defineProperty(exports, "ComponentPropsService", { enumerable: true, get: function () { return component_props_service_1.ComponentPropsService; } });
|
|
67
|
-
var graphql_sitemap_service_1 = require("./services/graphql-sitemap-service");
|
|
68
|
-
Object.defineProperty(exports, "GraphQLSitemapService", { enumerable: true, get: function () { return graphql_sitemap_service_1.GraphQLSitemapService; } });
|
|
69
|
-
var mutisite_graphql_sitemap_service_1 = require("./services/mutisite-graphql-sitemap-service");
|
|
70
|
-
Object.defineProperty(exports, "MultisiteGraphQLSitemapService", { enumerable: true, get: function () { return mutisite_graphql_sitemap_service_1.MultisiteGraphQLSitemapService; } });
|
|
71
67
|
var site_1 = require("@sitecore-content-sdk/core/site");
|
|
72
|
-
Object.defineProperty(exports, "
|
|
73
|
-
|
|
74
|
-
Object.defineProperty(exports, "
|
|
75
|
-
Object.defineProperty(exports, "
|
|
76
|
-
Object.defineProperty(exports, "
|
|
77
|
-
Object.defineProperty(exports, "
|
|
78
|
-
Object.defineProperty(exports, "
|
|
79
|
-
Object.defineProperty(exports, "
|
|
68
|
+
Object.defineProperty(exports, "GraphQLSitePathService", { enumerable: true, get: function () { return site_1.GraphQLSitePathService; } });
|
|
69
|
+
var site_2 = require("@sitecore-content-sdk/core/site");
|
|
70
|
+
Object.defineProperty(exports, "GraphQLSitemapXmlService", { enumerable: true, get: function () { return site_2.GraphQLSitemapXmlService; } });
|
|
71
|
+
Object.defineProperty(exports, "GraphQLErrorPagesService", { enumerable: true, get: function () { return site_2.GraphQLErrorPagesService; } });
|
|
72
|
+
Object.defineProperty(exports, "GraphQLRobotsService", { enumerable: true, get: function () { return site_2.GraphQLRobotsService; } });
|
|
73
|
+
Object.defineProperty(exports, "SiteResolver", { enumerable: true, get: function () { return site_2.SiteResolver; } });
|
|
74
|
+
Object.defineProperty(exports, "GraphQLSiteInfoService", { enumerable: true, get: function () { return site_2.GraphQLSiteInfoService; } });
|
|
75
|
+
Object.defineProperty(exports, "getSiteRewrite", { enumerable: true, get: function () { return site_2.getSiteRewrite; } });
|
|
76
|
+
Object.defineProperty(exports, "getSiteRewriteData", { enumerable: true, get: function () { return site_2.getSiteRewriteData; } });
|
|
77
|
+
Object.defineProperty(exports, "normalizeSiteRewrite", { enumerable: true, get: function () { return site_2.normalizeSiteRewrite; } });
|
|
80
78
|
var ComponentPropsContext_1 = require("./components/ComponentPropsContext");
|
|
81
79
|
Object.defineProperty(exports, "ComponentPropsReactContext", { enumerable: true, get: function () { return ComponentPropsContext_1.ComponentPropsReactContext; } });
|
|
82
80
|
Object.defineProperty(exports, "ComponentPropsContext", { enumerable: true, get: function () { return ComponentPropsContext_1.ComponentPropsContext; } });
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MultisiteMiddleware = exports.PersonalizeMiddleware = exports.RedirectsMiddleware = exports.MiddlewareBase = exports.debug = void 0;
|
|
3
|
+
exports.MultisiteMiddleware = exports.PersonalizeMiddleware = exports.RedirectsMiddleware = exports.defineMiddleware = exports.Middleware = exports.MiddlewareBase = exports.debug = void 0;
|
|
4
4
|
var core_1 = require("@sitecore-content-sdk/core");
|
|
5
5
|
Object.defineProperty(exports, "debug", { enumerable: true, get: function () { return core_1.debug; } });
|
|
6
6
|
var middleware_1 = require("./middleware");
|
|
7
7
|
Object.defineProperty(exports, "MiddlewareBase", { enumerable: true, get: function () { return middleware_1.MiddlewareBase; } });
|
|
8
|
+
Object.defineProperty(exports, "Middleware", { enumerable: true, get: function () { return middleware_1.Middleware; } });
|
|
9
|
+
Object.defineProperty(exports, "defineMiddleware", { enumerable: true, get: function () { return middleware_1.defineMiddleware; } });
|
|
8
10
|
var redirects_middleware_1 = require("./redirects-middleware");
|
|
9
11
|
Object.defineProperty(exports, "RedirectsMiddleware", { enumerable: true, get: function () { return redirects_middleware_1.RedirectsMiddleware; } });
|
|
10
12
|
var personalize_middleware_1 = require("./personalize-middleware");
|
|
@@ -1,12 +1,34 @@
|
|
|
1
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
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MiddlewareBase = void 0;
|
|
12
|
+
exports.defineMiddleware = exports.MiddlewareBase = exports.Middleware = void 0;
|
|
13
|
+
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
14
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
4
15
|
const server_1 = require("next/server");
|
|
5
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Middleware class to be extended by all middleware implementations
|
|
18
|
+
*/
|
|
19
|
+
class Middleware {
|
|
20
|
+
}
|
|
21
|
+
exports.Middleware = Middleware;
|
|
22
|
+
/**
|
|
23
|
+
* Base middleware class with common methods
|
|
24
|
+
*/
|
|
25
|
+
class MiddlewareBase extends Middleware {
|
|
6
26
|
constructor(config) {
|
|
27
|
+
super();
|
|
7
28
|
this.config = config;
|
|
8
29
|
this.SITE_SYMBOL = 'sc_site';
|
|
9
30
|
this.REWRITE_HEADER_NAME = 'x-sc-rewrite';
|
|
31
|
+
this.siteResolver = new site_1.SiteResolver(config.sites);
|
|
10
32
|
this.defaultHostname = config.defaultHostname || 'localhost';
|
|
11
33
|
}
|
|
12
34
|
/**
|
|
@@ -29,12 +51,12 @@ class MiddlewareBase {
|
|
|
29
51
|
req.headers.get('purpose') === 'prefetch' || req.headers.get('Next-Router-Prefetch') === '1' // Pages Router // App Router
|
|
30
52
|
);
|
|
31
53
|
}
|
|
32
|
-
|
|
33
|
-
|
|
54
|
+
disabled(req, res) {
|
|
55
|
+
const { pathname } = req.nextUrl;
|
|
34
56
|
return (pathname.startsWith('/api/') || // Ignore Next.js API calls
|
|
35
57
|
pathname.startsWith('/sitecore/') || // Ignore Sitecore API calls
|
|
36
58
|
pathname.startsWith('/_next') || // Ignore next service calls
|
|
37
|
-
(
|
|
59
|
+
(this.config.skip && this.config.skip(req, res)));
|
|
38
60
|
}
|
|
39
61
|
/**
|
|
40
62
|
* Safely extract all headers for debug logging
|
|
@@ -53,7 +75,7 @@ class MiddlewareBase {
|
|
|
53
75
|
* @returns {string} language
|
|
54
76
|
*/
|
|
55
77
|
getLanguage(req) {
|
|
56
|
-
return req.nextUrl.locale || req.nextUrl.defaultLocale || 'en';
|
|
78
|
+
return req.nextUrl.locale || req.nextUrl.defaultLocale || this.config.defaultLanguage || 'en';
|
|
57
79
|
}
|
|
58
80
|
/**
|
|
59
81
|
* Extract 'host' header
|
|
@@ -74,9 +96,9 @@ class MiddlewareBase {
|
|
|
74
96
|
var _a;
|
|
75
97
|
const siteNameCookie = (_a = res === null || res === void 0 ? void 0 : res.cookies.get(this.SITE_SYMBOL)) === null || _a === void 0 ? void 0 : _a.value;
|
|
76
98
|
if (siteNameCookie)
|
|
77
|
-
return this.
|
|
99
|
+
return this.siteResolver.getByName(siteNameCookie);
|
|
78
100
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
79
|
-
return this.
|
|
101
|
+
return this.siteResolver.getByHost(hostname);
|
|
80
102
|
}
|
|
81
103
|
/**
|
|
82
104
|
* Create a rewrite response
|
|
@@ -95,3 +117,26 @@ class MiddlewareBase {
|
|
|
95
117
|
}
|
|
96
118
|
}
|
|
97
119
|
exports.MiddlewareBase = MiddlewareBase;
|
|
120
|
+
/**
|
|
121
|
+
* Define a middleware with a list of middlewares
|
|
122
|
+
* @param {Middleware[]} middlewares List of middlewares to execute
|
|
123
|
+
*/
|
|
124
|
+
const defineMiddleware = (...middlewares) => {
|
|
125
|
+
return {
|
|
126
|
+
/**
|
|
127
|
+
* Execute all middlewares
|
|
128
|
+
* @param {NextRequest} req request
|
|
129
|
+
* @param {NextFetchEvent} ev fetch event
|
|
130
|
+
* @param {NextResponse} [res] response
|
|
131
|
+
*/
|
|
132
|
+
exec: (req, ev, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
|
+
const response = res || server_1.NextResponse.next();
|
|
134
|
+
core_1.debug.common('middleware start');
|
|
135
|
+
const start = Date.now();
|
|
136
|
+
const middlewareResponse = yield middlewares.reduce((p, middleware) => p.then((res) => middleware.handle(req, res, ev)), Promise.resolve(response));
|
|
137
|
+
core_1.debug.common('middleware end in %dms', Date.now() - start);
|
|
138
|
+
return middlewareResponse;
|
|
139
|
+
}),
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
exports.defineMiddleware = defineMiddleware;
|
|
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.MultisiteMiddleware = void 0;
|
|
13
|
-
const server_1 = require("next/server");
|
|
14
13
|
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
15
14
|
const core_1 = require("@sitecore-content-sdk/core");
|
|
16
15
|
const middleware_1 = require("./middleware");
|
|
@@ -24,70 +23,67 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
24
23
|
constructor(config) {
|
|
25
24
|
super(config);
|
|
26
25
|
this.config = config;
|
|
27
|
-
this.
|
|
26
|
+
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
28
27
|
var _a;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const startTimestamp = Date.now();
|
|
33
|
-
core_1.debug.multisite('multisite middleware start: %o', {
|
|
34
|
-
pathname,
|
|
35
|
-
language,
|
|
36
|
-
hostname,
|
|
37
|
-
});
|
|
38
|
-
// Response will be provided if other middleware is run before us
|
|
39
|
-
let response = res || server_1.NextResponse.next();
|
|
40
|
-
if (this.isPreview(req) || this.excludeRoute(pathname)) {
|
|
41
|
-
core_1.debug.multisite('skipped (%s)', this.isPreview(req) ? 'preview' : 'route excluded');
|
|
42
|
-
return response;
|
|
28
|
+
if (!this.config.enabled) {
|
|
29
|
+
core_1.debug.multisite('skipped (multisite middleware is disabled globally)');
|
|
30
|
+
return res;
|
|
43
31
|
}
|
|
44
|
-
// Site name can be forced by query string parameter or cookie
|
|
45
|
-
const siteName = req.nextUrl.searchParams.get(this.SITE_SYMBOL) ||
|
|
46
|
-
(this.config.useCookieResolution &&
|
|
47
|
-
this.config.useCookieResolution(req) &&
|
|
48
|
-
((_a = req.cookies.get(this.SITE_SYMBOL)) === null || _a === void 0 ? void 0 : _a.value)) ||
|
|
49
|
-
this.config.siteResolver.getByHost(hostname).name;
|
|
50
|
-
// Rewrite to site specific path
|
|
51
|
-
const rewritePath = (0, site_1.getSiteRewrite)(pathname, {
|
|
52
|
-
siteName,
|
|
53
|
-
});
|
|
54
|
-
response = this.rewrite(rewritePath, req, response);
|
|
55
|
-
// default site cookie attributes
|
|
56
|
-
const defaultCookieAttributes = {
|
|
57
|
-
secure: true,
|
|
58
|
-
httpOnly: true,
|
|
59
|
-
sameSite: 'none',
|
|
60
|
-
};
|
|
61
|
-
// Share site name with the following executed middlewares
|
|
62
|
-
response.cookies.set(this.SITE_SYMBOL, siteName, defaultCookieAttributes);
|
|
63
|
-
core_1.debug.multisite('multisite middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
64
|
-
rewritePath,
|
|
65
|
-
siteName,
|
|
66
|
-
headers: this.extractDebugHeaders(response.headers),
|
|
67
|
-
cookies: response.cookies,
|
|
68
|
-
});
|
|
69
|
-
return response;
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Gets the Next.js middleware handler with error handling
|
|
74
|
-
* @returns middleware handler
|
|
75
|
-
*/
|
|
76
|
-
getHandler() {
|
|
77
|
-
return (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
78
32
|
try {
|
|
79
|
-
|
|
33
|
+
const pathname = req.nextUrl.pathname;
|
|
34
|
+
const language = this.getLanguage(req);
|
|
35
|
+
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
36
|
+
const startTimestamp = Date.now();
|
|
37
|
+
core_1.debug.multisite('multisite middleware start: %o', {
|
|
38
|
+
pathname,
|
|
39
|
+
language,
|
|
40
|
+
hostname,
|
|
41
|
+
});
|
|
42
|
+
if (this.disabled(req, res)) {
|
|
43
|
+
core_1.debug.multisite('skipped (multisite middleware is disabled)');
|
|
44
|
+
return res;
|
|
45
|
+
}
|
|
46
|
+
if (this.isPreview(req)) {
|
|
47
|
+
core_1.debug.multisite('skipped (preview)');
|
|
48
|
+
return res;
|
|
49
|
+
}
|
|
50
|
+
// Site name can be forced by query string parameter or cookie
|
|
51
|
+
const siteName = req.nextUrl.searchParams.get(this.SITE_SYMBOL) ||
|
|
52
|
+
(this.config.useCookieResolution &&
|
|
53
|
+
this.config.useCookieResolution(req) &&
|
|
54
|
+
((_a = req.cookies.get(this.SITE_SYMBOL)) === null || _a === void 0 ? void 0 : _a.value)) ||
|
|
55
|
+
this.siteResolver.getByHost(hostname).name;
|
|
56
|
+
// Rewrite to site specific path
|
|
57
|
+
const rewritePath = (0, site_1.getSiteRewrite)(pathname, {
|
|
58
|
+
siteName,
|
|
59
|
+
});
|
|
60
|
+
const response = this.rewrite(rewritePath, req, res);
|
|
61
|
+
// default site cookie attributes
|
|
62
|
+
const defaultCookieAttributes = {
|
|
63
|
+
secure: true,
|
|
64
|
+
httpOnly: true,
|
|
65
|
+
sameSite: 'none',
|
|
66
|
+
};
|
|
67
|
+
// Share site name with the following executed middlewares
|
|
68
|
+
response.cookies.set(this.SITE_SYMBOL, siteName, defaultCookieAttributes);
|
|
69
|
+
core_1.debug.multisite('multisite middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
70
|
+
rewritePath,
|
|
71
|
+
siteName,
|
|
72
|
+
headers: this.extractDebugHeaders(response.headers),
|
|
73
|
+
cookies: response.cookies,
|
|
74
|
+
});
|
|
75
|
+
return response;
|
|
80
76
|
}
|
|
81
77
|
catch (error) {
|
|
82
78
|
console.log('Multisite middleware failed:');
|
|
83
79
|
console.log(error);
|
|
84
|
-
return res
|
|
80
|
+
return res;
|
|
85
81
|
}
|
|
86
82
|
});
|
|
87
83
|
}
|
|
88
|
-
|
|
84
|
+
disabled(req, res) {
|
|
89
85
|
// ignore files
|
|
90
|
-
return pathname.includes('.') || super.
|
|
86
|
+
return req.nextUrl.pathname.includes('.') || super.disabled(req, res);
|
|
91
87
|
}
|
|
92
88
|
}
|
|
93
89
|
exports.MultisiteMiddleware = MultisiteMiddleware;
|