@strapi/i18n 0.0.0-experimental.008123965da692a55d02a1df63facc54077c6bde

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 (408) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +17 -0
  3. package/dist/admin/components/BulkLocaleActionModal.js +262 -0
  4. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -0
  5. package/dist/admin/components/BulkLocaleActionModal.mjs +260 -0
  6. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -0
  7. package/dist/admin/components/CMHeaderActions.js +721 -0
  8. package/dist/admin/components/CMHeaderActions.js.map +1 -0
  9. package/dist/admin/components/CMHeaderActions.mjs +696 -0
  10. package/dist/admin/components/CMHeaderActions.mjs.map +1 -0
  11. package/dist/admin/components/CMListViewModalsAdditionalInformation.js +69 -0
  12. package/dist/admin/components/CMListViewModalsAdditionalInformation.js.map +1 -0
  13. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs +65 -0
  14. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs.map +1 -0
  15. package/dist/admin/components/CheckboxConfirmation.js +155 -0
  16. package/dist/admin/components/CheckboxConfirmation.js.map +1 -0
  17. package/dist/admin/components/CheckboxConfirmation.mjs +134 -0
  18. package/dist/admin/components/CheckboxConfirmation.mjs.map +1 -0
  19. package/dist/admin/components/CreateLocale.js +395 -0
  20. package/dist/admin/components/CreateLocale.js.map +1 -0
  21. package/dist/admin/components/CreateLocale.mjs +369 -0
  22. package/dist/admin/components/CreateLocale.mjs.map +1 -0
  23. package/dist/admin/components/DeleteLocale.js +90 -0
  24. package/dist/admin/components/DeleteLocale.js.map +1 -0
  25. package/dist/admin/components/DeleteLocale.mjs +69 -0
  26. package/dist/admin/components/DeleteLocale.mjs.map +1 -0
  27. package/dist/admin/components/EditLocale.js +212 -0
  28. package/dist/admin/components/EditLocale.js.map +1 -0
  29. package/dist/admin/components/EditLocale.mjs +190 -0
  30. package/dist/admin/components/EditLocale.mjs.map +1 -0
  31. package/dist/admin/components/LocaleListCell.js +82 -0
  32. package/dist/admin/components/LocaleListCell.js.map +1 -0
  33. package/dist/admin/components/LocaleListCell.mjs +80 -0
  34. package/dist/admin/components/LocaleListCell.mjs.map +1 -0
  35. package/dist/admin/components/LocalePicker.js +98 -0
  36. package/dist/admin/components/LocalePicker.js.map +1 -0
  37. package/dist/admin/components/LocalePicker.mjs +77 -0
  38. package/dist/admin/components/LocalePicker.mjs.map +1 -0
  39. package/dist/admin/components/LocaleTable.js +143 -0
  40. package/dist/admin/components/LocaleTable.js.map +1 -0
  41. package/dist/admin/components/LocaleTable.mjs +122 -0
  42. package/dist/admin/components/LocaleTable.mjs.map +1 -0
  43. package/dist/admin/constants.js +37 -0
  44. package/dist/admin/constants.js.map +1 -0
  45. package/dist/admin/constants.mjs +35 -0
  46. package/dist/admin/constants.mjs.map +1 -0
  47. package/dist/admin/contentManagerHooks/editView.js +106 -0
  48. package/dist/admin/contentManagerHooks/editView.js.map +1 -0
  49. package/dist/admin/contentManagerHooks/editView.mjs +85 -0
  50. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -0
  51. package/dist/admin/contentManagerHooks/listView.js +43 -0
  52. package/dist/admin/contentManagerHooks/listView.js.map +1 -0
  53. package/dist/admin/contentManagerHooks/listView.mjs +41 -0
  54. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -0
  55. package/dist/admin/contentReleasesHooks/releaseDetailsView.js +20 -0
  56. package/dist/admin/contentReleasesHooks/releaseDetailsView.js.map +1 -0
  57. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs +18 -0
  58. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs.map +1 -0
  59. package/dist/admin/hooks/useI18n.js +78 -0
  60. package/dist/admin/hooks/useI18n.js.map +1 -0
  61. package/dist/admin/hooks/useI18n.mjs +57 -0
  62. package/dist/admin/hooks/useI18n.mjs.map +1 -0
  63. package/dist/admin/index.js +226 -0
  64. package/dist/admin/index.js.map +1 -0
  65. package/dist/admin/index.mjs +203 -0
  66. package/dist/admin/index.mjs.map +1 -0
  67. package/dist/admin/middlewares/extendCTBAttributeInitialData.js +71 -0
  68. package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -0
  69. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +69 -0
  70. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -0
  71. package/dist/admin/middlewares/extendCTBInitialData.js +40 -0
  72. package/dist/admin/middlewares/extendCTBInitialData.js.map +1 -0
  73. package/dist/admin/middlewares/extendCTBInitialData.mjs +38 -0
  74. package/dist/admin/middlewares/extendCTBInitialData.mjs.map +1 -0
  75. package/dist/admin/middlewares/rbac-middleware.js +49 -0
  76. package/dist/admin/middlewares/rbac-middleware.js.map +1 -0
  77. package/dist/admin/middlewares/rbac-middleware.mjs +28 -0
  78. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -0
  79. package/dist/admin/pages/SettingsPage.js +107 -0
  80. package/dist/admin/pages/SettingsPage.js.map +1 -0
  81. package/dist/admin/pages/SettingsPage.mjs +85 -0
  82. package/dist/admin/pages/SettingsPage.mjs.map +1 -0
  83. package/dist/admin/pluginId.js +6 -0
  84. package/dist/admin/pluginId.js.map +1 -0
  85. package/dist/admin/pluginId.mjs +4 -0
  86. package/dist/admin/pluginId.mjs.map +1 -0
  87. package/dist/admin/services/api.js +12 -0
  88. package/dist/admin/services/api.js.map +1 -0
  89. package/dist/admin/services/api.mjs +10 -0
  90. package/dist/admin/services/api.mjs.map +1 -0
  91. package/dist/admin/services/locales.js +70 -0
  92. package/dist/admin/services/locales.js.map +1 -0
  93. package/dist/admin/services/locales.mjs +64 -0
  94. package/dist/admin/services/locales.mjs.map +1 -0
  95. package/dist/admin/services/relations.js +23 -0
  96. package/dist/admin/services/relations.js.map +1 -0
  97. package/dist/admin/services/relations.mjs +21 -0
  98. package/dist/admin/services/relations.mjs.map +1 -0
  99. package/dist/admin/src/components/BulkLocaleActionModal.d.ts +16 -0
  100. package/dist/admin/src/components/CMHeaderActions.d.ts +36 -0
  101. package/dist/admin/src/components/CMListViewModalsAdditionalInformation.d.ts +4 -0
  102. package/dist/admin/src/components/CheckboxConfirmation.d.ts +20 -0
  103. package/dist/admin/src/components/CreateLocale.d.ts +29 -0
  104. package/dist/admin/src/components/DeleteLocale.d.ts +5 -0
  105. package/dist/admin/src/components/EditLocale.d.ts +14 -0
  106. package/dist/admin/src/components/LocaleListCell.d.ts +9 -0
  107. package/dist/admin/src/components/LocalePicker.d.ts +2 -0
  108. package/dist/admin/src/components/LocaleTable.d.ts +11 -0
  109. package/dist/admin/src/components/tests/CreateLocale.test.d.ts +1 -0
  110. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +1 -0
  111. package/dist/admin/src/components/tests/EditLocale.test.d.ts +1 -0
  112. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +1 -0
  113. package/dist/admin/src/constants.d.ts +22 -0
  114. package/dist/admin/src/contentManagerHooks/editView.d.ts +6 -0
  115. package/dist/admin/src/contentManagerHooks/listView.d.ts +22 -0
  116. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +40 -0
  117. package/dist/admin/src/hooks/useI18n.d.ts +16 -0
  118. package/dist/admin/src/index.d.ts +16 -0
  119. package/dist/admin/src/middlewares/extendCTBAttributeInitialData.d.ts +4 -0
  120. package/dist/admin/src/middlewares/extendCTBInitialData.d.ts +4 -0
  121. package/dist/admin/src/middlewares/rbac-middleware.d.ts +3 -0
  122. package/dist/admin/src/pages/SettingsPage.d.ts +3 -0
  123. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +1 -0
  124. package/dist/admin/src/pluginId.d.ts +1 -0
  125. package/dist/admin/src/services/api.d.ts +2 -0
  126. package/dist/admin/src/services/locales.d.ts +4 -0
  127. package/dist/admin/src/services/relations.d.ts +7 -0
  128. package/dist/admin/src/types.d.ts +9 -0
  129. package/dist/admin/src/utils/baseQuery.d.ts +5 -0
  130. package/dist/admin/src/utils/clean.d.ts +4 -0
  131. package/dist/admin/src/utils/fields.d.ts +7 -0
  132. package/dist/admin/src/utils/getTranslation.d.ts +2 -0
  133. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  134. package/dist/admin/src/utils/schemas.d.ts +434 -0
  135. package/dist/admin/src/utils/strings.d.ts +2 -0
  136. package/dist/admin/tests/server.d.ts +1 -0
  137. package/dist/admin/tests/utils.d.ts +6 -0
  138. package/dist/admin/translations/de.json.js +66 -0
  139. package/dist/admin/translations/de.json.js.map +1 -0
  140. package/dist/admin/translations/de.json.mjs +64 -0
  141. package/dist/admin/translations/de.json.mjs.map +1 -0
  142. package/dist/admin/translations/dk.json.js +66 -0
  143. package/dist/admin/translations/dk.json.js.map +1 -0
  144. package/dist/admin/translations/dk.json.mjs +64 -0
  145. package/dist/admin/translations/dk.json.mjs.map +1 -0
  146. package/dist/admin/translations/en.json.js +81 -0
  147. package/dist/admin/translations/en.json.js.map +1 -0
  148. package/dist/admin/translations/en.json.mjs +79 -0
  149. package/dist/admin/translations/en.json.mjs.map +1 -0
  150. package/dist/admin/translations/es.json.js +66 -0
  151. package/dist/admin/translations/es.json.js.map +1 -0
  152. package/dist/admin/translations/es.json.mjs +64 -0
  153. package/dist/admin/translations/es.json.mjs.map +1 -0
  154. package/dist/admin/translations/fr.json.js +66 -0
  155. package/dist/admin/translations/fr.json.js.map +1 -0
  156. package/dist/admin/translations/fr.json.mjs +64 -0
  157. package/dist/admin/translations/fr.json.mjs.map +1 -0
  158. package/dist/admin/translations/ko.json.js +65 -0
  159. package/dist/admin/translations/ko.json.js.map +1 -0
  160. package/dist/admin/translations/ko.json.mjs +63 -0
  161. package/dist/admin/translations/ko.json.mjs.map +1 -0
  162. package/dist/admin/translations/pl.json.js +66 -0
  163. package/dist/admin/translations/pl.json.js.map +1 -0
  164. package/dist/admin/translations/pl.json.mjs +64 -0
  165. package/dist/admin/translations/pl.json.mjs.map +1 -0
  166. package/dist/admin/translations/ru.json.js +68 -0
  167. package/dist/admin/translations/ru.json.js.map +1 -0
  168. package/dist/admin/translations/ru.json.mjs +66 -0
  169. package/dist/admin/translations/ru.json.mjs.map +1 -0
  170. package/dist/admin/translations/tr.json.js +66 -0
  171. package/dist/admin/translations/tr.json.js.map +1 -0
  172. package/dist/admin/translations/tr.json.mjs +64 -0
  173. package/dist/admin/translations/tr.json.mjs.map +1 -0
  174. package/dist/admin/translations/uk.json.js +82 -0
  175. package/dist/admin/translations/uk.json.js.map +1 -0
  176. package/dist/admin/translations/uk.json.mjs +80 -0
  177. package/dist/admin/translations/uk.json.mjs.map +1 -0
  178. package/dist/admin/translations/zh-Hans.json.js +57 -0
  179. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  180. package/dist/admin/translations/zh-Hans.json.mjs +55 -0
  181. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  182. package/dist/admin/translations/zh.json.js +66 -0
  183. package/dist/admin/translations/zh.json.js.map +1 -0
  184. package/dist/admin/translations/zh.json.mjs +64 -0
  185. package/dist/admin/translations/zh.json.mjs.map +1 -0
  186. package/dist/admin/utils/baseQuery.js +8 -0
  187. package/dist/admin/utils/baseQuery.js.map +1 -0
  188. package/dist/admin/utils/baseQuery.mjs +6 -0
  189. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  190. package/dist/admin/utils/clean.js +70 -0
  191. package/dist/admin/utils/clean.js.map +1 -0
  192. package/dist/admin/utils/clean.mjs +68 -0
  193. package/dist/admin/utils/clean.mjs.map +1 -0
  194. package/dist/admin/utils/fields.js +34 -0
  195. package/dist/admin/utils/fields.js.map +1 -0
  196. package/dist/admin/utils/fields.mjs +31 -0
  197. package/dist/admin/utils/fields.mjs.map +1 -0
  198. package/dist/admin/utils/getTranslation.js +8 -0
  199. package/dist/admin/utils/getTranslation.js.map +1 -0
  200. package/dist/admin/utils/getTranslation.mjs +6 -0
  201. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  202. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  203. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  204. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  205. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  206. package/dist/admin/utils/schemas.js +74 -0
  207. package/dist/admin/utils/schemas.js.map +1 -0
  208. package/dist/admin/utils/schemas.mjs +72 -0
  209. package/dist/admin/utils/schemas.mjs.map +1 -0
  210. package/dist/admin/utils/strings.js +6 -0
  211. package/dist/admin/utils/strings.js.map +1 -0
  212. package/dist/admin/utils/strings.mjs +4 -0
  213. package/dist/admin/utils/strings.mjs.map +1 -0
  214. package/dist/server/bootstrap.js +79 -0
  215. package/dist/server/bootstrap.js.map +1 -0
  216. package/dist/server/bootstrap.mjs +77 -0
  217. package/dist/server/bootstrap.mjs.map +1 -0
  218. package/dist/server/constants/index.js +29 -0
  219. package/dist/server/constants/index.js.map +1 -0
  220. package/dist/server/constants/index.mjs +25 -0
  221. package/dist/server/constants/index.mjs.map +1 -0
  222. package/dist/server/constants/iso-locales.json.js +2423 -0
  223. package/dist/server/constants/iso-locales.json.js.map +1 -0
  224. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  225. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  226. package/dist/server/content-types/index.js +10 -0
  227. package/dist/server/content-types/index.js.map +1 -0
  228. package/dist/server/content-types/index.mjs +8 -0
  229. package/dist/server/content-types/index.mjs.map +1 -0
  230. package/dist/server/content-types/locale/index.js +10 -0
  231. package/dist/server/content-types/locale/index.js.map +1 -0
  232. package/dist/server/content-types/locale/index.mjs +8 -0
  233. package/dist/server/content-types/locale/index.mjs.map +1 -0
  234. package/dist/server/content-types/locale/schema.json.js +46 -0
  235. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  236. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  237. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  238. package/dist/server/controllers/content-types.js +76 -0
  239. package/dist/server/controllers/content-types.js.map +1 -0
  240. package/dist/server/controllers/content-types.mjs +74 -0
  241. package/dist/server/controllers/content-types.mjs.map +1 -0
  242. package/dist/server/controllers/index.js +14 -0
  243. package/dist/server/controllers/index.js.map +1 -0
  244. package/dist/server/controllers/index.mjs +12 -0
  245. package/dist/server/controllers/index.mjs.map +1 -0
  246. package/dist/server/controllers/iso-locales.js +13 -0
  247. package/dist/server/controllers/iso-locales.js.map +1 -0
  248. package/dist/server/controllers/iso-locales.mjs +11 -0
  249. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  250. package/dist/server/controllers/locales.js +108 -0
  251. package/dist/server/controllers/locales.js.map +1 -0
  252. package/dist/server/controllers/locales.mjs +87 -0
  253. package/dist/server/controllers/locales.mjs.map +1 -0
  254. package/dist/server/controllers/validate-locale-creation.js +47 -0
  255. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  256. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  257. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  258. package/dist/server/domain/locale.js +11 -0
  259. package/dist/server/domain/locale.js.map +1 -0
  260. package/dist/server/domain/locale.mjs +9 -0
  261. package/dist/server/domain/locale.mjs.map +1 -0
  262. package/dist/server/graphql.js +115 -0
  263. package/dist/server/graphql.js.map +1 -0
  264. package/dist/server/graphql.mjs +113 -0
  265. package/dist/server/graphql.mjs.map +1 -0
  266. package/dist/server/index.js +20 -0
  267. package/dist/server/index.js.map +1 -0
  268. package/dist/server/index.mjs +18 -0
  269. package/dist/server/index.mjs.map +1 -0
  270. package/dist/server/register.js +79 -0
  271. package/dist/server/register.js.map +1 -0
  272. package/dist/server/register.mjs +77 -0
  273. package/dist/server/register.mjs.map +1 -0
  274. package/dist/server/routes/admin.js +102 -0
  275. package/dist/server/routes/admin.js.map +1 -0
  276. package/dist/server/routes/admin.mjs +100 -0
  277. package/dist/server/routes/admin.mjs.map +1 -0
  278. package/dist/server/routes/content-api.js +15 -0
  279. package/dist/server/routes/content-api.js.map +1 -0
  280. package/dist/server/routes/content-api.mjs +13 -0
  281. package/dist/server/routes/content-api.mjs.map +1 -0
  282. package/dist/server/routes/index.js +12 -0
  283. package/dist/server/routes/index.js.map +1 -0
  284. package/dist/server/routes/index.mjs +10 -0
  285. package/dist/server/routes/index.mjs.map +1 -0
  286. package/dist/server/services/content-types.js +157 -0
  287. package/dist/server/services/content-types.js.map +1 -0
  288. package/dist/server/services/content-types.mjs +155 -0
  289. package/dist/server/services/content-types.mjs.map +1 -0
  290. package/dist/server/services/index.js +22 -0
  291. package/dist/server/services/index.js.map +1 -0
  292. package/dist/server/services/index.mjs +20 -0
  293. package/dist/server/services/index.mjs.map +1 -0
  294. package/dist/server/services/iso-locales.js +12 -0
  295. package/dist/server/services/iso-locales.js.map +1 -0
  296. package/dist/server/services/iso-locales.mjs +10 -0
  297. package/dist/server/services/iso-locales.mjs.map +1 -0
  298. package/dist/server/services/locales.js +114 -0
  299. package/dist/server/services/locales.js.map +1 -0
  300. package/dist/server/services/locales.mjs +112 -0
  301. package/dist/server/services/locales.mjs.map +1 -0
  302. package/dist/server/services/localizations.js +68 -0
  303. package/dist/server/services/localizations.js.map +1 -0
  304. package/dist/server/services/localizations.mjs +66 -0
  305. package/dist/server/services/localizations.mjs.map +1 -0
  306. package/dist/server/services/metrics.js +30 -0
  307. package/dist/server/services/metrics.js.map +1 -0
  308. package/dist/server/services/metrics.mjs +28 -0
  309. package/dist/server/services/metrics.mjs.map +1 -0
  310. package/dist/server/services/permissions/actions.js +136 -0
  311. package/dist/server/services/permissions/actions.js.map +1 -0
  312. package/dist/server/services/permissions/actions.mjs +134 -0
  313. package/dist/server/services/permissions/actions.mjs.map +1 -0
  314. package/dist/server/services/permissions/engine.js +52 -0
  315. package/dist/server/services/permissions/engine.js.map +1 -0
  316. package/dist/server/services/permissions/engine.mjs +50 -0
  317. package/dist/server/services/permissions/engine.mjs.map +1 -0
  318. package/dist/server/services/permissions/sections-builder.js +45 -0
  319. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  320. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  321. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  322. package/dist/server/services/permissions.js +14 -0
  323. package/dist/server/services/permissions.js.map +1 -0
  324. package/dist/server/services/permissions.mjs +12 -0
  325. package/dist/server/services/permissions.mjs.map +1 -0
  326. package/dist/server/services/sanitize/index.js +34 -0
  327. package/dist/server/services/sanitize/index.js.map +1 -0
  328. package/dist/server/services/sanitize/index.mjs +32 -0
  329. package/dist/server/services/sanitize/index.mjs.map +1 -0
  330. package/dist/server/src/bootstrap.d.ts +3 -0
  331. package/dist/server/src/bootstrap.d.ts.map +1 -0
  332. package/dist/server/src/constants/index.d.ts +15 -0
  333. package/dist/server/src/constants/index.d.ts.map +1 -0
  334. package/dist/server/src/content-types/index.d.ts +37 -0
  335. package/dist/server/src/content-types/index.d.ts.map +1 -0
  336. package/dist/server/src/content-types/locale/index.d.ts +35 -0
  337. package/dist/server/src/content-types/locale/index.d.ts.map +1 -0
  338. package/dist/server/src/controllers/content-types.d.ts +6 -0
  339. package/dist/server/src/controllers/content-types.d.ts.map +1 -0
  340. package/dist/server/src/controllers/index.d.ts +10 -0
  341. package/dist/server/src/controllers/index.d.ts.map +1 -0
  342. package/dist/server/src/controllers/iso-locales.d.ts +4 -0
  343. package/dist/server/src/controllers/iso-locales.d.ts.map +1 -0
  344. package/dist/server/src/controllers/locales.d.ts +4 -0
  345. package/dist/server/src/controllers/locales.d.ts.map +1 -0
  346. package/dist/server/src/controllers/validate-locale-creation.d.ts +4 -0
  347. package/dist/server/src/controllers/validate-locale-creation.d.ts.map +1 -0
  348. package/dist/server/src/domain/locale.d.ts +11 -0
  349. package/dist/server/src/domain/locale.d.ts.map +1 -0
  350. package/dist/server/src/graphql.d.ts +8 -0
  351. package/dist/server/src/graphql.d.ts.map +1 -0
  352. package/dist/server/src/index.d.ts +156 -0
  353. package/dist/server/src/index.d.ts.map +1 -0
  354. package/dist/server/src/register.d.ts +6 -0
  355. package/dist/server/src/register.d.ts.map +1 -0
  356. package/dist/server/src/routes/admin.d.ts +18 -0
  357. package/dist/server/src/routes/admin.d.ts.map +1 -0
  358. package/dist/server/src/routes/content-api.d.ts +10 -0
  359. package/dist/server/src/routes/content-api.d.ts.map +1 -0
  360. package/dist/server/src/routes/index.d.ts +28 -0
  361. package/dist/server/src/routes/index.d.ts.map +1 -0
  362. package/dist/server/src/services/content-types.d.ts +13 -0
  363. package/dist/server/src/services/content-types.d.ts.map +1 -0
  364. package/dist/server/src/services/index.d.ts +81 -0
  365. package/dist/server/src/services/index.d.ts.map +1 -0
  366. package/dist/server/src/services/iso-locales.d.ts +10 -0
  367. package/dist/server/src/services/iso-locales.d.ts.map +1 -0
  368. package/dist/server/src/services/locales.d.ts +17 -0
  369. package/dist/server/src/services/locales.d.ts.map +1 -0
  370. package/dist/server/src/services/localizations.d.ts +8 -0
  371. package/dist/server/src/services/localizations.d.ts.map +1 -0
  372. package/dist/server/src/services/metrics.d.ts +8 -0
  373. package/dist/server/src/services/metrics.d.ts.map +1 -0
  374. package/dist/server/src/services/permissions/actions.d.ts +28 -0
  375. package/dist/server/src/services/permissions/actions.d.ts.map +1 -0
  376. package/dist/server/src/services/permissions/conditions.d.ts +15 -0
  377. package/dist/server/src/services/permissions/conditions.d.ts.map +1 -0
  378. package/dist/server/src/services/permissions/engine.d.ts +6 -0
  379. package/dist/server/src/services/permissions/engine.d.ts.map +1 -0
  380. package/dist/server/src/services/permissions/sections-builder.d.ts +6 -0
  381. package/dist/server/src/services/permissions/sections-builder.d.ts.map +1 -0
  382. package/dist/server/src/services/permissions.d.ts +40 -0
  383. package/dist/server/src/services/permissions.d.ts.map +1 -0
  384. package/dist/server/src/services/sanitize/index.d.ts +11 -0
  385. package/dist/server/src/services/sanitize/index.d.ts.map +1 -0
  386. package/dist/server/src/utils/index.d.ts +43 -0
  387. package/dist/server/src/utils/index.d.ts.map +1 -0
  388. package/dist/server/src/validation/content-types.d.ts +3 -0
  389. package/dist/server/src/validation/content-types.d.ts.map +1 -0
  390. package/dist/server/src/validation/locales.d.ts +12 -0
  391. package/dist/server/src/validation/locales.d.ts.map +1 -0
  392. package/dist/server/utils/index.js +16 -0
  393. package/dist/server/utils/index.js.map +1 -0
  394. package/dist/server/utils/index.mjs +13 -0
  395. package/dist/server/utils/index.mjs.map +1 -0
  396. package/dist/server/validation/content-types.js +18 -0
  397. package/dist/server/validation/content-types.js.map +1 -0
  398. package/dist/server/validation/content-types.mjs +16 -0
  399. package/dist/server/validation/content-types.mjs.map +1 -0
  400. package/dist/server/validation/locales.js +23 -0
  401. package/dist/server/validation/locales.js.map +1 -0
  402. package/dist/server/validation/locales.mjs +20 -0
  403. package/dist/server/validation/locales.mjs.map +1 -0
  404. package/dist/shared/contracts/content-manager.d.ts +46 -0
  405. package/dist/shared/contracts/iso-locales.d.ts +21 -0
  406. package/dist/shared/contracts/locales.d.ts +77 -0
  407. package/dist/shared/contracts/shared.d.ts +6 -0
  408. package/package.json +102 -0
@@ -0,0 +1,155 @@
1
+ import _ from 'lodash';
2
+ import { isNil, pipe, pick, prop, cloneDeep, isArray, has } from 'lodash/fp';
3
+ import { contentTypes as contentTypes$1, errors } from '@strapi/utils';
4
+ import { getService } from '../utils/index.mjs';
5
+
6
+ const { isRelationalAttribute, getVisibleAttributes, isTypedAttribute, getScalarAttributes, getRelationalAttributes } = contentTypes$1;
7
+ const { ApplicationError } = errors;
8
+ const hasLocalizedOption = (modelOrAttribute)=>{
9
+ return prop('pluginOptions.i18n.localized', modelOrAttribute) === true;
10
+ };
11
+ const getValidLocale = async (locale)=>{
12
+ const localesService = getService('locales');
13
+ if (isNil(locale)) {
14
+ return localesService.getDefaultLocale();
15
+ }
16
+ const foundLocale = await localesService.findByCode(locale);
17
+ if (!foundLocale) {
18
+ throw new ApplicationError('Locale not found');
19
+ }
20
+ return locale;
21
+ };
22
+ /**
23
+ * Returns whether an attribute is localized or not
24
+ * @param {*} attribute
25
+ * @returns
26
+ */ const isLocalizedAttribute = (attribute)=>{
27
+ return hasLocalizedOption(attribute) || isRelationalAttribute(attribute) || isTypedAttribute(attribute, 'uid');
28
+ };
29
+ /**
30
+ * Returns whether a model is localized or not
31
+ * @param {*} model
32
+ * @returns
33
+ */ const isLocalizedContentType = (model)=>{
34
+ return hasLocalizedOption(model);
35
+ };
36
+ /**
37
+ * Returns the list of attribute names that are not localized
38
+ * @param {object} model
39
+ * @returns {string[]}
40
+ */ const getNonLocalizedAttributes = (model)=>{
41
+ return getVisibleAttributes(model).filter((attrName)=>!isLocalizedAttribute(model.attributes[attrName]));
42
+ };
43
+ const removeId = (value)=>{
44
+ if (typeof value === 'object' && has('id', value)) {
45
+ delete value.id;
46
+ }
47
+ };
48
+ const removeIds = (model)=>(entry)=>removeIdsMut(model, cloneDeep(entry));
49
+ const removeIdsMut = (model, entry)=>{
50
+ if (isNil(entry)) {
51
+ return entry;
52
+ }
53
+ removeId(entry);
54
+ _.forEach(model.attributes, (attr, attrName)=>{
55
+ const value = entry[attrName];
56
+ if (attr.type === 'dynamiczone' && isArray(value)) {
57
+ value.forEach((compo)=>{
58
+ if (has('__component', compo)) {
59
+ const model = strapi.components[compo.__component];
60
+ removeIdsMut(model, compo);
61
+ }
62
+ });
63
+ } else if (attr.type === 'component') {
64
+ const model = strapi.components[attr.component];
65
+ if (isArray(value)) {
66
+ value.forEach((compo)=>removeIdsMut(model, compo));
67
+ } else {
68
+ removeIdsMut(model, value);
69
+ }
70
+ }
71
+ });
72
+ return entry;
73
+ };
74
+ /**
75
+ * Returns a copy of an entry picking only its non localized attributes
76
+ * @param {object} model
77
+ * @param {object} entry
78
+ * @returns {object}
79
+ */ const copyNonLocalizedAttributes = (model, entry)=>{
80
+ const nonLocalizedAttributes = getNonLocalizedAttributes(model);
81
+ return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);
82
+ };
83
+ /**
84
+ * Returns the list of attribute names that are localized
85
+ * @param {object} model
86
+ * @returns {string[]}
87
+ */ const getLocalizedAttributes = (model)=>{
88
+ return getVisibleAttributes(model).filter((attrName)=>isLocalizedAttribute(model.attributes[attrName]));
89
+ };
90
+ /**
91
+ * Fill non localized fields of an entry if there are nil
92
+ * @param {Object} entry entry to fill
93
+ * @param {Object} relatedEntry values used to fill
94
+ * @param {Object} options
95
+ * @param {Object} options.model corresponding model
96
+ */ const fillNonLocalizedAttributes = (entry, relatedEntry, { model })=>{
97
+ if (isNil(relatedEntry)) {
98
+ return;
99
+ }
100
+ const modelDef = strapi.getModel(model);
101
+ const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);
102
+ _.forEach(relatedEntryCopy, (value, field)=>{
103
+ if (isNil(entry[field])) {
104
+ entry[field] = value;
105
+ }
106
+ });
107
+ };
108
+ /**
109
+ * build the populate param to
110
+ * @param {String} modelUID uid of the model, could be of a content-type or a component
111
+ */ const getNestedPopulateOfNonLocalizedAttributes = (modelUID)=>{
112
+ const schema = strapi.getModel(modelUID);
113
+ const scalarAttributes = getScalarAttributes(schema);
114
+ const nonLocalizedAttributes = getNonLocalizedAttributes(schema);
115
+ const allAttributes = [
116
+ ...scalarAttributes,
117
+ ...nonLocalizedAttributes
118
+ ];
119
+ if (schema.modelType === 'component') {
120
+ // When called recursively on a non localized component we
121
+ // need to explicitly populate that components relations
122
+ allAttributes.push(...getRelationalAttributes(schema));
123
+ }
124
+ const currentAttributesToPopulate = allAttributes.filter((value, index, self)=>{
125
+ return self.indexOf(value) === index && self.lastIndexOf(value) === index;
126
+ });
127
+ const attributesToPopulate = [
128
+ ...currentAttributesToPopulate
129
+ ];
130
+ for (const attrName of currentAttributesToPopulate){
131
+ const attr = schema.attributes[attrName];
132
+ if (attr.type === 'component') {
133
+ const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map((nestedAttr)=>`${attrName}.${nestedAttr}`);
134
+ attributesToPopulate.push(...nestedPopulate);
135
+ } else if (attr.type === 'dynamiczone') {
136
+ attr.components.forEach((componentName)=>{
137
+ const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map((nestedAttr)=>`${attrName}.${nestedAttr}`);
138
+ attributesToPopulate.push(...nestedPopulate);
139
+ });
140
+ }
141
+ }
142
+ return attributesToPopulate;
143
+ };
144
+ const contentTypes = ()=>({
145
+ isLocalizedContentType,
146
+ getValidLocale,
147
+ getLocalizedAttributes,
148
+ getNonLocalizedAttributes,
149
+ copyNonLocalizedAttributes,
150
+ fillNonLocalizedAttributes,
151
+ getNestedPopulateOfNonLocalizedAttributes
152
+ });
153
+
154
+ export { contentTypes as default };
155
+ //# sourceMappingURL=content-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.mjs","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { pick, pipe, has, prop, isNil, cloneDeep, isArray } from 'lodash/fp';\nimport { errors, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport { getService } from '../utils';\n\nconst {\n isRelationalAttribute,\n getVisibleAttributes,\n isTypedAttribute,\n getScalarAttributes,\n getRelationalAttributes,\n} = contentTypeUtils;\nconst { ApplicationError } = errors;\n\nconst hasLocalizedOption = (modelOrAttribute: any) => {\n return prop('pluginOptions.i18n.localized', modelOrAttribute) === true;\n};\n\nconst getValidLocale = async (locale: any) => {\n const localesService = getService('locales');\n\n if (isNil(locale)) {\n return localesService.getDefaultLocale();\n }\n\n const foundLocale = await localesService.findByCode(locale);\n if (!foundLocale) {\n throw new ApplicationError('Locale not found');\n }\n\n return locale;\n};\n\n/**\n * Returns whether an attribute is localized or not\n * @param {*} attribute\n * @returns\n */\nconst isLocalizedAttribute = (attribute: any) => {\n return (\n hasLocalizedOption(attribute) ||\n isRelationalAttribute(attribute) ||\n isTypedAttribute(attribute, 'uid')\n );\n};\n\n/**\n * Returns whether a model is localized or not\n * @param {*} model\n * @returns\n */\nconst isLocalizedContentType = (model: any) => {\n return hasLocalizedOption(model);\n};\n\n/**\n * Returns the list of attribute names that are not localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getNonLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter(\n (attrName) => !isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\nconst removeId = (value: any) => {\n if (typeof value === 'object' && has('id', value)) {\n delete value.id;\n }\n};\n\nconst removeIds = (model: any) => (entry: any) => removeIdsMut(model, cloneDeep(entry));\n\nconst removeIdsMut = (model: any, entry: any) => {\n if (isNil(entry)) {\n return entry;\n }\n\n removeId(entry);\n\n _.forEach(model.attributes, (attr, attrName) => {\n const value = entry[attrName];\n if (attr.type === 'dynamiczone' && isArray(value)) {\n value.forEach((compo) => {\n if (has('__component', compo)) {\n const model = strapi.components[compo.__component];\n removeIdsMut(model, compo);\n }\n });\n } else if (attr.type === 'component') {\n const model = strapi.components[attr.component];\n if (isArray(value)) {\n value.forEach((compo) => removeIdsMut(model, compo));\n } else {\n removeIdsMut(model, value);\n }\n }\n });\n\n return entry;\n};\n\n/**\n * Returns a copy of an entry picking only its non localized attributes\n * @param {object} model\n * @param {object} entry\n * @returns {object}\n */\nconst copyNonLocalizedAttributes = (model: any, entry: any) => {\n const nonLocalizedAttributes = getNonLocalizedAttributes(model);\n\n return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);\n};\n\n/**\n * Returns the list of attribute names that are localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter((attrName) =>\n isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\n/**\n * Fill non localized fields of an entry if there are nil\n * @param {Object} entry entry to fill\n * @param {Object} relatedEntry values used to fill\n * @param {Object} options\n * @param {Object} options.model corresponding model\n */\nconst fillNonLocalizedAttributes = (entry: any, relatedEntry: any, { model }: any) => {\n if (isNil(relatedEntry)) {\n return;\n }\n\n const modelDef = strapi.getModel(model);\n const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);\n\n _.forEach(relatedEntryCopy, (value, field) => {\n if (isNil(entry[field])) {\n entry[field] = value;\n }\n });\n};\n\n/**\n * build the populate param to\n * @param {String} modelUID uid of the model, could be of a content-type or a component\n */\nconst getNestedPopulateOfNonLocalizedAttributes = (modelUID: any) => {\n const schema = strapi.getModel(modelUID);\n const scalarAttributes = getScalarAttributes(schema);\n const nonLocalizedAttributes = getNonLocalizedAttributes(schema);\n\n const allAttributes = [...scalarAttributes, ...nonLocalizedAttributes];\n if (schema.modelType === 'component') {\n // When called recursively on a non localized component we\n // need to explicitly populate that components relations\n allAttributes.push(...getRelationalAttributes(schema));\n }\n\n const currentAttributesToPopulate = allAttributes.filter((value, index, self) => {\n return self.indexOf(value) === index && self.lastIndexOf(value) === index;\n });\n\n const attributesToPopulate = [...currentAttributesToPopulate];\n for (const attrName of currentAttributesToPopulate) {\n const attr = schema.attributes[attrName];\n if (attr.type === 'component') {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n } else if (attr.type === 'dynamiczone') {\n attr.components.forEach((componentName) => {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n });\n }\n }\n\n return attributesToPopulate;\n};\n\nconst contentTypes = () => ({\n isLocalizedContentType,\n getValidLocale,\n getLocalizedAttributes,\n getNonLocalizedAttributes,\n copyNonLocalizedAttributes,\n fillNonLocalizedAttributes,\n getNestedPopulateOfNonLocalizedAttributes,\n});\n\ntype ContentTypesService = typeof contentTypes;\n\nexport default contentTypes;\nexport { ContentTypesService };\n"],"names":["isRelationalAttribute","getVisibleAttributes","isTypedAttribute","getScalarAttributes","getRelationalAttributes","contentTypeUtils","ApplicationError","errors","hasLocalizedOption","modelOrAttribute","prop","getValidLocale","locale","localesService","getService","isNil","getDefaultLocale","foundLocale","findByCode","isLocalizedAttribute","attribute","isLocalizedContentType","model","getNonLocalizedAttributes","filter","attrName","attributes","removeId","value","has","id","removeIds","entry","removeIdsMut","cloneDeep","_","forEach","attr","type","isArray","compo","strapi","components","__component","component","copyNonLocalizedAttributes","nonLocalizedAttributes","pipe","pick","getLocalizedAttributes","fillNonLocalizedAttributes","relatedEntry","modelDef","getModel","relatedEntryCopy","field","getNestedPopulateOfNonLocalizedAttributes","modelUID","schema","scalarAttributes","allAttributes","modelType","push","currentAttributesToPopulate","index","self","indexOf","lastIndexOf","attributesToPopulate","nestedPopulate","map","nestedAttr","componentName","contentTypes"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var permissions = require('./permissions.js');
4
+ var metrics = require('./metrics.js');
5
+ var localizations = require('./localizations.js');
6
+ var locales = require('./locales.js');
7
+ var isoLocales = require('./iso-locales.js');
8
+ var contentTypes = require('./content-types.js');
9
+ var index = require('./sanitize/index.js');
10
+
11
+ var services = {
12
+ permissions,
13
+ metrics,
14
+ localizations,
15
+ locales,
16
+ sanitize: index,
17
+ 'iso-locales': isoLocales,
18
+ 'content-types': contentTypes
19
+ };
20
+
21
+ module.exports = services;
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import permissions from './permissions';\nimport metrics from './metrics';\nimport localizations from './localizations';\nimport locales from './locales';\nimport isoLocales from './iso-locales';\nimport contentTypes from './content-types';\nimport sanitize from './sanitize';\n\nexport default {\n permissions,\n metrics,\n localizations,\n locales,\n sanitize,\n 'iso-locales': isoLocales,\n 'content-types': contentTypes,\n};\n"],"names":["permissions","metrics","localizations","locales","sanitize","isoLocales","contentTypes"],"mappings":";;;;;;;;;;AAQA,eAAe;AACbA,IAAAA,WAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,aAAAA;AACAC,IAAAA,OAAAA;AACAC,cAAAA,KAAAA;IACA,aAAeC,EAAAA,UAAAA;IACf,eAAiBC,EAAAA;AACnB,CAAE;;;;"}
@@ -0,0 +1,20 @@
1
+ import permissions from './permissions.mjs';
2
+ import metrics from './metrics.mjs';
3
+ import localizations from './localizations.mjs';
4
+ import locales from './locales.mjs';
5
+ import isoLocalesService from './iso-locales.mjs';
6
+ import contentTypes from './content-types.mjs';
7
+ import sanitize from './sanitize/index.mjs';
8
+
9
+ var services = {
10
+ permissions,
11
+ metrics,
12
+ localizations,
13
+ locales,
14
+ sanitize,
15
+ 'iso-locales': isoLocalesService,
16
+ 'content-types': contentTypes
17
+ };
18
+
19
+ export { services as default };
20
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import permissions from './permissions';\nimport metrics from './metrics';\nimport localizations from './localizations';\nimport locales from './locales';\nimport isoLocales from './iso-locales';\nimport contentTypes from './content-types';\nimport sanitize from './sanitize';\n\nexport default {\n permissions,\n metrics,\n localizations,\n locales,\n sanitize,\n 'iso-locales': isoLocales,\n 'content-types': contentTypes,\n};\n"],"names":["permissions","metrics","localizations","locales","sanitize","isoLocales","contentTypes"],"mappings":";;;;;;;;AAQA,eAAe;AACbA,IAAAA,WAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,aAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,QAAAA;IACA,aAAeC,EAAAA,iBAAAA;IACf,eAAiBC,EAAAA;AACnB,CAAE;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ require('../constants/index.js');
4
+ var isoLocales = require('../constants/iso-locales.json.js');
5
+
6
+ const getIsoLocales = ()=>isoLocales;
7
+ const isoLocalesService = ()=>({
8
+ getIsoLocales
9
+ });
10
+
11
+ module.exports = isoLocalesService;
12
+ //# sourceMappingURL=iso-locales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso-locales.js","sources":["../../../server/src/services/iso-locales.ts"],"sourcesContent":["import { isoLocales } from '../constants';\n\nconst getIsoLocales = () => isoLocales;\n\nconst isoLocalesService = () => ({\n getIsoLocales,\n});\n\ntype ISOLocalesService = typeof isoLocalesService;\n\nexport default isoLocalesService;\nexport type { ISOLocalesService };\n"],"names":["getIsoLocales","isoLocales","isoLocalesService"],"mappings":";;;;;AAEA,MAAMA,gBAAgB,IAAMC,UAAAA;AAEtBC,MAAAA,iBAAAA,GAAoB,KAAO;AAC/BF,QAAAA;KACF;;;;"}
@@ -0,0 +1,10 @@
1
+ import '../constants/index.mjs';
2
+ import isoLocales from '../constants/iso-locales.json.mjs';
3
+
4
+ const getIsoLocales = ()=>isoLocales;
5
+ const isoLocalesService = ()=>({
6
+ getIsoLocales
7
+ });
8
+
9
+ export { isoLocalesService as default };
10
+ //# sourceMappingURL=iso-locales.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso-locales.mjs","sources":["../../../server/src/services/iso-locales.ts"],"sourcesContent":["import { isoLocales } from '../constants';\n\nconst getIsoLocales = () => isoLocales;\n\nconst isoLocalesService = () => ({\n getIsoLocales,\n});\n\ntype ISOLocalesService = typeof isoLocalesService;\n\nexport default isoLocalesService;\nexport type { ISOLocalesService };\n"],"names":["getIsoLocales","isoLocales","isoLocalesService"],"mappings":";;;AAEA,MAAMA,gBAAgB,IAAMC,UAAAA;AAEtBC,MAAAA,iBAAAA,GAAoB,KAAO;AAC/BF,QAAAA;KACF;;;;"}
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var index$1 = require('../constants/index.js');
5
+ var index = require('../utils/index.js');
6
+
7
+ const find = (params = {})=>strapi.db.query('plugin::i18n.locale').findMany({
8
+ where: params
9
+ });
10
+ const findById = (id)=>strapi.db.query('plugin::i18n.locale').findOne({
11
+ where: {
12
+ id
13
+ }
14
+ });
15
+ const findByCode = (code)=>strapi.db.query('plugin::i18n.locale').findOne({
16
+ where: {
17
+ code
18
+ }
19
+ });
20
+ const count = (params = {})=>strapi.db.query('plugin::i18n.locale').count({
21
+ where: params
22
+ });
23
+ const create = async (locale)=>{
24
+ const result = await strapi.db.query('plugin::i18n.locale').create({
25
+ data: locale
26
+ });
27
+ index.getService('metrics').sendDidUpdateI18nLocalesEvent();
28
+ return result;
29
+ };
30
+ const update = async (params, updates)=>{
31
+ const result = await strapi.db.query('plugin::i18n.locale').update({
32
+ where: params,
33
+ data: updates
34
+ });
35
+ index.getService('metrics').sendDidUpdateI18nLocalesEvent();
36
+ return result;
37
+ };
38
+ const deleteFn = async ({ id })=>{
39
+ const localeToDelete = await findById(id);
40
+ if (localeToDelete) {
41
+ await deleteAllLocalizedEntriesFor({
42
+ locale: localeToDelete.code
43
+ });
44
+ const result = await strapi.db.query('plugin::i18n.locale').delete({
45
+ where: {
46
+ id
47
+ }
48
+ });
49
+ index.getService('metrics').sendDidUpdateI18nLocalesEvent();
50
+ return result;
51
+ }
52
+ return localeToDelete;
53
+ };
54
+ const setDefaultLocale = ({ code })=>index.getCoreStore().set({
55
+ key: 'default_locale',
56
+ value: code
57
+ });
58
+ const getDefaultLocale = ()=>index.getCoreStore().get({
59
+ key: 'default_locale'
60
+ });
61
+ const setIsDefault = async (locales)=>{
62
+ if (fp.isNil(locales)) {
63
+ return locales;
64
+ }
65
+ const actualDefault = await getDefaultLocale();
66
+ if (Array.isArray(locales)) {
67
+ return locales.map((locale)=>({
68
+ ...locale,
69
+ isDefault: actualDefault === locale.code
70
+ }));
71
+ }
72
+ // single locale
73
+ return {
74
+ ...locales,
75
+ isDefault: actualDefault === locales.code
76
+ };
77
+ };
78
+ const initDefaultLocale = async ()=>{
79
+ const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();
80
+ if (existingLocalesNb === 0) {
81
+ await create(index$1.DEFAULT_LOCALE);
82
+ await setDefaultLocale({
83
+ code: index$1.DEFAULT_LOCALE.code
84
+ });
85
+ }
86
+ };
87
+ const deleteAllLocalizedEntriesFor = async ({ locale })=>{
88
+ const { isLocalizedContentType } = index.getService('content-types');
89
+ const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);
90
+ for (const model of localizedModels){
91
+ // FIXME: delete many content & their associations
92
+ await strapi.db.query(model.uid).deleteMany({
93
+ where: {
94
+ locale
95
+ }
96
+ });
97
+ }
98
+ };
99
+ const locales = ()=>({
100
+ find,
101
+ findById,
102
+ findByCode,
103
+ create,
104
+ update,
105
+ count,
106
+ setDefaultLocale,
107
+ getDefaultLocale,
108
+ setIsDefault,
109
+ delete: deleteFn,
110
+ initDefaultLocale
111
+ });
112
+
113
+ module.exports = locales;
114
+ //# sourceMappingURL=locales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.js","sources":["../../../server/src/services/locales.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { DEFAULT_LOCALE } from '../constants';\nimport { getService, getCoreStore } from '../utils';\n\nconst find = (params: any = {}) =>\n strapi.db.query('plugin::i18n.locale').findMany({ where: params });\n\nconst findById = (id: any) => strapi.db.query('plugin::i18n.locale').findOne({ where: { id } });\n\nconst findByCode = (code: any) =>\n strapi.db.query('plugin::i18n.locale').findOne({ where: { code } });\n\nconst count = (params: any = {}) => strapi.db.query('plugin::i18n.locale').count({ where: params });\n\nconst create = async (locale: any) => {\n const result = await strapi.db.query('plugin::i18n.locale').create({ data: locale });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst update = async (params: any, updates: any) => {\n const result = await strapi.db\n .query('plugin::i18n.locale')\n .update({ where: params, data: updates });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst deleteFn = async ({ id }: any) => {\n const localeToDelete = await findById(id);\n\n if (localeToDelete) {\n await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });\n const result = await strapi.db.query('plugin::i18n.locale').delete({ where: { id } });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n }\n\n return localeToDelete;\n};\n\nconst setDefaultLocale = ({ code }: any) =>\n getCoreStore().set({ key: 'default_locale', value: code });\n\nconst getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });\n\nconst setIsDefault = async (locales: any) => {\n if (isNil(locales)) {\n return locales;\n }\n\n const actualDefault = await getDefaultLocale();\n\n if (Array.isArray(locales)) {\n return locales.map((locale) => ({ ...locale, isDefault: actualDefault === locale.code }));\n }\n // single locale\n return { ...locales, isDefault: actualDefault === locales.code };\n};\n\nconst initDefaultLocale = async () => {\n const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();\n if (existingLocalesNb === 0) {\n await create(DEFAULT_LOCALE);\n await setDefaultLocale({ code: DEFAULT_LOCALE.code });\n }\n};\n\nconst deleteAllLocalizedEntriesFor = async ({ locale }: any) => {\n const { isLocalizedContentType } = getService('content-types');\n\n const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);\n\n for (const model of localizedModels) {\n // FIXME: delete many content & their associations\n await strapi.db.query(model.uid).deleteMany({ where: { locale } });\n }\n};\n\nconst locales = () => ({\n find,\n findById,\n findByCode,\n create,\n update,\n count,\n setDefaultLocale,\n getDefaultLocale,\n setIsDefault,\n delete: deleteFn,\n initDefaultLocale,\n});\n\ntype LocaleService = typeof locales;\n\nexport default locales;\nexport type { LocaleService };\n"],"names":["find","params","strapi","db","query","findMany","where","findById","id","findOne","findByCode","code","count","create","locale","result","data","getService","sendDidUpdateI18nLocalesEvent","update","updates","deleteFn","localeToDelete","deleteAllLocalizedEntriesFor","delete","setDefaultLocale","getCoreStore","set","key","value","getDefaultLocale","get","setIsDefault","locales","isNil","actualDefault","Array","isArray","map","isDefault","initDefaultLocale","existingLocalesNb","DEFAULT_LOCALE","isLocalizedContentType","localizedModels","Object","values","contentTypes","filter","model","uid","deleteMany"],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { isNil } from 'lodash/fp';
2
+ import { DEFAULT_LOCALE } from '../constants/index.mjs';
3
+ import { getService, getCoreStore } from '../utils/index.mjs';
4
+
5
+ const find = (params = {})=>strapi.db.query('plugin::i18n.locale').findMany({
6
+ where: params
7
+ });
8
+ const findById = (id)=>strapi.db.query('plugin::i18n.locale').findOne({
9
+ where: {
10
+ id
11
+ }
12
+ });
13
+ const findByCode = (code)=>strapi.db.query('plugin::i18n.locale').findOne({
14
+ where: {
15
+ code
16
+ }
17
+ });
18
+ const count = (params = {})=>strapi.db.query('plugin::i18n.locale').count({
19
+ where: params
20
+ });
21
+ const create = async (locale)=>{
22
+ const result = await strapi.db.query('plugin::i18n.locale').create({
23
+ data: locale
24
+ });
25
+ getService('metrics').sendDidUpdateI18nLocalesEvent();
26
+ return result;
27
+ };
28
+ const update = async (params, updates)=>{
29
+ const result = await strapi.db.query('plugin::i18n.locale').update({
30
+ where: params,
31
+ data: updates
32
+ });
33
+ getService('metrics').sendDidUpdateI18nLocalesEvent();
34
+ return result;
35
+ };
36
+ const deleteFn = async ({ id })=>{
37
+ const localeToDelete = await findById(id);
38
+ if (localeToDelete) {
39
+ await deleteAllLocalizedEntriesFor({
40
+ locale: localeToDelete.code
41
+ });
42
+ const result = await strapi.db.query('plugin::i18n.locale').delete({
43
+ where: {
44
+ id
45
+ }
46
+ });
47
+ getService('metrics').sendDidUpdateI18nLocalesEvent();
48
+ return result;
49
+ }
50
+ return localeToDelete;
51
+ };
52
+ const setDefaultLocale = ({ code })=>getCoreStore().set({
53
+ key: 'default_locale',
54
+ value: code
55
+ });
56
+ const getDefaultLocale = ()=>getCoreStore().get({
57
+ key: 'default_locale'
58
+ });
59
+ const setIsDefault = async (locales)=>{
60
+ if (isNil(locales)) {
61
+ return locales;
62
+ }
63
+ const actualDefault = await getDefaultLocale();
64
+ if (Array.isArray(locales)) {
65
+ return locales.map((locale)=>({
66
+ ...locale,
67
+ isDefault: actualDefault === locale.code
68
+ }));
69
+ }
70
+ // single locale
71
+ return {
72
+ ...locales,
73
+ isDefault: actualDefault === locales.code
74
+ };
75
+ };
76
+ const initDefaultLocale = async ()=>{
77
+ const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();
78
+ if (existingLocalesNb === 0) {
79
+ await create(DEFAULT_LOCALE);
80
+ await setDefaultLocale({
81
+ code: DEFAULT_LOCALE.code
82
+ });
83
+ }
84
+ };
85
+ const deleteAllLocalizedEntriesFor = async ({ locale })=>{
86
+ const { isLocalizedContentType } = getService('content-types');
87
+ const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);
88
+ for (const model of localizedModels){
89
+ // FIXME: delete many content & their associations
90
+ await strapi.db.query(model.uid).deleteMany({
91
+ where: {
92
+ locale
93
+ }
94
+ });
95
+ }
96
+ };
97
+ const locales = ()=>({
98
+ find,
99
+ findById,
100
+ findByCode,
101
+ create,
102
+ update,
103
+ count,
104
+ setDefaultLocale,
105
+ getDefaultLocale,
106
+ setIsDefault,
107
+ delete: deleteFn,
108
+ initDefaultLocale
109
+ });
110
+
111
+ export { locales as default };
112
+ //# sourceMappingURL=locales.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.mjs","sources":["../../../server/src/services/locales.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { DEFAULT_LOCALE } from '../constants';\nimport { getService, getCoreStore } from '../utils';\n\nconst find = (params: any = {}) =>\n strapi.db.query('plugin::i18n.locale').findMany({ where: params });\n\nconst findById = (id: any) => strapi.db.query('plugin::i18n.locale').findOne({ where: { id } });\n\nconst findByCode = (code: any) =>\n strapi.db.query('plugin::i18n.locale').findOne({ where: { code } });\n\nconst count = (params: any = {}) => strapi.db.query('plugin::i18n.locale').count({ where: params });\n\nconst create = async (locale: any) => {\n const result = await strapi.db.query('plugin::i18n.locale').create({ data: locale });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst update = async (params: any, updates: any) => {\n const result = await strapi.db\n .query('plugin::i18n.locale')\n .update({ where: params, data: updates });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst deleteFn = async ({ id }: any) => {\n const localeToDelete = await findById(id);\n\n if (localeToDelete) {\n await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });\n const result = await strapi.db.query('plugin::i18n.locale').delete({ where: { id } });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n }\n\n return localeToDelete;\n};\n\nconst setDefaultLocale = ({ code }: any) =>\n getCoreStore().set({ key: 'default_locale', value: code });\n\nconst getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });\n\nconst setIsDefault = async (locales: any) => {\n if (isNil(locales)) {\n return locales;\n }\n\n const actualDefault = await getDefaultLocale();\n\n if (Array.isArray(locales)) {\n return locales.map((locale) => ({ ...locale, isDefault: actualDefault === locale.code }));\n }\n // single locale\n return { ...locales, isDefault: actualDefault === locales.code };\n};\n\nconst initDefaultLocale = async () => {\n const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();\n if (existingLocalesNb === 0) {\n await create(DEFAULT_LOCALE);\n await setDefaultLocale({ code: DEFAULT_LOCALE.code });\n }\n};\n\nconst deleteAllLocalizedEntriesFor = async ({ locale }: any) => {\n const { isLocalizedContentType } = getService('content-types');\n\n const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);\n\n for (const model of localizedModels) {\n // FIXME: delete many content & their associations\n await strapi.db.query(model.uid).deleteMany({ where: { locale } });\n }\n};\n\nconst locales = () => ({\n find,\n findById,\n findByCode,\n create,\n update,\n count,\n setDefaultLocale,\n getDefaultLocale,\n setIsDefault,\n delete: deleteFn,\n initDefaultLocale,\n});\n\ntype LocaleService = typeof locales;\n\nexport default locales;\nexport type { LocaleService };\n"],"names":["find","params","strapi","db","query","findMany","where","findById","id","findOne","findByCode","code","count","create","locale","result","data","getService","sendDidUpdateI18nLocalesEvent","update","updates","deleteFn","localeToDelete","deleteAllLocalizedEntriesFor","delete","setDefaultLocale","getCoreStore","set","key","value","getDefaultLocale","get","setIsDefault","locales","isNil","actualDefault","Array","isArray","map","isDefault","initDefaultLocale","existingLocalesNb","DEFAULT_LOCALE","isLocalizedContentType","localizedModels","Object","values","contentTypes","filter","model","uid","deleteMany"],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var utils = require('@strapi/utils');
5
+ var index = require('../utils/index.js');
6
+
7
+ /**
8
+ * Update non localized fields of all the related localizations of an entry with the entry values
9
+ */ const syncNonLocalizedAttributes = async (sourceEntry, model)=>{
10
+ const { copyNonLocalizedAttributes } = index.getService('content-types');
11
+ const nonLocalizedAttributes = copyNonLocalizedAttributes(model, sourceEntry);
12
+ if (fp.isEmpty(nonLocalizedAttributes)) {
13
+ return;
14
+ }
15
+ const uid = model.uid;
16
+ const documentId = sourceEntry.documentId;
17
+ const locale = sourceEntry.locale;
18
+ const status = sourceEntry?.publishedAt ? 'published' : 'draft';
19
+ // Find all the entries that need to be updated
20
+ // this is every other entry of the document in the same status but a different locale
21
+ const localeEntriesToUpdate = await strapi.db.query(uid).findMany({
22
+ where: {
23
+ documentId,
24
+ publishedAt: status === 'published' ? {
25
+ $ne: null
26
+ } : null,
27
+ locale: {
28
+ $ne: locale
29
+ }
30
+ },
31
+ select: [
32
+ 'locale',
33
+ 'id'
34
+ ]
35
+ });
36
+ const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);
37
+ await utils.async.map(localeEntriesToUpdate, async (entry)=>{
38
+ const transformedData = await strapi.documents.utils.transformData(fp.cloneDeep(nonLocalizedAttributes), {
39
+ uid,
40
+ status,
41
+ locale: entry.locale,
42
+ allowMissingId: true
43
+ });
44
+ // Update or create non localized components for the entry
45
+ const componentData = await strapi.documents(uid).updateComponents(entry, transformedData);
46
+ // Update every other locale entry of this documentId in the same status
47
+ await strapi.db.query(uid).update({
48
+ where: {
49
+ documentId,
50
+ publishedAt: status === 'published' ? {
51
+ $ne: null
52
+ } : null,
53
+ locale: {
54
+ $eq: entry.locale
55
+ }
56
+ },
57
+ // The data we send to the update function is the entry data merged with
58
+ // the updated component data
59
+ data: Object.assign(fp.cloneDeep(entryData), componentData)
60
+ });
61
+ });
62
+ };
63
+ const localizations = ()=>({
64
+ syncNonLocalizedAttributes
65
+ });
66
+
67
+ module.exports = localizations;
68
+ //# sourceMappingURL=localizations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localizations.js","sources":["../../../server/src/services/localizations.ts"],"sourcesContent":["import { cloneDeep, isEmpty } from 'lodash/fp';\n\nimport type { Schema } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from '../utils';\n\n/**\n * Update non localized fields of all the related localizations of an entry with the entry values\n */\nconst syncNonLocalizedAttributes = async (sourceEntry: any, model: Schema.ContentType) => {\n const { copyNonLocalizedAttributes } = getService('content-types');\n\n const nonLocalizedAttributes = copyNonLocalizedAttributes(model, sourceEntry);\n if (isEmpty(nonLocalizedAttributes)) {\n return;\n }\n\n const uid = model.uid;\n const documentId = sourceEntry.documentId;\n const locale = sourceEntry.locale;\n const status = sourceEntry?.publishedAt ? 'published' : 'draft';\n\n // Find all the entries that need to be updated\n // this is every other entry of the document in the same status but a different locale\n const localeEntriesToUpdate = await strapi.db.query(uid).findMany({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $ne: locale },\n },\n select: ['locale', 'id'],\n });\n\n const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);\n\n await async.map(localeEntriesToUpdate, async (entry: any) => {\n const transformedData = await strapi.documents.utils.transformData(\n cloneDeep(nonLocalizedAttributes),\n {\n uid,\n status,\n locale: entry.locale,\n allowMissingId: true,\n }\n );\n\n // Update or create non localized components for the entry\n const componentData = await strapi\n .documents(uid)\n .updateComponents(entry, transformedData as any);\n\n // Update every other locale entry of this documentId in the same status\n await strapi.db.query(uid).update({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $eq: entry.locale },\n },\n // The data we send to the update function is the entry data merged with\n // the updated component data\n data: Object.assign(cloneDeep(entryData), componentData),\n });\n });\n};\n\nconst localizations = () => ({\n syncNonLocalizedAttributes,\n});\n\ntype LocalizationsService = typeof localizations;\n\nexport default localizations;\nexport type { LocalizationsService };\n"],"names":["syncNonLocalizedAttributes","sourceEntry","model","copyNonLocalizedAttributes","getService","nonLocalizedAttributes","isEmpty","uid","documentId","locale","status","publishedAt","localeEntriesToUpdate","strapi","db","query","findMany","where","$ne","select","entryData","documents","omitComponentData","async","map","entry","transformedData","utils","transformData","cloneDeep","allowMissingId","componentData","updateComponents","update","$eq","data","Object","assign","localizations"],"mappings":";;;;;;AAMA;;IAGA,MAAMA,0BAA6B,GAAA,OAAOC,WAAkBC,EAAAA,KAAAA,GAAAA;AAC1D,IAAA,MAAM,EAAEC,0BAA0B,EAAE,GAAGC,gBAAW,CAAA,eAAA,CAAA;IAElD,MAAMC,sBAAAA,GAAyBF,2BAA2BD,KAAOD,EAAAA,WAAAA,CAAAA;AACjE,IAAA,IAAIK,WAAQD,sBAAyB,CAAA,EAAA;AACnC,QAAA;AACF;IAEA,MAAME,GAAAA,GAAML,MAAMK,GAAG;IACrB,MAAMC,UAAAA,GAAaP,YAAYO,UAAU;IACzC,MAAMC,MAAAA,GAASR,YAAYQ,MAAM;IACjC,MAAMC,MAAAA,GAAST,WAAaU,EAAAA,WAAAA,GAAc,WAAc,GAAA,OAAA;;;IAIxD,MAAMC,qBAAAA,GAAwB,MAAMC,MAAOC,CAAAA,EAAE,CAACC,KAAK,CAACR,GAAKS,CAAAA,CAAAA,QAAQ,CAAC;QAChEC,KAAO,EAAA;AACLT,YAAAA,UAAAA;AACAG,YAAAA,WAAAA,EAAaD,WAAW,WAAc,GAAA;gBAAEQ,GAAK,EAAA;aAAS,GAAA,IAAA;YACtDT,MAAQ,EAAA;gBAAES,GAAKT,EAAAA;AAAO;AACxB,SAAA;QACAU,MAAQ,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAK;AAC1B,KAAA,CAAA;AAEA,IAAA,MAAMC,YAAY,MAAMP,MAAAA,CAAOQ,SAAS,CAACd,GAAAA,CAAAA,CAAKe,iBAAiB,CAACjB,sBAAAA,CAAAA;AAEhE,IAAA,MAAMkB,WAAMC,CAAAA,GAAG,CAACZ,qBAAAA,EAAuB,OAAOa,KAAAA,GAAAA;QAC5C,MAAMC,eAAAA,GAAkB,MAAMb,MAAAA,CAAOQ,SAAS,CAACM,KAAK,CAACC,aAAa,CAChEC,YAAAA,CAAUxB,sBACV,CAAA,EAAA;AACEE,YAAAA,GAAAA;AACAG,YAAAA,MAAAA;AACAD,YAAAA,MAAAA,EAAQgB,MAAMhB,MAAM;YACpBqB,cAAgB,EAAA;AAClB,SAAA,CAAA;;QAIF,MAAMC,aAAAA,GAAgB,MAAMlB,MACzBQ,CAAAA,SAAS,CAACd,GACVyB,CAAAA,CAAAA,gBAAgB,CAACP,KAAOC,EAAAA,eAAAA,CAAAA;;AAG3B,QAAA,MAAMb,OAAOC,EAAE,CAACC,KAAK,CAACR,GAAAA,CAAAA,CAAK0B,MAAM,CAAC;YAChChB,KAAO,EAAA;AACLT,gBAAAA,UAAAA;AACAG,gBAAAA,WAAAA,EAAaD,WAAW,WAAc,GAAA;oBAAEQ,GAAK,EAAA;iBAAS,GAAA,IAAA;gBACtDT,MAAQ,EAAA;AAAEyB,oBAAAA,GAAAA,EAAKT,MAAMhB;AAAO;AAC9B,aAAA;;;AAGA0B,YAAAA,IAAAA,EAAMC,MAAOC,CAAAA,MAAM,CAACR,YAAAA,CAAUT,SAAYW,CAAAA,EAAAA,aAAAA;AAC5C,SAAA,CAAA;AACF,KAAA,CAAA;AACF,CAAA;AAEMO,MAAAA,aAAAA,GAAgB,KAAO;AAC3BtC,QAAAA;KACF;;;;"}