@prezly/theme-kit-core 4.1.0 → 4.2.0-alpha.0

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 (267) hide show
  1. package/build/cjs/data-fetching/api/PrezlyApi.js.map +1 -0
  2. package/build/cjs/data-fetching/api/getPrezlyApi.js.map +1 -0
  3. package/build/cjs/data-fetching/api/index.js.map +1 -0
  4. package/build/cjs/data-fetching/api/lib.js.map +1 -0
  5. package/build/cjs/data-fetching/api/queries.js.map +1 -0
  6. package/build/cjs/data-fetching/index.js.map +1 -0
  7. package/build/cjs/data-fetching/lib/getAlgoliaSettings.js.map +1 -0
  8. package/build/cjs/data-fetching/lib/getEnvVariables.js.map +1 -0
  9. package/build/cjs/data-fetching/lib/index.js.map +1 -0
  10. package/build/cjs/data-fetching/lib/isSdkError.js.map +1 -0
  11. package/build/cjs/data-fetching/lib/isUuid.js.map +1 -0
  12. package/build/cjs/data-fetching/types.js.map +1 -0
  13. package/build/cjs/index.js.map +1 -0
  14. package/build/cjs/intl/getFallbackLocale.js.map +1 -0
  15. package/build/cjs/intl/index.js.map +1 -0
  16. package/build/cjs/intl/languages.js.map +1 -0
  17. package/build/cjs/intl/locale.js.map +1 -0
  18. package/build/cjs/intl/localeConfig.js.map +1 -0
  19. package/build/cjs/intl/localeList.js.map +1 -0
  20. package/build/cjs/intl/localeObject.js.map +1 -0
  21. package/build/cjs/seo/getAlternateLanguageLinks.js.map +1 -0
  22. package/build/cjs/seo/index.js.map +1 -0
  23. package/build/{data-fetching → cjs/seo}/types.js.map +1 -1
  24. package/build/cjs/seo/utils/bindLanguagesWithLocales.js.map +1 -0
  25. package/build/cjs/seo/utils/createAlternateLanguageLink.js.map +1 -0
  26. package/build/cjs/seo/utils/index.js.map +1 -0
  27. package/build/{seo → cjs}/types.js.map +1 -1
  28. package/build/cjs/utils/boilerplate.js.map +1 -0
  29. package/build/cjs/utils/constants.js.map +1 -0
  30. package/build/cjs/utils/getAssetsUrl.js.map +1 -0
  31. package/build/cjs/utils/getDataRequestLink.js.map +1 -0
  32. package/build/cjs/utils/getLocalizedCategoryData.js.map +1 -0
  33. package/build/cjs/utils/getNewsroomLogoUrl.js.map +1 -0
  34. package/build/cjs/utils/getPrivacyPortalUrl.js.map +1 -0
  35. package/build/cjs/utils/getStoryPublicationDate.js.map +1 -0
  36. package/build/cjs/utils/getUploadcareGroupUrl.js.map +1 -0
  37. package/build/cjs/utils/index.js.map +1 -0
  38. package/build/cjs/utils/isEmbargoStory.js.map +1 -0
  39. package/build/esm/data-fetching/api/PrezlyApi.js +165 -0
  40. package/build/esm/data-fetching/api/PrezlyApi.js.map +1 -0
  41. package/build/esm/data-fetching/api/getPrezlyApi.js +17 -0
  42. package/build/esm/data-fetching/api/getPrezlyApi.js.map +1 -0
  43. package/build/esm/data-fetching/api/index.js +3 -0
  44. package/build/esm/data-fetching/api/index.js.map +1 -0
  45. package/build/esm/data-fetching/api/lib.js +16 -0
  46. package/build/esm/data-fetching/api/lib.js.map +1 -0
  47. package/build/esm/data-fetching/api/queries.js +51 -0
  48. package/build/esm/data-fetching/api/queries.js.map +1 -0
  49. package/build/esm/data-fetching/index.js +4 -0
  50. package/build/esm/data-fetching/index.js.map +1 -0
  51. package/build/esm/data-fetching/lib/getAlgoliaSettings.js +18 -0
  52. package/build/esm/data-fetching/lib/getAlgoliaSettings.js.map +1 -0
  53. package/build/esm/data-fetching/lib/getEnvVariables.js +37 -0
  54. package/build/esm/data-fetching/lib/getEnvVariables.js.map +1 -0
  55. package/build/esm/data-fetching/lib/index.js +5 -0
  56. package/build/esm/data-fetching/lib/index.js.map +1 -0
  57. package/build/esm/data-fetching/lib/isSdkError.js +4 -0
  58. package/build/esm/data-fetching/lib/isSdkError.js.map +1 -0
  59. package/build/esm/data-fetching/lib/isUuid.js +5 -0
  60. package/build/esm/data-fetching/lib/isUuid.js.map +1 -0
  61. package/build/esm/data-fetching/types.js +2 -0
  62. package/build/esm/data-fetching/types.js.map +1 -0
  63. package/build/esm/index.js +6 -0
  64. package/build/esm/index.js.map +1 -0
  65. package/build/esm/intl/getFallbackLocale.js +20 -0
  66. package/build/esm/intl/getFallbackLocale.js.map +1 -0
  67. package/build/esm/intl/index.js +6 -0
  68. package/build/esm/intl/index.js.map +1 -0
  69. package/build/esm/intl/languages.js +135 -0
  70. package/build/esm/intl/languages.js.map +1 -0
  71. package/build/esm/intl/locale.js +89 -0
  72. package/build/esm/intl/locale.js.map +1 -0
  73. package/build/esm/intl/localeConfig.js +20 -0
  74. package/build/esm/intl/localeConfig.js.map +1 -0
  75. package/build/esm/intl/localeList.js +112 -0
  76. package/build/esm/intl/localeList.js.map +1 -0
  77. package/build/esm/intl/localeObject.js +91 -0
  78. package/build/esm/intl/localeObject.js.map +1 -0
  79. package/build/esm/seo/getAlternateLanguageLinks.js +79 -0
  80. package/build/esm/seo/getAlternateLanguageLinks.js.map +1 -0
  81. package/build/esm/seo/index.js +3 -0
  82. package/build/esm/seo/index.js.map +1 -0
  83. package/build/esm/seo/types.js +2 -0
  84. package/build/esm/seo/types.js.map +1 -0
  85. package/build/esm/seo/utils/bindLanguagesWithLocales.js +19 -0
  86. package/build/esm/seo/utils/bindLanguagesWithLocales.js.map +1 -0
  87. package/build/esm/seo/utils/createAlternateLanguageLink.js +11 -0
  88. package/build/esm/seo/utils/createAlternateLanguageLink.js.map +1 -0
  89. package/build/esm/seo/utils/index.js +3 -0
  90. package/build/esm/seo/utils/index.js.map +1 -0
  91. package/build/esm/types.js +2 -0
  92. package/build/esm/types.js.map +1 -0
  93. package/build/esm/utils/boilerplate.js +21 -0
  94. package/build/esm/utils/boilerplate.js.map +1 -0
  95. package/build/esm/utils/constants.js +4 -0
  96. package/build/esm/utils/constants.js.map +1 -0
  97. package/build/esm/utils/getAssetsUrl.js +9 -0
  98. package/build/esm/utils/getAssetsUrl.js.map +1 -0
  99. package/build/esm/utils/getDataRequestLink.js +8 -0
  100. package/build/esm/utils/getDataRequestLink.js.map +1 -0
  101. package/build/esm/utils/getLocalizedCategoryData.js +31 -0
  102. package/build/esm/utils/getLocalizedCategoryData.js.map +1 -0
  103. package/build/esm/utils/getNewsroomLogoUrl.js +17 -0
  104. package/build/esm/utils/getNewsroomLogoUrl.js.map +1 -0
  105. package/build/esm/utils/getPrivacyPortalUrl.js +9 -0
  106. package/build/esm/utils/getPrivacyPortalUrl.js.map +1 -0
  107. package/build/esm/utils/getStoryPublicationDate.js +10 -0
  108. package/build/esm/utils/getStoryPublicationDate.js.map +1 -0
  109. package/build/esm/utils/getUploadcareGroupUrl.js +13 -0
  110. package/build/esm/utils/getUploadcareGroupUrl.js.map +1 -0
  111. package/build/esm/utils/index.js +11 -0
  112. package/build/esm/utils/index.js.map +1 -0
  113. package/build/esm/utils/isEmbargoStory.js +4 -0
  114. package/build/esm/utils/isEmbargoStory.js.map +1 -0
  115. package/build/tsconfig.cjs.tsbuildinfo +1 -0
  116. package/build/tsconfig.esm.tsbuildinfo +1 -0
  117. package/build/types/data-fetching/api/PrezlyApi.d.ts +57 -0
  118. package/build/types/data-fetching/api/getPrezlyApi.d.ts +4 -0
  119. package/build/types/data-fetching/api/index.d.ts +2 -0
  120. package/build/types/data-fetching/api/lib.d.ts +11 -0
  121. package/build/types/data-fetching/api/queries.d.ts +46 -0
  122. package/build/types/data-fetching/index.d.ts +3 -0
  123. package/build/types/data-fetching/lib/getAlgoliaSettings.d.ts +4 -0
  124. package/build/types/data-fetching/lib/getEnvVariables.d.ts +4 -0
  125. package/build/types/data-fetching/lib/index.d.ts +4 -0
  126. package/build/types/data-fetching/lib/isSdkError.d.ts +2 -0
  127. package/build/types/data-fetching/lib/isUuid.d.ts +1 -0
  128. package/build/types/data-fetching/types.d.ts +13 -0
  129. package/build/types/index.d.ts +5 -0
  130. package/build/types/intl/getFallbackLocale.d.ts +10 -0
  131. package/build/types/intl/index.d.ts +5 -0
  132. package/build/types/intl/languages.d.ts +44 -0
  133. package/build/types/intl/locale.d.ts +11 -0
  134. package/build/types/intl/localeConfig.d.ts +2 -0
  135. package/build/types/intl/localeList.d.ts +2 -0
  136. package/build/types/intl/localeObject.d.ts +50 -0
  137. package/build/types/seo/getAlternateLanguageLinks.d.ts +4 -0
  138. package/build/types/seo/index.d.ts +2 -0
  139. package/build/types/seo/types.d.ts +4 -0
  140. package/build/types/seo/utils/bindLanguagesWithLocales.d.ts +11 -0
  141. package/build/types/seo/utils/createAlternateLanguageLink.d.ts +5 -0
  142. package/build/types/seo/utils/index.d.ts +2 -0
  143. package/build/types/types.d.ts +29 -0
  144. package/build/types/utils/boilerplate.d.ts +4 -0
  145. package/build/types/utils/constants.d.ts +3 -0
  146. package/build/types/utils/getAssetsUrl.d.ts +5 -0
  147. package/build/types/utils/getDataRequestLink.d.ts +3 -0
  148. package/build/types/utils/getLocalizedCategoryData.d.ts +10 -0
  149. package/build/types/utils/getNewsroomLogoUrl.d.ts +3 -0
  150. package/build/types/utils/getPrivacyPortalUrl.d.ts +8 -0
  151. package/build/types/utils/getStoryPublicationDate.d.ts +3 -0
  152. package/build/types/utils/getUploadcareGroupUrl.d.ts +8 -0
  153. package/build/types/utils/index.d.ts +10 -0
  154. package/build/types/utils/isEmbargoStory.d.ts +6 -0
  155. package/package.json +12 -5
  156. package/build/data-fetching/api/PrezlyApi.js.map +0 -1
  157. package/build/data-fetching/api/getPrezlyApi.js.map +0 -1
  158. package/build/data-fetching/api/index.js.map +0 -1
  159. package/build/data-fetching/api/lib.js.map +0 -1
  160. package/build/data-fetching/api/queries.js.map +0 -1
  161. package/build/data-fetching/index.js.map +0 -1
  162. package/build/data-fetching/lib/getAlgoliaSettings.js.map +0 -1
  163. package/build/data-fetching/lib/getEnvVariables.js.map +0 -1
  164. package/build/data-fetching/lib/index.js.map +0 -1
  165. package/build/data-fetching/lib/isSdkError.js.map +0 -1
  166. package/build/data-fetching/lib/isUuid.js.map +0 -1
  167. package/build/index.js.map +0 -1
  168. package/build/intl/getFallbackLocale.js.map +0 -1
  169. package/build/intl/index.js.map +0 -1
  170. package/build/intl/languages.js.map +0 -1
  171. package/build/intl/locale.js.map +0 -1
  172. package/build/intl/localeConfig.js.map +0 -1
  173. package/build/intl/localeList.js.map +0 -1
  174. package/build/intl/localeObject.js.map +0 -1
  175. package/build/seo/getAlternateLanguageLinks.js.map +0 -1
  176. package/build/seo/index.js.map +0 -1
  177. package/build/seo/utils/bindLanguagesWithLocales.js.map +0 -1
  178. package/build/seo/utils/createAlternateLanguageLink.js.map +0 -1
  179. package/build/seo/utils/index.js.map +0 -1
  180. package/build/types.js.map +0 -1
  181. package/build/utils/boilerplate.js.map +0 -1
  182. package/build/utils/constants.js.map +0 -1
  183. package/build/utils/getAssetsUrl.js.map +0 -1
  184. package/build/utils/getDataRequestLink.js.map +0 -1
  185. package/build/utils/getLocalizedCategoryData.js.map +0 -1
  186. package/build/utils/getNewsroomLogoUrl.js.map +0 -1
  187. package/build/utils/getPrivacyPortalUrl.js.map +0 -1
  188. package/build/utils/getStoryPublicationDate.js.map +0 -1
  189. package/build/utils/getUploadcareGroupUrl.js.map +0 -1
  190. package/build/utils/index.js.map +0 -1
  191. package/build/utils/isEmbargoStory.js.map +0 -1
  192. /package/build/{data-fetching → cjs/data-fetching}/api/PrezlyApi.js +0 -0
  193. /package/build/{data-fetching → cjs/data-fetching}/api/getPrezlyApi.js +0 -0
  194. /package/build/{data-fetching → cjs/data-fetching}/api/index.js +0 -0
  195. /package/build/{data-fetching → cjs/data-fetching}/api/lib.js +0 -0
  196. /package/build/{data-fetching → cjs/data-fetching}/api/queries.js +0 -0
  197. /package/build/{data-fetching → cjs/data-fetching}/index.js +0 -0
  198. /package/build/{data-fetching → cjs/data-fetching}/lib/getAlgoliaSettings.js +0 -0
  199. /package/build/{data-fetching → cjs/data-fetching}/lib/getEnvVariables.js +0 -0
  200. /package/build/{data-fetching → cjs/data-fetching}/lib/index.js +0 -0
  201. /package/build/{data-fetching → cjs/data-fetching}/lib/isSdkError.js +0 -0
  202. /package/build/{data-fetching → cjs/data-fetching}/lib/isUuid.js +0 -0
  203. /package/build/{data-fetching → cjs/data-fetching}/types.js +0 -0
  204. /package/build/{index.js → cjs/index.js} +0 -0
  205. /package/build/{intl → cjs/intl}/getFallbackLocale.js +0 -0
  206. /package/build/{intl → cjs/intl}/index.js +0 -0
  207. /package/build/{intl → cjs/intl}/languages.js +0 -0
  208. /package/build/{intl → cjs/intl}/locale.js +0 -0
  209. /package/build/{intl → cjs/intl}/localeConfig.js +0 -0
  210. /package/build/{intl → cjs/intl}/localeList.js +0 -0
  211. /package/build/{intl → cjs/intl}/localeObject.js +0 -0
  212. /package/build/{seo → cjs/seo}/getAlternateLanguageLinks.js +0 -0
  213. /package/build/{seo → cjs/seo}/index.js +0 -0
  214. /package/build/{seo → cjs/seo}/types.js +0 -0
  215. /package/build/{seo → cjs/seo}/utils/bindLanguagesWithLocales.js +0 -0
  216. /package/build/{seo → cjs/seo}/utils/createAlternateLanguageLink.js +0 -0
  217. /package/build/{seo → cjs/seo}/utils/index.js +0 -0
  218. /package/build/{types.js → cjs/types.js} +0 -0
  219. /package/build/{utils → cjs/utils}/boilerplate.js +0 -0
  220. /package/build/{utils → cjs/utils}/constants.js +0 -0
  221. /package/build/{utils → cjs/utils}/getAssetsUrl.js +0 -0
  222. /package/build/{utils → cjs/utils}/getDataRequestLink.js +0 -0
  223. /package/build/{utils → cjs/utils}/getLocalizedCategoryData.js +0 -0
  224. /package/build/{utils → cjs/utils}/getNewsroomLogoUrl.js +0 -0
  225. /package/build/{utils → cjs/utils}/getPrivacyPortalUrl.js +0 -0
  226. /package/build/{utils → cjs/utils}/getStoryPublicationDate.js +0 -0
  227. /package/build/{utils → cjs/utils}/getUploadcareGroupUrl.js +0 -0
  228. /package/build/{utils → cjs/utils}/index.js +0 -0
  229. /package/build/{utils → cjs/utils}/isEmbargoStory.js +0 -0
  230. /package/build/{data-fetching → esm/data-fetching}/api/PrezlyApi.d.ts +0 -0
  231. /package/build/{data-fetching → esm/data-fetching}/api/getPrezlyApi.d.ts +0 -0
  232. /package/build/{data-fetching → esm/data-fetching}/api/index.d.ts +0 -0
  233. /package/build/{data-fetching → esm/data-fetching}/api/lib.d.ts +0 -0
  234. /package/build/{data-fetching → esm/data-fetching}/api/queries.d.ts +0 -0
  235. /package/build/{data-fetching → esm/data-fetching}/index.d.ts +0 -0
  236. /package/build/{data-fetching → esm/data-fetching}/lib/getAlgoliaSettings.d.ts +0 -0
  237. /package/build/{data-fetching → esm/data-fetching}/lib/getEnvVariables.d.ts +0 -0
  238. /package/build/{data-fetching → esm/data-fetching}/lib/index.d.ts +0 -0
  239. /package/build/{data-fetching → esm/data-fetching}/lib/isSdkError.d.ts +0 -0
  240. /package/build/{data-fetching → esm/data-fetching}/lib/isUuid.d.ts +0 -0
  241. /package/build/{data-fetching → esm/data-fetching}/types.d.ts +0 -0
  242. /package/build/{index.d.ts → esm/index.d.ts} +0 -0
  243. /package/build/{intl → esm/intl}/getFallbackLocale.d.ts +0 -0
  244. /package/build/{intl → esm/intl}/index.d.ts +0 -0
  245. /package/build/{intl → esm/intl}/languages.d.ts +0 -0
  246. /package/build/{intl → esm/intl}/locale.d.ts +0 -0
  247. /package/build/{intl → esm/intl}/localeConfig.d.ts +0 -0
  248. /package/build/{intl → esm/intl}/localeList.d.ts +0 -0
  249. /package/build/{intl → esm/intl}/localeObject.d.ts +0 -0
  250. /package/build/{seo → esm/seo}/getAlternateLanguageLinks.d.ts +0 -0
  251. /package/build/{seo → esm/seo}/index.d.ts +0 -0
  252. /package/build/{seo → esm/seo}/types.d.ts +0 -0
  253. /package/build/{seo → esm/seo}/utils/bindLanguagesWithLocales.d.ts +0 -0
  254. /package/build/{seo → esm/seo}/utils/createAlternateLanguageLink.d.ts +0 -0
  255. /package/build/{seo → esm/seo}/utils/index.d.ts +0 -0
  256. /package/build/{types.d.ts → esm/types.d.ts} +0 -0
  257. /package/build/{utils → esm/utils}/boilerplate.d.ts +0 -0
  258. /package/build/{utils → esm/utils}/constants.d.ts +0 -0
  259. /package/build/{utils → esm/utils}/getAssetsUrl.d.ts +0 -0
  260. /package/build/{utils → esm/utils}/getDataRequestLink.d.ts +0 -0
  261. /package/build/{utils → esm/utils}/getLocalizedCategoryData.d.ts +0 -0
  262. /package/build/{utils → esm/utils}/getNewsroomLogoUrl.d.ts +0 -0
  263. /package/build/{utils → esm/utils}/getPrivacyPortalUrl.d.ts +0 -0
  264. /package/build/{utils → esm/utils}/getStoryPublicationDate.d.ts +0 -0
  265. /package/build/{utils → esm/utils}/getUploadcareGroupUrl.d.ts +0 -0
  266. /package/build/{utils → esm/utils}/index.d.ts +0 -0
  267. /package/build/{utils → esm/utils}/isEmbargoStory.d.ts +0 -0
@@ -0,0 +1,6 @@
1
+ export * from './data-fetching';
2
+ export * from './intl';
3
+ export * from './seo';
4
+ export * from './types';
5
+ export * from './utils';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { LocaleObject } from './localeObject';
2
+ const localeFallback = {
3
+ en: [LocaleObject.fromAnyCode('en-US'), LocaleObject.fromAnyCode('en-GB')],
4
+ fr: [LocaleObject.fromAnyCode('fr-FR'), LocaleObject.fromAnyCode('fr-CA')],
5
+ };
6
+ /**
7
+ * Fallback locales for each region independent locale.
8
+ * For example, a story has en-CA en-AU and en-GB locales. As you can see there is no region independent locale.
9
+ * We will use a list of possible fallbacks to determine region independent locale alias.
10
+ * In the provided example the result will be en-GB since it is defined in the localeFallback list
11
+ * If the list will be en-CA en-AU and en-US then the result will be en-US since it is the first one and hence takes precedence.
12
+ */
13
+ export function getFallbackLocale(langCode, availableLocales) {
14
+ const fallbacks = localeFallback[langCode];
15
+ if (!fallbacks) {
16
+ return undefined;
17
+ }
18
+ return fallbacks.find((fallback) => Boolean(availableLocales.find((available) => available.isEqual(fallback))));
19
+ }
20
+ //# sourceMappingURL=getFallbackLocale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFallbackLocale.js","sourceRoot":"","sources":["../../../src/intl/getFallbackLocale.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,cAAc,GAAqC;IACrD,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1E,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7E,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC7B,QAAkB,EAClB,gBAAgC;IAEhC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,CAAC,SAAS,EAAE;QACZ,OAAO,SAAS,CAAC;KACpB;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC/B,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC7E,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './getFallbackLocale';
2
+ export * from './languages';
3
+ export { default as localeConfig } from './localeConfig';
4
+ export * from './locale';
5
+ export * from './localeObject';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/intl/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,135 @@
1
+ import { LocaleObject } from './localeObject';
2
+ function isOnlyCulture(culture, languages) {
3
+ const numberOfLanguages = languages.filter(({ locale: { language_code } }) => language_code === culture.language_code).length;
4
+ return numberOfLanguages === 1;
5
+ }
6
+ /**
7
+ * @returns the display name of the locale in its native language
8
+ *
9
+ * If there's only one culture used in a specific language,
10
+ * we strip the culture name completely.
11
+ *
12
+ * Examples:
13
+ * - English (Global), Spanish (Spain)
14
+ * - -> English, Spanish
15
+ * - English (Global), English (UK), Spanish (Spain)
16
+ * - -> English (Global), English (UK), Spanish
17
+ */
18
+ export function getLanguageDisplayName(language, languages) {
19
+ const { locale } = language;
20
+ if (isOnlyCulture(locale, languages)) {
21
+ const cultureNameIndex = locale.native_name.indexOf('(');
22
+ if (cultureNameIndex !== -1) {
23
+ return locale.native_name.slice(0, cultureNameIndex - 1);
24
+ }
25
+ }
26
+ return locale.native_name;
27
+ }
28
+ /**
29
+ * @returns Language set as default in the Newsroom Settings.
30
+ */
31
+ export function getDefaultLanguage(languages) {
32
+ return languages.find(({ is_default }) => is_default) || languages[0];
33
+ }
34
+ /**
35
+ * @returns Only languages having at least one published story
36
+ */
37
+ export function getUsedLanguages(languages) {
38
+ return languages.filter((language) => language.public_stories_count > 0);
39
+ }
40
+ export function getLanguageByExactLocaleCode(languages, locale) {
41
+ const localeCode = locale.toUnderscoreCode();
42
+ return languages.find(({ code }) => code === localeCode);
43
+ }
44
+ // See https://github.com/prezly/prezly/blob/master/lib/model/CulturePeer.php#L123
45
+ export function getLanguageByNeutralLocaleCode(languages, locale) {
46
+ const neutralLanguageCode = locale.toNeutralLanguageCode();
47
+ // Prefer default language
48
+ const defaultLanguage = getDefaultLanguage(languages);
49
+ // TODO: This doesn't align with other methods logic
50
+ if (defaultLanguage.code === locale.toUnderscoreCode()) {
51
+ return defaultLanguage;
52
+ }
53
+ // Try to look in used cultures first (giving priority to used ones)
54
+ const usedLanguages = getUsedLanguages(languages);
55
+ const usedLanguage = usedLanguages.find(({ code }) => LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === neutralLanguageCode);
56
+ if (usedLanguage) {
57
+ return usedLanguage;
58
+ }
59
+ // Search in all languages
60
+ return languages.find(({ code }) => LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === neutralLanguageCode);
61
+ }
62
+ // See https://github.com/prezly/prezly/blob/master/lib/model/CulturePeer.php#L159
63
+ export function getLanguageByShortRegionCode(languages, locale) {
64
+ const shortRegionCode = locale.toRegionCode();
65
+ // Prefer default language
66
+ const defaultLanguage = getDefaultLanguage(languages);
67
+ if (LocaleObject.fromAnyCode(defaultLanguage.code).toRegionCode() === shortRegionCode) {
68
+ return defaultLanguage;
69
+ }
70
+ // Try to look in used cultures first (giving priority to used ones)
71
+ const usedLanguages = getUsedLanguages(languages);
72
+ const usedLanguage = usedLanguages.find(({ code }) => LocaleObject.fromAnyCode(code).toRegionCode() === shortRegionCode);
73
+ if (usedLanguage) {
74
+ return usedLanguage;
75
+ }
76
+ // Search in all languages
77
+ return languages.find(({ code }) => LocaleObject.fromAnyCode(code).toRegionCode() === shortRegionCode);
78
+ }
79
+ export function getLanguageFromStory(languages, story) {
80
+ const { code: storyLocaleCode } = story.culture;
81
+ return languages.find(({ code }) => code === storyLocaleCode);
82
+ }
83
+ /**
84
+ * Extracts company information for the selected locale
85
+ */
86
+ export function getCompanyInformation(languages, locale) {
87
+ const currentLanguage = getLanguageByExactLocaleCode(languages, locale) || getDefaultLanguage(languages);
88
+ return currentLanguage.company_information;
89
+ }
90
+ /**
91
+ * Get newsroom notifications for the selected locale
92
+ */
93
+ export function getNotifications(languages, locale) {
94
+ const currentLanguage = getLanguageByExactLocaleCode(languages, locale) || getDefaultLanguage(languages);
95
+ return currentLanguage.notifications;
96
+ }
97
+ /**
98
+ * Get the shortest locale code possible from full locale code
99
+ * First: try shorting to neutral language code (there should be no locales with the same language code)
100
+ * Then: try shorting to region code (there should be no locales with the same region code)
101
+ * Finally: return the original locale code (shorting is not possible)
102
+ *
103
+ * @param locale A LocaleObject constructed from FULL locale code (taken straight from the selected language)
104
+ */
105
+ export function getShortestLocaleCode(languages, locale) {
106
+ const localeCode = locale.toUnderscoreCode();
107
+ const defaultLanguage = getDefaultLanguage(languages);
108
+ // If it's a default locale, return false (no locale needed in URL)
109
+ if (localeCode === defaultLanguage.code) {
110
+ return false;
111
+ }
112
+ // Try shorting to neutral language code
113
+ const neutralLanguageCode = locale.toNeutralLanguageCode();
114
+ const matchingLanguagesByNeutralCode = languages.filter(({ code }) => LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === neutralLanguageCode ||
115
+ code === neutralLanguageCode);
116
+ if (matchingLanguagesByNeutralCode.length === 1) {
117
+ return neutralLanguageCode;
118
+ }
119
+ // Try shorting to region code
120
+ const shortRegionCode = locale.toRegionCode();
121
+ const matchingLanguagesByRegionCode = languages.filter(({ code }) => LocaleObject.fromAnyCode(code).toRegionCode() === shortRegionCode);
122
+ // Prevent collision with neutral language codes
123
+ const lowerCasedShortRegionCode = shortRegionCode.toLowerCase();
124
+ const mathchingNeutralLanguagesByRegionCode = languages.filter(({ code }) => LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === lowerCasedShortRegionCode ||
125
+ code === lowerCasedShortRegionCode);
126
+ if (matchingLanguagesByRegionCode.length === 1 &&
127
+ // If there are 2 or more matching neutral languages, it means that there are no languages that can be shortened to neutral code
128
+ mathchingNeutralLanguagesByRegionCode.length !== 1 &&
129
+ // We don't want just numbers in our region code
130
+ Number.isNaN(Number(shortRegionCode))) {
131
+ return shortRegionCode;
132
+ }
133
+ return localeCode;
134
+ }
135
+ //# sourceMappingURL=languages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../src/intl/languages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ export const DEFAULT_LOCALE = 'en';
2
+ /**
3
+ * This a list of locales that Prezly has translations for. Each code represents a language file in the `@prezly/themes-intl-messages` package.
4
+ * See https://github.com/prezly/themes-intl-messages for more info.
5
+ */
6
+ const SUPPORTED_LOCALES = [
7
+ 'af',
8
+ 'ar',
9
+ 'az',
10
+ 'be',
11
+ 'bg',
12
+ 'cs',
13
+ 'da',
14
+ 'de',
15
+ 'el',
16
+ 'en',
17
+ 'es',
18
+ 'et',
19
+ 'fi',
20
+ 'fil',
21
+ 'fr',
22
+ 'ga',
23
+ 'he',
24
+ 'hi',
25
+ 'hr',
26
+ 'hu',
27
+ 'id',
28
+ 'it',
29
+ 'ja',
30
+ 'kk',
31
+ 'ko',
32
+ 'lt',
33
+ 'lv',
34
+ 'mt',
35
+ 'nl',
36
+ 'no',
37
+ 'pl',
38
+ 'pt-BR',
39
+ 'pt',
40
+ 'ro',
41
+ 'ru',
42
+ 'sk',
43
+ 'sl',
44
+ 'sv',
45
+ 'sw',
46
+ 'th',
47
+ 'tr',
48
+ 'uk',
49
+ 'ur',
50
+ 'uz',
51
+ 'vi',
52
+ 'zh-CN',
53
+ 'zh-TW',
54
+ ];
55
+ /**
56
+ * Use this function to determine which translations file you should load from `@prezly/themes-intl-mesages` package.
57
+ * See https://github.com/prezly/theme-nextjs-bea/blob/main/utils/lang.ts for a usage example.
58
+ */
59
+ export function getSupportedLocaleIsoCode(locale) {
60
+ const localeIsoCode = locale.toHyphenCode();
61
+ const isSupportedLocale = localeIsoCode.length >= 2 && SUPPORTED_LOCALES.includes(localeIsoCode);
62
+ if (isSupportedLocale) {
63
+ return localeIsoCode;
64
+ }
65
+ const language = locale.toNeutralLanguageCode();
66
+ const isSupportedLanguage = SUPPORTED_LOCALES.includes(language);
67
+ if (isSupportedLanguage) {
68
+ return language;
69
+ }
70
+ // Custom mapping for Chinese locales
71
+ if (localeIsoCode.toLowerCase() === 'zh-hant') {
72
+ return 'zh-TW';
73
+ }
74
+ if (localeIsoCode.toLowerCase() === 'zh-hk') {
75
+ return 'zh-CN';
76
+ }
77
+ // This code should never be reached, because locale code check is happening in `LocaleObject.fromAnyCode`
78
+ // eslint-disable-next-line no-console
79
+ console.warn('Unsupported locale provided. Please use `LocaleObject.fromAnyCode` to ensure you are using a correct language code');
80
+ return DEFAULT_LOCALE;
81
+ }
82
+ export function getLocaleDirection(locale) {
83
+ const neutralLanguageCode = locale.toNeutralLanguageCode();
84
+ if (['ar', 'he', 'ur'].includes(neutralLanguageCode)) {
85
+ return 'rtl';
86
+ }
87
+ return 'ltr';
88
+ }
89
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../../../src/intl/locale.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAMnC;;;GAGG;AACH,MAAM,iBAAiB,GAAiB;IACpC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,OAAO;CACV,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAoB;IAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IAE5C,MAAM,iBAAiB,GACnB,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,iBAAiB,EAAE;QACnB,OAAO,aAAa,CAAC;KACxB;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAChD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,mBAAmB,EAAE;QACrB,OAAO,QAAQ,CAAC;KACnB;IAED,qCAAqC;IACrC,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE;QAC3C,OAAO,OAAO,CAAC;KAClB;IACD,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;QACzC,OAAO,OAAO,CAAC;KAClB;IAED,0GAA0G;IAC1G,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACR,oHAAoH,CACvH,CAAC;IACF,OAAO,cAAc,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACnD,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAE3D,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;QAClD,OAAO,KAAK,CAAC;KAChB;IAED,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * This list is pulled from the main Prezly application. The underscores are replaced with dashes.
4
+ * Together with permutation performed lower in the code,
5
+ * the exported list represents all of the possible locale codes that a theme application might accept.
6
+ */
7
+ const supportedLocales = require('./localeList');
8
+ const lowercaseLocales = supportedLocales.map((l) => l.toLowerCase());
9
+ // Get all permutations for the shorter locale codes supported by Prezly (e.g. short region codes and neutral language codes)
10
+ const lowercaseLocalPermutations = Array.from(new Set([
11
+ ...lowercaseLocales,
12
+ ...lowercaseLocales.map((code) => code.split('-')[0]),
13
+ ...lowercaseLocales
14
+ .map((code) => code.split('-')[1])
15
+ .filter(Boolean)
16
+ // Remove number-only codes from possible permutations (like `419` for `es-419`)
17
+ .filter((code) => Number.isNaN(Number(code))),
18
+ ])).sort();
19
+ module.exports = lowercaseLocalPermutations;
20
+ //# sourceMappingURL=localeConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeConfig.js","sourceRoot":"","sources":["../../../src/intl/localeConfig.js"],"names":[],"mappings":";AAAA;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAEjD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAEtE,6HAA6H;AAC7H,MAAM,0BAA0B,GAAG,KAAK,CAAC,IAAI,CACzC,IAAI,GAAG,CAAC;IACJ,GAAG,gBAAgB;IACnB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,gBAAgB;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC,MAAM,CAAC,OAAO,CAAC;QAChB,gFAAgF;SAC/E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CACpD,CAAC,CACL,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,OAAO,GAAG,0BAA0B,CAAC"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * This list is pulled from the main Prezly application. The underscores are replaced with dashes.
4
+ */
5
+ module.exports = [
6
+ 'af-ZA',
7
+ 'ar',
8
+ 'ar-AE',
9
+ 'ar-BH',
10
+ 'ar-QA',
11
+ 'ar-SA',
12
+ 'az',
13
+ 'be',
14
+ 'bg-BG',
15
+ 'ca',
16
+ 'cs-CZ',
17
+ 'da-DK',
18
+ 'de',
19
+ 'de-DE',
20
+ 'de-BE',
21
+ 'de-AT',
22
+ 'de-CH',
23
+ 'el-GR',
24
+ 'en',
25
+ 'en-US',
26
+ 'en-AE',
27
+ 'en-AU',
28
+ 'en-BD',
29
+ 'en-BE',
30
+ 'en-BH',
31
+ 'en-CA',
32
+ 'en-CN',
33
+ 'en-DE',
34
+ 'en-DK',
35
+ 'en-GB',
36
+ 'en-HK',
37
+ 'en-ID',
38
+ 'en-IE',
39
+ 'en-IL',
40
+ 'en-IN',
41
+ 'en-JM',
42
+ 'en-JP',
43
+ 'en-KH',
44
+ 'en-KR',
45
+ 'en-LK',
46
+ 'en-MV',
47
+ 'en-MM',
48
+ 'en-MY',
49
+ 'en-NP',
50
+ 'en-NZ',
51
+ 'en-PH',
52
+ 'en-PK',
53
+ 'en-QA',
54
+ 'en-SA',
55
+ 'en-SG',
56
+ 'en-TH',
57
+ 'en-TW',
58
+ 'en-VN',
59
+ 'en-ZA',
60
+ 'es',
61
+ 'es-ES',
62
+ 'es-MX',
63
+ 'et-EE',
64
+ 'es-419',
65
+ 'fi-FI',
66
+ 'fil',
67
+ 'fr',
68
+ 'fr-BE',
69
+ 'fr-FR',
70
+ 'fr-CA',
71
+ 'fr-LU',
72
+ 'ga-IE',
73
+ 'he-IL',
74
+ 'hi-IN',
75
+ 'hr-HR',
76
+ 'hu-HU',
77
+ 'id-ID',
78
+ 'it-IT',
79
+ 'ja-JP',
80
+ 'kk',
81
+ 'ko-KR',
82
+ 'ky',
83
+ 'lt-LT',
84
+ 'lv-LV',
85
+ 'mt-MT',
86
+ 'ms-MY',
87
+ 'nb-NO',
88
+ 'nl',
89
+ 'nl-BE',
90
+ 'nl-NL',
91
+ 'pl-PL',
92
+ 'pt',
93
+ 'pt-BR',
94
+ 'pt-PT',
95
+ 'ro-RO',
96
+ 'ru-RU',
97
+ 'sk-SK',
98
+ 'sl-SI',
99
+ 'sv-SE',
100
+ 'sw',
101
+ 'th-TH',
102
+ 'tr-TR',
103
+ 'uk-UA',
104
+ 'ur-PK',
105
+ 'uz',
106
+ 'vi-VN',
107
+ 'zh-Hant',
108
+ 'zh-HK',
109
+ 'zh-TW',
110
+ 'zh-CN',
111
+ ];
112
+ //# sourceMappingURL=localeList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeList.js","sourceRoot":"","sources":["../../../src/intl/localeList.js"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,GAAG;IACb,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,KAAK;IACL,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;CACV,CAAC"}
@@ -0,0 +1,91 @@
1
+ import localeConfig from './localeConfig';
2
+ /**
3
+ * This class is created to simplify working with locales and transforming between different locale code formats.
4
+ * Prezly API uses underscore-codes, while most frontend application tend to use hyphen-codes or slugs.
5
+ * Note that `fromAnyCode` constructor only accepts locales supported by Prezly backend. See `localeConfig` for reference.
6
+ */
7
+ export class LocaleObject {
8
+ /**
9
+ * Hyphen-separated locale code.
10
+ * Examples: `nl-BE`, `en-US`, `fr`, `fil`
11
+ */
12
+ localeCode;
13
+ /**
14
+ * Whether the locale is region independent (without region/culture part).
15
+ * I.E. `en` is region independent, while `en-US` is not.
16
+ */
17
+ isRegionIndependent;
18
+ constructor(localeCode) {
19
+ if (!/^([a-z]{2,3})(-[a-z\d]{1,4})?$/i.test(localeCode)) {
20
+ throw new Error('Invalid locale code provided!');
21
+ }
22
+ const [language, region] = localeCode.split('-');
23
+ if (region) {
24
+ this.isRegionIndependent = false;
25
+ // Workaround for `zh-Hant` locale, which is the only locale with non-uppercase region part
26
+ const regionSuffix = region === 'hant' ? 'Hant' : region.toUpperCase();
27
+ this.localeCode = [language, regionSuffix].join('-');
28
+ }
29
+ else {
30
+ this.isRegionIndependent = true;
31
+ this.localeCode = language;
32
+ }
33
+ }
34
+ /**
35
+ * @param localeCode Locale code in any of the formats below.
36
+ * Examples:
37
+ * - Hyphen-codes: `nl-BE`, `en-US`, `fr`, `fil`
38
+ * - Underscore-codes: `nl_BE`, `en_US`, `fr`, `fil`
39
+ * - Slugs: `nl-be`, `en-us`, `fr`, `fil`
40
+ */
41
+ static fromAnyCode(localeCode) {
42
+ const lowercaseCode = localeCode.toLowerCase().replace('_', '-');
43
+ const foundCode = localeConfig.find((code) => code === lowercaseCode);
44
+ if (!foundCode) {
45
+ throw new Error(`Unsupported locale code provided: "${lowercaseCode}"`);
46
+ }
47
+ return new LocaleObject(foundCode);
48
+ }
49
+ /**
50
+ * @returns Code formatted into hyphen format: `nl-BE`, `en-US`, `fr`, `fil`
51
+ */
52
+ toHyphenCode() {
53
+ return this.localeCode;
54
+ }
55
+ /**
56
+ * @returns Code formatted into underscore format, as expected by Prezly API: `nl_BE`, `en_US`, `fr`, `fil`
57
+ */
58
+ toUnderscoreCode() {
59
+ return this.localeCode.replace('-', '_');
60
+ }
61
+ /**
62
+ * @returns Code formatted to a URL-friendly lowercase slug format: `nl-be`, `en-us`, `fr`, `fil`
63
+ */
64
+ toUrlSlug() {
65
+ return this.localeCode.toLowerCase();
66
+ }
67
+ /**
68
+ * @returns Only the language part of the code without culture/region part: `nl`, `en`, `fr`
69
+ */
70
+ toNeutralLanguageCode() {
71
+ const [language] = this.localeCode.split('-');
72
+ return language;
73
+ }
74
+ /**
75
+ * @returns Only the culture/regtion part without the language part: `be`, `us`, `fr`
76
+ */
77
+ toRegionCode() {
78
+ const [language, region] = this.localeCode.split('-');
79
+ if (!region) {
80
+ return language.toUpperCase();
81
+ }
82
+ return region.toUpperCase();
83
+ }
84
+ /**
85
+ * Check if two LocaleObject instances are representing the same locale code.
86
+ */
87
+ isEqual(anotherLocale) {
88
+ return anotherLocale.toHyphenCode() === this.localeCode;
89
+ }
90
+ }
91
+ //# sourceMappingURL=localeObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeObject.js","sourceRoot":"","sources":["../../../src/intl/localeObject.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACrB;;;OAGG;IACK,UAAU,CAAS;IAE3B;;;OAGG;IACI,mBAAmB,CAAU;IAEpC,YAAoB,UAAkB;QAClC,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;QAED,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,2FAA2F;YAC3F,MAAM,YAAY,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAEvE,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxD;aAAM;YACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;SAC9B;IACL,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CAAC,UAAkB;QACxC,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAEtE,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,GAAG,CAAC,CAAC;SAC3E;QAED,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,YAAY;QACf,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,gBAAgB;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,qBAAqB;QACxB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9C,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;OAEG;IACI,YAAY;QACf,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;SACjC;QAED,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,aAA2B;QACtC,OAAO,aAAa,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC;IAC5D,CAAC;CACJ"}
@@ -0,0 +1,79 @@
1
+ import { getFallbackLocale } from '../intl';
2
+ import { bindLanguagesWithLocales, createAlternateLanguageLink } from './utils';
3
+ // We use english locale as fallback since English is the most common language
4
+ const ENG_FALLBACK = 'en';
5
+ const DEFAULT_HREF_LANG = 'x-default';
6
+ export function getAlternateLanguageLinks(availableLanguages, generateTranslationUrl) {
7
+ const languagesWithLocales = bindLanguagesWithLocales(availableLanguages);
8
+ const hrefLangLinks = [];
9
+ function pushLocaleToLinks(locale, hrefLang) {
10
+ const link = createAlternateLanguageLink(locale, generateTranslationUrl);
11
+ if (!link) {
12
+ return;
13
+ }
14
+ if (hrefLang) {
15
+ hrefLangLinks.push({ ...link, hrefLang });
16
+ }
17
+ else {
18
+ hrefLangLinks.push(link);
19
+ }
20
+ }
21
+ function populateDirectLinks() {
22
+ languagesWithLocales.forEach((binds) => binds.forEach(({ locale }) => pushLocaleToLinks(locale)));
23
+ }
24
+ function populateRegionIndependentLinks() {
25
+ languagesWithLocales.forEach((binds, regionIndependentLocaleCode) => {
26
+ // When there is no region independent locale of provided locales
27
+ // we still need something as a region independent locale
28
+ const localesArray = Array.from(binds.values()).map(({ locale }) => locale);
29
+ const hasRegionIndependentLocale = localesArray.some((locale) => locale.isRegionIndependent);
30
+ if (hasRegionIndependentLocale) {
31
+ return;
32
+ }
33
+ // Try to find some possible fallback for the regionIndependentLocaleCode from hardcoded list
34
+ // We try to find fallback from provided translations of current regionIndependentLocaleCode
35
+ // If there is no defined fallback in the list we will use just first translation as a region independent translation
36
+ const fallback = getFallbackLocale(regionIndependentLocaleCode, localesArray) ?? localesArray.at(0);
37
+ if (fallback) {
38
+ pushLocaleToLinks(fallback, regionIndependentLocaleCode);
39
+ }
40
+ });
41
+ }
42
+ function populateDefault() {
43
+ let isDefaultAddedToLinks = false;
44
+ // First we try to find region independent english locale (en)
45
+ // If the story has just region independent `en` translation we will use it as default hreflang
46
+ languagesWithLocales.forEach((binds) => binds.forEach(({ locale }) => {
47
+ if (locale.isRegionIndependent && locale.toNeutralLanguageCode() === ENG_FALLBACK) {
48
+ pushLocaleToLinks(locale, DEFAULT_HREF_LANG);
49
+ isDefaultAddedToLinks = true;
50
+ }
51
+ }));
52
+ if (!isDefaultAddedToLinks) {
53
+ // If there is no explicit region independent `en` translation for this story
54
+ // we will try to find some link that already has `en` fallback
55
+ const fallbackFromRegionIndependentLocales = hrefLangLinks.find((alternate) => alternate.hrefLang === ENG_FALLBACK);
56
+ if (fallbackFromRegionIndependentLocales) {
57
+ hrefLangLinks.push({
58
+ ...fallbackFromRegionIndependentLocales,
59
+ hrefLang: DEFAULT_HREF_LANG,
60
+ });
61
+ isDefaultAddedToLinks = true;
62
+ }
63
+ }
64
+ if (!isDefaultAddedToLinks) {
65
+ // If there is no english locale at all we will use is_default language (provided from server)
66
+ languagesWithLocales.forEach((binds) => binds.forEach(({ locale, language }) => {
67
+ if (language.is_default) {
68
+ pushLocaleToLinks(locale, DEFAULT_HREF_LANG);
69
+ isDefaultAddedToLinks = true;
70
+ }
71
+ }));
72
+ }
73
+ }
74
+ populateDirectLinks();
75
+ populateRegionIndependentLinks();
76
+ populateDefault();
77
+ return hrefLangLinks.sort((a, b) => a.hrefLang.localeCompare(b.hrefLang));
78
+ }
79
+ //# sourceMappingURL=getAlternateLanguageLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAlternateLanguageLinks.js","sourceRoot":"","sources":["../../../src/seo/getAlternateLanguageLinks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './getAlternateLanguageLinks';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seo/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/seo/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { LocaleObject } from '../../intl';
2
+ /**
3
+ * Group languages by their region independent language code (e.g. "en" for "en-US" and "en-GB").
4
+ */
5
+ export function bindLanguagesWithLocales(languages) {
6
+ const localesByLangCode = new Map();
7
+ languages.forEach((language) => {
8
+ const languageLocale = LocaleObject.fromAnyCode(language.code);
9
+ const regionIndependentLanguageCode = languageLocale.toNeutralLanguageCode();
10
+ let currentLocale = localesByLangCode.get(regionIndependentLanguageCode);
11
+ if (!currentLocale) {
12
+ currentLocale = new Map();
13
+ localesByLangCode.set(regionIndependentLanguageCode, currentLocale);
14
+ }
15
+ currentLocale.set(languageLocale.toHyphenCode(), { language, locale: languageLocale });
16
+ });
17
+ return localesByLangCode;
18
+ }
19
+ //# sourceMappingURL=bindLanguagesWithLocales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindLanguagesWithLocales.js","sourceRoot":"","sources":["../../../../src/seo/utils/bindLanguagesWithLocales.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1C;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAqC;IAC1E,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAiD,CAAC;IAEnF,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC3B,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,6BAA6B,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC;QAC7E,IAAI,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAEzE,IAAI,CAAC,aAAa,EAAE;YAChB,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;YAC1B,iBAAiB,CAAC,GAAG,CAAC,6BAA6B,EAAE,aAAa,CAAC,CAAC;SACvE;QAED,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC7B,CAAC"}