@bright.global/arboretum-sdk 0.0.6

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 (218) hide show
  1. package/README.md +223 -0
  2. package/dist/arboretum-client.js +2 -0
  3. package/dist/clients/contentful-client/contentful-client.js +2 -0
  4. package/dist/clients/contentful-client/impl/contentful-client-impl.js +54 -0
  5. package/dist/es6/arboretum-client.js +1 -0
  6. package/dist/es6/clients/contentful-client/contentful-client.js +1 -0
  7. package/dist/es6/clients/contentful-client/impl/contentful-client-impl.js +50 -0
  8. package/dist/es6/impl/arboretum-client.impl.js +182 -0
  9. package/dist/es6/impl/data/content-types.js +136 -0
  10. package/dist/es6/impl/data/helpers/__mocks__/mocked-contentful-entries-client-api.js +66 -0
  11. package/dist/es6/impl/data/helpers/entry-status.js +19 -0
  12. package/dist/es6/impl/data/helpers/get-all-entries-recursively.js +113 -0
  13. package/dist/es6/impl/data/helpers/get-all-entries-recursively.test.js +114 -0
  14. package/dist/es6/impl/data/helpers/home-pages-by-tag-id.js +66 -0
  15. package/dist/es6/impl/data/helpers/home-pages-by-tag-id.test.js +105 -0
  16. package/dist/es6/impl/data/helpers/locale-codes-from-metadata.js +7 -0
  17. package/dist/es6/impl/data/helpers/locale-codes-from-metadata.test.js +52 -0
  18. package/dist/es6/impl/data/helpers/parse-locale-tag.js +24 -0
  19. package/dist/es6/impl/data/helpers/parse-locale-tag.test.js +19 -0
  20. package/dist/es6/impl/data/helpers/validate-content-types.js +112 -0
  21. package/dist/es6/impl/data/helpers/validate-content-types.test.js +103 -0
  22. package/dist/es6/impl/data/home-page.js +75 -0
  23. package/dist/es6/impl/data/locales.js +60 -0
  24. package/dist/es6/impl/data/page-entries.js +169 -0
  25. package/dist/es6/impl/data/page-entries.test.js +170 -0
  26. package/dist/es6/impl/data/redirect-entries.js +163 -0
  27. package/dist/es6/impl/data/sitemap-data.js +109 -0
  28. package/dist/es6/impl/sitemap/adapters/page-entry-adapter.js +27 -0
  29. package/dist/es6/impl/sitemap/adapters/redirect-entry-adapter.js +26 -0
  30. package/dist/es6/impl/sitemap/adapters/redirect-to-arboretum-page-adapter.js +11 -0
  31. package/dist/es6/impl/sitemap/adapters/to-arboretum-page-adapter.js +14 -0
  32. package/dist/es6/impl/sitemap/adapters/to-arboretum-page-adapter.test.js +100 -0
  33. package/dist/es6/impl/sitemap/adapters/to-arboretum-page-with-missing-data-adapter.js +16 -0
  34. package/dist/es6/impl/sitemap/helpers/__mocks__/mocked-localized-sitemap.js +186 -0
  35. package/dist/es6/impl/sitemap/helpers/build-localized-sitemap.js +128 -0
  36. package/dist/es6/impl/sitemap/helpers/build-localized-sitemap.test.js +208 -0
  37. package/dist/es6/impl/sitemap/helpers/build-pages-by-tag-eagerly.js +7 -0
  38. package/dist/es6/impl/sitemap/helpers/build-sitemap-eagerly.js +32 -0
  39. package/dist/es6/impl/sitemap/helpers/find-ancestors.js +42 -0
  40. package/dist/es6/impl/sitemap/helpers/find-ancestors.test.js +33 -0
  41. package/dist/es6/impl/sitemap/helpers/find-children.js +9 -0
  42. package/dist/es6/impl/sitemap/helpers/find-children.test.js +39 -0
  43. package/dist/es6/impl/sitemap/helpers/is-root.js +1 -0
  44. package/dist/es6/impl/sitemap/helpers/localize-contentful-field.js +22 -0
  45. package/dist/es6/impl/sitemap/helpers/localize-contentful-field.test.js +137 -0
  46. package/dist/es6/impl/sitemap/helpers/localized-pages-by-tag-id.js +79 -0
  47. package/dist/es6/impl/sitemap/helpers/localized-path.js +4 -0
  48. package/dist/es6/impl/sitemap/helpers/page-ancestors.js +8 -0
  49. package/dist/es6/impl/sitemap/helpers/page-children.js +10 -0
  50. package/dist/es6/impl/sitemap/methods/cached-data.js +7 -0
  51. package/dist/es6/impl/sitemap/methods/home-page.js +27 -0
  52. package/dist/es6/impl/sitemap/methods/page-by-id.js +29 -0
  53. package/dist/es6/impl/sitemap/methods/page-by-path.js +52 -0
  54. package/dist/es6/impl/sitemap/methods/pages-by-ids.js +6 -0
  55. package/dist/es6/impl/sitemap/methods/pages-by-paths.js +6 -0
  56. package/dist/es6/impl/sitemap/methods/pages-by-tag-id.js +37 -0
  57. package/dist/es6/impl/sitemap/methods/pages.js +75 -0
  58. package/dist/es6/impl/sitemap/methods/regenerate.js +64 -0
  59. package/dist/es6/impl/sitemap/methods/search.js +97 -0
  60. package/dist/es6/impl/sitemap/methods/status.js +47 -0
  61. package/dist/es6/index.js +2 -0
  62. package/dist/es6/utils/array-to-map.js +7 -0
  63. package/dist/es6/utils/fp-utils.js +5 -0
  64. package/dist/es6/utils/group-by.js +13 -0
  65. package/dist/es6/utils/json-stringify-map-replacer.js +6 -0
  66. package/dist/es6/utils/string-similarity.js +59 -0
  67. package/dist/impl/arboretum-client.impl.js +189 -0
  68. package/dist/impl/data/content-types.js +140 -0
  69. package/dist/impl/data/helpers/__mocks__/mocked-contentful-entries-client-api.js +72 -0
  70. package/dist/impl/data/helpers/entry-status.js +23 -0
  71. package/dist/impl/data/helpers/get-all-entries-recursively.js +117 -0
  72. package/dist/impl/data/helpers/get-all-entries-recursively.test.js +116 -0
  73. package/dist/impl/data/helpers/home-pages-by-tag-id.js +70 -0
  74. package/dist/impl/data/helpers/home-pages-by-tag-id.test.js +107 -0
  75. package/dist/impl/data/helpers/locale-codes-from-metadata.js +11 -0
  76. package/dist/impl/data/helpers/locale-codes-from-metadata.test.js +54 -0
  77. package/dist/impl/data/helpers/parse-locale-tag.js +28 -0
  78. package/dist/impl/data/helpers/parse-locale-tag.test.js +21 -0
  79. package/dist/impl/data/helpers/validate-content-types.js +117 -0
  80. package/dist/impl/data/helpers/validate-content-types.test.js +105 -0
  81. package/dist/impl/data/home-page.js +79 -0
  82. package/dist/impl/data/locales.js +64 -0
  83. package/dist/impl/data/page-entries.js +173 -0
  84. package/dist/impl/data/page-entries.test.js +172 -0
  85. package/dist/impl/data/redirect-entries.js +168 -0
  86. package/dist/impl/data/sitemap-data.js +113 -0
  87. package/dist/impl/sitemap/adapters/page-entry-adapter.js +31 -0
  88. package/dist/impl/sitemap/adapters/redirect-entry-adapter.js +30 -0
  89. package/dist/impl/sitemap/adapters/redirect-to-arboretum-page-adapter.js +15 -0
  90. package/dist/impl/sitemap/adapters/to-arboretum-page-adapter.js +18 -0
  91. package/dist/impl/sitemap/adapters/to-arboretum-page-adapter.test.js +102 -0
  92. package/dist/impl/sitemap/adapters/to-arboretum-page-with-missing-data-adapter.js +20 -0
  93. package/dist/impl/sitemap/helpers/__mocks__/mocked-localized-sitemap.js +189 -0
  94. package/dist/impl/sitemap/helpers/build-localized-sitemap.js +133 -0
  95. package/dist/impl/sitemap/helpers/build-localized-sitemap.test.js +210 -0
  96. package/dist/impl/sitemap/helpers/build-pages-by-tag-eagerly.js +11 -0
  97. package/dist/impl/sitemap/helpers/build-sitemap-eagerly.js +36 -0
  98. package/dist/impl/sitemap/helpers/find-ancestors.js +46 -0
  99. package/dist/impl/sitemap/helpers/find-ancestors.test.js +35 -0
  100. package/dist/impl/sitemap/helpers/find-children.js +13 -0
  101. package/dist/impl/sitemap/helpers/find-children.test.js +41 -0
  102. package/dist/impl/sitemap/helpers/is-root.js +5 -0
  103. package/dist/impl/sitemap/helpers/localize-contentful-field.js +26 -0
  104. package/dist/impl/sitemap/helpers/localize-contentful-field.test.js +139 -0
  105. package/dist/impl/sitemap/helpers/localized-pages-by-tag-id.js +84 -0
  106. package/dist/impl/sitemap/helpers/localized-path.js +8 -0
  107. package/dist/impl/sitemap/helpers/page-ancestors.js +12 -0
  108. package/dist/impl/sitemap/helpers/page-children.js +14 -0
  109. package/dist/impl/sitemap/methods/cached-data.js +11 -0
  110. package/dist/impl/sitemap/methods/home-page.js +31 -0
  111. package/dist/impl/sitemap/methods/page-by-id.js +33 -0
  112. package/dist/impl/sitemap/methods/page-by-path.js +56 -0
  113. package/dist/impl/sitemap/methods/pages-by-ids.js +10 -0
  114. package/dist/impl/sitemap/methods/pages-by-paths.js +10 -0
  115. package/dist/impl/sitemap/methods/pages-by-tag-id.js +41 -0
  116. package/dist/impl/sitemap/methods/pages.js +79 -0
  117. package/dist/impl/sitemap/methods/regenerate.js +68 -0
  118. package/dist/impl/sitemap/methods/search.js +101 -0
  119. package/dist/impl/sitemap/methods/status.js +51 -0
  120. package/dist/index.js +8 -0
  121. package/dist/types/arboretum-client.d.ts +110 -0
  122. package/dist/types/clients/contentful-client/contentful-client.d.ts +95 -0
  123. package/dist/types/clients/contentful-client/impl/contentful-client-impl.d.ts +3 -0
  124. package/dist/types/impl/arboretum-client.impl.d.ts +107 -0
  125. package/dist/types/impl/data/content-types.d.ts +11 -0
  126. package/dist/types/impl/data/helpers/__mocks__/mocked-contentful-entries-client-api.d.ts +7 -0
  127. package/dist/types/impl/data/helpers/entry-status.d.ts +2 -0
  128. package/dist/types/impl/data/helpers/get-all-entries-recursively.d.ts +6 -0
  129. package/dist/types/impl/data/helpers/get-all-entries-recursively.test.d.ts +1 -0
  130. package/dist/types/impl/data/helpers/home-pages-by-tag-id.d.ts +15 -0
  131. package/dist/types/impl/data/helpers/home-pages-by-tag-id.test.d.ts +1 -0
  132. package/dist/types/impl/data/helpers/locale-codes-from-metadata.d.ts +2 -0
  133. package/dist/types/impl/data/helpers/locale-codes-from-metadata.test.d.ts +1 -0
  134. package/dist/types/impl/data/helpers/parse-locale-tag.d.ts +3 -0
  135. package/dist/types/impl/data/helpers/parse-locale-tag.test.d.ts +1 -0
  136. package/dist/types/impl/data/helpers/validate-content-types.d.ts +5 -0
  137. package/dist/types/impl/data/helpers/validate-content-types.test.d.ts +1 -0
  138. package/dist/types/impl/data/home-page.d.ts +3 -0
  139. package/dist/types/impl/data/locales.d.ts +10 -0
  140. package/dist/types/impl/data/page-entries.d.ts +3 -0
  141. package/dist/types/impl/data/page-entries.test.d.ts +1 -0
  142. package/dist/types/impl/data/redirect-entries.d.ts +4 -0
  143. package/dist/types/impl/data/sitemap-data.d.ts +17 -0
  144. package/dist/types/impl/sitemap/adapters/page-entry-adapter.d.ts +6 -0
  145. package/dist/types/impl/sitemap/adapters/redirect-entry-adapter.d.ts +4 -0
  146. package/dist/types/impl/sitemap/adapters/redirect-to-arboretum-page-adapter.d.ts +3 -0
  147. package/dist/types/impl/sitemap/adapters/to-arboretum-page-adapter.d.ts +3 -0
  148. package/dist/types/impl/sitemap/adapters/to-arboretum-page-adapter.test.d.ts +1 -0
  149. package/dist/types/impl/sitemap/adapters/to-arboretum-page-with-missing-data-adapter.d.ts +3 -0
  150. package/dist/types/impl/sitemap/helpers/__mocks__/mocked-localized-sitemap.d.ts +16 -0
  151. package/dist/types/impl/sitemap/helpers/build-localized-sitemap.d.ts +5 -0
  152. package/dist/types/impl/sitemap/helpers/build-localized-sitemap.test.d.ts +1 -0
  153. package/dist/types/impl/sitemap/helpers/build-pages-by-tag-eagerly.d.ts +3 -0
  154. package/dist/types/impl/sitemap/helpers/build-sitemap-eagerly.d.ts +3 -0
  155. package/dist/types/impl/sitemap/helpers/find-ancestors.d.ts +2 -0
  156. package/dist/types/impl/sitemap/helpers/find-ancestors.test.d.ts +1 -0
  157. package/dist/types/impl/sitemap/helpers/find-children.d.ts +2 -0
  158. package/dist/types/impl/sitemap/helpers/find-children.test.d.ts +1 -0
  159. package/dist/types/impl/sitemap/helpers/is-root.d.ts +2 -0
  160. package/dist/types/impl/sitemap/helpers/localize-contentful-field.d.ts +4 -0
  161. package/dist/types/impl/sitemap/helpers/localize-contentful-field.test.d.ts +1 -0
  162. package/dist/types/impl/sitemap/helpers/localized-pages-by-tag-id.d.ts +4 -0
  163. package/dist/types/impl/sitemap/helpers/localized-path.d.ts +1 -0
  164. package/dist/types/impl/sitemap/helpers/page-ancestors.d.ts +3 -0
  165. package/dist/types/impl/sitemap/helpers/page-children.d.ts +5 -0
  166. package/dist/types/impl/sitemap/methods/cached-data.d.ts +3 -0
  167. package/dist/types/impl/sitemap/methods/home-page.d.ts +3 -0
  168. package/dist/types/impl/sitemap/methods/page-by-id.d.ts +3 -0
  169. package/dist/types/impl/sitemap/methods/page-by-path.d.ts +3 -0
  170. package/dist/types/impl/sitemap/methods/pages-by-ids.d.ts +3 -0
  171. package/dist/types/impl/sitemap/methods/pages-by-paths.d.ts +3 -0
  172. package/dist/types/impl/sitemap/methods/pages-by-tag-id.d.ts +3 -0
  173. package/dist/types/impl/sitemap/methods/pages.d.ts +3 -0
  174. package/dist/types/impl/sitemap/methods/regenerate.d.ts +3 -0
  175. package/dist/types/impl/sitemap/methods/search.d.ts +3 -0
  176. package/dist/types/impl/sitemap/methods/status.d.ts +3 -0
  177. package/dist/types/index.d.ts +6 -0
  178. package/dist/types/utils/array-to-map.d.ts +1 -0
  179. package/dist/types/utils/fp-utils.d.ts +11 -0
  180. package/dist/types/utils/group-by.d.ts +1 -0
  181. package/dist/types/utils/json-stringify-map-replacer.d.ts +1 -0
  182. package/dist/types/utils/string-similarity.d.ts +9 -0
  183. package/dist/utils/array-to-map.js +11 -0
  184. package/dist/utils/fp-utils.js +10 -0
  185. package/dist/utils/group-by.js +17 -0
  186. package/dist/utils/json-stringify-map-replacer.js +10 -0
  187. package/dist/utils/string-similarity.js +63 -0
  188. package/docs/.nojekyll +1 -0
  189. package/docs/assets/highlight.css +78 -0
  190. package/docs/assets/main.js +58 -0
  191. package/docs/assets/search.js +1 -0
  192. package/docs/assets/style.css +1367 -0
  193. package/docs/functions/createArboretumClient.html +72 -0
  194. package/docs/functions/createArboretumClientFromCdaClient.html +72 -0
  195. package/docs/functions/createArboretumClientFromCdaParams.html +72 -0
  196. package/docs/functions/createArboretumClientFromCma.html +72 -0
  197. package/docs/index.html +228 -0
  198. package/docs/modules.html +88 -0
  199. package/docs/types/ArboretumAliasT.html +70 -0
  200. package/docs/types/ArboretumClientConfigFromCdaParamsT.html +74 -0
  201. package/docs/types/ArboretumClientConfigFromCdaT.html +79 -0
  202. package/docs/types/ArboretumClientConfigFromCmaT.html +79 -0
  203. package/docs/types/ArboretumClientConfigT.html +63 -0
  204. package/docs/types/ArboretumClientContentfulConfigOptionsT.html +93 -0
  205. package/docs/types/ArboretumClientOptions.html +72 -0
  206. package/docs/types/ArboretumClientOptionsT.html +63 -0
  207. package/docs/types/ArboretumClientT.html +235 -0
  208. package/docs/types/ArboretumPageNodeT.html +63 -0
  209. package/docs/types/ArboretumPageT.html +76 -0
  210. package/docs/types/ArboretumRedirectT.html +70 -0
  211. package/docs/types/CachedDataT.html +63 -0
  212. package/docs/types/Either.html +70 -0
  213. package/docs/types/EitherL.html +75 -0
  214. package/docs/types/EitherR.html +75 -0
  215. package/docs/types/LocaleT.html +63 -0
  216. package/docs/types/OptionsT.html +70 -0
  217. package/logo.svg +12 -0
  218. package/package.json +47 -0
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toArboretumPageWithMissingData = void 0;
4
+ var toArboretumPageWithMissingData = function (localeCode) {
5
+ return function (page, ancestors, children) { return ({
6
+ type: 'page',
7
+ id: page.sys.id,
8
+ title: page.title,
9
+ cmaOnlyStatus: page.sys.cmaOnlyStatus,
10
+ localeCode: localeCode,
11
+ path: page.path,
12
+ slug: page.slug,
13
+ totalDirectChildrenCount: children
14
+ ? children.length
15
+ : page.childPages.length,
16
+ children: children,
17
+ ancestors: ancestors,
18
+ }); };
19
+ };
20
+ exports.toArboretumPageWithMissingData = toArboretumPageWithMissingData;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.mockedLocalizedSitemapWithCircularReference = exports.mockedCircularReferencesPages = exports.mockedPage1WithCircularReference = exports.mockedLocalizedSitemap = exports.mockedPages = exports.mockedRedirects = exports.mockedPage3 = exports.mockedPage2_1 = exports.mockedPage2 = exports.mockedPage1_1_2 = exports.mockedPage1_1_1 = exports.mockedPage1_2 = exports.mockedPage1_1 = exports.mockedPage1 = exports.mockedRoot = void 0;
29
+ var mockedRootSysId = 'root';
30
+ var mockedPage1SysId = 'page1';
31
+ var mockedPage1_1SysId = 'page1-1';
32
+ var mockedPage1_1_1SysId = 'page1-1-1';
33
+ var mockedPage1_1_2SysId = 'page1-1-2';
34
+ var mockedPage1_2SysId = 'page1-2';
35
+ var mockedPage2SysId = 'page2';
36
+ var mockedPage2_1SysId = 'page2_1';
37
+ var mockedPage3SysId = 'page3';
38
+ var mockedRedirect1SysId = 'redirect1';
39
+ var mockedRedirect2SysId = 'redirect2';
40
+ var mockedRedirect3SysId = 'redirect3';
41
+ exports.mockedRoot = {
42
+ type: 'page',
43
+ sys: { id: mockedRootSysId },
44
+ parent: undefined,
45
+ slug: mockedRootSysId,
46
+ path: '/en',
47
+ childPages: [
48
+ { sys: { id: mockedPage1SysId } },
49
+ { sys: { id: mockedPage2SysId } },
50
+ { sys: { id: mockedPage3SysId } },
51
+ { sys: { id: mockedRedirect1SysId } },
52
+ { sys: { id: mockedRedirect2SysId } },
53
+ { sys: { id: mockedRedirect3SysId } },
54
+ ],
55
+ };
56
+ exports.mockedPage1 = {
57
+ type: 'page',
58
+ sys: { id: mockedPage1SysId },
59
+ parent: { sys: exports.mockedRoot.sys },
60
+ slug: mockedPage1SysId,
61
+ path: exports.mockedRoot.path + '/' + mockedPage1SysId,
62
+ childPages: [
63
+ { sys: { id: mockedPage1_1SysId } },
64
+ { sys: { id: mockedPage1_2SysId } },
65
+ ],
66
+ };
67
+ exports.mockedPage1_1 = {
68
+ type: 'page',
69
+ sys: { id: mockedPage1_1SysId },
70
+ parent: { sys: exports.mockedPage1.sys },
71
+ path: exports.mockedPage1.path + '/' + mockedPage1_1SysId,
72
+ slug: mockedPage1_1SysId,
73
+ childPages: [
74
+ { sys: { id: mockedPage1_1_1SysId } },
75
+ { sys: { id: mockedPage1_1_2SysId } },
76
+ ],
77
+ };
78
+ exports.mockedPage1_2 = {
79
+ type: 'page',
80
+ sys: { id: mockedPage1_2SysId },
81
+ parent: { sys: exports.mockedPage1.sys },
82
+ path: exports.mockedPage1.path + '/' + mockedPage1_2SysId,
83
+ slug: mockedPage1_2SysId,
84
+ childPages: [],
85
+ };
86
+ exports.mockedPage1_1_1 = {
87
+ type: 'page',
88
+ sys: { id: mockedPage1_1_1SysId },
89
+ parent: { sys: exports.mockedPage1_1.sys },
90
+ path: exports.mockedPage1_1.path + '/' + mockedPage1_1_1SysId,
91
+ slug: mockedPage1_1_1SysId,
92
+ childPages: [],
93
+ };
94
+ exports.mockedPage1_1_2 = {
95
+ type: 'page',
96
+ sys: { id: mockedPage1_1_2SysId },
97
+ parent: { sys: exports.mockedPage1_1.sys },
98
+ path: exports.mockedPage1_1.path + '/' + mockedPage1_1_2SysId,
99
+ slug: mockedPage1_1_2SysId,
100
+ childPages: [],
101
+ };
102
+ exports.mockedPage2 = {
103
+ type: 'page',
104
+ sys: { id: mockedPage2SysId },
105
+ parent: { sys: exports.mockedRoot.sys },
106
+ path: exports.mockedRoot.path + '/' + mockedPage2SysId,
107
+ slug: mockedPage2SysId,
108
+ childPages: [{ sys: { id: mockedPage2_1SysId } }],
109
+ };
110
+ exports.mockedPage2_1 = {
111
+ type: 'page',
112
+ sys: { id: mockedPage2_1SysId },
113
+ parent: { sys: exports.mockedPage2.sys },
114
+ path: exports.mockedPage2.path + '/' + mockedPage2_1SysId,
115
+ slug: mockedPage2_1SysId,
116
+ childPages: [],
117
+ };
118
+ exports.mockedPage3 = {
119
+ type: 'page',
120
+ sys: { id: mockedPage3SysId },
121
+ parent: { sys: exports.mockedRoot.sys },
122
+ path: exports.mockedRoot.path + '/' + mockedPage3SysId,
123
+ slug: mockedPage3SysId,
124
+ childPages: [],
125
+ };
126
+ var mockedRedirect1 = {
127
+ type: 'alias',
128
+ sys: { id: mockedRedirect1SysId },
129
+ page: { sys: { id: mockedRedirect1SysId } },
130
+ path: exports.mockedRoot.path + '/' + mockedRedirect1SysId,
131
+ parent: { sys: { id: exports.mockedRoot.sys.id } },
132
+ };
133
+ var mockedRedirect2 = {
134
+ type: 'redirect',
135
+ sys: { id: mockedRedirect2SysId },
136
+ page: { sys: { id: mockedRedirect2SysId } },
137
+ path: exports.mockedRoot.path + '/' + mockedRedirect2SysId,
138
+ parent: { sys: { id: exports.mockedRoot.sys.id } },
139
+ };
140
+ var mockedRedirect3 = {
141
+ type: 'alias',
142
+ sys: { id: mockedRedirect3SysId },
143
+ page: { sys: { id: mockedRedirect3SysId } },
144
+ path: exports.mockedRoot.path + '/' + mockedRedirect3SysId,
145
+ parent: { sys: { id: exports.mockedRoot.sys.id } },
146
+ };
147
+ exports.mockedRedirects = [
148
+ mockedRedirect1,
149
+ mockedRedirect2,
150
+ mockedRedirect3,
151
+ ];
152
+ exports.mockedPages = __spreadArray([
153
+ exports.mockedRoot,
154
+ exports.mockedPage1,
155
+ exports.mockedPage1_1,
156
+ exports.mockedPage1_1_1,
157
+ exports.mockedPage1_1_2,
158
+ exports.mockedPage1_2,
159
+ exports.mockedPage2,
160
+ exports.mockedPage2_1,
161
+ exports.mockedPage3
162
+ ], __read(exports.mockedRedirects), false);
163
+ exports.mockedLocalizedSitemap = {
164
+ root: { sys: exports.mockedRoot.sys },
165
+ sitemap: new Map(exports.mockedPages.map(function (page) {
166
+ if (!page.parent && page.type === 'page') {
167
+ return [page.sys.id, page];
168
+ }
169
+ return [page.sys.id, page];
170
+ })),
171
+ pageIdByPath: new Map(exports.mockedPages.map(function (page) { return [page.path, page.sys.id]; })),
172
+ };
173
+ exports.mockedPage1WithCircularReference = {
174
+ type: 'page',
175
+ sys: { id: mockedPage1SysId },
176
+ parent: { sys: { id: exports.mockedRoot.sys.id } },
177
+ path: exports.mockedRoot.path + '/' + mockedPage1SysId,
178
+ slug: mockedPage1SysId,
179
+ childPages: [{ sys: { id: mockedRootSysId } }],
180
+ };
181
+ exports.mockedCircularReferencesPages = [
182
+ exports.mockedRoot,
183
+ exports.mockedPage1WithCircularReference,
184
+ ];
185
+ exports.mockedLocalizedSitemapWithCircularReference = {
186
+ root: { sys: exports.mockedRoot.sys },
187
+ sitemap: new Map(exports.mockedCircularReferencesPages.map(function (page) { return [page.sys.id, page]; })),
188
+ pageIdByPath: new Map(exports.mockedCircularReferencesPages.map(function (page) { return [page.path, page.sys.id]; })),
189
+ };
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31
+ if (ar || !(i in from)) {
32
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33
+ ar[i] = from[i];
34
+ }
35
+ }
36
+ return to.concat(ar || Array.prototype.slice.call(from));
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.localizedSitemapFromCacheOrBuildEff = exports.buildLocalizedSitemap = void 0;
40
+ var fp_utils_1 = require("../../../utils/fp-utils");
41
+ var page_entry_adapter_1 = require("../adapters/page-entry-adapter");
42
+ var redirect_entry_adapter_1 = require("../adapters/redirect-entry-adapter");
43
+ var is_root_1 = require("./is-root");
44
+ var getAllRedirects = function (data, options, locale, parent) {
45
+ var redirectContentType = options.id
46
+ ? data.contentTypes.get(options.id)
47
+ : undefined;
48
+ var findField = function (fieldId) {
49
+ return redirectContentType === null || redirectContentType === void 0 ? void 0 : redirectContentType.fields.get(fieldId);
50
+ };
51
+ var pageField = findField(options.pageFieldId);
52
+ var pathField = findField(options.pathFieldId);
53
+ var typeField = findField(options.typeFieldId);
54
+ var titleField = options.titleFieldId
55
+ ? findField(options.titleFieldId)
56
+ : undefined;
57
+ return data.redirects.flatMap(function (redirectEntry) {
58
+ var redirect = pageField && pathField && typeField
59
+ ? (0, redirect_entry_adapter_1.redirectEntryAdapter)(data, pageField, pathField, typeField, titleField, parent, locale, redirectEntry)
60
+ : undefined;
61
+ return redirect ? [redirect] : [];
62
+ });
63
+ };
64
+ var buildLocalizedSitemapArrRecursively = function (data, options, locale, parent, pageEntry, acc) {
65
+ var pages = data.pages, contentTypes = data.contentTypes;
66
+ var pageContentType = contentTypes.get(pageEntry.sys.contentType.sys.id);
67
+ var pageContentTypeConfig = options.pageContentTypes[pageEntry.sys.contentType.sys.id];
68
+ var findPageField = function (fieldId) {
69
+ return pageContentType && pageContentTypeConfig
70
+ ? pageContentType.fields.get(fieldId)
71
+ : undefined;
72
+ };
73
+ var slugField = findPageField(pageContentTypeConfig.slugFieldId);
74
+ var titleField = pageContentTypeConfig.titleFieldId
75
+ ? findPageField(pageContentTypeConfig.titleFieldId)
76
+ : undefined;
77
+ var childPagesField = pageContentTypeConfig.childPagesFieldId
78
+ ? findPageField(pageContentTypeConfig.childPagesFieldId)
79
+ : undefined;
80
+ var page = slugField
81
+ ? (0, page_entry_adapter_1.pageEntryAdapter)(data, slugField, titleField, childPagesField, locale, parent, pageEntry)
82
+ : undefined;
83
+ if (page) {
84
+ var validChildPages_1 = page.childPages.filter(function (c) { return pages.get(c.sys.id) && !acc.get(c.sys.id); });
85
+ var redirectChildPages = (0, is_root_1.isRoot)(page) && options.redirectContentType
86
+ ? getAllRedirects(data, options.redirectContentType, locale, page)
87
+ : [];
88
+ redirectChildPages.forEach(function (r) {
89
+ var id = r.sys.id;
90
+ acc.set(id, r);
91
+ validChildPages_1.push({ sys: { id: id } });
92
+ });
93
+ var pageWithValidChildPages = __assign(__assign({}, page), { childPages: validChildPages_1 });
94
+ acc.set(page.sys.id, pageWithValidChildPages);
95
+ validChildPages_1.forEach(function (_a) {
96
+ var id = _a.sys.id;
97
+ var childPageEntry = pages.get(id);
98
+ childPageEntry &&
99
+ buildLocalizedSitemapArrRecursively(data, options, locale, { sys: pageEntry.sys, path: page.path }, childPageEntry, acc);
100
+ });
101
+ return acc;
102
+ }
103
+ else {
104
+ return acc;
105
+ }
106
+ };
107
+ var buildLocalizedSitemap = function (data, options, pageHomeTagId, locale) {
108
+ var _a, _b, _c, _d;
109
+ var homePagesByTagId = data.homePagesByTagId, pages = data.pages;
110
+ var homePageRef = (_d = (_c = (_b = (_a = homePagesByTagId === null || homePagesByTagId === void 0 ? void 0 : homePagesByTagId.get(locale.code)) === null || _a === void 0 ? void 0 : _a.get(pageHomeTagId)) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.sys) === null || _d === void 0 ? void 0 : _d.id;
111
+ var homePageEntry = homePageRef ? pages.get(homePageRef) : undefined;
112
+ if (homePageEntry) {
113
+ var sitemap = buildLocalizedSitemapArrRecursively(data, options, locale, undefined, homePageEntry, new Map());
114
+ return (0, fp_utils_1.right)({
115
+ root: { sys: homePageEntry.sys },
116
+ sitemap: sitemap,
117
+ pageIdByPath: new Map(__spreadArray([], __read(sitemap.values()), false).map(function (page) { return [page.path, page.sys.id]; })),
118
+ });
119
+ }
120
+ else {
121
+ return (0, fp_utils_1.left)("Homepage required but not defined (locale: ".concat(locale.code, ")"));
122
+ }
123
+ };
124
+ exports.buildLocalizedSitemap = buildLocalizedSitemap;
125
+ var localizedSitemapFromCacheOrBuildEff = function (ctx, locale) {
126
+ var cachedLocalizedSitemap = ctx.sitemap.get(locale.code);
127
+ var sitemapE = cachedLocalizedSitemap
128
+ ? cachedLocalizedSitemap
129
+ : (0, exports.buildLocalizedSitemap)(ctx.data, ctx.options, ctx.pageHomeTagId, locale);
130
+ ctx.sitemap.set(locale.code, sitemapE);
131
+ return sitemapE;
132
+ };
133
+ exports.localizedSitemapFromCacheOrBuildEff = localizedSitemapFromCacheOrBuildEff;
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var _a;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ var fp_utils_1 = require("../../../utils/fp-utils");
16
+ var json_stringify_map_replacer_1 = require("../../../utils/json-stringify-map-replacer");
17
+ var build_localized_sitemap_1 = require("./build-localized-sitemap");
18
+ var mocked_localized_sitemap_1 = require("./__mocks__/mocked-localized-sitemap");
19
+ var defaultLocale = {
20
+ code: 'en',
21
+ default: true,
22
+ fallbackCode: null,
23
+ name: 'English',
24
+ };
25
+ var pageContentTypeId = 'page';
26
+ var pageContentTypeSlugFieldId = 'slug';
27
+ var pageContentTypeChildPagesFieldId = 'childPages';
28
+ var redirectContentTypeId = 'redirect';
29
+ var redirectContentTypePage = 'page';
30
+ var redirectContentTypePath = 'path';
31
+ var redirectContentTypeType = 'type';
32
+ var contentTypes = new Map([
33
+ [
34
+ pageContentTypeId,
35
+ {
36
+ sys: { id: pageContentTypeId },
37
+ fields: new Map([
38
+ [
39
+ pageContentTypeSlugFieldId,
40
+ {
41
+ id: pageContentTypeSlugFieldId,
42
+ localized: true,
43
+ name: 'Slug',
44
+ type: "Symbol"
45
+ },
46
+ ],
47
+ [
48
+ pageContentTypeChildPagesFieldId,
49
+ {
50
+ id: pageContentTypeChildPagesFieldId,
51
+ localized: true,
52
+ name: 'Child Pages',
53
+ type: "Array"
54
+ },
55
+ ],
56
+ ]),
57
+ },
58
+ ],
59
+ [
60
+ redirectContentTypeId,
61
+ {
62
+ sys: { id: redirectContentTypeId },
63
+ fields: new Map([
64
+ [
65
+ redirectContentTypePage,
66
+ {
67
+ id: redirectContentTypePage,
68
+ localized: true,
69
+ name: 'Page',
70
+ type: "Link"
71
+ },
72
+ ],
73
+ [
74
+ redirectContentTypePath,
75
+ {
76
+ id: redirectContentTypePath,
77
+ localized: true,
78
+ name: 'Path',
79
+ type: "Symbol"
80
+ },
81
+ ],
82
+ [
83
+ redirectContentTypeType,
84
+ {
85
+ id: redirectContentTypeType,
86
+ localized: true,
87
+ name: 'Type',
88
+ type: "Symbol"
89
+ },
90
+ ],
91
+ ]),
92
+ },
93
+ ],
94
+ ]);
95
+ var options = {
96
+ pageContentTypes: (_a = {},
97
+ _a[pageContentTypeId] = {
98
+ slugFieldId: pageContentTypeSlugFieldId,
99
+ childPagesFieldId: pageContentTypeChildPagesFieldId,
100
+ },
101
+ _a),
102
+ redirectContentType: {
103
+ id: redirectContentTypeId,
104
+ pageFieldId: redirectContentTypePage,
105
+ pathFieldId: redirectContentTypePath,
106
+ typeFieldId: redirectContentTypeType,
107
+ },
108
+ };
109
+ var pageToEntry = function (page, tagsIds) {
110
+ var _a, _b, _c;
111
+ return ({
112
+ sys: { id: page.sys.id, contentType: { sys: { id: pageContentTypeId } } },
113
+ metadata: tagsIds
114
+ ? { tags: tagsIds.map(function (t) { return ({ sys: { id: t } }); }) }
115
+ : undefined,
116
+ fields: (_a = {},
117
+ _a[pageContentTypeSlugFieldId] = (_b = {}, _b[defaultLocale.code] = page.slug, _b),
118
+ _a[pageContentTypeChildPagesFieldId] = (_c = {},
119
+ _c[defaultLocale.code] = page.childPages.map(function (cp) { return ({ sys: cp.sys }); }),
120
+ _c),
121
+ _a),
122
+ });
123
+ };
124
+ var redirectToEntry = function (page, tagsIds) {
125
+ var _a, _b, _c, _d;
126
+ return ({
127
+ sys: { id: page.sys.id, contentType: { sys: { id: redirectContentTypeId } } },
128
+ metadata: tagsIds
129
+ ? { tags: tagsIds.map(function (t) { return ({ sys: { id: t } }); }) }
130
+ : undefined,
131
+ fields: (_a = {},
132
+ _a[redirectContentTypePage] = (_b = {},
133
+ _b[defaultLocale.code] = { sys: { id: page.page.sys.id } },
134
+ _b),
135
+ _a[redirectContentTypePath] = (_c = {},
136
+ _c[defaultLocale.code] = page.path.slice(("/" + defaultLocale.code).length),
137
+ _c),
138
+ _a[redirectContentTypeType] = (_d = {},
139
+ _d[defaultLocale.code] = page.type,
140
+ _d),
141
+ _a),
142
+ });
143
+ };
144
+ describe(build_localized_sitemap_1.buildLocalizedSitemap, function () {
145
+ test('Not enough data to build sitemap', function () {
146
+ var emptyData = {
147
+ contentTypes: contentTypes,
148
+ defaultLocaleCode: defaultLocale.code,
149
+ locales: new Map([[defaultLocale.code, defaultLocale]]),
150
+ homePagesByTagId: new Map(),
151
+ pages: new Map(),
152
+ redirects: [],
153
+ };
154
+ expect((0, build_localized_sitemap_1.buildLocalizedSitemap)(emptyData, { pageContentTypes: {} }, 'pageHome', defaultLocale)._tag).toBe('Left');
155
+ });
156
+ test('Build localized sitemap', function () {
157
+ var pageHomeTagId = 'pagHome';
158
+ var pagesEntries = mocked_localized_sitemap_1.mockedPages.flatMap(function (page) {
159
+ return page.type === 'page'
160
+ ? [pageToEntry(page, page.sys.id === 'root' ? [pageHomeTagId] : [])]
161
+ : [];
162
+ });
163
+ var redirectsEntries = mocked_localized_sitemap_1.mockedPages.flatMap(function (page) {
164
+ return page.type !== 'page' ? [redirectToEntry(page)] : [];
165
+ });
166
+ var data = {
167
+ contentTypes: contentTypes,
168
+ defaultLocaleCode: defaultLocale.code,
169
+ locales: new Map([[defaultLocale.code, defaultLocale]]),
170
+ homePagesByTagId: new Map([
171
+ [
172
+ defaultLocale.code,
173
+ new Map([[pageHomeTagId, [{ sys: { id: mocked_localized_sitemap_1.mockedRoot.sys.id } }]]]),
174
+ ],
175
+ ]),
176
+ pages: new Map(pagesEntries.map(function (e) { return [e.sys.id, e]; })),
177
+ redirects: redirectsEntries,
178
+ };
179
+ expect(JSON.parse(JSON.stringify((0, build_localized_sitemap_1.buildLocalizedSitemap)(data, options, pageHomeTagId, defaultLocale), json_stringify_map_replacer_1.jsonStrigifyMapReplacer))).toMatchObject(JSON.parse(JSON.stringify((0, fp_utils_1.right)(mocked_localized_sitemap_1.mockedLocalizedSitemap), json_stringify_map_replacer_1.jsonStrigifyMapReplacer)));
180
+ });
181
+ test('Handle reference cycles', function () {
182
+ var pageHomeTagId = 'pagHome';
183
+ var entries = mocked_localized_sitemap_1.mockedCircularReferencesPages.map(function (page) {
184
+ return pageToEntry(page, page.sys.id === 'root' ? [pageHomeTagId] : []);
185
+ });
186
+ var data = {
187
+ contentTypes: contentTypes,
188
+ defaultLocaleCode: defaultLocale.code,
189
+ locales: new Map([[defaultLocale.code, defaultLocale]]),
190
+ homePagesByTagId: new Map([
191
+ [
192
+ defaultLocale.code,
193
+ new Map([[pageHomeTagId, [{ sys: { id: mocked_localized_sitemap_1.mockedRoot.sys.id } }]]]),
194
+ ],
195
+ ]),
196
+ pages: new Map(entries.map(function (e) { return [e.sys.id, e]; })),
197
+ redirects: [],
198
+ };
199
+ var expectedLocalizedSitemap = (0, fp_utils_1.right)({
200
+ root: { sys: mocked_localized_sitemap_1.mockedRoot.sys },
201
+ sitemap: new Map([
202
+ __assign(__assign({}, mocked_localized_sitemap_1.mockedRoot), { childPages: [
203
+ { sys: { id: mocked_localized_sitemap_1.mockedPage1WithCircularReference.sys.id } },
204
+ ] }),
205
+ __assign(__assign({}, mocked_localized_sitemap_1.mockedPage1WithCircularReference), { childPages: [] }),
206
+ ].map(function (page) { return [page.sys.id, page]; })),
207
+ });
208
+ expect(JSON.parse(JSON.stringify((0, build_localized_sitemap_1.buildLocalizedSitemap)(data, options, pageHomeTagId, defaultLocale), json_stringify_map_replacer_1.jsonStrigifyMapReplacer))).toMatchObject(JSON.parse(JSON.stringify(expectedLocalizedSitemap, json_stringify_map_replacer_1.jsonStrigifyMapReplacer)));
209
+ });
210
+ });
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPagesByTagEagerly = void 0;
4
+ var array_to_map_1 = require("../../../utils/array-to-map");
5
+ var localized_pages_by_tag_id_1 = require("./localized-pages-by-tag-id");
6
+ var buildPagesByTagEagerly = function (ctx, locales) {
7
+ return (0, array_to_map_1.arrayToMap)(function (locale) { return locale.code; })(function (locale) {
8
+ return (0, localized_pages_by_tag_id_1.buildLocalizedPagesByTagId)(ctx, locale);
9
+ })(Object.values(locales));
10
+ };
11
+ exports.buildPagesByTagEagerly = buildPagesByTagEagerly;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.buildSitemapEagerly = void 0;
29
+ var build_localized_sitemap_1 = require("./build-localized-sitemap");
30
+ var array_to_map_1 = require("../../../utils/array-to-map");
31
+ var buildSitemapEagerly = function (ctx, locales) {
32
+ return (0, array_to_map_1.arrayToMap)(function (locale) { return locale.code; })(function (locale) {
33
+ return (0, build_localized_sitemap_1.buildLocalizedSitemap)(ctx.data, ctx.options, ctx.pageHomeTagId, locale);
34
+ })(__spreadArray([], __read(locales.values()), false));
35
+ };
36
+ exports.buildSitemapEagerly = buildSitemapEagerly;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.findAncestors = void 0;
29
+ var findAncestorsRecursively = function (sitemap, page) {
30
+ var _a;
31
+ var maybeParentRef = (_a = page === null || page === void 0 ? void 0 : page.parent) === null || _a === void 0 ? void 0 : _a.sys;
32
+ var maybeParent = maybeParentRef
33
+ ? sitemap.get(maybeParentRef.id)
34
+ : undefined;
35
+ return maybeParent && maybeParent.type === 'page'
36
+ ? __spreadArray([maybeParent], __read(findAncestorsRecursively(sitemap, maybeParent)), false) : [];
37
+ };
38
+ var findAncestors = function (_a, page) {
39
+ var root = _a.root, sitemap = _a.sitemap;
40
+ var ancestors = findAncestorsRecursively(sitemap, page);
41
+ var maybeHomePageAncestor = ancestors
42
+ .slice(-1)
43
+ .find(function (page) { return page.sys.id === root.sys.id; });
44
+ return maybeHomePageAncestor ? ancestors : undefined;
45
+ };
46
+ exports.findAncestors = findAncestors;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var find_ancestors_1 = require("./find-ancestors");
4
+ var mocked_localized_sitemap_1 = require("./__mocks__/mocked-localized-sitemap");
5
+ describe(find_ancestors_1.findAncestors, function () {
6
+ test('Get home page ancestors', function () {
7
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedRoot)).toBeUndefined();
8
+ });
9
+ test('Get first level nodes ancestors', function () {
10
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedPage1)).toEqual([
11
+ mocked_localized_sitemap_1.mockedRoot,
12
+ ]);
13
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedPage2)).toEqual([
14
+ mocked_localized_sitemap_1.mockedRoot,
15
+ ]);
16
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedPage3)).toEqual([
17
+ mocked_localized_sitemap_1.mockedRoot,
18
+ ]);
19
+ });
20
+ test('Get nested nodes ancestors', function () {
21
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedPage1_1)).toEqual([
22
+ mocked_localized_sitemap_1.mockedPage1,
23
+ mocked_localized_sitemap_1.mockedRoot,
24
+ ]);
25
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedPage1_1_1)).toEqual([
26
+ mocked_localized_sitemap_1.mockedPage1_1,
27
+ mocked_localized_sitemap_1.mockedPage1,
28
+ mocked_localized_sitemap_1.mockedRoot,
29
+ ]);
30
+ expect((0, find_ancestors_1.findAncestors)(mocked_localized_sitemap_1.mockedLocalizedSitemap, mocked_localized_sitemap_1.mockedPage1_2)).toEqual([
31
+ mocked_localized_sitemap_1.mockedPage1,
32
+ mocked_localized_sitemap_1.mockedRoot,
33
+ ]);
34
+ });
35
+ });