@zengenti/contensis-react-base 4.0.0-beta.2 → 4.0.0-beta.4

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 (212) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +18 -478
  3. package/cjs/{App-b56aca04.js → App-DXro6av4.js} +215 -234
  4. package/cjs/App-DXro6av4.js.map +1 -0
  5. package/cjs/{ChangePassword.container-ae35785e.js → ChangePassword.container-ECjEXixF.js} +209 -286
  6. package/cjs/ChangePassword.container-ECjEXixF.js.map +1 -0
  7. package/cjs/CookieHelper.class-C3Eqoze9.js +471 -0
  8. package/cjs/CookieHelper.class-C3Eqoze9.js.map +1 -0
  9. package/cjs/{RouteLoader-c06dccd5.js → RouteLoader-BFc-Wl6M.js} +55 -68
  10. package/cjs/RouteLoader-BFc-Wl6M.js.map +1 -0
  11. package/cjs/{ContensisDeliveryApi-4fcf049d.js → SSRContext-CFeZxG9H.js} +165 -119
  12. package/cjs/SSRContext-CFeZxG9H.js.map +1 -0
  13. package/cjs/{ToJs-a8d8f3f0.js → ToJs-C9jwV7YB.js} +26 -80
  14. package/cjs/ToJs-C9jwV7YB.js.map +1 -0
  15. package/cjs/{_commonjsHelpers-b3309d7b.js → _commonjsHelpers-BJu3ubxk.js} +1 -1
  16. package/cjs/_commonjsHelpers-BJu3ubxk.js.map +1 -0
  17. package/cjs/client.js +67 -65
  18. package/cjs/client.js.map +1 -1
  19. package/cjs/contensis-react-base.js +387 -3294
  20. package/cjs/contensis-react-base.js.map +1 -1
  21. package/cjs/{fromJSLeaveImmer-e74c673c.js → fromJSLeaveImmer-Blvlk4t2.js} +3 -7
  22. package/{esm/fromJSLeaveImmer-0114ffcf.js.map → cjs/fromJSLeaveImmer-Blvlk4t2.js.map} +1 -1
  23. package/cjs/redux.js +19 -20
  24. package/cjs/redux.js.map +1 -1
  25. package/cjs/routing.js +13 -6
  26. package/cjs/routing.js.map +1 -1
  27. package/cjs/sagas-CbZhaRNd.js +6010 -0
  28. package/cjs/sagas-CbZhaRNd.js.map +1 -0
  29. package/cjs/search.js +105 -305
  30. package/cjs/search.js.map +1 -1
  31. package/cjs/selectors-wCs5fHD4.js +460 -0
  32. package/cjs/selectors-wCs5fHD4.js.map +1 -0
  33. package/cjs/{version-34d91f68.js → store-D07FOXvM.js} +44 -114
  34. package/cjs/store-D07FOXvM.js.map +1 -0
  35. package/cjs/{urls-6fcaf4c6.js → urls-DVIwGZmd.js} +1 -1
  36. package/{esm/urls-eac9a747.js.map → cjs/urls-DVIwGZmd.js.map} +1 -1
  37. package/cjs/user.js +12 -20
  38. package/cjs/user.js.map +1 -1
  39. package/cjs/util.js +109 -116
  40. package/cjs/util.js.map +1 -1
  41. package/cjs/{version-a410c88e.js → version-B7XFkBhY.js} +19 -22
  42. package/{esm/version-9f29becb.js.map → cjs/version-B7XFkBhY.js.map} +1 -1
  43. package/cjs/version-CM-bJ62L.js +20 -0
  44. package/cjs/version-CM-bJ62L.js.map +1 -0
  45. package/esm/{App-83107d7e.js → App-CIlf4cl4.js} +176 -195
  46. package/esm/App-CIlf4cl4.js.map +1 -0
  47. package/esm/{ChangePassword.container-76fd5e9b.js → ChangePassword.container-C0tFq0Tf.js} +191 -250
  48. package/esm/ChangePassword.container-C0tFq0Tf.js.map +1 -0
  49. package/esm/CookieHelper.class-FTURFpz3.js +464 -0
  50. package/esm/CookieHelper.class-FTURFpz3.js.map +1 -0
  51. package/esm/{RouteLoader-29fd689a.js → RouteLoader-D7HmVx5l.js} +40 -53
  52. package/esm/RouteLoader-D7HmVx5l.js.map +1 -0
  53. package/esm/{ContensisDeliveryApi-fe57a037.js → SSRContext-CkiWIvde.js} +159 -120
  54. package/esm/SSRContext-CkiWIvde.js.map +1 -0
  55. package/esm/{ToJs-df57f31d.js → ToJs-CpPNdcXS.js} +24 -77
  56. package/esm/ToJs-CpPNdcXS.js.map +1 -0
  57. package/esm/{_commonjsHelpers-1789f0cf.js → _commonjsHelpers-BFTU3MAI.js} +1 -1
  58. package/esm/_commonjsHelpers-BFTU3MAI.js.map +1 -0
  59. package/esm/client.js +55 -53
  60. package/esm/client.js.map +1 -1
  61. package/esm/contensis-react-base.js +318 -3223
  62. package/esm/contensis-react-base.js.map +1 -1
  63. package/esm/{fromJSLeaveImmer-0114ffcf.js → fromJSLeaveImmer-C_YACmOf.js} +2 -6
  64. package/{cjs/fromJSLeaveImmer-e74c673c.js.map → esm/fromJSLeaveImmer-C_YACmOf.js.map} +1 -1
  65. package/esm/redux.js +10 -9
  66. package/esm/redux.js.map +1 -1
  67. package/esm/routing.js +13 -4
  68. package/esm/routing.js.map +1 -1
  69. package/esm/sagas-xJU-zOpn.js +5916 -0
  70. package/esm/sagas-xJU-zOpn.js.map +1 -0
  71. package/esm/search.js +113 -311
  72. package/esm/search.js.map +1 -1
  73. package/esm/selectors-CBdCY0u3.js +396 -0
  74. package/esm/selectors-CBdCY0u3.js.map +1 -0
  75. package/esm/{version-3d9911e2.js → store-v2gyr6u2.js} +38 -85
  76. package/esm/store-v2gyr6u2.js.map +1 -0
  77. package/esm/{urls-eac9a747.js → urls-DfCisos-.js} +1 -1
  78. package/{cjs/urls-6fcaf4c6.js.map → esm/urls-DfCisos-.js.map} +1 -1
  79. package/esm/user.js +7 -13
  80. package/esm/user.js.map +1 -1
  81. package/esm/util.js +67 -75
  82. package/esm/util.js.map +1 -1
  83. package/esm/version-D773TD9j.js +15 -0
  84. package/esm/version-D773TD9j.js.map +1 -0
  85. package/esm/{version-9f29becb.js → version-DvjTUbcA.js} +6 -9
  86. package/{cjs/version-a410c88e.js.map → esm/version-DvjTUbcA.js.map} +1 -1
  87. package/models/app/App.d.ts +1 -1
  88. package/models/app/pages/VersionInfo/components/VersionInfo.d.ts +4 -1
  89. package/models/app/pages/VersionInfo/components/VersionInfo.styled.d.ts +2 -1
  90. package/models/client/client.d.ts +1 -1
  91. package/models/index.d.ts +1 -2
  92. package/models/models/AppRouteProps.d.ts +11 -0
  93. package/models/{redux/appstate.d.ts → models/AppState.d.ts} +3 -3
  94. package/models/models/ContentTypeMapping.d.ts +89 -0
  95. package/models/models/EntryMapper.d.ts +3 -0
  96. package/models/models/GetRouteActionArgs.d.ts +15 -0
  97. package/models/models/MatchedRoute.d.ts +4 -0
  98. package/models/models/ReduxInjector.d.ts +5 -0
  99. package/models/models/RequireLogin.d.ts +6 -0
  100. package/models/models/RouteComponent.d.ts +4 -0
  101. package/models/models/RouteComponentProps.d.ts +9 -0
  102. package/models/models/RouteLoaderProps.d.ts +9 -0
  103. package/models/models/RouteNode.d.ts +5 -0
  104. package/models/models/SSRContext.d.ts +11 -0
  105. package/models/models/StaticRoute.d.ts +61 -0
  106. package/models/models/WithEvents.d.ts +58 -0
  107. package/models/models/config/AppConfig.d.ts +12 -0
  108. package/models/{config.d.ts → models/config/ServerConfig.d.ts} +3 -12
  109. package/models/models/config/StateType.d.ts +1 -0
  110. package/models/models/config/index.d.ts +3 -0
  111. package/models/models/index.d.ts +16 -0
  112. package/models/redux/actions/index.d.ts +2 -2
  113. package/models/redux/sagas/navigation.d.ts +1 -3
  114. package/models/redux/selectors/index.d.ts +2 -2
  115. package/models/redux/store/injectors.d.ts +16 -4
  116. package/models/redux/store/store.d.ts +10 -4
  117. package/models/redux/types/index.d.ts +2 -2
  118. package/models/redux/types/navigation.d.ts +3 -3
  119. package/models/redux/types/version.d.ts +2 -2
  120. package/models/routing/components/Redirect.d.ts +1 -1
  121. package/models/routing/components/RouteLoader.d.ts +1 -1
  122. package/models/routing/components/StaticRouteLoader.d.ts +1 -1
  123. package/models/routing/components/Status.d.ts +1 -1
  124. package/models/routing/redux/actions.d.ts +3 -4
  125. package/models/routing/redux/selectors.d.ts +2 -2
  126. package/models/routing/redux/types.d.ts +11 -11
  127. package/models/routing/util/find-contenttype-mapping.d.ts +1 -1
  128. package/models/routing/util/queries.d.ts +2 -2
  129. package/models/search/containers/withListing.d.ts +4 -1
  130. package/models/search/containers/withSearch.d.ts +4 -1
  131. package/models/search/models/Queries.d.ts +4 -2
  132. package/models/search/models/Search.d.ts +8 -1
  133. package/models/search/models/SearchActions.d.ts +3 -2
  134. package/models/search/models/SearchState.d.ts +5 -1
  135. package/models/search/redux/reducers.d.ts +2 -257
  136. package/models/search/redux/schema.d.ts +1 -1
  137. package/models/search/redux/selectors.d.ts +5 -5
  138. package/models/search/search/ContensisDeliveryApi.d.ts +2 -2
  139. package/models/search/search/ToJs.d.ts +1 -1
  140. package/models/search/search/expressions.d.ts +3 -3
  141. package/models/search/search/util.d.ts +17 -2
  142. package/models/search/transformations/searchresult-to-state.mapper.d.ts +1 -2
  143. package/models/server/features/caching/cacheDuration.schema.d.ts +1 -0
  144. package/models/server/features/linkdepth-api/search.d.ts +1 -1
  145. package/models/server/features/static-assets/index.d.ts +1 -1
  146. package/models/server/internalServer.d.ts +1 -1
  147. package/models/server/util/bundles.d.ts +1 -1
  148. package/models/server/util/headers.d.ts +1 -1
  149. package/models/server/webApp.d.ts +1 -1
  150. package/models/user/components/Login.d.ts +1 -1
  151. package/models/user/components/LoginForm.d.ts +6 -6
  152. package/models/user/components/LogoutForm.d.ts +4 -4
  153. package/models/user/components.styled/Login.styled.d.ts +1 -1
  154. package/models/user/components.styled/LoginForm.styled.d.ts +1 -1
  155. package/models/user/hocs/withLogin.d.ts +4 -4
  156. package/models/user/hocs/withRegistration.d.ts +6 -3
  157. package/models/user/hooks/useLogin.d.ts +4 -4
  158. package/models/user/redux/actions.d.ts +7 -6
  159. package/models/user/redux/sagas/index.d.ts +1 -1
  160. package/models/user/redux/sagas/login.d.ts +5 -17
  161. package/models/user/redux/selectors.d.ts +1 -2
  162. package/models/user/redux/types.d.ts +21 -21
  163. package/models/user/state.d.ts +12 -0
  164. package/models/user/transformations/mapClientCredentials.d.ts +3 -1
  165. package/models/user/util/ContensisManagementApi.d.ts +10 -9
  166. package/models/user/util/CookieConstants.d.ts +1 -0
  167. package/models/user/util/CookieHelper.class.d.ts +8 -4
  168. package/models/user/util/LoginHelper.class.d.ts +25 -37
  169. package/models/user/util/OidcUserManager.d.ts +1 -1
  170. package/models/user/util/matchGroups.d.ts +1 -1
  171. package/models/util/CachedDeliveryApi.d.ts +11 -10
  172. package/models/util/ContensisDeliveryApi.d.ts +11 -7
  173. package/models/util/SSRContext.d.ts +29 -0
  174. package/models/util/index.d.ts +1 -0
  175. package/models/util/json-mapper.d.ts +4 -5
  176. package/package.json +71 -92
  177. package/cjs/App-b56aca04.js.map +0 -1
  178. package/cjs/ChangePassword.container-ae35785e.js.map +0 -1
  179. package/cjs/ContensisDeliveryApi-4fcf049d.js.map +0 -1
  180. package/cjs/CookieConstants-000427db.js +0 -10
  181. package/cjs/CookieConstants-000427db.js.map +0 -1
  182. package/cjs/RouteLoader-c06dccd5.js.map +0 -1
  183. package/cjs/ToJs-a8d8f3f0.js.map +0 -1
  184. package/cjs/_commonjsHelpers-b3309d7b.js.map +0 -1
  185. package/cjs/forms.js +0 -5998
  186. package/cjs/forms.js.map +0 -1
  187. package/cjs/reducers-73a03ef4.js +0 -257
  188. package/cjs/reducers-73a03ef4.js.map +0 -1
  189. package/cjs/sagas-570f23ba.js +0 -2175
  190. package/cjs/sagas-570f23ba.js.map +0 -1
  191. package/cjs/selectors-14caa813.js +0 -228
  192. package/cjs/selectors-14caa813.js.map +0 -1
  193. package/cjs/version-34d91f68.js.map +0 -1
  194. package/esm/App-83107d7e.js.map +0 -1
  195. package/esm/ChangePassword.container-76fd5e9b.js.map +0 -1
  196. package/esm/ContensisDeliveryApi-fe57a037.js.map +0 -1
  197. package/esm/CookieConstants-3d3b6531.js +0 -6
  198. package/esm/CookieConstants-3d3b6531.js.map +0 -1
  199. package/esm/RouteLoader-29fd689a.js.map +0 -1
  200. package/esm/ToJs-df57f31d.js.map +0 -1
  201. package/esm/_commonjsHelpers-1789f0cf.js.map +0 -1
  202. package/esm/forms.js +0 -5984
  203. package/esm/forms.js.map +0 -1
  204. package/esm/reducers-aa8cef1e.js +0 -234
  205. package/esm/reducers-aa8cef1e.js.map +0 -1
  206. package/esm/sagas-07e82e18.js +0 -2083
  207. package/esm/sagas-07e82e18.js.map +0 -1
  208. package/esm/selectors-691caf02.js +0 -186
  209. package/esm/selectors-691caf02.js.map +0 -1
  210. package/esm/version-3d9911e2.js.map +0 -1
  211. package/models/forms/index.d.ts +0 -1
  212. package/models/routing/routes.d.ts +0 -133
@@ -1,10 +1,17 @@
1
1
  'use strict';
2
2
 
3
+ var React = require('react');
4
+ var reactCookie = require('react-cookie');
5
+ var reactRedux = require('react-redux');
3
6
  var contensisDeliveryApi = require('contensis-delivery-api');
4
7
  var queryString = require('query-string');
5
- var selectors = require('./selectors-14caa813.js');
6
- var version = require('./version-34d91f68.js');
7
- var CookieConstants = require('./CookieConstants-000427db.js');
8
+ var selectors = require('./selectors-wCs5fHD4.js');
9
+ var store = require('./store-D07FOXvM.js');
10
+ var CookieHelper_class = require('./CookieHelper.class-C3Eqoze9.js');
11
+
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var React__default = /*#__PURE__*/_interopDefault(React);
8
15
 
9
16
  class CacheNode {
10
17
  constructor(key, value) {
@@ -13,9 +20,7 @@ class CacheNode {
13
20
  this.next = null;
14
21
  this.prev = null;
15
22
  }
16
-
17
23
  }
18
-
19
24
  class LruCache {
20
25
  constructor(limit = 100) {
21
26
  this.map = {};
@@ -24,7 +29,6 @@ class LruCache {
24
29
  this.limit = limit || 100;
25
30
  this.size = 0;
26
31
  }
27
-
28
32
  get(key) {
29
33
  if (this.map[key]) {
30
34
  let value = this.map[key].value;
@@ -34,10 +38,8 @@ class LruCache {
34
38
  return value;
35
39
  }
36
40
  }
37
-
38
41
  set(key, value) {
39
42
  let node = new CacheNode(key, value);
40
-
41
43
  if (this.map[key]) {
42
44
  this.remove(key);
43
45
  } else {
@@ -48,28 +50,21 @@ class LruCache {
48
50
  this.tail.next = null;
49
51
  }
50
52
  }
51
-
52
53
  this.setHead(node);
53
54
  }
54
-
55
55
  setHead(node) {
56
56
  node.next = this.head;
57
57
  node.prev = null;
58
-
59
58
  if (this.head) {
60
59
  this.head.prev = node;
61
60
  }
62
-
63
61
  this.head = node;
64
-
65
62
  if (!this.tail) {
66
63
  this.tail = node;
67
64
  }
68
-
69
65
  this.size++;
70
66
  this.map[node.key] = node;
71
67
  }
72
-
73
68
  remove(key) {
74
69
  let node = this.map[key];
75
70
  if (!node) return; // This is sometimes null and crashes the container without this check
@@ -79,80 +74,73 @@ class LruCache {
79
74
  } else {
80
75
  this.head = node.next;
81
76
  }
82
-
83
77
  if (node.next) {
84
78
  node.next.prev = node.prev;
85
79
  } else {
86
80
  this.tail = node.prev;
87
81
  }
88
-
89
82
  delete this.map[key];
90
83
  this.size--;
91
84
  }
92
-
93
85
  }
94
86
 
95
87
  // CachedSearch does not cache results in SSR by design
96
88
  class CachedSearch {
97
- constructor(cookies) {
89
+ constructor(ssr) {
90
+ var _this$ssr;
98
91
  this.cache = new LruCache();
99
- this.cookies = void 0;
100
- this.cookies = cookies;
92
+ this.ssr = ssr;
93
+ this.cookies = (_this$ssr = this.ssr) === null || _this$ssr === void 0 ? void 0 : _this$ssr.cookies.raw;
101
94
  }
102
-
103
95
  getClient(...args) {
104
- return new DeliveryApi(this.cookies).getClient(...args);
96
+ return new DeliveryApi(this.ssr).getClient(...args);
105
97
  }
106
-
107
98
  search(query, linkDepth = 0, project) {
108
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
99
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
109
100
  return this.request(`${project}+${JSON.stringify(query)}+${linkDepth}`, () => client.entries.search(query, linkDepth));
110
101
  }
111
-
112
102
  searchUsingPost(query, linkDepth = 0, project = '') {
113
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
103
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
114
104
  return this.request(`${project}+${JSON.stringify(query)}+${linkDepth}`, () => client.entries.searchUsingPost(query, linkDepth));
115
105
  }
116
-
117
- get(id, linkDepth = 0, versionStatus = 'published', project) {
118
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
119
- client.clientConfig.versionStatus = versionStatus;
106
+ get(id, linkDepth = 0, versionStatus = 'published', project, fields) {
107
+ const client = contensisDeliveryApi.Client.create({
108
+ ...getClientConfig(project, this.ssr),
109
+ versionStatus
110
+ });
120
111
  return this.request(id, () => client.entries.get({
121
112
  id,
122
- linkDepth
113
+ linkDepth,
114
+ fields
123
115
  }));
124
116
  }
125
-
126
117
  getContentType(id, project) {
127
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
118
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
128
119
  return this.request(`[CONTENT TYPE] ${id} ${project}`, () => client.contentTypes.get(id));
129
120
  }
130
-
131
- getRootNode(options, project) {
132
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
121
+ getRootNode(options, versionStatus = 'published', project) {
122
+ const client = contensisDeliveryApi.Client.create({
123
+ ...getClientConfig(project, this.ssr),
124
+ versionStatus
125
+ });
133
126
  return this.request(`${project} / ${JSON.stringify(options)}`, () => client.nodes.getRoot(options));
134
127
  }
135
-
136
128
  getNode(options, project) {
137
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
129
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
138
130
  return this.request(`${project} ${options && typeof options !== 'string' ? 'path' in options ? options.path : options.id : options} ${JSON.stringify(options)}`, () => client.nodes.get(options));
139
131
  }
140
-
141
132
  getAncestors(options, project) {
142
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
133
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
143
134
  return this.request(`${project} [A] ${options && typeof options !== 'string' && options.id || options} ${JSON.stringify(options)}`, () => client.nodes.getAncestors(options));
144
135
  }
145
-
146
136
  getChildren(options, project) {
147
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
137
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
148
138
  return this.request(`${project} [C] ${options && typeof options !== 'string' && options.id || options} ${JSON.stringify(options)}`, () => client.nodes.getChildren(options));
149
139
  }
150
-
151
140
  getSiblings(options, project) {
152
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
141
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
153
142
  return this.request(`${project} [S] ${options && typeof options !== 'string' && options.id || options} ${JSON.stringify(options)}`, () => client.nodes.getSiblings(options));
154
143
  }
155
-
156
144
  request(key, execute) {
157
145
  // do not cache results in SSR
158
146
  if (!this.cache.get(key) || typeof window == 'undefined') {
@@ -162,107 +150,126 @@ class CachedSearch {
162
150
  this.cache.remove(key);
163
151
  });
164
152
  }
165
-
166
153
  return this.cache.get(key);
167
154
  }
168
-
169
155
  }
170
-
171
156
  const cachedSearch = new CachedSearch();
172
- const cachedSearchWithCookies = cookies => new CachedSearch(cookies);
157
+ const cachedSearchWithCookies = ssr => new CachedSearch(ssr);
173
158
 
174
159
  const mapCookieHeader = cookies => typeof cookies === 'object' ? Object.entries(cookies).map(([name, value]) => `${name}=${value}`).join('; ') : cookies;
175
-
176
- const getSsrReferer = () => {
177
- if (typeof window === 'undefined') {
178
- const state = version.reduxStore.getState();
179
- const referer = `${selectors.selectCurrentHostname(state)}${selectors.selectCurrentPath(state)}${selectors.selectCurrentSearch(state)}`;
180
- return referer;
160
+ const getSsrReferer = ({
161
+ request
162
+ }) => {
163
+ if (request) {
164
+ try {
165
+ const url = new URL(request.url, `${request.protocol || `http`}://${request.headers.host}`);
166
+ return url.href;
167
+ } catch (ex) {
168
+ console.error(`getSsrReferer cannot parse url ${request.url} and host ${request.headers.host}`);
169
+ return request.url;
170
+ }
181
171
  }
182
172
 
173
+ // if (typeof window === 'undefined') {
174
+ // const state = reduxStore.getState();
175
+ // const referer = `${selectCurrentHostname(state)}${selectCurrentPath(
176
+ // state
177
+ // )}${selectCurrentSearch(state)}`;
178
+
179
+ // return referer;
180
+ // }
183
181
  return '';
184
182
  };
185
183
 
186
- const storeSurrogateKeys = response => {
187
- const keys = response.headers.get ? response.headers.get('surrogate-key') : response.headers.map['surrogate-key'];
188
- if (keys) version.reduxStore === null || version.reduxStore === void 0 ? void 0 : version.reduxStore.dispatch(selectors.setSurrogateKeys(keys, response.url));
184
+ /**
185
+ * Store the surrogate-key header contents in redux state to output in SSR response
186
+ */
187
+ const storeSurrogateKeys = ssr => response => {
188
+ let keys = '';
189
+ if (response.status === 200) {
190
+ keys = response.headers.get ? response.headers.get('surrogate-key') : response.headers.map['surrogate-key'];
191
+ if (!keys) console.info(`[storeSurrogateKeys] No keys in ${response.url}`);
192
+ }
193
+ // Using imported reduxStore in SSR is unreliable during high
194
+ // concurrent loads and exists here as a best effort fallback
195
+ // in case the SSRContext is not provided
196
+ const put = (ssr === null || ssr === void 0 ? void 0 : ssr.dispatch) || (store.reduxStore === null || store.reduxStore === void 0 ? void 0 : store.reduxStore.dispatch);
197
+ put === null || put === void 0 || put(selectors.setSurrogateKeys(keys, response.url, response.status));
189
198
  };
190
199
 
191
- const getClientConfig = (project, cookies) => {
192
- const config = DELIVERY_API_CONFIG;
193
- /* global DELIVERY_API_CONFIG */
194
-
195
- config.responseHandler = {};
196
-
197
- if (project) {
198
- config.projectId = project;
199
- } // we only want the surrogate key header in a server context
200
-
200
+ /**
201
+ * Create a new Config object to create a DeliveryAPI Client
202
+ */
203
+ const deliveryApiConfig = ssr => {
204
+ const config = {
205
+ ...DELIVERY_API_CONFIG /* global DELIVERY_API_CONFIG */
206
+ };
201
207
 
208
+ // Add SSR headers and handlers
202
209
  if (typeof window === 'undefined') {
203
- config.defaultHeaders = Object.assign(config.defaultHeaders || {}, {
204
- referer: getSsrReferer(),
205
- 'x-require-surrogate-key': true,
206
- 'x-crb-ssr': true // add this for support tracing
210
+ config.defaultHeaders = {
211
+ 'x-require-surrogate-key': 'true',
212
+ // request surrogate-key response header
213
+ 'x-crb-ssr': 'true' // add this for support tracing
214
+ };
215
+ if (ssr) config.defaultHeaders.referer = getSsrReferer(ssr); // add this for support tracing
207
216
 
208
- });
209
- config.responseHandler[200] = storeSurrogateKeys;
217
+ config.responseHandler = {
218
+ [200]: storeSurrogateKeys(ssr)
219
+ }; // for handling page cache invalidation
210
220
  }
211
-
212
- if (typeof window !== 'undefined' && PROXY_DELIVERY_API
213
- /* global PROXY_DELIVERY_API */
214
- ) {
221
+ if (typeof window !== 'undefined' && PROXY_DELIVERY_API /* global PROXY_DELIVERY_API */) {
215
222
  // ensure a relative url is used to bypass the need for CORS (separate OPTIONS calls)
216
223
  config.rootUrl = '';
217
-
218
- config.responseHandler[404] = () => null;
224
+ config.responseHandler = {
225
+ [404]: () => null
226
+ };
219
227
  }
220
-
221
- if (cookies) {
222
- const cookieHeader = mapCookieHeader(CookieConstants.findLoginCookies(cookies));
223
-
228
+ return config;
229
+ };
230
+ const getClientConfig = (project, ssr) => {
231
+ const config = deliveryApiConfig(ssr);
232
+ if (project) {
233
+ config.projectId = project;
234
+ }
235
+ if (ssr !== null && ssr !== void 0 && ssr.cookies) {
236
+ const cookieHeader = mapCookieHeader(CookieHelper_class.findLoginCookies(ssr.cookies));
224
237
  if (cookieHeader) {
225
238
  config.defaultHeaders = Object.assign(config.defaultHeaders || {}, {
226
239
  Cookie: cookieHeader
227
240
  });
228
241
  }
229
242
  }
230
-
231
243
  return config;
232
- }; // export * from 'contensis-delivery-api';
244
+ };
233
245
 
234
- class DeliveryApi {
235
- constructor(cookies) {
236
- this.cookies = void 0;
246
+ // export * from 'contensis-delivery-api';
237
247
 
248
+ class DeliveryApi {
249
+ constructor(ssr) {
238
250
  this.getClientSideVersionStatus = () => {
239
251
  if (typeof window !== 'undefined') {
240
252
  // Allow overriding versionStatus with the querystring
241
253
  const {
242
254
  versionStatus
243
255
  } = queryString.parse(window.location.search);
244
- if (versionStatus) return versionStatus; // Client-side we will have a global variable set if rendered by SSR in production
245
-
246
- if (typeof window.versionStatus !== 'undefined') return window.versionStatus; // For localhost development we can only work out versionStatus from the current hostname
247
-
256
+ if (versionStatus) return versionStatus;
257
+ // Client-side we will have a global variable set if rendered by SSR in production
258
+ if (typeof window.versionStatus !== 'undefined') return window.versionStatus;
259
+ // For localhost development we can only work out versionStatus from the current hostname
248
260
  const currentHostname = window.location.hostname;
249
261
  return this.getVersionStatusFromHostname(currentHostname);
250
262
  }
251
-
252
263
  return null;
253
264
  };
254
-
255
265
  this.getServerSideVersionStatus = request => request.query.versionStatus || deliveryApi.getVersionStatusFromHeaders(request.headers) || deliveryApi.getVersionStatusFromHostname(request.hostname);
256
-
257
266
  this.getVersionStatusFromHeaders = headers => {
258
267
  const versionStatusHeader = headers['x-entry-versionstatus'];
259
268
  if (typeof versionStatusHeader !== 'undefined') return versionStatusHeader;
260
269
  return null;
261
270
  };
262
-
263
271
  this.getVersionStatusFromHostname = currentHostname => {
264
272
  if (currentHostname.indexOf('localhost') > -1) return 'latest';
265
-
266
273
  if (currentHostname.endsWith('contensis.cloud')) {
267
274
  if (currentHostname.indexOf('preview.') > -1) {
268
275
  return 'latest';
@@ -270,7 +277,6 @@ class DeliveryApi {
270
277
  return 'published';
271
278
  }
272
279
  }
273
-
274
280
  if (currentHostname.endsWith('cloud.contensis.com')) {
275
281
  if (currentHostname.indexOf('preview-') > -1) {
276
282
  return 'latest';
@@ -278,42 +284,82 @@ class DeliveryApi {
278
284
  return 'published';
279
285
  }
280
286
  }
281
-
282
287
  return 'published';
283
288
  };
284
-
285
289
  this.search = (query, linkDepth = 0, project) => {
286
- const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.cookies));
290
+ const client = contensisDeliveryApi.Client.create(getClientConfig(project, this.ssr));
287
291
  return client.entries.search(query, typeof linkDepth !== 'undefined' ? linkDepth : 1);
288
292
  };
289
-
290
- this.getClient = (versionStatus = 'published', project) => {
291
- const baseConfig = getClientConfig(project, this.cookies);
292
- baseConfig.versionStatus = versionStatus;
293
- return contensisDeliveryApi.Client.create(baseConfig);
294
- };
295
-
293
+ this.getClient = (versionStatus = 'published', project) => contensisDeliveryApi.Client.create({
294
+ ...getClientConfig(project, this.ssr),
295
+ versionStatus
296
+ });
296
297
  this.getEntry = (id, linkDepth = 0, versionStatus = 'published', project) => {
297
- const baseConfig = getClientConfig(project, this.cookies);
298
- baseConfig.versionStatus = versionStatus;
299
- const client = contensisDeliveryApi.Client.create(baseConfig); // return client.entries.get(id, linkDepth);
300
-
298
+ const client = contensisDeliveryApi.Client.create({
299
+ ...getClientConfig(project, this.ssr),
300
+ versionStatus
301
+ });
301
302
  return client.entries.get({
302
303
  id,
303
304
  linkDepth
304
305
  });
305
306
  };
306
-
307
- this.cookies = cookies;
307
+ this.ssr = ssr;
308
+ this.cookies = ssr === null || ssr === void 0 ? void 0 : ssr.cookies.raw;
308
309
  }
309
-
310
310
  }
311
311
  const deliveryApi = new DeliveryApi();
312
- const deliveryApiWithCookies = cookies => new DeliveryApi(cookies);
312
+ const deliveryApiWithCookies = ssr => new DeliveryApi(ssr);
313
+
314
+ const SSRContext = /*#__PURE__*/React.createContext(null);
315
+
316
+ /** SSRContextProvider allows us to hold and access request-scoped references
317
+ * throughout the component tree
318
+ *
319
+ * adding this in client side allows consumers to write universal code and use
320
+ * the same helpers and refs as in SSR */
321
+ const SSRContextProvider = ({
322
+ children,
323
+ request,
324
+ response
325
+ }) => {
326
+ // In SSR pass references to things in backing sagas
327
+ // we cannot access in a global scope
328
+ const dispatch = reactRedux.useDispatch();
329
+ const cookies = new CookieHelper_class.CookieHelper(...reactCookie.useCookies());
330
+ const api = cachedSearchWithCookies({
331
+ cookies,
332
+ dispatch,
333
+ request,
334
+ response
335
+ });
336
+ const [context] = React.useState({
337
+ api,
338
+ cookies,
339
+ dispatch,
340
+ request,
341
+ response
342
+ });
343
+ return /*#__PURE__*/React__default.default.createElement(SSRContext.Provider, {
344
+ value: {
345
+ ...context
346
+ }
347
+ }, children);
348
+ };
349
+ const useSSRContext = () => React.useContext(SSRContext);
350
+ const useDeliveryApi = () => {
351
+ const {
352
+ api
353
+ } = useSSRContext();
354
+ return api;
355
+ };
313
356
 
357
+ exports.SSRContextProvider = SSRContextProvider;
314
358
  exports.cachedSearch = cachedSearch;
315
359
  exports.cachedSearchWithCookies = cachedSearchWithCookies;
316
360
  exports.deliveryApi = deliveryApi;
317
361
  exports.deliveryApiWithCookies = deliveryApiWithCookies;
318
362
  exports.getClientConfig = getClientConfig;
319
- //# sourceMappingURL=ContensisDeliveryApi-4fcf049d.js.map
363
+ exports.useDeliveryApi = useDeliveryApi;
364
+ exports.useSSRContext = useSSRContext;
365
+ //# sourceMappingURL=SSRContext-CFeZxG9H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SSRContext-CFeZxG9H.js","sources":["../src/util/LruCache.js","../src/util/CachedDeliveryApi.ts","../src/util/ContensisDeliveryApi.ts","../src/util/SSRContext.tsx"],"sourcesContent":["class CacheNode {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.next = null;\n this.prev = null;\n }\n}\n\nexport class LruCache {\n constructor(limit = 100) {\n this.map = {};\n this.head = null;\n this.tail = null;\n this.limit = limit || 100;\n this.size = 0;\n }\n\n get(key) {\n if (this.map[key]) {\n let value = this.map[key].value;\n let node = new CacheNode(key, value);\n this.remove(key);\n this.setHead(node);\n return value;\n }\n }\n\n set(key, value) {\n let node = new CacheNode(key, value);\n if (this.map[key]) {\n this.remove(key);\n } else {\n if (this.size >= this.limit) {\n delete this.map[this.tail.key];\n this.size--;\n this.tail = this.tail.prev;\n this.tail.next = null;\n }\n }\n this.setHead(node);\n }\n\n setHead(node) {\n node.next = this.head;\n node.prev = null;\n if (this.head) {\n this.head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n this.size++;\n this.map[node.key] = node;\n }\n\n remove(key) {\n let node = this.map[key];\n if (!node) return; // This is sometimes null and crashes the container without this check\n\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n this.head = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n this.tail = node.prev;\n }\n delete this.map[key];\n this.size--;\n }\n}\n","import { VersionStatus } from 'contensis-core-api';\nimport { Client, Query } from 'contensis-delivery-api';\nimport {\n INodeOperations,\n NodeGetRootOptions,\n} from 'contensis-delivery-api/lib/models';\n\nimport {\n DeliveryApi,\n SSRContext,\n getClientConfig,\n} from './ContensisDeliveryApi';\nimport { LruCache } from './LruCache';\nimport { CookieObject } from '~/user/util/CookieConstants';\n\n// CachedSearch does not cache results in SSR by design\nclass CachedSearch {\n cache = new LruCache();\n cookies?: CookieObject;\n ssr?: SSRContext;\n\n constructor(ssr?: SSRContext) {\n this.ssr = ssr;\n this.cookies = this.ssr?.cookies.raw;\n }\n\n getClient(...args: Parameters<DeliveryApi['getClient']>) {\n return new DeliveryApi(this.ssr).getClient(...args);\n }\n\n search(query: Query, linkDepth = 0, project?: string) {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(\n `${project}+${JSON.stringify(query)}+${linkDepth}`,\n () => client.entries.search(query, linkDepth)\n );\n }\n\n searchUsingPost(query: Query, linkDepth = 0, project = '') {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(\n `${project}+${JSON.stringify(query)}+${linkDepth}`,\n () => (client.entries as any).searchUsingPost(query, linkDepth)\n );\n }\n\n get(\n id: string,\n linkDepth = 0,\n versionStatus: VersionStatus = 'published',\n project?: string,\n fields?: string[]\n ) {\n const client = Client.create({\n ...getClientConfig(project, this.ssr),\n versionStatus,\n });\n return this.request(id, () =>\n client.entries.get({ id, linkDepth, fields })\n );\n }\n\n getContentType(id: string, project?: string) {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(`[CONTENT TYPE] ${id} ${project}`, () =>\n client.contentTypes.get(id)\n );\n }\n\n getRootNode(\n options: NodeGetRootOptions,\n versionStatus: VersionStatus = 'published',\n project?: string\n ) {\n const client = Client.create({\n ...getClientConfig(project, this.ssr),\n versionStatus,\n });\n return this.request(`${project} / ${JSON.stringify(options)}`, () =>\n client.nodes.getRoot(options)\n );\n }\n\n getNode(options: Parameters<INodeOperations['get']>[0], project?: string) {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(\n `${project} ${\n options && typeof options !== 'string'\n ? 'path' in options\n ? options.path\n : options.id\n : options\n } ${JSON.stringify(options)}`,\n () => client.nodes.get(options)\n );\n }\n\n getAncestors(\n options: Parameters<INodeOperations['getAncestors']>[0],\n project?: string\n ) {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(\n `${project} [A] ${\n (options && typeof options !== 'string' && options.id) || options\n } ${JSON.stringify(options)}`,\n () => client.nodes.getAncestors(options)\n );\n }\n\n getChildren(\n options: Parameters<INodeOperations['getChildren']>[0],\n project?: string\n ) {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(\n `${project} [C] ${\n (options && typeof options !== 'string' && options.id) || options\n } ${JSON.stringify(options)}`,\n () => client.nodes.getChildren(options)\n );\n }\n\n getSiblings(\n options: Parameters<INodeOperations['getSiblings']>[0],\n project?: string\n ) {\n const client = Client.create(getClientConfig(project, this.ssr));\n return this.request(\n `${project} [S] ${\n (options && typeof options !== 'string' && options.id) || options\n } ${JSON.stringify(options)}`,\n () => client.nodes.getSiblings(options)\n );\n }\n\n request<T extends () => Promise<any>>(key: string, execute: T) {\n // do not cache results in SSR\n if (!this.cache.get(key) || typeof window == 'undefined') {\n const promise = execute();\n this.cache.set(key, promise);\n promise.catch(() => {\n this.cache.remove(key);\n });\n }\n return this.cache.get(key) as ReturnType<T>;\n }\n}\n\nexport const cachedSearch = new CachedSearch();\nexport const cachedSearchWithCookies = (ssr?: SSRContext) =>\n new CachedSearch(ssr);\n","import { VersionStatus } from 'contensis-core-api';\nimport { Client, Query } from 'contensis-delivery-api';\nimport { Config } from 'contensis-delivery-api/lib/models';\nimport { parse } from 'query-string';\nimport { setSurrogateKeys } from '~/routing/redux/actions';\nimport { reduxStore } from '~/redux/store/store';\n\nimport { CookieObject, findLoginCookies } from '~/user/util/CookieConstants';\nimport { Request } from 'express';\nimport { IncomingHttpHeaders } from 'http';\nimport { SSRContext as SSRContextType } from '~/models';\n\nexport type SSRContext = Omit<SSRContextType, 'api'>;\n\nconst mapCookieHeader = (cookies: CookieObject | string) =>\n typeof cookies === 'object'\n ? Object.entries(cookies)\n .map(([name, value]) => `${name}=${value}`)\n .join('; ')\n : cookies;\n\nconst getSsrReferer = ({ request }: SSRContext) => {\n if (request) {\n try {\n const url = new URL(\n request.url,\n `${request.protocol || `http`}://${request.headers.host}`\n );\n return url.href;\n } catch (ex) {\n console.error(\n `getSsrReferer cannot parse url ${request.url} and host ${request.headers.host}`\n );\n\n return request.url;\n }\n }\n\n // if (typeof window === 'undefined') {\n // const state = reduxStore.getState();\n // const referer = `${selectCurrentHostname(state)}${selectCurrentPath(\n // state\n // )}${selectCurrentSearch(state)}`;\n\n // return referer;\n // }\n return '';\n};\n\n/**\n * Store the surrogate-key header contents in redux state to output in SSR response\n */\nconst storeSurrogateKeys = (ssr?: SSRContext) => (response: any) => {\n let keys = '';\n if (response.status === 200) {\n keys = response.headers.get\n ? response.headers.get('surrogate-key')\n : response.headers.map['surrogate-key'];\n if (!keys) console.info(`[storeSurrogateKeys] No keys in ${response.url}`);\n }\n // Using imported reduxStore in SSR is unreliable during high\n // concurrent loads and exists here as a best effort fallback\n // in case the SSRContext is not provided\n const put = ssr?.dispatch || reduxStore?.dispatch;\n put?.(setSurrogateKeys(keys, response.url, response.status));\n};\n\n/**\n * Create a new Config object to create a DeliveryAPI Client\n */\nconst deliveryApiConfig = (ssr?: SSRContext) => {\n const config: Config = {\n ...DELIVERY_API_CONFIG /* global DELIVERY_API_CONFIG */,\n };\n\n // Add SSR headers and handlers\n if (typeof window === 'undefined') {\n config.defaultHeaders = {\n 'x-require-surrogate-key': 'true', // request surrogate-key response header\n 'x-crb-ssr': 'true', // add this for support tracing\n };\n if (ssr) config.defaultHeaders.referer = getSsrReferer(ssr); // add this for support tracing\n\n config.responseHandler = { [200]: storeSurrogateKeys(ssr) }; // for handling page cache invalidation\n }\n\n if (\n typeof window !== 'undefined' &&\n PROXY_DELIVERY_API /* global PROXY_DELIVERY_API */\n ) {\n // ensure a relative url is used to bypass the need for CORS (separate OPTIONS calls)\n config.rootUrl = '';\n config.responseHandler = { [404]: () => null };\n }\n return config;\n};\n\nexport const getClientConfig = (project?: string, ssr?: SSRContext) => {\n const config = deliveryApiConfig(ssr);\n\n if (project) {\n config.projectId = project;\n }\n\n if (ssr?.cookies) {\n const cookieHeader = mapCookieHeader(findLoginCookies(ssr.cookies));\n if (cookieHeader) {\n config.defaultHeaders = Object.assign(config.defaultHeaders || {}, {\n Cookie: cookieHeader,\n });\n }\n }\n\n return config;\n};\n\n// export * from 'contensis-delivery-api';\n\ndeclare let window: Window &\n typeof globalThis & {\n versionStatus?: VersionStatus;\n };\n\nexport class DeliveryApi {\n cookies?: CookieObject;\n ssr?: SSRContext;\n\n constructor(ssr?: SSRContext) {\n this.ssr = ssr;\n this.cookies = ssr?.cookies.raw;\n }\n\n getClientSideVersionStatus = () => {\n if (typeof window !== 'undefined') {\n // Allow overriding versionStatus with the querystring\n const { versionStatus } = parse(window.location.search);\n if (versionStatus) return versionStatus;\n // Client-side we will have a global variable set if rendered by SSR in production\n if (typeof window.versionStatus !== 'undefined')\n return window.versionStatus;\n // For localhost development we can only work out versionStatus from the current hostname\n const currentHostname = window.location.hostname;\n return this.getVersionStatusFromHostname(currentHostname);\n }\n return null;\n };\n\n getServerSideVersionStatus = (request: Request) =>\n request.query.versionStatus ||\n deliveryApi.getVersionStatusFromHeaders(request.headers) ||\n deliveryApi.getVersionStatusFromHostname(request.hostname);\n\n getVersionStatusFromHeaders = (headers: IncomingHttpHeaders) => {\n const versionStatusHeader = headers['x-entry-versionstatus'];\n if (typeof versionStatusHeader !== 'undefined') return versionStatusHeader;\n return null;\n };\n\n getVersionStatusFromHostname = (currentHostname: string) => {\n if (currentHostname.indexOf('localhost') > -1) return 'latest';\n\n if (currentHostname.endsWith('contensis.cloud')) {\n if (currentHostname.indexOf('preview.') > -1) {\n return 'latest';\n } else {\n return 'published';\n }\n }\n\n if (currentHostname.endsWith('cloud.contensis.com')) {\n if (currentHostname.indexOf('preview-') > -1) {\n return 'latest';\n } else {\n return 'published';\n }\n }\n\n return 'published';\n };\n\n search = (query: Query, linkDepth = 0, project?: string) => {\n const client = Client.create(getClientConfig(project, this.ssr));\n return client.entries.search(\n query,\n typeof linkDepth !== 'undefined' ? linkDepth : 1\n );\n };\n\n getClient = (versionStatus: VersionStatus = 'published', project?: string) =>\n Client.create({\n ...getClientConfig(project, this.ssr),\n versionStatus,\n });\n\n getEntry = (\n id: string,\n linkDepth = 0,\n versionStatus: VersionStatus = 'published',\n project?: string\n ) => {\n const client = Client.create({\n ...getClientConfig(project, this.ssr),\n versionStatus,\n });\n return client.entries.get({ id, linkDepth });\n };\n}\n\nexport const deliveryApi = new DeliveryApi();\n\nexport const deliveryApiWithCookies = (ssr?: SSRContext) =>\n new DeliveryApi(ssr);\n\nexport * from './CachedDeliveryApi';\n","import { Request, Response } from 'express';\nimport React, {\n PropsWithChildren,\n createContext,\n useContext,\n useState,\n} from 'react';\nimport { useCookies } from 'react-cookie';\nimport { useDispatch } from 'react-redux';\nimport { SSRContext as SSRContextType } from '~/models';\nimport { cachedSearchWithCookies } from '~/util/CachedDeliveryApi';\nimport { CookieHelper } from '~/user/util/CookieHelper.class';\n\nconst SSRContext = createContext<SSRContextType | null>(null);\n\n/** SSRContextProvider allows us to hold and access request-scoped references\n * throughout the component tree\n *\n * adding this in client side allows consumers to write universal code and use\n * the same helpers and refs as in SSR */\nexport const SSRContextProvider = ({\n children,\n request,\n response,\n}: PropsWithChildren<{ request?: Request; response?: Response }>) => {\n // In SSR pass references to things in backing sagas\n // we cannot access in a global scope\n const dispatch = useDispatch();\n const cookies = new CookieHelper(...useCookies());\n const api = cachedSearchWithCookies({ cookies, dispatch, request, response });\n\n const [context] = useState<SSRContextType>({\n api,\n cookies,\n dispatch,\n request,\n response,\n });\n\n return (\n <SSRContext.Provider value={{ ...context }}>{children}</SSRContext.Provider>\n );\n};\n\nexport const useSSRContext = () => useContext(SSRContext) as SSRContextType;\n\nexport const useDeliveryApi = () => {\n const { api } = useSSRContext();\n return api;\n};\n"],"names":["CacheNode","constructor","key","value","next","prev","LruCache","limit","map","head","tail","size","get","node","remove","setHead","set","CachedSearch","ssr","_this$ssr","cache","cookies","raw","getClient","args","DeliveryApi","search","query","linkDepth","project","client","Client","create","getClientConfig","request","JSON","stringify","entries","searchUsingPost","id","versionStatus","fields","getContentType","contentTypes","getRootNode","options","nodes","getRoot","getNode","path","getAncestors","getChildren","getSiblings","execute","window","promise","catch","cachedSearch","cachedSearchWithCookies","mapCookieHeader","Object","name","join","getSsrReferer","url","URL","protocol","headers","host","href","ex","console","error","storeSurrogateKeys","response","keys","status","info","put","dispatch","reduxStore","setSurrogateKeys","deliveryApiConfig","config","DELIVERY_API_CONFIG","defaultHeaders","referer","responseHandler","PROXY_DELIVERY_API","rootUrl","projectId","cookieHeader","findLoginCookies","assign","Cookie","getClientSideVersionStatus","parse","location","currentHostname","hostname","getVersionStatusFromHostname","getServerSideVersionStatus","deliveryApi","getVersionStatusFromHeaders","versionStatusHeader","indexOf","endsWith","getEntry","deliveryApiWithCookies","SSRContext","createContext","SSRContextProvider","children","useDispatch","CookieHelper","useCookies","api","context","useState","React","createElement","Provider","useSSRContext","useContext","useDeliveryApi"],"mappings":"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"}