@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 @@
1
+ export var isRoot = function (page) { return !page.parent; };
@@ -0,0 +1,22 @@
1
+ var localizedValue = function (localesMap, locale, field) {
2
+ var maybeFieldValue = field[locale.code];
3
+ if (maybeFieldValue) {
4
+ return maybeFieldValue;
5
+ }
6
+ else {
7
+ var maybeFallbackLocale = locale.fallbackCode
8
+ ? localesMap.get(locale.fallbackCode)
9
+ : undefined;
10
+ return maybeFallbackLocale
11
+ ? localizedValue(localesMap, maybeFallbackLocale, field)
12
+ : undefined;
13
+ }
14
+ };
15
+ export var localizeField = function (_a, locale) {
16
+ var defaultLocaleCode = _a.defaultLocaleCode, locales = _a.locales;
17
+ return function (isFieldLocalized, field) {
18
+ return isFieldLocalized
19
+ ? localizedValue(locales, locale, field || {})
20
+ : field === null || field === void 0 ? void 0 : field[defaultLocaleCode];
21
+ };
22
+ };
@@ -0,0 +1,137 @@
1
+ import { localizeField } from './localize-contentful-field';
2
+ var enLocale = {
3
+ code: 'en',
4
+ default: true,
5
+ fallbackCode: null,
6
+ name: 'English',
7
+ };
8
+ var enAtLocale = {
9
+ code: 'en-At',
10
+ default: true,
11
+ fallbackCode: enLocale.code,
12
+ name: 'English',
13
+ };
14
+ var deLocale = {
15
+ code: 'de',
16
+ default: false,
17
+ fallbackCode: null,
18
+ name: 'German',
19
+ };
20
+ var deDeLocale = {
21
+ code: 'de-DE',
22
+ default: true,
23
+ fallbackCode: deLocale.code,
24
+ name: 'German',
25
+ };
26
+ var deAtLocale = {
27
+ code: 'de-AT',
28
+ default: true,
29
+ fallbackCode: deDeLocale.code,
30
+ name: 'German',
31
+ };
32
+ var esLocale = {
33
+ code: 'es',
34
+ default: true,
35
+ fallbackCode: deDeLocale.code,
36
+ name: 'Spanish',
37
+ };
38
+ var frLocale = {
39
+ code: 'fr',
40
+ default: false,
41
+ fallbackCode: null,
42
+ name: 'French',
43
+ };
44
+ var singleEnLocale = {
45
+ defaultLocaleCode: enLocale.code,
46
+ locales: new Map([[enLocale.code, enLocale]]),
47
+ };
48
+ var multipleIndependentLocales = {
49
+ defaultLocaleCode: enLocale.code,
50
+ locales: new Map([
51
+ [enLocale.code, enLocale],
52
+ [esLocale.code, esLocale],
53
+ [frLocale.code, frLocale],
54
+ ]),
55
+ };
56
+ var multipleLocales = {
57
+ defaultLocaleCode: enLocale.code,
58
+ locales: new Map([
59
+ [enLocale.code, enLocale],
60
+ [enAtLocale.code, enAtLocale],
61
+ [deLocale.code, deLocale],
62
+ [deDeLocale.code, deDeLocale],
63
+ [deAtLocale.code, deAtLocale],
64
+ [frLocale.code, frLocale],
65
+ ]),
66
+ };
67
+ describe(localizeField, function () {
68
+ test('Get value from empty field', function () {
69
+ var valueResult = localizeField(singleEnLocale, enLocale)(false, {});
70
+ expect(valueResult).toBeUndefined();
71
+ var valueEnResult = localizeField(singleEnLocale, enLocale)(true, {});
72
+ expect(valueEnResult).toBeUndefined();
73
+ });
74
+ test('Get value from not localized field', function () {
75
+ var _a, _b;
76
+ var stringValue = 'test';
77
+ var stringValueEnResult = localizeField(singleEnLocale, enLocale)(false, (_a = {},
78
+ _a[enLocale.code] = stringValue,
79
+ _a));
80
+ expect(stringValueEnResult).toEqual(stringValue);
81
+ var stringValueDeResult = localizeField(multipleIndependentLocales, deLocale)(false, (_b = {},
82
+ _b[enLocale.code] = stringValue,
83
+ _b));
84
+ expect(stringValueDeResult).toEqual(stringValue);
85
+ });
86
+ test('Localize field single locale', function () {
87
+ var _a, _b;
88
+ var stringValue = 'test';
89
+ var stringValueResult = localizeField(singleEnLocale, enLocale)(true, (_a = {},
90
+ _a[enLocale.code] = stringValue,
91
+ _a));
92
+ expect(stringValueResult).toEqual(stringValue);
93
+ var objectValue = { v: stringValue };
94
+ var objectValueResult = localizeField(singleEnLocale, enLocale)(true, (_b = {},
95
+ _b[enLocale.code] = objectValue,
96
+ _b));
97
+ expect(objectValueResult).toMatchObject(objectValue);
98
+ });
99
+ test('Localize field multiple indendent locales', function () {
100
+ var _a;
101
+ var enStringValue = 'enTest';
102
+ var esStringValue = 'esTest';
103
+ var frStringValue = 'frTest';
104
+ var field = (_a = {},
105
+ _a[enLocale.code] = enStringValue,
106
+ _a[esLocale.code] = esStringValue,
107
+ _a[frLocale.code] = frStringValue,
108
+ _a);
109
+ var enValueResult = localizeField(multipleIndependentLocales, enLocale)(true, field);
110
+ expect(enValueResult).toEqual(enStringValue);
111
+ var esValueResult = localizeField(multipleIndependentLocales, esLocale)(true, field);
112
+ expect(esValueResult).toEqual(esStringValue);
113
+ var frValueResult = localizeField(multipleIndependentLocales, frLocale)(true, field);
114
+ expect(frValueResult).toEqual(frStringValue);
115
+ });
116
+ test('Localize field multiple locales with fallbacks', function () {
117
+ var _a;
118
+ var enStringValue = 'enTest';
119
+ var deStringValue = 'deTest';
120
+ var field = (_a = {},
121
+ _a[enLocale.code] = enStringValue,
122
+ _a[deLocale.code] = deStringValue,
123
+ _a);
124
+ var enValueResult = localizeField(multipleLocales, enLocale)(true, field);
125
+ expect(enValueResult).toEqual(enStringValue);
126
+ var deValueResult = localizeField(multipleLocales, deLocale)(true, field);
127
+ expect(deValueResult).toEqual(deStringValue);
128
+ var frValueResult = localizeField(multipleLocales, frLocale)(true, field);
129
+ expect(frValueResult).toBeUndefined();
130
+ var enAtValueResult = localizeField(multipleLocales, enAtLocale)(true, field);
131
+ expect(enAtValueResult).toEqual(enStringValue);
132
+ var deDeValueResult = localizeField(multipleLocales, deDeLocale)(true, field);
133
+ expect(deDeValueResult).toEqual(deStringValue);
134
+ var deAtValueResult = localizeField(multipleLocales, deAtLocale)(true, field);
135
+ expect(deAtValueResult).toEqual(deStringValue);
136
+ });
137
+ });
@@ -0,0 +1,79 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ import { localizedSitemapFromCacheOrBuildEff } from './build-localized-sitemap';
27
+ import { right } from '../../../utils/fp-utils';
28
+ import { parseLocaleTag } from '../../data/helpers/parse-locale-tag';
29
+ import { groupBy } from '../../../utils/group-by';
30
+ var tagFilterPredicate = function (localeTagIdPrefix, localeCode, metadata) {
31
+ return function (tagId) {
32
+ var maybeLocaleCodes = metadata.tags.flatMap(function (_a) {
33
+ var sys = _a.sys;
34
+ var locale = parseLocaleTag(localeTagIdPrefix)(sys.id);
35
+ return locale ? [locale.localeCode] : [];
36
+ });
37
+ var localesCondition = maybeLocaleCodes && maybeLocaleCodes.length > 0
38
+ ? !!maybeLocaleCodes.find(function (code) { return localeCode === code; })
39
+ : true;
40
+ var tagCondition = !!metadata.tags.find(function (_a) {
41
+ var sys = _a.sys;
42
+ return sys.id === tagId;
43
+ });
44
+ return localesCondition && tagCondition;
45
+ };
46
+ };
47
+ export var buildLocalizedPagesByTagId = function (ctx, locale) {
48
+ var sitemap = localizedSitemapFromCacheOrBuildEff(ctx, locale);
49
+ if (sitemap._tag === 'Right') {
50
+ var pages = __spreadArray([], __read(sitemap.right.sitemap.values()), false);
51
+ var tagFilterF_1 = function (metadata, tagId) {
52
+ return tagFilterPredicate(ctx.localeTagIdPrefix, locale.code, metadata)(tagId);
53
+ };
54
+ var tagIdPageRefArr = pages.flatMap(function (page) {
55
+ var _a;
56
+ return ((_a = page === null || page === void 0 ? void 0 : page.metadata) === null || _a === void 0 ? void 0 : _a.tags.flatMap(function (t) {
57
+ return page.metadata && tagFilterF_1(page.metadata, t.sys.id)
58
+ ? [{ tagId: t.sys.id, sys: { id: page.sys.id } }]
59
+ : [];
60
+ })) || [];
61
+ });
62
+ var pagesGroupedByTagId = right(groupBy(function (_a) {
63
+ var tagId = _a.tagId;
64
+ return tagId;
65
+ })(tagIdPageRefArr));
66
+ return pagesGroupedByTagId;
67
+ }
68
+ else {
69
+ return sitemap;
70
+ }
71
+ };
72
+ export var localizedPagesByTagIdFromCacheOrBuildEff = function (ctx, locale) {
73
+ var cachedLocalizedPagesByTagId = ctx.pagesByTagId.get(locale.code);
74
+ var localizedPageByTagId = cachedLocalizedPagesByTagId
75
+ ? cachedLocalizedPagesByTagId
76
+ : buildLocalizedPagesByTagId(ctx, locale);
77
+ ctx.pagesByTagId.set(locale.code, localizedPageByTagId);
78
+ return localizedPageByTagId;
79
+ };
@@ -0,0 +1,4 @@
1
+ export var localizedPath = function (localeCode, path) {
2
+ var pathLocalePrefix = "/" + localeCode;
3
+ return path ? pathLocalePrefix + path : pathLocalePrefix;
4
+ };
@@ -0,0 +1,8 @@
1
+ import { toArboretumPageWithMissingData } from '../adapters/to-arboretum-page-with-missing-data-adapter';
2
+ import { findAncestors } from './find-ancestors';
3
+ export var pageAncestors = function (localeCode, sitemap, page) {
4
+ var ancestors = findAncestors(sitemap, page);
5
+ return ancestors === null || ancestors === void 0 ? void 0 : ancestors.map(function (ancestor) {
6
+ return toArboretumPageWithMissingData(localeCode)(ancestor, undefined, undefined);
7
+ });
8
+ };
@@ -0,0 +1,10 @@
1
+ import { redirectToArboretumPage } from '../adapters/redirect-to-arboretum-page-adapter';
2
+ import { toArboretumPageWithMissingData } from '../adapters/to-arboretum-page-with-missing-data-adapter';
3
+ import { findChildren } from './find-children';
4
+ export var pageChildren = function (localeCode, sitemap, page) {
5
+ return findChildren(sitemap)(page).map(function (childPage) {
6
+ return childPage.type === 'page'
7
+ ? toArboretumPageWithMissingData(localeCode)(childPage, undefined, undefined)
8
+ : redirectToArboretumPage(localeCode)(childPage);
9
+ });
10
+ };
@@ -0,0 +1,7 @@
1
+ export var cachedData = function (ctx) {
2
+ return function () { return ({
3
+ data: ctx.data,
4
+ sitemap: ctx.sitemap,
5
+ pagesByTagId: ctx.pagesByTagId,
6
+ }); };
7
+ };
@@ -0,0 +1,27 @@
1
+ import { left, right } from "../../../utils/fp-utils";
2
+ import { localizedSitemapFromCacheOrBuildEff } from "../helpers/build-localized-sitemap";
3
+ import { toArboretumPage } from "../adapters/to-arboretum-page-adapter";
4
+ export var homePage = function (ctx) {
5
+ return function (localeCode, options) {
6
+ var locale = ctx.data.locales.get(localeCode);
7
+ if (locale) {
8
+ var sitemap = localizedSitemapFromCacheOrBuildEff(ctx, locale);
9
+ if (sitemap._tag === "Right") {
10
+ var id = sitemap.right.root.sys.id;
11
+ var page = sitemap.right.sitemap.get(id);
12
+ if (page && page.type === "page") {
13
+ return right(toArboretumPage(sitemap.right, localeCode, options)(page));
14
+ }
15
+ else {
16
+ return left("Failed to find home page by id: ".concat(id, " and locale: ").concat(locale.code));
17
+ }
18
+ }
19
+ else {
20
+ return left(sitemap.left);
21
+ }
22
+ }
23
+ else {
24
+ return left("Failed to find locale by code: ".concat(localeCode));
25
+ }
26
+ };
27
+ };
@@ -0,0 +1,29 @@
1
+ import { left, right } from '../../../utils/fp-utils';
2
+ import { localizedSitemapFromCacheOrBuildEff } from '../helpers/build-localized-sitemap';
3
+ import { toArboretumPage } from '../adapters/to-arboretum-page-adapter';
4
+ import { redirectToArboretumPage } from '../adapters/redirect-to-arboretum-page-adapter';
5
+ export var pageById = function (ctx) {
6
+ return function (localeCode, id, options) {
7
+ var locale = ctx.data.locales.get(localeCode);
8
+ if (locale) {
9
+ var sitemap = localizedSitemapFromCacheOrBuildEff(ctx, locale);
10
+ if (sitemap._tag === 'Right') {
11
+ var page = sitemap.right.sitemap.get(id);
12
+ if (page) {
13
+ return right(page.type === 'page'
14
+ ? toArboretumPage(sitemap.right, localeCode, options)(page)
15
+ : redirectToArboretumPage(locale.code)(page));
16
+ }
17
+ else {
18
+ return left("Failed to find page by id: ".concat(id, " and locale: ").concat(locale.code));
19
+ }
20
+ }
21
+ else {
22
+ return left(sitemap.left);
23
+ }
24
+ }
25
+ else {
26
+ return left("Failed to find locale by code: ".concat(localeCode));
27
+ }
28
+ };
29
+ };
@@ -0,0 +1,52 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ import { left, right } from '../../../utils/fp-utils';
18
+ import { localizedSitemapFromCacheOrBuildEff } from '../helpers/build-localized-sitemap';
19
+ import { toArboretumPage } from '../adapters/to-arboretum-page-adapter';
20
+ import { redirectToArboretumPage } from '../adapters/redirect-to-arboretum-page-adapter';
21
+ export var pageByPath = function (ctx) {
22
+ return function (path, options) {
23
+ if (path.length) {
24
+ var _a = __read(path.split('/').filter(function (slug) { return !!slug; }), 1), localeCode = _a[0];
25
+ var locale = ctx.data.locales.get(localeCode);
26
+ if (locale) {
27
+ var sitemap = localizedSitemapFromCacheOrBuildEff(ctx, locale);
28
+ if (sitemap._tag === 'Right') {
29
+ var pageId = sitemap.right.pageIdByPath.get(path.startsWith("/") ? path : "/" + path);
30
+ var page = pageId ? sitemap.right.sitemap.get(pageId) : undefined;
31
+ if (page) {
32
+ return right(page.type === 'page'
33
+ ? toArboretumPage(sitemap.right, localeCode, options)(page)
34
+ : redirectToArboretumPage(locale.code)(page));
35
+ }
36
+ else {
37
+ return left("Failed to find page by path: ".concat(path));
38
+ }
39
+ }
40
+ else {
41
+ return left(sitemap.left);
42
+ }
43
+ }
44
+ else {
45
+ return left("Failed to find locale by code: ".concat(localeCode));
46
+ }
47
+ }
48
+ else {
49
+ return left("Path can't be empty");
50
+ }
51
+ };
52
+ };
@@ -0,0 +1,6 @@
1
+ import { pageById } from './page-by-id';
2
+ export var pagesByIds = function (ctx) {
3
+ return function (localeCode, ids, options) {
4
+ return ids.map(function (id) { return pageById(ctx)(localeCode, id, options); });
5
+ };
6
+ };
@@ -0,0 +1,6 @@
1
+ import { pageByPath } from './page-by-path';
2
+ export var pagesByPaths = function (ctx) {
3
+ return function (paths, options) {
4
+ return paths.map(function (path) { return pageByPath(ctx)(path, options); });
5
+ };
6
+ };
@@ -0,0 +1,37 @@
1
+ import { left, right } from '../../../utils/fp-utils';
2
+ import { localizedSitemapFromCacheOrBuildEff } from '../helpers/build-localized-sitemap';
3
+ import { toArboretumPage } from '../adapters/to-arboretum-page-adapter';
4
+ import { redirectToArboretumPage } from '../adapters/redirect-to-arboretum-page-adapter';
5
+ import { localizedPagesByTagIdFromCacheOrBuildEff } from '../helpers/localized-pages-by-tag-id';
6
+ export var pagesByTagId = function (ctx) {
7
+ return function (localeCode, tagId, options) {
8
+ var _a;
9
+ var locale = ctx.data.locales.get(localeCode);
10
+ if (locale) {
11
+ var pagesByTagId_1 = localizedPagesByTagIdFromCacheOrBuildEff(ctx, locale);
12
+ var sitemap_1 = localizedSitemapFromCacheOrBuildEff(ctx, locale);
13
+ if (pagesByTagId_1._tag === 'Left') {
14
+ return pagesByTagId_1;
15
+ }
16
+ else if (sitemap_1._tag === 'Left') {
17
+ return sitemap_1;
18
+ }
19
+ else {
20
+ var pages = ((_a = pagesByTagId_1.right.get(tagId)) === null || _a === void 0 ? void 0 : _a.flatMap(function (_a) {
21
+ var sys = _a.sys;
22
+ var page = sitemap_1.right.sitemap.get(sys.id);
23
+ var arboretumPage = (page === null || page === void 0 ? void 0 : page.type) === 'page'
24
+ ? toArboretumPage(sitemap_1.right, locale.code, options)(page)
25
+ : page
26
+ ? redirectToArboretumPage(locale.code)(page)
27
+ : undefined;
28
+ return arboretumPage ? [arboretumPage] : [];
29
+ })) || [];
30
+ return right(pages);
31
+ }
32
+ }
33
+ else {
34
+ return left("Failed to find locale by code: ".concat(localeCode));
35
+ }
36
+ };
37
+ };
@@ -0,0 +1,75 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ import { left, right } from '../../../utils/fp-utils';
27
+ import { localizedSitemapFromCacheOrBuildEff } from '../helpers/build-localized-sitemap';
28
+ import { toArboretumPage } from '../adapters/to-arboretum-page-adapter';
29
+ import { redirectToArboretumPage } from '../adapters/redirect-to-arboretum-page-adapter';
30
+ var singleOrAllLocalesE = function (locales) {
31
+ return function (localeCode) {
32
+ if (localeCode) {
33
+ var locale = locales.get(localeCode);
34
+ return locale
35
+ ? right([locale])
36
+ : left("Failed to find locale by code: ".concat(localeCode));
37
+ }
38
+ else {
39
+ return right(__spreadArray([], __read(locales.values()), false));
40
+ }
41
+ };
42
+ };
43
+ export var pages = function (ctx) {
44
+ return function (options) {
45
+ var localeCode = options === null || options === void 0 ? void 0 : options.localeCode;
46
+ var localesE = singleOrAllLocalesE(ctx.data.locales)(localeCode);
47
+ var skip = typeof (options === null || options === void 0 ? void 0 : options.skip) !== 'undefined' ? options.skip : 0;
48
+ if (localesE._tag === 'Right') {
49
+ var pages_1 = localesE.right
50
+ .flatMap(function (locale) {
51
+ var localizedSitemapE = localizedSitemapFromCacheOrBuildEff(ctx, locale);
52
+ var pages = localizedSitemapE._tag === 'Right'
53
+ ? __spreadArray([], __read(localizedSitemapE.right.sitemap.values()), false).map(function (p) {
54
+ return p.type === 'page'
55
+ ? toArboretumPage(localizedSitemapE.right, locale.code, options)(p)
56
+ : redirectToArboretumPage(locale.code)(p);
57
+ })
58
+ : [];
59
+ return pages;
60
+ })
61
+ .sort(function (p1, p2) {
62
+ if (p1.id < p2.id)
63
+ return -1;
64
+ if (p1.id > p2.id)
65
+ return 1;
66
+ return 0;
67
+ })
68
+ .slice(skip, options === null || options === void 0 ? void 0 : options.limit);
69
+ return right(pages_1);
70
+ }
71
+ else {
72
+ return localesE;
73
+ }
74
+ };
75
+ };
@@ -0,0 +1,64 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { sitemapData } from '../../data/sitemap-data';
38
+ export var regenerate = function (ctx) {
39
+ return function () { return __awaiter(void 0, void 0, void 0, function () {
40
+ var dataE;
41
+ return __generator(this, function (_a) {
42
+ switch (_a.label) {
43
+ case 0:
44
+ ctx.regenerationInProgress = true;
45
+ return [4 /*yield*/, sitemapData(ctx).finally(function () {
46
+ ctx.regenerationInProgress = false;
47
+ })];
48
+ case 1:
49
+ dataE = _a.sent();
50
+ if (dataE._tag === 'Right') {
51
+ ctx.sitemap = new Map();
52
+ ctx.pagesByTagId = new Map();
53
+ ctx.lastUpdatedAt = new Date().toISOString();
54
+ ctx.data = dataE.right.data;
55
+ return [2 /*return*/, { status: 'OK', warnings: dataE.right.warnings }];
56
+ }
57
+ else {
58
+ throw new Error(dataE.left.join('\n'));
59
+ }
60
+ return [2 /*return*/];
61
+ }
62
+ });
63
+ }); };
64
+ };