@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
package/README.md ADDED
@@ -0,0 +1,223 @@
1
+ <h3 align="center">
2
+ <a href="https://gcanti.github.io/fp-ts/">
3
+ <img src="./logo.svg">
4
+ </a>
5
+ </h3>
6
+
7
+ <p align="center">
8
+ Arboretum - The sitemap for contentful
9
+ </p>
10
+
11
+ # Introduction
12
+
13
+ `@bright.global/arboretum-sdk` is a library for building sitemaps in [Contentful](https://www.contentful.com/).
14
+
15
+ - **Dynamic:** Arboretum SDK builds sitemap dynamically based on the pages structure defined in Contentful. There are no hard-coded paths, so editors have full power over the sitemap.
16
+ - **Customizable:** Content types that represent pages are configurable, so you can integrate Arboretum SDK even in existing projects.
17
+ - **Efficient:** Number of requests to Contentful is minimalized.
18
+ - **Lazy:** By default sitemap is built only for locales that were explicitly requested.
19
+ - **In memory:** Sitemap is stored in memory, so no other dependencies (e.g. database) are required.
20
+
21
+ # Installation
22
+
23
+ To install the stable version:
24
+
25
+ ```
26
+ yarn add @bright.global/arboretum-sdk
27
+ ```
28
+
29
+ # Create client
30
+
31
+ Basically, there are 3 ways to create Arboretum SDK client:
32
+
33
+ - By providing required credentials by hand
34
+
35
+ ```ts
36
+ import { createArboretumClientFromCdaParams } from "@bright.global/arboretum-sdk";
37
+
38
+ (async () => {
39
+ const { client, warnings } = await createArboretumClientFromCdaParams({
40
+ preview: false,
41
+ contentful: {
42
+ space: "[CONTENTFUL SPACE]",
43
+ environment: "[CONTENTFUL ENVIRONMENT]",
44
+ accessToken: "[CONTENTFUL CDA/CPA ACCESS TOKEN]",
45
+ // Sample page content type configuration
46
+ options: {
47
+ pageContentTypes: {
48
+ page: {
49
+ titleFieldId: "name",
50
+ slugFieldId: "slug",
51
+ childPagesFieldId: "childPages",
52
+ },
53
+ },
54
+ },
55
+ },
56
+ // Client configuration options
57
+ options: {},
58
+ });
59
+ })();
60
+ ```
61
+
62
+ - By providing contentful CDA client
63
+
64
+ ```ts
65
+ import { createArboretumClientFromCdaClient } from "@bright.global/arboretum-sdk";
66
+ import { createClient } from "contentful";
67
+
68
+ const contentfulClient = createClient({
69
+ space: "[CONTENTFUL SPACE]",
70
+ environment: "[CONTENTFUL ENVIRONMENT]",
71
+ accessToken: "[CONTENTFUL CDA/CPA ACCESS TOKEN]",
72
+ });
73
+
74
+ (async () => {
75
+ const { client, warnings } = await createArboretumClientFromCdaClient({
76
+ preview: false,
77
+ contentful: {
78
+ client: contentfulClient,
79
+ // Sample page content type configuration
80
+ options: {
81
+ pageContentTypes: {
82
+ page: {
83
+ titleFieldId: "name",
84
+ slugFieldId: "slug",
85
+ childPagesFieldId: "childPages",
86
+ },
87
+ },
88
+ },
89
+ },
90
+ // Client configuration options
91
+ options: {},
92
+ });
93
+ })();
94
+ ```
95
+
96
+ - By providing contentful CMA client (especially useful in contentful apps)
97
+
98
+ ```ts
99
+ import { createArboretumClientFromCma } from "@bright.global/arboretum-sdk";
100
+ import { createClient } from "contentful-management";
101
+
102
+ async () => {
103
+ const cmaClient = createClient({
104
+ accessToken: "[CONTENTFUL CDA/CPA ACCESS TOKEN]",
105
+ });
106
+
107
+ const spaceClient = await cmaClient.getSpace("[CONTENTFUL SPACE]");
108
+
109
+ const environmentClient = await spaceClient.getEnvironment(
110
+ "[CONTENTFUL ENVIRONMENT]"
111
+ );
112
+
113
+ const { client, warnings } = await createArboretumClientFromCma({
114
+ preview: false,
115
+ contentful: {
116
+ client: environmentClient,
117
+ // Sample page content type configuration
118
+ options: {
119
+ pageContentTypes: {
120
+ page: {
121
+ titleFieldId: "name",
122
+ slugFieldId: "slug",
123
+ childPagesFieldId: "childPages",
124
+ },
125
+ },
126
+ },
127
+ },
128
+ // Client configuration options
129
+ options: {},
130
+ });
131
+ };
132
+ ```
133
+
134
+ In this step all data required to calculate sitemap is fetched and stored in internal memory. That's the only place where dynamic requests to Contentful are happening. All subsequent interactions with the Arboretum SDK client rely on the data fetched in this step.
135
+
136
+ *** Important: Remember to provide valid content types configuration unique to your contentful environment and mark entry representing the home page with the tag `pageHome` (you can customize this tag using `homePageTagId` configuration).
137
+
138
+ ### Client configuration options
139
+
140
+ | | Default | Description |
141
+ | ------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
142
+ | eageryly | false | By default localized sitemap is generated only for locales that were explicitly requested. When set to `true` sitemap is generated for every locale in advance. |
143
+ | data | | You can cache data computed during previous Arboretum SDK client initialization (`client.cachedData` method) and use it to create a new client. When this parameter is defined all requests to Contentful are skipped. |
144
+ | includeEntryStatus | false | Only for Arboretum SDK clients that were created based on Contentful CMA. When set to `true` page's `cmaOnlyStatus` field will be defined. |
145
+
146
+ ### Contentful configuration options
147
+
148
+ | Default | Default | Description |
149
+ |---------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
150
+ | homePageTagId | pageHome | Sitemap root tag id |
151
+ | pageContentTypes | | **Required**. Object consisting of keys that are content type id's and values described [here](#contentful-page-content-types-configuration). Sample value: `{page:{"titleFieldId":"name","slugFieldId":"slug","childPagesFieldId":"childPages"}}` |
152
+ | redirectContentType | | Object described [here](#contentful-redirect-content-type-configuration). Sample value: `{"id":"redirect","titleFieldId":"name","typeFieldId":"type","pageFieldId":"page","pathFieldId":"path"}` |
153
+ ### Contentful page content types configuration
154
+ | Name | Default | Description |
155
+ |-------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
156
+ | titleFieldId | | Id of the field that represents the page title. This field should be of type `Symbol`. |
157
+ | slugFieldId | | **Required**. Id of the field that represents the page slug that should match the following regexp `^((\/)\|(([\/\w\-\._~:!$&'\(\)*+,;@]\|(%\d+))+))$`. This field should be of type `Symbol`. |
158
+ | childPagesFieldId | | Id of the field that represents the references to child pages. This field should be of type `Array` and include references to other entries that were configured as pages. |
159
+ ### Contentful redirect content type configuration
160
+ | Name | Default | Description |
161
+ |--------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
162
+ | id | | **Required**. Id of the redirect content type. |
163
+ | titleFieldId | | Id of the field that represents the redirect title. This field should be of type `Symbol`. |
164
+ | typeFieldId | | **Required**. Id of the field that represents the redirect type (should be either `alias` or `redirect`). This field should be of type `Symbol`. |
165
+ | pageFieldId | | **Required**. Id of the field that represents the page reference. This field should be of type `Link` and accept references only to entries that were configured as pages. |
166
+ | pathFieldId | | **Required**. Id of the field that represents the redirect path that should match the following regexp `\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?$`. This field should be of type `Symbol`. |
167
+
168
+ # Basic usage
169
+
170
+ Most of the results returned by Arboretum SDK are wrapped by `Eider` (inspired by [fp-ts Eider](https://gcanti.github.io/fp-ts/modules/Either.ts)) where successful responses are marked with `_tag` equal to `"Right"` and failed responses are marked with `_tag` equal to `"Left"`.
171
+
172
+ ```ts
173
+ const homePage = client.pageByPath("/en");
174
+ console.log(homePage);
175
+ /* prints
176
+ {
177
+ _tag: 'Right',
178
+ right: {
179
+ type: 'page',
180
+ id: 'ZCFBfxFPfz3iy9Rojvxva',
181
+ title: 'home',
182
+ localeCode: 'en',
183
+ path: '/en',
184
+ slug: 'home',
185
+ totalDirectChildrenCount: 2
186
+ }
187
+ }
188
+
189
+ or
190
+
191
+ { _tag: 'Left', left: 'Failed to find locale by code: en' }
192
+
193
+ */
194
+
195
+ const blogPage = client.pageById("en", "4bkXR9tM8c1cGzTe7BMIgn");
196
+ console.log(blogPage);
197
+ /* prints
198
+ {
199
+ _tag: "Right",
200
+ right: {
201
+ type: "page",
202
+ id: "4bkXR9tM8c1cGzTe7BMIgn",
203
+ title: "blog",
204
+ localeCode: "en",
205
+ path: "/en/blog",
206
+ slug: "blog",
207
+ totalDirectChildrenCount: 2,
208
+ },
209
+ }
210
+
211
+ or
212
+
213
+ {
214
+ _tag: "Left",
215
+ left: "Failed to find page by id: 4bkXR9tM8c1cGzTe7BMIgn and locale: en",
216
+ }
217
+
218
+ */
219
+ ```
220
+
221
+ # Documentation
222
+
223
+ - [Arboretum SDK Documentation](https://brightit.github.io/arboretum-sdk/)
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,54 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.createContentfulClient = void 0;
15
+ var contentful_1 = require("contentful");
16
+ var createContentfulClient = function (config) {
17
+ var configType = config.type;
18
+ var clientFromCda = function (client) { return ({
19
+ getEntries: client.getEntries,
20
+ getLocales: client.getLocales,
21
+ getContentTypes: client.getContentTypes,
22
+ getTags: client.getTags,
23
+ }); };
24
+ switch (config.type) {
25
+ case "cda-client": {
26
+ return clientFromCda(config.contentful.client);
27
+ }
28
+ case "cda-client-params": {
29
+ var previewHostOrUndefined = config.preview
30
+ ? "preview.contentful.com"
31
+ : undefined;
32
+ var clientApi = (0, contentful_1.createClient)(__assign(__assign({}, config.contentful), { host: previewHostOrUndefined }));
33
+ return clientFromCda(clientApi);
34
+ }
35
+ case "cma-client": {
36
+ var client_1 = config.contentful.client;
37
+ return {
38
+ getEntries: function (query) {
39
+ return config.preview
40
+ ? client_1.getEntries(query)
41
+ : client_1.getPublishedEntries(query);
42
+ },
43
+ getLocales: function () { return client_1.getLocales(); },
44
+ getContentTypes: function (query) { return client_1.getContentTypes(query); },
45
+ getTags: function (query) { return client_1.getTags(query); },
46
+ };
47
+ }
48
+ default: {
49
+ var _ = config;
50
+ throw new Error("Invalid config type (\"".concat(configType, "\")."));
51
+ }
52
+ }
53
+ };
54
+ exports.createContentfulClient = createContentfulClient;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,50 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { createClient } from "contentful";
13
+ export var createContentfulClient = function (config) {
14
+ var configType = config.type;
15
+ var clientFromCda = function (client) { return ({
16
+ getEntries: client.getEntries,
17
+ getLocales: client.getLocales,
18
+ getContentTypes: client.getContentTypes,
19
+ getTags: client.getTags,
20
+ }); };
21
+ switch (config.type) {
22
+ case "cda-client": {
23
+ return clientFromCda(config.contentful.client);
24
+ }
25
+ case "cda-client-params": {
26
+ var previewHostOrUndefined = config.preview
27
+ ? "preview.contentful.com"
28
+ : undefined;
29
+ var clientApi = createClient(__assign(__assign({}, config.contentful), { host: previewHostOrUndefined }));
30
+ return clientFromCda(clientApi);
31
+ }
32
+ case "cma-client": {
33
+ var client_1 = config.contentful.client;
34
+ return {
35
+ getEntries: function (query) {
36
+ return config.preview
37
+ ? client_1.getEntries(query)
38
+ : client_1.getPublishedEntries(query);
39
+ },
40
+ getLocales: function () { return client_1.getLocales(); },
41
+ getContentTypes: function (query) { return client_1.getContentTypes(query); },
42
+ getTags: function (query) { return client_1.getTags(query); },
43
+ };
44
+ }
45
+ default: {
46
+ var _ = config;
47
+ throw new Error("Invalid config type (\"".concat(configType, "\")."));
48
+ }
49
+ }
50
+ };
@@ -0,0 +1,182 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __read = (this && this.__read) || function (o, n) {
49
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
50
+ if (!m) return o;
51
+ var i = m.call(o), r, ar = [], e;
52
+ try {
53
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
54
+ }
55
+ catch (error) { e = { error: error }; }
56
+ finally {
57
+ try {
58
+ if (r && !r.done && (m = i["return"])) m.call(i);
59
+ }
60
+ finally { if (e) throw e.error; }
61
+ }
62
+ return ar;
63
+ };
64
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
65
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
66
+ if (ar || !(i in from)) {
67
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
68
+ ar[i] = from[i];
69
+ }
70
+ }
71
+ return to.concat(ar || Array.prototype.slice.call(from));
72
+ };
73
+ import { createContentfulClient } from "../clients/contentful-client/impl/contentful-client-impl";
74
+ import { sitemapData } from "./data/sitemap-data";
75
+ import { pageById } from "./sitemap/methods/page-by-id";
76
+ import { pageByPath } from "./sitemap/methods/page-by-path";
77
+ import { pagesByTagId } from "./sitemap/methods/pages-by-tag-id";
78
+ import { pagesByIds } from "./sitemap/methods/pages-by-ids";
79
+ import { pagesByPaths } from "./sitemap/methods/pages-by-paths";
80
+ import { regenerate } from "./sitemap/methods/regenerate";
81
+ import { search } from "./sitemap/methods/search";
82
+ import { status } from "./sitemap/methods/status";
83
+ import { right } from "../utils/fp-utils";
84
+ import { pages } from "./sitemap/methods/pages";
85
+ import { buildSitemapEagerly } from "./sitemap/helpers/build-sitemap-eagerly";
86
+ import { cachedData } from "./sitemap/methods/cached-data";
87
+ import { buildPagesByTagEagerly } from "./sitemap/helpers/build-pages-by-tag-eagerly";
88
+ import { homePage } from "./sitemap/methods/home-page";
89
+ var pageTagIdPrefix = "page";
90
+ var pageHomeTagId = "".concat(pageTagIdPrefix, "Home");
91
+ var localeTagIdPrefix = "locale";
92
+ var arboretumConfigOptions = function (config) {
93
+ var configType = config.type;
94
+ switch (config.type) {
95
+ case "cda-client": {
96
+ return Promise.resolve(config.contentful.options);
97
+ }
98
+ case "cda-client-params": {
99
+ return Promise.resolve(config.contentful.options);
100
+ }
101
+ case "cma-client": {
102
+ return Promise.resolve(config.contentful.options);
103
+ }
104
+ default: {
105
+ throw new Error("Invalid config type (\"".concat(configType, "\")."));
106
+ }
107
+ }
108
+ };
109
+ export var createArboretumClient = function (config) { return __awaiter(void 0, void 0, void 0, function () {
110
+ var clientApi, cmaPreviewClientApi, includeEntryStatus, options, sitemapDataCtx, dataE, _a, c, sitemap, pagesByTagIdRecord, ctx_1;
111
+ var _b, _c, _d, _e, _f, _g, _h;
112
+ return __generator(this, function (_j) {
113
+ switch (_j.label) {
114
+ case 0:
115
+ clientApi = createContentfulClient(config);
116
+ cmaPreviewClientApi = config.type === "cma-client"
117
+ ? createContentfulClient(__assign(__assign({}, config), { preview: true }))
118
+ : undefined;
119
+ includeEntryStatus = config.type === "cma-client" ? !!((_b = config.options) === null || _b === void 0 ? void 0 : _b.includeEntryStatus) : false;
120
+ return [4 /*yield*/, arboretumConfigOptions(config)];
121
+ case 1:
122
+ options = _j.sent();
123
+ sitemapDataCtx = {
124
+ preview: config.preview,
125
+ clientApi: clientApi,
126
+ options: __assign(__assign({}, options), { includeEntryStatus: includeEntryStatus }),
127
+ localeTagIdPrefix: localeTagIdPrefix,
128
+ pageHomeTagId: options.homePageTagId || pageHomeTagId,
129
+ contentfulClientType: config.type,
130
+ pageTagIdPrefix: pageTagIdPrefix,
131
+ cmaPreviewClientApi: cmaPreviewClientApi,
132
+ };
133
+ if (!((_c = config.options) === null || _c === void 0 ? void 0 : _c.data)) return [3 /*break*/, 2];
134
+ _a = right({ data: (_d = config.options) === null || _d === void 0 ? void 0 : _d.data.data, warnings: undefined });
135
+ return [3 /*break*/, 4];
136
+ case 2: return [4 /*yield*/, sitemapData(sitemapDataCtx)];
137
+ case 3:
138
+ _a = _j.sent();
139
+ _j.label = 4;
140
+ case 4:
141
+ dataE = _a;
142
+ if (dataE._tag === "Right") {
143
+ c = __assign(__assign({}, sitemapDataCtx), { data: dataE.right.data });
144
+ sitemap = ((_e = config.options) === null || _e === void 0 ? void 0 : _e.data)
145
+ ? config.options.data.sitemap
146
+ : ((_f = config.options) === null || _f === void 0 ? void 0 : _f.eagerly)
147
+ ? buildSitemapEagerly(c, dataE.right.data.locales)
148
+ : new Map();
149
+ pagesByTagIdRecord = ((_g = config.options) === null || _g === void 0 ? void 0 : _g.data)
150
+ ? config.options.data.pagesByTagId
151
+ : ((_h = config.options) === null || _h === void 0 ? void 0 : _h.eagerly)
152
+ ? buildPagesByTagEagerly(__assign(__assign({}, c), { sitemap: sitemap }), dataE.right.data.locales)
153
+ : new Map();
154
+ ctx_1 = __assign(__assign({}, c), { data: dataE.right.data, sitemap: sitemap, pagesByTagId: pagesByTagIdRecord, lastUpdatedAt: new Date().toISOString(), regenerationInProgress: false });
155
+ return [2 /*return*/, {
156
+ client: {
157
+ homePage: homePage(ctx_1),
158
+ pageByPath: pageByPath(ctx_1),
159
+ pagesByPaths: pagesByPaths(ctx_1),
160
+ pageById: pageById(ctx_1),
161
+ pagesByIds: pagesByIds(ctx_1),
162
+ pagesByTagId: pagesByTagId(ctx_1),
163
+ locales: function () { return __spreadArray([], __read(ctx_1.data.locales.values()), false); },
164
+ pages: pages(ctx_1),
165
+ regenerate: regenerate(ctx_1),
166
+ search: search(ctx_1),
167
+ status: status(ctx_1),
168
+ cachedData: cachedData(ctx_1),
169
+ },
170
+ warnings: dataE.right.warnings,
171
+ }];
172
+ }
173
+ else {
174
+ throw new Error(dataE.left.join("\n"));
175
+ }
176
+ return [2 /*return*/];
177
+ }
178
+ });
179
+ }); };
180
+ export var createArboretumClientFromCdaClient = function (config) { return createArboretumClient(__assign(__assign({}, config), { type: "cda-client" })); };
181
+ export var createArboretumClientFromCdaParams = function (config) { return createArboretumClient(__assign(__assign({}, config), { type: "cda-client-params" })); };
182
+ export var createArboretumClientFromCma = function (config) { return createArboretumClient(__assign(__assign({}, config), { type: "cma-client" })); };
@@ -0,0 +1,136 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __read = (this && this.__read) || function (o, n) {
49
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
50
+ if (!m) return o;
51
+ var i = m.call(o), r, ar = [], e;
52
+ try {
53
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
54
+ }
55
+ catch (error) { e = { error: error }; }
56
+ finally {
57
+ try {
58
+ if (r && !r.done && (m = i["return"])) m.call(i);
59
+ }
60
+ finally { if (e) throw e.error; }
61
+ }
62
+ return ar;
63
+ };
64
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
65
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
66
+ if (ar || !(i in from)) {
67
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
68
+ ar[i] = from[i];
69
+ }
70
+ }
71
+ return to.concat(ar || Array.prototype.slice.call(from));
72
+ };
73
+ import { validatePageContentType, validateRedirectContentType, } from './helpers/validate-content-types';
74
+ import { arrayToMap } from '../../utils/array-to-map';
75
+ import { left } from '../../utils/fp-utils';
76
+ export var contentTypes = function (ctx) { return __awaiter(void 0, void 0, void 0, function () {
77
+ var pageContentTypesIds, redirectContentTypeIds, ids, items, contentTypesMap, contentTypesMapSeed, pageContentTypesConfigs, redirectContentTypeConfigs, contentTypesConfigs;
78
+ return __generator(this, function (_a) {
79
+ switch (_a.label) {
80
+ case 0:
81
+ pageContentTypesIds = Object.keys(ctx.options.pageContentTypes);
82
+ redirectContentTypeIds = ctx.options.redirectContentType
83
+ ? [ctx.options.redirectContentType.id]
84
+ : [];
85
+ ids = __spreadArray(__spreadArray([], __read(pageContentTypesIds), false), __read(redirectContentTypeIds), false);
86
+ return [4 /*yield*/, ctx.clientApi.getContentTypes({
87
+ limit: ids.length,
88
+ 'sys.id[in]': ids.join(','),
89
+ })];
90
+ case 1:
91
+ items = (_a.sent()).items;
92
+ contentTypesMap = arrayToMap(function (ct) { return ct.sys.id; })(function (_) { return _; })(items);
93
+ contentTypesMapSeed = {
94
+ contentTypes: new Map(),
95
+ warnings: undefined,
96
+ };
97
+ pageContentTypesConfigs = Object.entries(ctx.options.pageContentTypes).map(function (_a) {
98
+ var _b = __read(_a, 2), contentTypeId = _b[0], config = _b[1];
99
+ return (__assign({ type: 'page-content-type', id: contentTypeId }, config));
100
+ });
101
+ redirectContentTypeConfigs = ctx.options.redirectContentType
102
+ ? [
103
+ __assign({ type: 'redirect-content-type' }, ctx.options.redirectContentType),
104
+ ]
105
+ : [];
106
+ contentTypesConfigs = __spreadArray(__spreadArray([], __read(pageContentTypesConfigs), false), __read(redirectContentTypeConfigs), false);
107
+ return [2 /*return*/, Object.values(contentTypesConfigs).reduce(function (_a, contentTypeConfig) {
108
+ var contentTypes = _a.contentTypes, warnings = _a.warnings;
109
+ var validateContentType = contentTypeConfig.type === 'redirect-content-type'
110
+ ? validateRedirectContentType(contentTypeConfig)
111
+ : validatePageContentType(contentTypeConfig);
112
+ var matchingContentTypeDef = contentTypesMap.get(contentTypeConfig.id);
113
+ var validatedContentType = matchingContentTypeDef
114
+ ? validateContentType(matchingContentTypeDef)
115
+ : left("Failed to get content type with id: ".concat(contentTypeConfig.id, "."));
116
+ if (validatedContentType._tag === 'Right') {
117
+ var fields = arrayToMap(function (f) { return f.id; })(function (_) { return _; })(validatedContentType.right.fields);
118
+ contentTypes.set(contentTypeConfig.id, {
119
+ sys: validatedContentType.right.sys,
120
+ fields: fields,
121
+ });
122
+ }
123
+ else {
124
+ var warning = validatedContentType.left;
125
+ if (warnings) {
126
+ warnings.push(warning);
127
+ }
128
+ else {
129
+ warnings = [warning];
130
+ }
131
+ }
132
+ return { contentTypes: contentTypes, warnings: warnings };
133
+ }, contentTypesMapSeed)];
134
+ }
135
+ });
136
+ }); };