create-sitecore-jss 22.2.0-canary.5 → 22.2.0-canary.50

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 (195) hide show
  1. package/dist/bin.js +17 -42
  2. package/dist/common/index.js +5 -3
  3. package/dist/common/processes/install.js +1 -1
  4. package/dist/common/processes/next.js +6 -3
  5. package/dist/common/processes/transform.js +19 -19
  6. package/dist/common/prompts/base.js +0 -25
  7. package/dist/common/prompts/proxy.js +35 -0
  8. package/dist/common/prompts/sxp.js +34 -0
  9. package/dist/common/utils/helpers.js +29 -19
  10. package/dist/init-runner.js +6 -3
  11. package/dist/initializers/angular/index.js +0 -3
  12. package/dist/initializers/angular/prompts.js +6 -6
  13. package/dist/initializers/angular-sxp/index.js +8 -2
  14. package/dist/initializers/angular-xmcloud/index.js +28 -4
  15. package/dist/initializers/nextjs/index.js +2 -2
  16. package/dist/initializers/nextjs/prompts.js +2 -0
  17. package/dist/initializers/nextjs/remove-dev-dependencies.js +2 -2
  18. package/dist/initializers/nextjs-multisite/index.js +1 -1
  19. package/dist/initializers/nextjs-styleguide/index.js +1 -1
  20. package/dist/initializers/nextjs-styleguide-tracking/index.js +1 -1
  21. package/dist/initializers/nextjs-sxa/index.js +1 -1
  22. package/dist/initializers/nextjs-xmcloud/index.js +1 -1
  23. package/dist/initializers/node-xmcloud-proxy/index.js +2 -1
  24. package/dist/initializers/react/index.js +3 -3
  25. package/dist/initializers/react/prompts.js +1 -1
  26. package/dist/initializers/react-native/prompts.js +1 -0
  27. package/dist/initializers/vue/prompts.js +1 -1
  28. package/dist/templates/angular/.env +4 -5
  29. package/dist/templates/angular/.eslintrc +1 -0
  30. package/dist/templates/angular/package.json +0 -2
  31. package/dist/templates/angular/scripts/config/plugins/fallback.ts +0 -1
  32. package/dist/templates/angular/scripts/generate-component-factory.ts +8 -0
  33. package/dist/templates/angular/scripts/generate-config.ts +25 -6
  34. package/dist/templates/angular/scripts/update-graphql-fragment-data.ts +21 -30
  35. package/dist/templates/angular/server.bundle.ts +3 -23
  36. package/dist/templates/angular/server.exports.ts +13 -0
  37. package/dist/templates/angular/src/app/JssState.ts +2 -9
  38. package/dist/templates/angular/src/app/app.module.ts +1 -1
  39. package/dist/templates/angular/src/app/jss-context.server-side.service.ts +4 -2
  40. package/dist/templates/angular/src/app/jss-context.service.ts +14 -11
  41. package/dist/templates/angular/src/app/jss-graphql.service.ts +7 -7
  42. package/dist/templates/angular/src/app/layout/jss-layout.service.ts +2 -2
  43. package/dist/templates/angular/src/app/lib/dictionary-service-factory.ts +4 -1
  44. package/dist/templates/angular/src/app/lib/graphql-client-factory/config.ts +21 -0
  45. package/dist/templates/angular/src/app/lib/graphql-client-factory/index.ts +16 -0
  46. package/dist/templates/angular/src/app/lib/layout-service-factory.ts +1 -1
  47. package/dist/templates/angular/src/app/routing/layout/layout.component.ts +10 -9
  48. package/dist/templates/angular-sxp/.env +2 -0
  49. package/dist/templates/angular-sxp/scripts/config/plugins/disconnected.ts +4 -2
  50. package/dist/templates/angular-sxp/src/app/components/graph-ql-layout/graph-ql-layout.component.ts +1 -1
  51. package/dist/templates/angular-xmcloud/.env +7 -1
  52. package/dist/templates/angular-xmcloud/angular.json +33 -0
  53. package/dist/templates/angular-xmcloud/package.json +15 -10
  54. package/dist/templates/angular-xmcloud/scripts/bootstrap.ts +28 -0
  55. package/dist/templates/angular-xmcloud/scripts/config/plugins/xmcloud.ts +16 -0
  56. package/dist/templates/angular-xmcloud/scripts/generate-metadata.ts +25 -0
  57. package/dist/templates/angular-xmcloud/server.exports.ts +24 -0
  58. package/dist/templates/angular-xmcloud/src/app/components/app-components.shared.module.ts +21 -0
  59. package/dist/templates/angular-xmcloud/src/app/components/column-splitter/column-splitter.component.html +5 -0
  60. package/dist/templates/angular-xmcloud/src/app/components/column-splitter/column-splitter.component.ts +40 -0
  61. package/dist/templates/angular-xmcloud/src/app/components/container/container.component.html +14 -0
  62. package/dist/templates/angular-xmcloud/src/app/components/container/container.component.ts +30 -0
  63. package/dist/templates/angular-xmcloud/src/app/components/image/image.component.html +36 -0
  64. package/dist/templates/angular-xmcloud/src/app/components/image/image.component.ts +67 -0
  65. package/dist/templates/angular-xmcloud/src/app/components/link-list/link-list.component.html +15 -0
  66. package/dist/templates/angular-xmcloud/src/app/components/link-list/link-list.component.ts +41 -0
  67. package/dist/templates/angular-xmcloud/src/app/components/navigation/navigation-item.component.html +23 -0
  68. package/dist/templates/angular-xmcloud/src/app/components/navigation/navigation-item.component.ts +65 -0
  69. package/dist/templates/angular-xmcloud/src/app/components/navigation/navigation.component.html +21 -0
  70. package/dist/templates/angular-xmcloud/src/app/components/navigation/navigation.component.ts +49 -0
  71. package/dist/templates/angular-xmcloud/src/app/components/page-content/page-content.component.html +5 -0
  72. package/dist/templates/angular-xmcloud/src/app/components/page-content/page-content.component.ts +39 -0
  73. package/dist/templates/angular-xmcloud/src/app/components/partial-design-dynamic-placeholder/partial-design-dynamic-placeholder.component.html +1 -0
  74. package/dist/templates/angular-xmcloud/src/app/components/partial-design-dynamic-placeholder/partial-design-dynamic-placeholder.component.ts +15 -0
  75. package/dist/templates/angular-xmcloud/src/app/components/promo/promo.component.html +21 -0
  76. package/dist/templates/angular-xmcloud/src/app/components/promo/promo.component.ts +13 -0
  77. package/dist/templates/angular-xmcloud/src/app/components/richtext/richtext.component.html +7 -12
  78. package/dist/templates/angular-xmcloud/src/app/components/richtext/richtext.component.ts +6 -1
  79. package/dist/templates/angular-xmcloud/src/app/components/row-splitter/row-splitter.component.html +11 -0
  80. package/dist/templates/angular-xmcloud/src/app/components/row-splitter/row-splitter.component.ts +35 -0
  81. package/dist/templates/angular-xmcloud/src/app/components/sxa.component.ts +4 -4
  82. package/dist/templates/angular-xmcloud/src/app/components/title/title.component.html +10 -0
  83. package/dist/templates/angular-xmcloud/src/app/components/title/title.component.ts +56 -0
  84. package/dist/templates/angular-xmcloud/src/app/jss-link.service.ts +55 -0
  85. package/dist/templates/angular-xmcloud/src/app/lib/config.ts +2 -0
  86. package/dist/templates/angular-xmcloud/src/app/lib/graphql-client-factory/config.ts +58 -0
  87. package/dist/templates/angular-xmcloud/src/app/routing/layout/layout.component.html +38 -0
  88. package/dist/templates/angular-xmcloud/src/app/routing/layout/layout.component.ts +104 -0
  89. package/dist/templates/angular-xmcloud/src/app/routing/scripts/scripts.component.html +3 -0
  90. package/dist/templates/angular-xmcloud/src/app/routing/scripts/scripts.module.ts +10 -0
  91. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_component.scss +48 -0
  92. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_container.scss +64 -0
  93. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_fonts.scss +3 -0
  94. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_footer.scss +31 -0
  95. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_header.scss +51 -0
  96. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_navigation.scss +150 -0
  97. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_promo.scss +58 -0
  98. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_rich-text.scss +11 -0
  99. package/dist/templates/angular-xmcloud/src/assets/styles/basic/_variables.scss +10 -0
  100. package/dist/templates/angular-xmcloud/src/assets/styles/basic/main.scss +8 -0
  101. package/dist/templates/angular-xmcloud/src/assets/styles/main.scss +14 -0
  102. package/dist/templates/angular-xmcloud/src/assets/styles/sass/_app.scss +103 -0
  103. package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/_functions.scss +8 -0
  104. package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/_mixins.scss +121 -0
  105. package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/_vars.scss +3 -0
  106. package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/vars/_colors.scss +283 -0
  107. package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/vars/_fontSizes.scss +16 -0
  108. package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/vars/_margins.scss +11 -0
  109. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/fonts/_fonts.scss +1 -0
  110. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/fonts/index.scss +1 -0
  111. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/index.scss +3 -0
  112. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/links/_link-button.scss +26 -0
  113. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/links/index.scss +1 -0
  114. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/reset/_inputs.scss +58 -0
  115. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/reset/_links.scss +14 -0
  116. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/reset/_ui-datepicker.scss +7 -0
  117. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/richtext/_richtext-files-icons.scss +86 -0
  118. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/richtext/_richtext.scss +101 -0
  119. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/richtext/index.scss +2 -0
  120. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/typehead/_typehead.scss +95 -0
  121. package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/typehead/index.scss +1 -0
  122. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-column-splitter.scss +14 -0
  123. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-container.scss +27 -0
  124. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-image.scss +18 -0
  125. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-navigation.scss +51 -0
  126. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-promo.scss +42 -0
  127. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-richtext-content.scss +19 -0
  128. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_alignment.scss +26 -0
  129. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_boxed.scss +16 -0
  130. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_clearfix.scss +11 -0
  131. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_highlighted.scss +63 -0
  132. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_link-button.scss +16 -0
  133. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_promoted-box.scss +3 -0
  134. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/index.scss +6 -0
  135. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/container/_bordered.scss +24 -0
  136. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/container/_title-row-box.scss +66 -0
  137. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/container/index.scss +1 -0
  138. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image/_image-default-size.scss +6 -0
  139. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image/index.scss +1 -0
  140. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image-alignment/_image-left.scss +3 -0
  141. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image-alignment/_image-right.scss +3 -0
  142. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/index.scss +17 -0
  143. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/layout/_acaindent.scss +5 -0
  144. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/layout/_background.scss +27 -0
  145. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/layout/index.scss +1 -0
  146. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/link-list/_component-link-list.scss +45 -0
  147. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/link-list/_list-vertical.scss +20 -0
  148. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/link-list/index.scss +2 -0
  149. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-fat.scss +58 -0
  150. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-main-horizontal-vertical.scss +176 -0
  151. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-mobile.scss +85 -0
  152. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-sidebar.scss +29 -0
  153. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_sitemap-navigation.scss +20 -0
  154. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/index.scss +5 -0
  155. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_absolute-bottom-link.scss +8 -0
  156. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_promo-hero.scss +40 -0
  157. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_promo-shadow.scss +42 -0
  158. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/index.scss +3 -0
  159. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/rich-text/_rich-text-lists.scss +63 -0
  160. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/rich-text/index.scss +1 -0
  161. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/spacing/_background-colors.scss +14 -0
  162. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/spacing/_indent.scss +13 -0
  163. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/spacing/index.scss +2 -0
  164. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/title/_component-title.scss +30 -0
  165. package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/title/index.scss +1 -0
  166. package/dist/templates/angular-xmcloud/src/assets/styles/sass/main.scss +4 -0
  167. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/index.scss +6 -0
  168. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/link-list/index.scss +0 -0
  169. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/navigation/index.scss +0 -0
  170. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/page-content/index.scss +0 -0
  171. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/promo/index.scss +0 -0
  172. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/rich-text/index.scss +0 -0
  173. package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/title/index.scss +0 -0
  174. package/dist/templates/nextjs/package.json +1 -1
  175. package/dist/templates/nextjs/scripts/config/plugins/fallback.ts +0 -1
  176. package/dist/templates/nextjs/scripts/generate-config.ts +8 -1
  177. package/dist/templates/nextjs/src/lib/page-props-factory/plugins/component-props.ts +2 -1
  178. package/dist/templates/nextjs-styleguide/scripts/config/plugins/disconnected.ts +1 -0
  179. package/dist/templates/nextjs-sxa/src/assets/sass/components/_component-image.scss +1 -1
  180. package/dist/templates/nextjs-sxa/src/components/Container.tsx +6 -14
  181. package/dist/templates/nextjs-xmcloud/src/lib/page-props-factory/plugins/component-themes.ts +2 -1
  182. package/dist/templates/nextjs-xmcloud/src/lib/page-props-factory/plugins/preview-mode.ts +2 -1
  183. package/dist/templates/node-headless-ssr-proxy/src/config.ts +3 -3
  184. package/dist/templates/node-headless-ssr-proxy/src/httpAgents.ts +2 -2
  185. package/dist/templates/node-headless-ssr-proxy/src/index.ts +9 -2
  186. package/dist/templates/node-xmcloud-proxy/.env +6 -0
  187. package/dist/templates/node-xmcloud-proxy/package.json +3 -2
  188. package/dist/templates/node-xmcloud-proxy/src/config.ts +8 -2
  189. package/dist/templates/node-xmcloud-proxy/src/index.ts +48 -5
  190. package/dist/templates/node-xmcloud-proxy/src/types.ts +10 -42
  191. package/dist/templates/react/scripts/generate-config.js +10 -3
  192. package/dist/templates/vue/scripts/generate-config.js +5 -0
  193. package/package.json +2 -2
  194. package/dist/templates/angular/src/app/lib/graphql-client-factory.ts +0 -28
  195. package/dist/templates/angular-xmcloud/src/app/lib/graphql-client-factory.ts +0 -44
@@ -41,7 +41,7 @@ class NextjsStyleguideInitializer {
41
41
  init(args) {
42
42
  var _a, _b, _c, _d, _e, _f;
43
43
  return __awaiter(this, void 0, void 0, function* () {
44
- const pkg = (0, common_1.openPackageJson)(`${args.destination}${path_1.sep}package.json`);
44
+ const pkg = (0, common_1.openJsonFile)(`${args.destination}${path_1.sep}package.json`);
45
45
  const mergedArgs = Object.assign(Object.assign({}, args), { appName: args.appName || ((_a = pkg === null || pkg === void 0 ? void 0 : pkg.config) === null || _a === void 0 ? void 0 : _a.appName) || common_1.DEFAULT_APPNAME, appPrefix: args.appPrefix || ((_b = pkg === null || pkg === void 0 ? void 0 : pkg.config) === null || _b === void 0 ? void 0 : _b.prefix) || false });
46
46
  const templatePath = path_1.default.resolve(__dirname, '../../templates/nextjs-styleguide-tracking');
47
47
  yield (0, common_1.transform)(templatePath, mergedArgs);
@@ -41,7 +41,7 @@ class NextjsSxaInitializer {
41
41
  init(args) {
42
42
  var _a, _b, _c, _d;
43
43
  return __awaiter(this, void 0, void 0, function* () {
44
- const pkg = (0, common_1.openPackageJson)(`${args.destination}${path_1.sep}package.json`);
44
+ const pkg = (0, common_1.openJsonFile)(`${args.destination}${path_1.sep}package.json`);
45
45
  // TODO: prompts for SXA
46
46
  // const answers = await prompt<StyleguideAnswer>(styleguidePrompts, args);
47
47
  const mergedArgs = Object.assign(Object.assign({}, args), { appName: args.appName || ((_a = pkg === null || pkg === void 0 ? void 0 : pkg.config) === null || _a === void 0 ? void 0 : _a.appName) || common_1.DEFAULT_APPNAME, appPrefix: args.appPrefix || ((_b = pkg === null || pkg === void 0 ? void 0 : pkg.config) === null || _b === void 0 ? void 0 : _b.prefix) || false });
@@ -42,7 +42,7 @@ class NextjsXMCloudInitializer {
42
42
  init(args) {
43
43
  var _a, _b, _c, _d;
44
44
  return __awaiter(this, void 0, void 0, function* () {
45
- const pkg = (0, common_1.openPackageJson)(`${args.destination}${path_1.sep}package.json`);
45
+ const pkg = (0, common_1.openJsonFile)(`${args.destination}${path_1.sep}package.json`);
46
46
  const mergedArgs = Object.assign(Object.assign({}, args), { appName: args.appName || ((_a = pkg === null || pkg === void 0 ? void 0 : pkg.config) === null || _a === void 0 ? void 0 : _a.appName) || common_1.DEFAULT_APPNAME, appPrefix: args.appPrefix || ((_b = pkg === null || pkg === void 0 ? void 0 : pkg.config) === null || _b === void 0 ? void 0 : _b.prefix) || false });
47
47
  const templatePath = path_1.default.resolve(__dirname, '../../templates/nextjs-xmcloud');
48
48
  yield (0, common_1.transform)(templatePath, mergedArgs);
@@ -21,7 +21,8 @@ class AngularXmCloudInitializer {
21
21
  init(args) {
22
22
  return __awaiter(this, void 0, void 0, function* () {
23
23
  const templatePath = path_1.default.resolve(__dirname, '../../templates/node-xmcloud-proxy');
24
- yield (0, common_1.transform)(templatePath, args);
24
+ const modifiedArgs = Object.assign(Object.assign({}, args), { destination: args.proxyAppDestination || args.destination });
25
+ yield (0, common_1.transform)(templatePath, modifiedArgs);
25
26
  const response = {
26
27
  appName: 'node-xmcloud-proxy',
27
28
  };
@@ -52,7 +52,7 @@ class ReactInitializer {
52
52
  yield (0, common_1.transform)(templatePath, mergedArgs);
53
53
  const isDev = (0, common_1.isDevEnvironment)(args.destination);
54
54
  const pkgPath = path_1.default.resolve(`${args.destination}${path_1.sep}package.json`);
55
- const pkg = (0, common_1.openPackageJson)(pkgPath);
55
+ const pkg = (0, common_1.openJsonFile)(pkgPath);
56
56
  if (isDev) {
57
57
  Object.entries(pkg.scripts).forEach(([key, value]) => {
58
58
  // Can't rewire `eject` script
@@ -61,14 +61,14 @@ class ReactInitializer {
61
61
  // It's required to start each command using `react-app-rewired`, to solve duplicate `react` issue
62
62
  pkg.scripts[key] = value.replace('react-scripts', 'react-app-rewired');
63
63
  });
64
- (0, common_1.writePackageJson)(pkg, pkgPath);
64
+ (0, common_1.writeJsonFile)(pkg, pkgPath);
65
65
  }
66
66
  else {
67
67
  // Don't need to rewire anything if we are not in the dev env
68
68
  delete pkg.devDependencies['react-app-rewired'];
69
69
  // Remove webpack overrides
70
70
  (0, common_1.removeFile)(path_1.default.resolve(`${args.destination}${path_1.sep}config-overrides.js`));
71
- (0, common_1.writePackageJson)(pkg, pkgPath);
71
+ (0, common_1.writeJsonFile)(pkg, pkgPath);
72
72
  }
73
73
  const response = {
74
74
  nextSteps: [`* Connect to Sitecore with ${chalk_1.default.green('jss setup')} (optional)`],
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.prompts = void 0;
4
4
  const common_1 = require("../../common");
5
- exports.prompts = [...common_1.clientAppPrompts, ...common_1.styleguidePrompts];
5
+ exports.prompts = [...common_1.clientAppPrompts, ...common_1.sxpPrompts, ...common_1.styleguidePrompts];
@@ -4,5 +4,6 @@ exports.prompts = void 0;
4
4
  const common_1 = require("../../common");
5
5
  exports.prompts = [
6
6
  ...common_1.clientAppPrompts.filter((p) => p.name !== 'fetchWith'),
7
+ ...common_1.sxpPrompts,
7
8
  ...common_1.styleguidePrompts,
8
9
  ];
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.prompts = void 0;
4
4
  const common_1 = require("../../common");
5
- exports.prompts = [...common_1.clientAppPrompts, ...common_1.styleguidePrompts];
5
+ exports.prompts = [...common_1.clientAppPrompts, ...common_1.sxpPrompts, ...common_1.styleguidePrompts];
@@ -1,3 +1,5 @@
1
+ # ====== Sitecore Preview / Delivery Edge ======
2
+
1
3
  # Your Sitecore API key is needed to build the app. Typically, the API key is
2
4
  # defined in `scjssconfig.json` (as `sitecore.apiKey`). This file may not exist
3
5
  # when building locally (if you've never run `jss setup`), or when building in a
@@ -17,15 +19,12 @@ SITECORE_API_HOST=
17
19
  # the resolved Sitecore API hostname + the `graphQLEndpointPath` defined in your `package.json`.
18
20
  GRAPH_QL_ENDPOINT=
19
21
 
22
+ # ==============================================
23
+
20
24
  # Your Sitecore site name.
21
25
  # Uses your `package.json` config `appName` if empty.
22
26
  SITECORE_SITE_NAME=
23
27
 
24
- <% if (!locals.xmcloud) { -%>
25
- # The way in which layout and dictionary data is fetched from Sitecore
26
- FETCH_WITH=<%- fetchWith %>
27
- <% } -%>
28
-
29
28
  # Your default app language.
30
29
  DEFAULT_LANGUAGE=
31
30
 
@@ -20,6 +20,7 @@
20
20
  "plugin:@angular-eslint/template/process-inline-templates"
21
21
  ],
22
22
  "rules": {
23
+ "@angular-eslint/no-host-metadata-property": "off",
23
24
  "@angular-eslint/component-selector": [
24
25
  "error",
25
26
  {
@@ -81,7 +81,6 @@
81
81
  "@sitecore-jss/sitecore-jss-angular-schematics": "~22.2.0-canary",
82
82
  "@sitecore-jss/sitecore-jss-cli": "~22.2.0-canary",
83
83
  "@sitecore-jss/sitecore-jss-dev-tools": "~22.2.0-canary",
84
- "@types/isomorphic-fetch": "0.0.35",
85
84
  "@types/jasmine": "~3.6.7",
86
85
  "@types/jasminewd2": "~2.0.8",
87
86
  "@types/node": "~20.14.10",
@@ -99,7 +98,6 @@
99
98
  "eslint-plugin-import": "2.29.1",
100
99
  "eslint-plugin-jsdoc": "48.7.0",
101
100
  "eslint-plugin-prefer-arrow": "1.2.3",
102
- "isomorphic-fetch": "^3.0.0",
103
101
  "jasmine-core": "~3.7.1",
104
102
  "jasmine-spec-reporter": "~6.0.0",
105
103
  "karma": "^6.3.2",
@@ -12,7 +12,6 @@ class FallbackPlugin implements ConfigPlugin {
12
12
  async exec(config: JssConfig) {
13
13
  return Object.assign({}, config, {
14
14
  defaultLanguage: config.defaultLanguage || 'en',
15
- sitecoreApiKey: config.sitecoreApiKey || 'no-api-key-set',
16
15
  <% if (!locals.xmcloud) { -%>
17
16
  layoutServiceConfigurationName: config.layoutServiceConfigurationName || 'default',
18
17
  <% } -%>
@@ -79,12 +79,14 @@ function generateComponentFactory() {
79
79
  const registrations: string[] = [];
80
80
  const lazyRegistrations: string[] = [];
81
81
  const declarations: string[] = [];
82
+ const components: string[] = [];
82
83
 
83
84
  packages.forEach((p) => {
84
85
  const variables = p.components
85
86
  .map((c) => {
86
87
  registrations.push(`{ name: '${c.componentName}', type: ${c.moduleName} },`);
87
88
  declarations.push(`${c.moduleName},`);
89
+ components.push(c.componentName);
88
90
 
89
91
  return c.moduleName;
90
92
  })
@@ -118,6 +120,8 @@ function generateComponentFactory() {
118
120
  const componentName = componentClassMatch[1];
119
121
  const importVarName = `${componentName}Component`;
120
122
 
123
+ components.push(componentName);
124
+
121
125
  // check for lazy loading needs
122
126
  const moduleFilePath = path.join(componentRootPath, componentFolder, `${componentFolder}.module.ts`);
123
127
  const isLazyLoaded = fs.existsSync(moduleFilePath);
@@ -144,6 +148,10 @@ import { JssModule } from '@sitecore-jss/sitecore-jss-angular';
144
148
  import { AppComponentsSharedModule } from './app-components.shared.module';
145
149
  ${imports.join('\n')}
146
150
 
151
+ export const components = [
152
+ ${components.map((c) => `'${c}'`).join(',\n ')}
153
+ ];
154
+
147
155
  @NgModule({
148
156
  imports: [
149
157
  AppComponentsSharedModule,
@@ -1,3 +1,4 @@
1
+ import 'dotenv/config';
1
2
  import * as fs from 'fs';
2
3
  import * as path from 'path';
3
4
  import { constantCase } from 'constant-case';
@@ -23,8 +24,16 @@ const defaultConfigValue: JssConfig = {
23
24
  defaultServerRoute: '/',
24
25
  };
25
26
 
26
- generateConfig('src/environments/environment.js', defaultConfigValue, { production: false });
27
- generateConfig('src/environments/environment.prod.js', defaultConfigValue, { production: true });
27
+ async function main() {
28
+ await generateConfig('src/environments/environment.js', defaultConfigValue, {
29
+ production: false,
30
+ });
31
+ await generateConfig('src/environments/environment.prod.js', defaultConfigValue, {
32
+ production: true,
33
+ });
34
+ }
35
+
36
+ main();
28
37
 
29
38
  /**
30
39
  * Generates the JSS config based on config plugins (under ./config/plugins)
@@ -38,7 +47,15 @@ export function generateConfig(
38
47
  defaultConfig: JssConfig = defaultConfigValue,
39
48
  configOverrides?: { [key: string]: unknown }
40
49
  ) {
41
- jssConfigFactory
50
+ // Handle undefined values
51
+ defaultConfig = Object.keys(defaultConfig).reduce((acc, key) => {
52
+ return {
53
+ ...acc,
54
+ [key]: defaultConfig[key] || '',
55
+ };
56
+ }, {});
57
+
58
+ return jssConfigFactory
42
59
  .create(defaultConfig)
43
60
  .then((config) => {
44
61
  writeConfig(Object.assign(config, configOverrides), outputPath);
@@ -67,9 +84,11 @@ export function writeConfig(config: JssConfig, outputPath?: string) {
67
84
 
68
85
  // Set base configuration values, allowing override with environment variables
69
86
  Object.keys(config).forEach((prop) => {
70
- configText += `config.${prop} = process.env.${constantCase(prop)} || "${config[prop]
71
- ?.toString()
72
- .trim()}";\n`;
87
+ // Handle undefined values
88
+ const value = config[prop] || '';
89
+ configText += `config.${prop} = process.env.${constantCase(
90
+ prop
91
+ )} || "${value.toString().trim()}";\n`;
73
92
  });
74
93
 
75
94
  configText += `module.exports.environment = config;`;
@@ -1,6 +1,6 @@
1
- import * as fetch from 'isomorphic-fetch';
2
1
  import * as fs from 'fs';
3
- import { generateConfig } from './generate-config';
2
+ import clientFactory from 'lib/graphql-client-factory';
3
+ import { getGraphQLClientFactoryConfig } from 'lib/graphql-client-factory/config';
4
4
 
5
5
  // Apollo Client supports caching GraphQL responses, which can greatly reduce network traffic needs.
6
6
  // In order to work correctly with interfaces in GraphQL, it needs to know some basic information about
@@ -9,28 +9,23 @@ import { generateConfig } from './generate-config';
9
9
  //
10
10
  // The `jss graphql:update` command should be executed when Sitecore templates related to the site are altered.
11
11
 
12
- generateConfig('src/environments/environment.js');
12
+ import './generate-config';
13
13
 
14
- let jssConfig;
14
+ const clientFactoryConfig = getGraphQLClientFactoryConfig();
15
15
 
16
- try {
17
- jssConfig = require('../src/environments/environment').environment;
18
- } catch (e) {
19
- console.error(
20
- 'Unable to require JSS config. Ensure `jss setup` has been run, and the app has been started at least once after setup.'
21
- );
22
- console.error(e);
23
- process.exit(1);
24
- }
16
+ console.log(`Updating GraphQL fragment type data from ${clientFactoryConfig.endpoint}...`);
25
17
 
26
- console.log(`Updating GraphQL fragment type data from ${jssConfig.graphQLEndpoint}...`);
27
-
28
- fetch(jssConfig.graphQLEndpoint, {
29
- method: 'POST',
30
- headers: { 'Content-Type': 'application/json', sc_apikey: jssConfig.sitecoreApiKey },
31
- body: JSON.stringify({
32
- query: `
33
- {
18
+ clientFactory()
19
+ .request<{
20
+ [key: string]: unknown;
21
+ __schema: {
22
+ kind: string;
23
+ name: string;
24
+ types: { possibleTypes?: { name: string } }[];
25
+ };
26
+ }>(
27
+ `
28
+ {
34
29
  __schema {
35
30
  types {
36
31
  kind
@@ -41,22 +36,18 @@ fetch(jssConfig.graphQLEndpoint, {
41
36
  }
42
37
  }
43
38
  }
44
- `,
45
- }),
46
- })
47
- .then((result) => result.json())
39
+ `
40
+ )
48
41
  .then((result) => {
49
42
  // here we're filtering out any type information unrelated to unions or interfaces
50
- const filteredData = result.data.__schema.types.filter(
51
- (type: { possibleTypes: Array<string> }) => type.possibleTypes !== null
52
- );
43
+ const filteredData = result.__schema.types.filter((type) => type.possibleTypes !== null);
53
44
 
54
45
  const filteredResult = { ...result };
55
- filteredResult.data.__schema.types = filteredData;
46
+ filteredResult.__schema.types = filteredData;
56
47
 
57
48
  fs.writeFile(
58
49
  './src/graphql-fragment-types.ts',
59
- `export default ${JSON.stringify(filteredResult.data, null, 2)}`,
50
+ `export default ${JSON.stringify(filteredResult, null, 2)}`,
60
51
  (err) => {
61
52
  if (err) {
62
53
  console.error('Error writing GraphQLFragmentTypes file', err);
@@ -4,14 +4,12 @@ import { join } from 'path';
4
4
  import 'reflect-metadata';
5
5
  import 'zone.js';
6
6
  import { JssRouteBuilderService } from './src/app/routing/jss-route-builder.service';
7
- import { environment } from './src/environments/environment';
8
7
  import { AppServerModule, renderModule } from './src/main.server';
9
- import { clientFactory } from './src/app/lib/graphql-client-factory';
10
- import { dictionaryServiceFactory } from './src/app/lib/dictionary-service-factory';
11
- import { layoutServiceFactory } from './src/app/lib/layout-service-factory';
12
8
 
13
9
  export * from './src/main.server';
14
10
 
11
+ export * from './server.exports';
12
+
15
13
  const http = require('http');
16
14
  const https = require('https');
17
15
 
@@ -100,22 +98,4 @@ function parseRouteUrl(url: string) {
100
98
  };
101
99
  }
102
100
 
103
- const apiKey = environment.sitecoreApiKey;
104
- const siteName = environment.sitecoreSiteName;
105
- const defaultLanguage = environment.defaultLanguage;
106
- const graphQLEndpointPath = environment.graphQLEndpointPath;
107
- const graphQLEndpoint = environment.graphQLEndpoint;
108
-
109
- export {
110
- renderView,
111
- parseRouteUrl,
112
- setUpDefaultAgents,
113
- apiKey,
114
- siteName,
115
- clientFactory,
116
- dictionaryServiceFactory,
117
- layoutServiceFactory,
118
- defaultLanguage,
119
- graphQLEndpointPath,
120
- graphQLEndpoint,
121
- };
101
+ export { renderView, parseRouteUrl, setUpDefaultAgents };
@@ -0,0 +1,13 @@
1
+ import { environment } from './src/environments/environment';
2
+
3
+ /**
4
+ * Define the required configuration values to be exported from the server.bundle.ts.
5
+ */
6
+
7
+ const apiKey = environment.sitecoreApiKey;
8
+ const siteName = environment.sitecoreSiteName;
9
+
10
+ export {
11
+ apiKey,
12
+ siteName,
13
+ };
@@ -1,15 +1,8 @@
1
- import {
2
- RouteData,
3
- LayoutServiceContextData,
4
- } from '@sitecore-jss/sitecore-jss-angular';
1
+ import { BaseJssState } from '@sitecore-jss/sitecore-jss-angular';
5
2
  import { LayoutServiceError } from './layout/jss-layout.service';
6
3
 
7
- export class JssState<Fields = Record<string, unknown>> {
4
+ export class JssState extends BaseJssState {
8
5
  language: string;
9
6
  serverRoute: string;
10
7
  routeFetchError?: LayoutServiceError;
11
- sitecore?: LayoutServiceContextData & {
12
- route: RouteData<Fields>;
13
- };
14
- viewBag: { [key: string]: unknown };
15
8
  }
@@ -3,7 +3,6 @@ import { APP_BASE_HREF } from '@angular/common';
3
3
  import { HttpClientModule, HttpClient } from '@angular/common/http';
4
4
  import { RoutingModule } from './routing/routing.module';
5
5
  import { JssLayoutService } from './layout/jss-layout.service';
6
- import { JssContextService } from './jss-context.service';
7
6
  import { AppComponentsModule } from './components/app-components.module';
8
7
  import { AppComponent } from './app.component';
9
8
  import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
@@ -11,6 +10,7 @@ import { JssTranslationClientLoaderService } from './i18n/jss-translation-client
11
10
  import { JssTranslationLoaderService } from './i18n/jss-translation-loader.service';
12
11
  import { GraphQLModule } from './jss-graphql.module';
13
12
  import { JssMetaService } from './jss-meta.service';
13
+ import { JssContextService } from './jss-context.service';
14
14
 
15
15
  @NgModule({
16
16
  imports: [
@@ -3,6 +3,7 @@ import { JssContextService, jssKey } from './jss-context.service';
3
3
  import { JssState } from './JssState';
4
4
  import { Observable, of as observableOf } from 'rxjs';
5
5
  import { JssLayoutService } from './layout/jss-layout.service';
6
+ import { JssStateService } from '@sitecore-jss/sitecore-jss-angular';
6
7
 
7
8
  /**
8
9
  * Stores the JSS app's context (current route and Sitecore context data).
@@ -14,10 +15,11 @@ export class JssContextServerSideService extends JssContextService {
14
15
  constructor(
15
16
  protected transferState: TransferState,
16
17
  protected layoutService: JssLayoutService,
18
+ protected stateService: JssStateService<JssState>,
17
19
  // this initial state from sitecore is injected by server.bundle for "integrated" mode
18
20
  @Inject('JSS_SERVER_LAYOUT_DATA') private serverToSsrState: JssState
19
21
  ) {
20
- super(transferState, layoutService);
22
+ super(transferState, layoutService, stateService);
21
23
  }
22
24
  changeRoute(_route: string, _language: string): Observable<JssState> {
23
25
  // console.log('Server route change to ' + route);
@@ -34,7 +36,7 @@ export class JssContextServerSideService extends JssContextService {
34
36
  }
35
37
 
36
38
  // read initial state from data injected via server.bundle wrapper
37
- this.state.next(this.serverToSsrState);
39
+ this.stateService.setState(this.serverToSsrState);
38
40
 
39
41
  // place the initial state into TransferState for the client
40
42
  this.transferState.set<JssState>(jssKey, this.serverToSsrState);
@@ -1,9 +1,9 @@
1
1
  import { Injectable, TransferState, makeStateKey } from '@angular/core';
2
- import { LayoutServiceData } from '@sitecore-jss/sitecore-jss-angular';
2
+ import { LayoutServiceData, JssStateService } from '@sitecore-jss/sitecore-jss-angular';
3
3
  import { map, shareReplay, catchError } from 'rxjs/operators';
4
- import { Observable, of as observableOf, BehaviorSubject } from 'rxjs';
5
- import { JssState } from './JssState';
4
+ import { Observable, of as observableOf } from 'rxjs';
6
5
  import { JssLayoutService, LayoutServiceError } from './layout/jss-layout.service';
6
+ import { JssState } from './JssState';
7
7
 
8
8
  export const jssKey = makeStateKey<JssState>('jss');
9
9
 
@@ -16,14 +16,17 @@ export const jssKey = makeStateKey<JssState>('jss');
16
16
  export class JssContextService {
17
17
  // components can subscribe to this (or use getValue()) to get access to latest data from Layout Service,
18
18
  // as well as current language and server route
19
- state: BehaviorSubject<JssState>;
20
-
21
- constructor(protected transferState: TransferState, protected layoutService: JssLayoutService) {
22
- this.state = new BehaviorSubject<JssState>(new JssState());
19
+ get state() {
20
+ return this.stateService.state;
21
+ }
22
+ get stateValue() {
23
+ return this.stateService.stateValue;
24
+ }
25
+ constructor(protected transferState: TransferState, protected layoutService: JssLayoutService, protected stateService: JssStateService<JssState>) {
23
26
  }
24
27
 
25
28
  changeLanguage(language: string) {
26
- this.state.next({ ...this.state.value, language });
29
+ this.stateService.setState({ ...this.stateService.stateValue, language });
27
30
  }
28
31
 
29
32
  // primarily invoked by JssRouteResolver on URL/route change
@@ -33,11 +36,11 @@ export class JssContextService {
33
36
  if (foundInitialState) {
34
37
  const jssState = this.transferState.get<JssState>(jssKey, null);
35
38
  this.transferState.remove(jssKey);
36
- this.state.next(jssState);
39
+ this.stateService.setState(jssState);
37
40
  return observableOf(jssState);
38
41
  }
39
42
 
40
- const appLanguage = this.state.value.language || language;
43
+ const appLanguage = this.stateService.stateValue.language || language;
41
44
 
42
45
  const jssState$ = this.layoutService.getRouteData(route, appLanguage).pipe(
43
46
  map((routeData) => {
@@ -61,7 +64,7 @@ export class JssContextService {
61
64
 
62
65
  // subscribe to it ourselves so we can maintain current state
63
66
  jssState$.subscribe((jssState) => {
64
- this.state.next(jssState);
67
+ this.stateService.setState(jssState);
65
68
  });
66
69
 
67
70
  return jssState$;
@@ -43,7 +43,7 @@ export class JssGraphQLService {
43
43
  ) {
44
44
  this.isEditingOrPreviewingAndSsr =
45
45
  isPlatformServer(this.platformId) &&
46
- this.sitecoreContext.state.value.sitecore.context.pageState !== 'normal';
46
+ this.sitecoreContext.stateValue.sitecore.context.pageState !== 'normal';
47
47
  }
48
48
 
49
49
  private static extractVariableNames(query: DocumentNode) {
@@ -127,19 +127,19 @@ export class JssGraphQLService {
127
127
 
128
128
  if (
129
129
  usedVariables.contextItem &&
130
- this.sitecoreContext.state.value.sitecore &&
131
- this.sitecoreContext.state.value.sitecore.route &&
132
- this.sitecoreContext.state.value.sitecore.route.itemId
130
+ this.sitecoreContext.stateValue.sitecore &&
131
+ this.sitecoreContext.stateValue.sitecore.route &&
132
+ this.sitecoreContext.stateValue.sitecore.route.itemId
133
133
  ) {
134
- (variables as EmptyObject).contextItem = this.sitecoreContext.state.value.sitecore.route.itemId;
134
+ (variables as EmptyObject).contextItem = this.sitecoreContext.stateValue.sitecore.route.itemId;
135
135
  }
136
136
 
137
137
  // pass language as a variable to the query, if language exists as a variable and in sitecoreContext
138
138
  if (
139
139
  usedVariables.language &&
140
- this.sitecoreContext.state.value.language
140
+ this.sitecoreContext.stateValue.language
141
141
  ) {
142
- (variables as EmptyObject).language = this.sitecoreContext.state.value.language;
142
+ (variables as EmptyObject).language = this.sitecoreContext.stateValue.language;
143
143
  }
144
144
 
145
145
  return variables;
@@ -7,14 +7,14 @@ import { from as fromPromise, Observable, throwError as observableThrow } from '
7
7
  import { catchError, map } from 'rxjs/operators';
8
8
  import { layoutServiceFactory } from '../lib/layout-service-factory';
9
9
 
10
- const layoutServiceInstance = layoutServiceFactory.create();
11
-
12
10
  export class LayoutServiceError {
13
11
  status: number;
14
12
  statusText: string;
15
13
  data?: { sitecore?: LayoutServiceContextData };
16
14
  }
17
15
 
16
+ const layoutServiceInstance = layoutServiceFactory.create();
17
+
18
18
  @Injectable()
19
19
  export class JssLayoutService {
20
20
  getRouteData(
@@ -7,7 +7,7 @@ import {
7
7
  <% } -%>
8
8
  } from '@sitecore-jss/sitecore-jss-angular';
9
9
  import { environment as env } from '../../environments/environment';
10
- import { clientFactory } from './graphql-client-factory';
10
+ import clientFactory from './graphql-client-factory';
11
11
 
12
12
  export class DictionaryServiceFactory {
13
13
  create(): DictionaryService {
@@ -24,6 +24,9 @@ export class DictionaryServiceFactory {
24
24
  new GraphQLDictionaryService({
25
25
  clientFactory,
26
26
  siteName: env.sitecoreSiteName,
27
+ <% if (locals.xmcloud) { -%>
28
+ useSiteQuery: true,
29
+ <% } -%>
27
30
  /*
28
31
  The Dictionary Service needs a root item ID in order to fetch dictionary phrases for the current
29
32
  app. If your Sitecore instance only has 1 JSS App, you can specify the root item ID here;
@@ -0,0 +1,21 @@
1
+ import { GraphQLRequestClientFactoryConfig } from '@sitecore-jss/sitecore-jss-angular/cjs';
2
+ import { environment as env } from '../../../environments/environment';
3
+
4
+ /**
5
+ * Gets the configuration for the GraphQLRequestClientFactory
6
+ * @returns GraphQLRequestClientFactoryConfig
7
+ */
8
+ export const getGraphQLClientFactoryConfig = () => {
9
+ let clientConfig: GraphQLRequestClientFactoryConfig;
10
+
11
+ if (env.graphQLEndpoint && env.sitecoreApiKey) {
12
+ clientConfig = {
13
+ endpoint: env.graphQLEndpoint,
14
+ apiKey: env.sitecoreApiKey,
15
+ };
16
+ } else {
17
+ throw new Error('Please configure your graphQLEndpoint and sitecoreApiKey.');
18
+ }
19
+
20
+ return clientConfig;
21
+ };
@@ -0,0 +1,16 @@
1
+ import { GraphQLRequestClient } from '@sitecore-jss/sitecore-jss-angular/cjs';
2
+ import { getGraphQLClientFactoryConfig } from './config';
3
+
4
+ // The GraphQLRequestClientFactory serves as the central hub for executing GraphQL requests within the application
5
+
6
+ /**
7
+ * Creates a new GraphQLRequestClientFactory instance
8
+ * @returns GraphQLRequestClientFactory instance
9
+ */
10
+ const createGraphQLClientFactory = () => {
11
+ const clientConfig = getGraphQLClientFactoryConfig();
12
+
13
+ return GraphQLRequestClient.createClientFactory(clientConfig);
14
+ };
15
+
16
+ export default createGraphQLClientFactory();
@@ -7,7 +7,7 @@ import {
7
7
  <% } -%>
8
8
  } from '@sitecore-jss/sitecore-jss-angular';
9
9
  import { environment } from '../../environments/environment';
10
- import { clientFactory } from './graphql-client-factory';
10
+ import clientFactory from './graphql-client-factory';
11
11
 
12
12
  export class LayoutServiceFactory {
13
13
  create(): LayoutService {