@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.
Files changed (98) hide show
  1. package/client.d.ts +1 -0
  2. package/client.js +1 -0
  3. package/component-props-loader.d.ts +1 -0
  4. package/component-props-loader.js +3 -0
  5. package/config.d.ts +1 -0
  6. package/config.js +1 -0
  7. package/dist/cjs/client/index.js +10 -0
  8. package/dist/cjs/client/sitecore-nextjs-client.js +109 -0
  9. package/dist/cjs/components/Link.js +8 -2
  10. package/dist/cjs/components/RichText.js +16 -4
  11. package/dist/cjs/config/define-cli-config.js +71 -0
  12. package/dist/cjs/config/index.js +7 -0
  13. package/dist/cjs/index.js +12 -14
  14. package/dist/cjs/middleware/index.js +3 -1
  15. package/dist/cjs/middleware/middleware.js +53 -8
  16. package/dist/cjs/middleware/multisite-middleware.js +50 -54
  17. package/dist/cjs/middleware/personalize-middleware.js +108 -111
  18. package/dist/cjs/middleware/redirects-middleware.js +99 -105
  19. package/dist/cjs/services/component-props-service.js +37 -50
  20. package/dist/cjs/sharedTypes/sitecore-page-props.js +2 -0
  21. package/dist/cjs/tools/component-props.loader.js +101 -0
  22. package/dist/cjs/tools/index.js +24 -0
  23. package/dist/cjs/tools/templating/byoc-component.js +69 -0
  24. package/dist/cjs/tools/templating/default-component.js +48 -0
  25. package/dist/cjs/tools/templating/generate-component-builder.js +71 -0
  26. package/dist/cjs/tools/templating/index.js +7 -0
  27. package/dist/cjs/tools/templating/templates/component-builder.js +59 -0
  28. package/dist/cjs/tools/templating/utils.js +18 -0
  29. package/dist/cjs/utils/index.js +2 -1
  30. package/dist/cjs/utils/utils.js +10 -1
  31. package/dist/esm/client/index.js +2 -0
  32. package/dist/esm/client/sitecore-nextjs-client.js +105 -0
  33. package/dist/esm/components/Link.js +8 -2
  34. package/dist/esm/components/RichText.js +14 -2
  35. package/dist/esm/config/define-cli-config.js +34 -0
  36. package/dist/esm/config/index.js +2 -0
  37. package/dist/esm/index.js +1 -2
  38. package/dist/esm/middleware/index.js +1 -1
  39. package/dist/esm/middleware/middleware.js +50 -7
  40. package/dist/esm/middleware/multisite-middleware.js +50 -54
  41. package/dist/esm/middleware/personalize-middleware.js +104 -107
  42. package/dist/esm/middleware/redirects-middleware.js +99 -105
  43. package/dist/esm/services/component-props-service.js +37 -50
  44. package/dist/esm/sharedTypes/sitecore-page-props.js +1 -0
  45. package/dist/esm/tools/component-props.loader.js +65 -0
  46. package/dist/esm/tools/index.js +2 -0
  47. package/dist/esm/tools/templating/byoc-component.js +61 -0
  48. package/dist/esm/tools/templating/default-component.js +40 -0
  49. package/dist/esm/tools/templating/generate-component-builder.js +63 -0
  50. package/dist/esm/tools/templating/index.js +2 -0
  51. package/dist/esm/tools/templating/templates/component-builder.js +55 -0
  52. package/dist/esm/tools/templating/utils.js +12 -0
  53. package/dist/esm/utils/index.js +1 -1
  54. package/dist/esm/utils/utils.js +8 -0
  55. package/package.json +8 -6
  56. package/tools.d.ts +1 -0
  57. package/tools.js +1 -0
  58. package/types/client/index.d.ts +2 -0
  59. package/types/client/sitecore-nextjs-client.d.ts +40 -0
  60. package/types/components/Link.d.ts +5 -0
  61. package/types/components/RichText.d.ts +7 -1
  62. package/types/config/define-cli-config.d.ts +8 -0
  63. package/types/config/index.d.ts +2 -0
  64. package/types/editing/editing-config-middleware.d.ts +1 -1
  65. package/types/editing/editing-render-middleware.d.ts +1 -29
  66. package/types/editing/index.d.ts +1 -1
  67. package/types/index.d.ts +4 -4
  68. package/types/middleware/index.d.ts +1 -1
  69. package/types/middleware/middleware.d.ts +42 -16
  70. package/types/middleware/multisite-middleware.d.ts +4 -13
  71. package/types/middleware/personalize-middleware.d.ts +7 -21
  72. package/types/middleware/redirects-middleware.d.ts +3 -13
  73. package/types/services/component-props-service.d.ts +6 -23
  74. package/types/sharedTypes/sitecore-page-props.d.ts +5 -0
  75. package/types/tools/component-props.loader.d.ts +7 -0
  76. package/types/tools/index.d.ts +2 -0
  77. package/types/tools/templating/byoc-component.d.ts +12 -0
  78. package/types/tools/templating/default-component.d.ts +12 -0
  79. package/types/tools/templating/generate-component-builder.d.ts +45 -0
  80. package/types/tools/templating/index.d.ts +2 -0
  81. package/types/tools/templating/templates/component-builder.d.ts +7 -0
  82. package/types/tools/templating/utils.d.ts +6 -0
  83. package/types/utils/index.d.ts +1 -1
  84. package/types/utils/utils.d.ts +2 -0
  85. package/dist/cjs/graphql/index.js +0 -7
  86. package/dist/cjs/services/base-graphql-sitemap-service.js +0 -206
  87. package/dist/cjs/services/graphql-sitemap-service.js +0 -64
  88. package/dist/cjs/services/mutisite-graphql-sitemap-service.js +0 -81
  89. package/dist/esm/graphql/index.js +0 -1
  90. package/dist/esm/services/base-graphql-sitemap-service.js +0 -201
  91. package/dist/esm/services/graphql-sitemap-service.js +0 -59
  92. package/dist/esm/services/mutisite-graphql-sitemap-service.js +0 -77
  93. package/graphql.d.ts +0 -1
  94. package/graphql.js +0 -1
  95. package/types/graphql/index.d.ts +0 -1
  96. package/types/services/base-graphql-sitemap-service.d.ts +0 -148
  97. package/types/services/graphql-sitemap-service.d.ts +0 -51
  98. 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';
@@ -0,0 +1,3 @@
1
+ const loader = require('./dist/cjs/tools/component-props.loader');
2
+
3
+ module.exports = 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 ? { 'data-nextjs-link': true } : {})),
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
- const prefetched = {};
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
- if (prefetchLinks && !prefetched[link.pathname]) {
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.MultisiteGraphQLSitemapService = exports.GraphQLSitemapService = 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 = exports.DefaultEmptyFieldEditingComponentImage = void 0;
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, "GraphQLSitemapXmlService", { enumerable: true, get: function () { return site_1.GraphQLSitemapXmlService; } });
73
- Object.defineProperty(exports, "GraphQLErrorPagesService", { enumerable: true, get: function () { return site_1.GraphQLErrorPagesService; } });
74
- Object.defineProperty(exports, "GraphQLRobotsService", { enumerable: true, get: function () { return site_1.GraphQLRobotsService; } });
75
- Object.defineProperty(exports, "SiteResolver", { enumerable: true, get: function () { return site_1.SiteResolver; } });
76
- Object.defineProperty(exports, "GraphQLSiteInfoService", { enumerable: true, get: function () { return site_1.GraphQLSiteInfoService; } });
77
- Object.defineProperty(exports, "getSiteRewrite", { enumerable: true, get: function () { return site_1.getSiteRewrite; } });
78
- Object.defineProperty(exports, "getSiteRewriteData", { enumerable: true, get: function () { return site_1.getSiteRewriteData; } });
79
- Object.defineProperty(exports, "normalizeSiteRewrite", { enumerable: true, get: function () { return site_1.normalizeSiteRewrite; } });
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
- class MiddlewareBase {
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
- excludeRoute(pathname) {
33
- var _a, _b;
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
- (((_a = this.config) === null || _a === void 0 ? void 0 : _a.excludeRoute) && ((_b = this.config) === null || _b === void 0 ? void 0 : _b.excludeRoute(pathname))));
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.config.siteResolver.getByName(siteNameCookie);
99
+ return this.siteResolver.getByName(siteNameCookie);
78
100
  const hostname = this.getHostHeader(req) || this.defaultHostname;
79
- return this.config.siteResolver.getByHost(hostname);
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.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
26
+ this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
28
27
  var _a;
29
- const pathname = req.nextUrl.pathname;
30
- const language = this.getLanguage(req);
31
- const hostname = this.getHostHeader(req) || this.defaultHostname;
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
- return yield this.handler(req, res);
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 || server_1.NextResponse.next();
80
+ return res;
85
81
  }
86
82
  });
87
83
  }
88
- excludeRoute(pathname) {
84
+ disabled(req, res) {
89
85
  // ignore files
90
- return pathname.includes('.') || super.excludeRoute(pathname);
86
+ return req.nextUrl.pathname.includes('.') || super.disabled(req, res);
91
87
  }
92
88
  }
93
89
  exports.MultisiteMiddleware = MultisiteMiddleware;