@prezly/theme-kit-core 7.1.0 → 8.0.1

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 (250) hide show
  1. package/build/boilerplate.cjs +17 -0
  2. package/build/boilerplate.d.ts +8 -0
  3. package/build/boilerplate.mjs +9 -0
  4. package/build/constants.cjs +11 -0
  5. package/build/{utils/constants.d.ts → constants.d.ts} +2 -1
  6. package/build/constants.mjs +5 -0
  7. package/build/content-delivery/ContentDelivery.cjs +348 -0
  8. package/build/content-delivery/ContentDelivery.d.ts +8 -4
  9. package/build/content-delivery/ContentDelivery.mjs +342 -0
  10. package/build/content-delivery/cache/index.cjs +35 -0
  11. package/build/content-delivery/cache/index.d.ts +3 -0
  12. package/build/content-delivery/cache/index.mjs +3 -0
  13. package/build/content-delivery/cache/memory.cjs +65 -0
  14. package/build/content-delivery/cache/memory.d.ts +3 -0
  15. package/build/content-delivery/cache/memory.mjs +58 -0
  16. package/build/content-delivery/cache/memory.test.cjs +54 -0
  17. package/build/content-delivery/cache/memory.test.mjs +52 -0
  18. package/build/content-delivery/cache/stacked.cjs +32 -0
  19. package/build/content-delivery/cache/stacked.d.ts +2 -0
  20. package/build/content-delivery/cache/stacked.mjs +26 -0
  21. package/build/content-delivery/cache/type.cjs +1 -0
  22. package/build/content-delivery/cache/type.d.ts +8 -0
  23. package/build/content-delivery/cache/type.mjs +1 -0
  24. package/build/content-delivery/index.cjs +27 -0
  25. package/build/content-delivery/index.d.ts +2 -1
  26. package/build/content-delivery/index.mjs +2 -0
  27. package/build/environment.cjs +42 -0
  28. package/build/environment.d.ts +2 -0
  29. package/build/environment.mjs +36 -0
  30. package/build/galleries.cjs +38 -0
  31. package/build/galleries.d.ts +11 -0
  32. package/build/galleries.mjs +30 -0
  33. package/build/http/HttpClient.cjs +66 -0
  34. package/build/http/HttpClient.d.ts +20 -0
  35. package/build/http/HttpClient.mjs +59 -0
  36. package/build/http/index.cjs +10 -0
  37. package/build/http/index.d.ts +1 -0
  38. package/build/http/index.mjs +2 -0
  39. package/build/index.cjs +88 -0
  40. package/build/index.d.ts +15 -4
  41. package/build/index.mjs +26 -0
  42. package/build/intl/getLanguageDisplayName.cjs +37 -0
  43. package/build/intl/getLanguageDisplayName.d.ts +20 -0
  44. package/build/intl/getLanguageDisplayName.mjs +32 -0
  45. package/build/intl/getLanguageDisplayName.test.cjs +46 -0
  46. package/build/intl/getLanguageDisplayName.test.mjs +44 -0
  47. package/build/intl/index.cjs +12 -0
  48. package/build/intl/index.d.ts +1 -5
  49. package/build/intl/index.mjs +1 -0
  50. package/build/metadata/getAlternateLanguageLinks.cjs +76 -0
  51. package/build/{seo → metadata}/getAlternateLanguageLinks.d.ts +2 -2
  52. package/build/metadata/getAlternateLanguageLinks.mjs +72 -0
  53. package/build/metadata/getAlternateLanguageLinks.test.cjs +198 -0
  54. package/build/metadata/getAlternateLanguageLinks.test.mjs +196 -0
  55. package/build/metadata/index.cjs +12 -0
  56. package/build/metadata/index.d.ts +2 -0
  57. package/build/metadata/index.mjs +1 -0
  58. package/build/metadata/types.cjs +1 -0
  59. package/build/metadata/types.d.ts +6 -0
  60. package/build/metadata/types.mjs +1 -0
  61. package/build/newsrooms.cjs +36 -0
  62. package/build/newsrooms.d.ts +5 -0
  63. package/build/newsrooms.mjs +28 -0
  64. package/build/privacy-portal.cjs +28 -0
  65. package/build/privacy-portal.d.ts +9 -0
  66. package/build/privacy-portal.mjs +21 -0
  67. package/build/resolvable.cjs +38 -0
  68. package/build/resolvable.d.ts +71 -0
  69. package/build/resolvable.mjs +32 -0
  70. package/build/routing/Route.cjs +46 -0
  71. package/build/routing/Route.d.ts +37 -0
  72. package/build/routing/Route.mjs +40 -0
  73. package/build/routing/Router.cjs +51 -0
  74. package/build/routing/Router.d.ts +23 -0
  75. package/build/routing/Router.mjs +45 -0
  76. package/build/routing/Routing.cjs +24 -0
  77. package/build/routing/Routing.d.ts +1 -0
  78. package/build/routing/Routing.mjs +2 -0
  79. package/build/routing/UrlGenerator.cjs +13 -0
  80. package/build/routing/UrlGenerator.d.ts +39 -0
  81. package/build/routing/UrlGenerator.mjs +7 -0
  82. package/build/routing/index.cjs +24 -0
  83. package/build/routing/index.d.ts +4 -0
  84. package/build/routing/index.mjs +4 -0
  85. package/build/routing/types.cjs +1 -0
  86. package/build/routing/types.d.ts +14 -0
  87. package/build/routing/types.mjs +1 -0
  88. package/build/routing/utils/generateUrlFromPattern.cjs +52 -0
  89. package/build/routing/utils/generateUrlFromPattern.d.ts +12 -0
  90. package/build/routing/utils/generateUrlFromPattern.mjs +47 -0
  91. package/build/routing/utils/generateUrlFromPattern.test.cjs +44 -0
  92. package/build/routing/utils/generateUrlFromPattern.test.mjs +42 -0
  93. package/build/routing/utils/getShortestLocaleSlug.cjs +60 -0
  94. package/build/routing/utils/getShortestLocaleSlug.d.ts +11 -0
  95. package/build/routing/utils/getShortestLocaleSlug.mjs +53 -0
  96. package/build/routing/utils/getShortestLocaleSlug.test.cjs +37 -0
  97. package/build/routing/utils/getShortestLocaleSlug.test.mjs +35 -0
  98. package/build/routing/utils/index.cjs +40 -0
  99. package/build/routing/utils/index.d.ts +5 -0
  100. package/build/routing/utils/index.mjs +5 -0
  101. package/build/routing/utils/isNumberCode.cjs +12 -0
  102. package/build/routing/utils/isNumberCode.d.ts +4 -0
  103. package/build/routing/utils/isNumberCode.mjs +6 -0
  104. package/build/routing/utils/matchLocaleSlug.cjs +41 -0
  105. package/build/routing/utils/matchLocaleSlug.d.ts +15 -0
  106. package/build/routing/utils/matchLocaleSlug.mjs +34 -0
  107. package/build/routing/utils/matchLocaleSlug.test.cjs +43 -0
  108. package/build/routing/utils/matchLocaleSlug.test.mjs +40 -0
  109. package/build/routing/utils/normalizeUrl.cjs +9 -0
  110. package/build/routing/utils/normalizeUrl.d.ts +1 -0
  111. package/build/routing/utils/normalizeUrl.mjs +3 -0
  112. package/build/search.cjs +1 -0
  113. package/build/{types.d.ts → search.d.ts} +3 -3
  114. package/build/search.mjs +1 -0
  115. package/build/sitemap/build.cjs +33 -0
  116. package/build/sitemap/build.d.ts +6 -0
  117. package/build/sitemap/build.mjs +27 -0
  118. package/build/sitemap/generate.cjs +192 -0
  119. package/build/sitemap/generate.d.ts +37 -0
  120. package/build/sitemap/generate.mjs +183 -0
  121. package/build/sitemap/index.cjs +38 -0
  122. package/build/sitemap/index.d.ts +4 -0
  123. package/build/sitemap/index.mjs +3 -0
  124. package/build/sitemap/stringify.cjs +24 -0
  125. package/build/sitemap/stringify.d.ts +2 -0
  126. package/build/sitemap/stringify.mjs +18 -0
  127. package/build/sitemap/types.cjs +1 -0
  128. package/build/sitemap/types.d.ts +67 -0
  129. package/build/sitemap/types.mjs +1 -0
  130. package/build/uploads.cjs +14 -0
  131. package/build/{utils/getAssetsUrl.d.ts → uploads.d.ts} +1 -1
  132. package/build/uploads.mjs +8 -0
  133. package/build/uploads.test.cjs +10 -0
  134. package/build/uploads.test.mjs +8 -0
  135. package/package.json +23 -26
  136. package/build/content-delivery/ContentDelivery.js +0 -238
  137. package/build/content-delivery/ContentDelivery.js.map +0 -1
  138. package/build/content-delivery/index.js +0 -28
  139. package/build/content-delivery/index.js.map +0 -1
  140. package/build/data-fetching/api/index.d.ts +0 -1
  141. package/build/data-fetching/api/index.js +0 -6
  142. package/build/data-fetching/api/index.js.map +0 -1
  143. package/build/data-fetching/api/initContentDeliveryClient.d.ts +0 -4
  144. package/build/data-fetching/api/initContentDeliveryClient.js +0 -25
  145. package/build/data-fetching/api/initContentDeliveryClient.js.map +0 -1
  146. package/build/data-fetching/index.d.ts +0 -3
  147. package/build/data-fetching/index.js +0 -20
  148. package/build/data-fetching/index.js.map +0 -1
  149. package/build/data-fetching/lib/getAlgoliaSettings.d.ts +0 -4
  150. package/build/data-fetching/lib/getAlgoliaSettings.js +0 -21
  151. package/build/data-fetching/lib/getAlgoliaSettings.js.map +0 -1
  152. package/build/data-fetching/lib/getEnvVariables.d.ts +0 -4
  153. package/build/data-fetching/lib/getEnvVariables.js +0 -43
  154. package/build/data-fetching/lib/getEnvVariables.js.map +0 -1
  155. package/build/data-fetching/lib/index.d.ts +0 -3
  156. package/build/data-fetching/lib/index.js +0 -10
  157. package/build/data-fetching/lib/index.js.map +0 -1
  158. package/build/data-fetching/lib/isUuid.d.ts +0 -1
  159. package/build/data-fetching/lib/isUuid.js +0 -9
  160. package/build/data-fetching/lib/isUuid.js.map +0 -1
  161. package/build/data-fetching/types.d.ts +0 -13
  162. package/build/data-fetching/types.js +0 -3
  163. package/build/data-fetching/types.js.map +0 -1
  164. package/build/index.js +0 -21
  165. package/build/index.js.map +0 -1
  166. package/build/intl/getFallbackLocale.d.ts +0 -10
  167. package/build/intl/getFallbackLocale.js +0 -24
  168. package/build/intl/getFallbackLocale.js.map +0 -1
  169. package/build/intl/index.js +0 -27
  170. package/build/intl/index.js.map +0 -1
  171. package/build/intl/languages.d.ts +0 -57
  172. package/build/intl/languages.js +0 -191
  173. package/build/intl/languages.js.map +0 -1
  174. package/build/intl/locale.d.ts +0 -11
  175. package/build/intl/locale.js +0 -41
  176. package/build/intl/locale.js.map +0 -1
  177. package/build/intl/localeConfig.d.ts +0 -2
  178. package/build/intl/localeConfig.js +0 -22
  179. package/build/intl/localeConfig.js.map +0 -1
  180. package/build/intl/localeList.d.ts +0 -2
  181. package/build/intl/localeList.js +0 -114
  182. package/build/intl/localeList.js.map +0 -1
  183. package/build/intl/localeObject.d.ts +0 -51
  184. package/build/intl/localeObject.js +0 -98
  185. package/build/intl/localeObject.js.map +0 -1
  186. package/build/seo/getAlternateLanguageLinks.js +0 -85
  187. package/build/seo/getAlternateLanguageLinks.js.map +0 -1
  188. package/build/seo/index.d.ts +0 -2
  189. package/build/seo/index.js +0 -19
  190. package/build/seo/index.js.map +0 -1
  191. package/build/seo/types.d.ts +0 -4
  192. package/build/seo/types.js +0 -3
  193. package/build/seo/types.js.map +0 -1
  194. package/build/seo/utils/bindLanguagesWithLocales.d.ts +0 -11
  195. package/build/seo/utils/bindLanguagesWithLocales.js +0 -23
  196. package/build/seo/utils/bindLanguagesWithLocales.js.map +0 -1
  197. package/build/seo/utils/createAlternateLanguageLink.d.ts +0 -5
  198. package/build/seo/utils/createAlternateLanguageLink.js +0 -15
  199. package/build/seo/utils/createAlternateLanguageLink.js.map +0 -1
  200. package/build/seo/utils/index.d.ts +0 -2
  201. package/build/seo/utils/index.js +0 -8
  202. package/build/seo/utils/index.js.map +0 -1
  203. package/build/server.d.ts +0 -2
  204. package/build/server.js +0 -21
  205. package/build/server.js.map +0 -1
  206. package/build/types.js +0 -3
  207. package/build/types.js.map +0 -1
  208. package/build/utils/assertServerEnv.d.ts +0 -1
  209. package/build/utils/assertServerEnv.js +0 -10
  210. package/build/utils/assertServerEnv.js.map +0 -1
  211. package/build/utils/boilerplate.d.ts +0 -8
  212. package/build/utils/boilerplate.js +0 -27
  213. package/build/utils/boilerplate.js.map +0 -1
  214. package/build/utils/constants.js +0 -8
  215. package/build/utils/constants.js.map +0 -1
  216. package/build/utils/getAssetsUrl.js +0 -13
  217. package/build/utils/getAssetsUrl.js.map +0 -1
  218. package/build/utils/getDataRequestLink.d.ts +0 -3
  219. package/build/utils/getDataRequestLink.js +0 -12
  220. package/build/utils/getDataRequestLink.js.map +0 -1
  221. package/build/utils/getGalleryThumbnail.d.ts +0 -2
  222. package/build/utils/getGalleryThumbnail.js +0 -15
  223. package/build/utils/getGalleryThumbnail.js.map +0 -1
  224. package/build/utils/getLocalizedCategoryData.d.ts +0 -12
  225. package/build/utils/getLocalizedCategoryData.js +0 -34
  226. package/build/utils/getLocalizedCategoryData.js.map +0 -1
  227. package/build/utils/getNewsroomLogoUrl.d.ts +0 -5
  228. package/build/utils/getNewsroomLogoUrl.js +0 -30
  229. package/build/utils/getNewsroomLogoUrl.js.map +0 -1
  230. package/build/utils/getPrivacyPortalUrl.d.ts +0 -8
  231. package/build/utils/getPrivacyPortalUrl.js +0 -13
  232. package/build/utils/getPrivacyPortalUrl.js.map +0 -1
  233. package/build/utils/getStoryPublicationDate.d.ts +0 -3
  234. package/build/utils/getStoryPublicationDate.js +0 -14
  235. package/build/utils/getStoryPublicationDate.js.map +0 -1
  236. package/build/utils/getUploadcareGroupUrl.d.ts +0 -8
  237. package/build/utils/getUploadcareGroupUrl.js +0 -17
  238. package/build/utils/getUploadcareGroupUrl.js.map +0 -1
  239. package/build/utils/index.d.ts +0 -14
  240. package/build/utils/index.js +0 -31
  241. package/build/utils/index.js.map +0 -1
  242. package/build/utils/isEmbargoStory.d.ts +0 -6
  243. package/build/utils/isEmbargoStory.js +0 -9
  244. package/build/utils/isEmbargoStory.js.map +0 -1
  245. package/build/utils/isGalleryEmpty.d.ts +0 -2
  246. package/build/utils/isGalleryEmpty.js +0 -8
  247. package/build/utils/isGalleryEmpty.js.map +0 -1
  248. package/build/utils/sdkHelpers.d.ts +0 -32
  249. package/build/utils/sdkHelpers.js +0 -42
  250. package/build/utils/sdkHelpers.js.map +0 -1
@@ -0,0 +1,342 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
7
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
8
+ /* eslint-disable @typescript-eslint/no-use-before-define */
9
+
10
+ import { ApiError, Category, NewsroomGallery, SortOrder, Stories, Story } from '@prezly/sdk';
11
+ export var stories;
12
+ export var allStories;
13
+ export var story;
14
+ export var galleries;
15
+ /**
16
+ * Sort order to list stories chronologically, with pinned stories on top.
17
+ */
18
+ var CHRONOLOGICALLY = SortOrder.combine(SortOrder.desc('is_pinned'), SortOrder.desc('published_at'));
19
+
20
+ /**
21
+ * Do not cache these methods, as they are derivatives of other cached methods.
22
+ */
23
+ var UNCACHED_METHODS = ['themeSettings', 'language', 'usedLanguages', 'locales', 'defaultLanguage', 'defaultLocale', 'languageOrDefault', 'companyInformation', 'notifications', 'category', 'translatedCategory', 'translatedCategories'];
24
+ export function createClient(prezly, newsroomUuid, newsroomThemeUuid) {
25
+ var {
26
+ formats = [Story.FormatVersion.SLATEJS_V4],
27
+ cache
28
+ } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
29
+ var client = {
30
+ newsroom() {
31
+ return prezly.newsrooms.get(newsroomUuid);
32
+ },
33
+ theme() {
34
+ return newsroomThemeUuid ? prezly.newsroomThemes.get(newsroomUuid, newsroomThemeUuid) : undefined;
35
+ },
36
+ themeSettings() {
37
+ return _asyncToGenerator(function* () {
38
+ var theme = yield client.theme();
39
+ return theme === null || theme === void 0 ? void 0 : theme.settings;
40
+ })();
41
+ },
42
+ languages() {
43
+ return prezly.newsroomLanguages.list(newsroomUuid).then(data => data.languages);
44
+ },
45
+ usedLanguages() {
46
+ return _asyncToGenerator(function* () {
47
+ var languages = yield client.languages();
48
+ return languages.filter(lang => lang.public_stories_count > 0);
49
+ })();
50
+ },
51
+ locales() {
52
+ return _asyncToGenerator(function* () {
53
+ var languages = yield client.languages();
54
+ return languages.map(lang => lang.code);
55
+ })();
56
+ },
57
+ defaultLanguage() {
58
+ return _asyncToGenerator(function* () {
59
+ var languages = yield client.languages();
60
+ var defaultLanguage = languages.find(lang => lang.is_default);
61
+ if (!defaultLanguage) {
62
+ throw new Error('A newsroom is expected to always have a default language. Something is wrong.');
63
+ }
64
+ return defaultLanguage;
65
+ })();
66
+ },
67
+ companyInformation(code) {
68
+ return _asyncToGenerator(function* () {
69
+ var languageSettings = code ? yield client.languageOrDefault(code) : yield client.defaultLanguage();
70
+ return languageSettings.company_information;
71
+ })();
72
+ },
73
+ notifications(locale) {
74
+ return _asyncToGenerator(function* () {
75
+ var languageSettings = yield client.languageOrDefault(locale);
76
+ return languageSettings.notifications;
77
+ })();
78
+ },
79
+ defaultLocale() {
80
+ return _asyncToGenerator(function* () {
81
+ var defaultLanguage = yield client.defaultLanguage();
82
+ return defaultLanguage.code;
83
+ })();
84
+ },
85
+ language(code) {
86
+ return _asyncToGenerator(function* () {
87
+ var languages = yield client.languages();
88
+ return languages.find(lang => !code && lang.is_default || lang.locale.code === code);
89
+ })();
90
+ },
91
+ languageOrDefault(code) {
92
+ return _asyncToGenerator(function* () {
93
+ var _yield$client$languag;
94
+ return (_yield$client$languag = yield client.language(code)) !== null && _yield$client$languag !== void 0 ? _yield$client$languag : yield client.defaultLanguage();
95
+ })();
96
+ },
97
+ categories() {
98
+ return prezly.newsroomCategories.list(newsroomUuid, {
99
+ sortOrder: '+order'
100
+ });
101
+ },
102
+ category(arg) {
103
+ return _asyncToGenerator(function* () {
104
+ var categories = yield client.categories();
105
+ if (typeof arg === 'number') {
106
+ return categories.find(category => category.id === arg);
107
+ }
108
+ return categories.find(category => Category.translations(category).some(translation => translation.slug === arg));
109
+ })();
110
+ },
111
+ translatedCategories(locale, categories) {
112
+ return _asyncToGenerator(function* () {
113
+ return Category.translations(categories !== null && categories !== void 0 ? categories : yield client.categories(), locale);
114
+ })();
115
+ },
116
+ translatedCategory(locale, slug) {
117
+ return _asyncToGenerator(function* () {
118
+ var translations = yield client.translatedCategories(locale);
119
+ return translations.find(category => category.slug === slug);
120
+ })();
121
+ },
122
+ featuredContacts() {
123
+ return prezly.newsroomContacts.search(newsroomUuid, {
124
+ query: {
125
+ is_featured: true
126
+ }
127
+ });
128
+ },
129
+ galleries() {
130
+ var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
131
+ var {
132
+ offset,
133
+ limit,
134
+ type
135
+ } = params;
136
+ return prezly.newsroomGalleries.search(newsroomUuid, {
137
+ limit,
138
+ offset,
139
+ scope: {
140
+ status: NewsroomGallery.Status.PUBLIC,
141
+ is_empty: false,
142
+ type
143
+ }
144
+ });
145
+ },
146
+ gallery(uuid) {
147
+ return _asyncToGenerator(function* () {
148
+ try {
149
+ return yield prezly.newsroomGalleries.get(newsroomUuid, uuid);
150
+ } catch (error) {
151
+ if (error instanceof ApiError && isNotAvailableError(error)) {
152
+ return null;
153
+ }
154
+ throw error;
155
+ }
156
+ })();
157
+ },
158
+ stories(params) {
159
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
160
+ var {
161
+ search,
162
+ query,
163
+ offset = 0,
164
+ limit,
165
+ category,
166
+ locale,
167
+ highlighted = 0
168
+ } = params;
169
+ var {
170
+ include = []
171
+ } = options;
172
+ var localeCode = locale && typeof locale === 'object' ? locale.code : locale;
173
+ return prezly.stories.search({
174
+ sortOrder: CHRONOLOGICALLY,
175
+ formats,
176
+ limit: offset === 0 ? limit + highlighted : limit,
177
+ offset: offset > 0 ? offset + highlighted : offset,
178
+ search,
179
+ query: mergeQueries(query, {
180
+ ["category.id"]: category ? {
181
+ $any: [category.id]
182
+ } : undefined,
183
+ ["newsroom.uuid"]: {
184
+ $in: [newsroomUuid]
185
+ },
186
+ ["locale"]: localeCode ? {
187
+ $in: [localeCode]
188
+ } : undefined,
189
+ ["status"]: {
190
+ $in: [Story.Status.PUBLISHED]
191
+ },
192
+ ["visibility"]: {
193
+ $in: [Story.Visibility.PUBLIC]
194
+ }
195
+ }),
196
+ include
197
+ });
198
+ },
199
+ allStories() {
200
+ var _arguments = arguments;
201
+ return _asyncToGenerator(function* () {
202
+ var params = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};
203
+ var options = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : {};
204
+ var {
205
+ include = []
206
+ } = options;
207
+ var newsroom = yield client.newsroom();
208
+ var chunkSize = 200;
209
+
210
+ // Note: This is a counter of ALL stories, public, private, or drafts.
211
+ // Depending on the specific newsroom data, the rate of overfetching may be significant.
212
+ var maxStories = newsroom.stories_number;
213
+ var pages = Math.ceil(maxStories / chunkSize);
214
+ var promises = Array.from({
215
+ length: pages
216
+ }, (_, chunkIndex) => client.stories(_objectSpread(_objectSpread({}, params), {}, {
217
+ limit: chunkSize,
218
+ offset: chunkIndex * chunkSize
219
+ }), {
220
+ include
221
+ }));
222
+ return (yield Promise.all(promises)).flatMap(response => response.stories);
223
+ })();
224
+ },
225
+ story(params) {
226
+ var _arguments2 = arguments;
227
+ return _asyncToGenerator(function* () {
228
+ var options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};
229
+ var {
230
+ include = []
231
+ } = options;
232
+ if (params.uuid) {
233
+ try {
234
+ return yield prezly.stories.get(params.uuid, {
235
+ formats,
236
+ include: [...Stories.EXTENDED_STORY_INCLUDED_EXTRA_FIELDS, ...include]
237
+ });
238
+ } catch (error) {
239
+ if (error instanceof ApiError && isNotAvailableError(error)) {
240
+ return null;
241
+ }
242
+ throw error;
243
+ }
244
+ }
245
+ try {
246
+ return yield prezly.stories.getBySlug(params.slug, {
247
+ formats,
248
+ query: {
249
+ ["newsroom.uuid"]: {
250
+ $in: [newsroomUuid]
251
+ },
252
+ ["status"]: {
253
+ $in: [Story.Status.PUBLISHED, Story.Status.EMBARGO]
254
+ },
255
+ ["visibility"]: {
256
+ $in: [Story.Visibility.PUBLIC, Story.Visibility.PRIVATE, Story.Visibility.EMBARGO]
257
+ }
258
+ },
259
+ include: [...Stories.EXTENDED_STORY_INCLUDED_EXTRA_FIELDS, ...include]
260
+ });
261
+ } catch (error) {
262
+ if (error instanceof ApiError && isNotAvailableError(error)) {
263
+ return null;
264
+ }
265
+ throw error;
266
+ }
267
+ })();
268
+ }
269
+ };
270
+ if (cache) {
271
+ injectCache(client, cache.storage.namespace("".concat(newsroomUuid, ":").concat(newsroomThemeUuid, ":").concat(formats.join(','), ":")), cache.latestVersion, UNCACHED_METHODS);
272
+ }
273
+ return client;
274
+ }
275
+ function injectCache(client, cache, latestVersion) {
276
+ var uncachedMethods = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
277
+ var methodCalls = new Map();
278
+ var methodNames = Object.keys(client);
279
+ methodNames.forEach(methodName => {
280
+ if (uncachedMethods.includes(methodName)) {
281
+ // Do not cache this method.
282
+ return;
283
+ }
284
+ var uncachedFn = client[methodName].bind(client);
285
+
286
+ // eslint-disable-next-line no-param-reassign
287
+ client[methodName] = /*#__PURE__*/_asyncToGenerator(function* () {
288
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
289
+ args[_key] = arguments[_key];
290
+ }
291
+ var cacheKey = "".concat(methodName, ":").concat(JSON.stringify(args));
292
+ var dedupeKey = "".concat(latestVersion, ":").concat(cacheKey);
293
+
294
+ // Dedupe requests
295
+ var pending = methodCalls.get(dedupeKey);
296
+ if (pending) return pending;
297
+ function invoke() {
298
+ return _invoke.apply(this, arguments);
299
+ }
300
+ function _invoke() {
301
+ _invoke = _asyncToGenerator(function* () {
302
+ var cached = yield cache.get(cacheKey, latestVersion);
303
+ if (cached) return cached;
304
+ var value = yield uncachedFn(...args);
305
+ cache.set(cacheKey, value, latestVersion);
306
+ methodCalls.delete(dedupeKey);
307
+ return value;
308
+ });
309
+ return _invoke.apply(this, arguments);
310
+ }
311
+ var invokation = invoke();
312
+ methodCalls.set(dedupeKey, invokation);
313
+ return invokation;
314
+ });
315
+ });
316
+ }
317
+ function mergeQueries() {
318
+ for (var _len2 = arguments.length, queries = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
319
+ queries[_key2] = arguments[_key2];
320
+ }
321
+ var queryObjects = queries.filter(query => Boolean(query)).map(query => {
322
+ if (typeof query === 'string') {
323
+ return JSON.parse(query);
324
+ }
325
+ return query;
326
+ }).filter(query => Boolean(query)).filter(query => Object.keys(query).length > 0);
327
+ if (queryObjects.length === 0) {
328
+ return undefined;
329
+ }
330
+ if (queryObjects.length === 1) {
331
+ return queryObjects[0];
332
+ }
333
+ return {
334
+ $and: queryObjects
335
+ };
336
+ }
337
+ var ERROR_CODE_NOT_FOUND = 404;
338
+ var ERROR_CODE_FORBIDDEN = 403;
339
+ var ERROR_CODE_GONE = 410;
340
+ function isNotAvailableError(error) {
341
+ return error.status === ERROR_CODE_NOT_FOUND || error.status === ERROR_CODE_GONE || error.status === ERROR_CODE_FORBIDDEN;
342
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ createSharedMemoryCache: true,
8
+ createStackedCache: true
9
+ };
10
+ Object.defineProperty(exports, "createSharedMemoryCache", {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _memory.createSharedMemoryCache;
14
+ }
15
+ });
16
+ Object.defineProperty(exports, "createStackedCache", {
17
+ enumerable: true,
18
+ get: function get() {
19
+ return _stacked.createStackedCache;
20
+ }
21
+ });
22
+ var _type = require("./type.cjs");
23
+ Object.keys(_type).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
+ if (key in exports && exports[key] === _type[key]) return;
27
+ Object.defineProperty(exports, key, {
28
+ enumerable: true,
29
+ get: function get() {
30
+ return _type[key];
31
+ }
32
+ });
33
+ });
34
+ var _memory = require("./memory.cjs");
35
+ var _stacked = require("./stacked.cjs");
@@ -0,0 +1,3 @@
1
+ export * from './type';
2
+ export { createSharedMemoryCache } from './memory';
3
+ export { createStackedCache } from './stacked';
@@ -0,0 +1,3 @@
1
+ export * from "./type.mjs";
2
+ export { createSharedMemoryCache } from "./memory.mjs";
3
+ export { createStackedCache } from "./stacked.mjs";
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RECORDS_LIMIT = void 0;
7
+ exports.createSharedMemoryCache = createSharedMemoryCache;
8
+ /* eslint-disable @typescript-eslint/no-use-before-define */
9
+
10
+ var RECORDS_LIMIT = exports.RECORDS_LIMIT = 10000;
11
+ var GC_PROBABILITY = 1 / 100;
12
+ var CACHE = new Map();
13
+ function createSharedMemoryCache() {
14
+ var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
15
+ return {
16
+ get(key, latestVersion) {
17
+ var entry = CACHE.get("".concat(prefix).concat(key));
18
+ if (!entry) {
19
+ return undefined;
20
+ }
21
+ if (entry.version < latestVersion) {
22
+ CACHE.delete("".concat(prefix).concat(key));
23
+ return undefined;
24
+ }
25
+ var {
26
+ value,
27
+ version
28
+ } = entry;
29
+ CACHE.set("".concat(prefix).concat(key), {
30
+ value,
31
+ version,
32
+ accessed: new Date().getTime()
33
+ });
34
+ return value;
35
+ },
36
+ set(key, value, version) {
37
+ var entry = {
38
+ value,
39
+ version,
40
+ accessed: new Date().getTime()
41
+ };
42
+ CACHE.set("".concat(prefix).concat(key), entry);
43
+ if (CACHE.size > RECORDS_LIMIT && Math.random() < GC_PROBABILITY) {
44
+ gc();
45
+ }
46
+ },
47
+ namespace(namespace) {
48
+ return createSharedMemoryCache("".concat(prefix).concat(namespace, ":"));
49
+ }
50
+ };
51
+ }
52
+ function gc() {
53
+ Array.from(CACHE.entries()).sort((_ref, _ref2) => {
54
+ var [, a] = _ref;
55
+ var [, b] = _ref2;
56
+ return -cmp(a.accessed, b.accessed);
57
+ }).slice(RECORDS_LIMIT).forEach(_ref3 => {
58
+ var [key] = _ref3;
59
+ CACHE.delete(key);
60
+ });
61
+ }
62
+ function cmp(a, b) {
63
+ if (a === b) return 0;
64
+ return a < b ? -1 : 1;
65
+ }
@@ -0,0 +1,3 @@
1
+ import type { Cache } from './type';
2
+ export declare const RECORDS_LIMIT = 10000;
3
+ export declare function createSharedMemoryCache(prefix?: string): Cache;
@@ -0,0 +1,58 @@
1
+ /* eslint-disable @typescript-eslint/no-use-before-define */
2
+
3
+ export var RECORDS_LIMIT = 10000;
4
+ var GC_PROBABILITY = 1 / 100;
5
+ var CACHE = new Map();
6
+ export function createSharedMemoryCache() {
7
+ var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
8
+ return {
9
+ get(key, latestVersion) {
10
+ var entry = CACHE.get("".concat(prefix).concat(key));
11
+ if (!entry) {
12
+ return undefined;
13
+ }
14
+ if (entry.version < latestVersion) {
15
+ CACHE.delete("".concat(prefix).concat(key));
16
+ return undefined;
17
+ }
18
+ var {
19
+ value,
20
+ version
21
+ } = entry;
22
+ CACHE.set("".concat(prefix).concat(key), {
23
+ value,
24
+ version,
25
+ accessed: new Date().getTime()
26
+ });
27
+ return value;
28
+ },
29
+ set(key, value, version) {
30
+ var entry = {
31
+ value,
32
+ version,
33
+ accessed: new Date().getTime()
34
+ };
35
+ CACHE.set("".concat(prefix).concat(key), entry);
36
+ if (CACHE.size > RECORDS_LIMIT && Math.random() < GC_PROBABILITY) {
37
+ gc();
38
+ }
39
+ },
40
+ namespace(namespace) {
41
+ return createSharedMemoryCache("".concat(prefix).concat(namespace, ":"));
42
+ }
43
+ };
44
+ }
45
+ function gc() {
46
+ Array.from(CACHE.entries()).sort((_ref, _ref2) => {
47
+ var [, a] = _ref;
48
+ var [, b] = _ref2;
49
+ return -cmp(a.accessed, b.accessed);
50
+ }).slice(RECORDS_LIMIT).forEach(_ref3 => {
51
+ var [key] = _ref3;
52
+ CACHE.delete(key);
53
+ });
54
+ }
55
+ function cmp(a, b) {
56
+ if (a === b) return 0;
57
+ return a < b ? -1 : 1;
58
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _memory = require("./memory.cjs");
4
+ describe('createSharedMemoryCache', () => {
5
+ it('should write and read keys', () => {
6
+ var cache = (0, _memory.createSharedMemoryCache)();
7
+ expect(cache.get('hello', 0)).toBeUndefined();
8
+ cache.set('hello', 'world', 0);
9
+ expect(cache.get('hello', 0)).toBe('world');
10
+ });
11
+ it('should delete accessed records if the current version is higher', () => {
12
+ var cache = (0, _memory.createSharedMemoryCache)();
13
+ cache.set('hello', 'world', 0);
14
+ expect(cache.get('hello', 0)).toBe('world');
15
+ expect(cache.get('hello', 1)).toBeUndefined();
16
+ expect(cache.get('hello', 0)).toBeUndefined();
17
+ });
18
+ it('should separate datasets by namespace', () => {
19
+ var cache = (0, _memory.createSharedMemoryCache)();
20
+ var a = cache.namespace('a:');
21
+ var b = cache.namespace('b:');
22
+ a.set('hello', 'world', 0);
23
+ b.set('hello', 'universe', 0);
24
+ expect(cache.get('hello', 0)).toBeUndefined();
25
+ expect(a.get('hello', 0)).toBe('world');
26
+ expect(b.get('hello', 0)).toBe('universe');
27
+ });
28
+ it('should garbage-collect old cache records when threshold is reached (with a chance of 1/100)', () => {
29
+ var cache = (0, _memory.createSharedMemoryCache)();
30
+ for (var i = 0; i < _memory.RECORDS_LIMIT; i += 1) {
31
+ cache.set("record-".concat(i), "value-".concat(i), 0);
32
+ }
33
+ for (var _i = 0; _i < _memory.RECORDS_LIMIT; _i += 1) {
34
+ expect(cache.get("record-".concat(_i), 0)).toBe("value-".concat(_i));
35
+ }
36
+
37
+ // Write 10% more records, 10 times to trigger CG
38
+ for (var repeat = 0; repeat < 10; repeat += 1) {
39
+ for (var _i2 = _memory.RECORDS_LIMIT; _i2 < _memory.RECORDS_LIMIT * 1.1; _i2 += 1) {
40
+ cache.set("record-".concat(_i2), "value-".concat(_i2), 0);
41
+ }
42
+ }
43
+
44
+ // the oldest part of the cache should be removed already
45
+ for (var _i3 = 0; _i3 < _memory.RECORDS_LIMIT * 0.09; _i3 += 1) {
46
+ expect(cache.get("record-".concat(_i3), 0)).toBeUndefined();
47
+ }
48
+
49
+ // and the rest kept
50
+ for (var _i4 = _memory.RECORDS_LIMIT * 0.11; _i4 < _memory.RECORDS_LIMIT * 1.1; _i4 += 1) {
51
+ expect(cache.get("record-".concat(_i4), 0)).toBe("value-".concat(_i4));
52
+ }
53
+ });
54
+ });
@@ -0,0 +1,52 @@
1
+ import { createSharedMemoryCache, RECORDS_LIMIT } from "./memory.mjs";
2
+ describe('createSharedMemoryCache', () => {
3
+ it('should write and read keys', () => {
4
+ var cache = createSharedMemoryCache();
5
+ expect(cache.get('hello', 0)).toBeUndefined();
6
+ cache.set('hello', 'world', 0);
7
+ expect(cache.get('hello', 0)).toBe('world');
8
+ });
9
+ it('should delete accessed records if the current version is higher', () => {
10
+ var cache = createSharedMemoryCache();
11
+ cache.set('hello', 'world', 0);
12
+ expect(cache.get('hello', 0)).toBe('world');
13
+ expect(cache.get('hello', 1)).toBeUndefined();
14
+ expect(cache.get('hello', 0)).toBeUndefined();
15
+ });
16
+ it('should separate datasets by namespace', () => {
17
+ var cache = createSharedMemoryCache();
18
+ var a = cache.namespace('a:');
19
+ var b = cache.namespace('b:');
20
+ a.set('hello', 'world', 0);
21
+ b.set('hello', 'universe', 0);
22
+ expect(cache.get('hello', 0)).toBeUndefined();
23
+ expect(a.get('hello', 0)).toBe('world');
24
+ expect(b.get('hello', 0)).toBe('universe');
25
+ });
26
+ it('should garbage-collect old cache records when threshold is reached (with a chance of 1/100)', () => {
27
+ var cache = createSharedMemoryCache();
28
+ for (var i = 0; i < RECORDS_LIMIT; i += 1) {
29
+ cache.set("record-".concat(i), "value-".concat(i), 0);
30
+ }
31
+ for (var _i = 0; _i < RECORDS_LIMIT; _i += 1) {
32
+ expect(cache.get("record-".concat(_i), 0)).toBe("value-".concat(_i));
33
+ }
34
+
35
+ // Write 10% more records, 10 times to trigger CG
36
+ for (var repeat = 0; repeat < 10; repeat += 1) {
37
+ for (var _i2 = RECORDS_LIMIT; _i2 < RECORDS_LIMIT * 1.1; _i2 += 1) {
38
+ cache.set("record-".concat(_i2), "value-".concat(_i2), 0);
39
+ }
40
+ }
41
+
42
+ // the oldest part of the cache should be removed already
43
+ for (var _i3 = 0; _i3 < RECORDS_LIMIT * 0.09; _i3 += 1) {
44
+ expect(cache.get("record-".concat(_i3), 0)).toBeUndefined();
45
+ }
46
+
47
+ // and the rest kept
48
+ for (var _i4 = RECORDS_LIMIT * 0.11; _i4 < RECORDS_LIMIT * 1.1; _i4 += 1) {
49
+ expect(cache.get("record-".concat(_i4), 0)).toBe("value-".concat(_i4));
50
+ }
51
+ });
52
+ });
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createStackedCache = createStackedCache;
7
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
8
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
9
+ function createStackedCache(caches) {
10
+ return {
11
+ get(key, latestVersion) {
12
+ return _asyncToGenerator(function* () {
13
+ for (var i = 0; i < caches.length; i += 1) {
14
+ // eslint-disable-next-line no-await-in-loop
15
+ var value = yield caches[i].get(key, latestVersion);
16
+ if (value !== undefined) {
17
+ return value;
18
+ }
19
+ }
20
+ return undefined;
21
+ })();
22
+ },
23
+ set(key, value, version) {
24
+ return _asyncToGenerator(function* () {
25
+ yield Promise.all(caches.map(cache => cache.set(key, value, version)));
26
+ })();
27
+ },
28
+ namespace(namespace) {
29
+ return createStackedCache(caches.map(cache => cache.namespace(namespace)));
30
+ }
31
+ };
32
+ }
@@ -0,0 +1,2 @@
1
+ import type { Cache } from './type';
2
+ export declare function createStackedCache(caches: Cache[]): Cache;
@@ -0,0 +1,26 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
+ export function createStackedCache(caches) {
4
+ return {
5
+ get(key, latestVersion) {
6
+ return _asyncToGenerator(function* () {
7
+ for (var i = 0; i < caches.length; i += 1) {
8
+ // eslint-disable-next-line no-await-in-loop
9
+ var value = yield caches[i].get(key, latestVersion);
10
+ if (value !== undefined) {
11
+ return value;
12
+ }
13
+ }
14
+ return undefined;
15
+ })();
16
+ },
17
+ set(key, value, version) {
18
+ return _asyncToGenerator(function* () {
19
+ yield Promise.all(caches.map(cache => cache.set(key, value, version)));
20
+ })();
21
+ },
22
+ namespace(namespace) {
23
+ return createStackedCache(caches.map(cache => cache.namespace(namespace)));
24
+ }
25
+ };
26
+ }