@strapi/i18n 0.0.0-experimental.8e93a8e5779de345245d8824da95ff6ce3aab5d2 → 0.0.0-experimental.931410e9ec44301eb4579640bf42aa347fb4a3b7

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 (332) hide show
  1. package/dist/admin/components/BulkLocaleActionModal.js +262 -0
  2. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -0
  3. package/dist/admin/components/BulkLocaleActionModal.mjs +260 -0
  4. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -0
  5. package/dist/admin/components/CMHeaderActions.js +721 -0
  6. package/dist/admin/components/CMHeaderActions.js.map +1 -0
  7. package/dist/admin/components/CMHeaderActions.mjs +696 -0
  8. package/dist/admin/components/CMHeaderActions.mjs.map +1 -0
  9. package/dist/admin/components/CMListViewModalsAdditionalInformation.js +69 -0
  10. package/dist/admin/components/CMListViewModalsAdditionalInformation.js.map +1 -0
  11. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs +65 -0
  12. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs.map +1 -0
  13. package/dist/admin/components/CheckboxConfirmation.js +155 -0
  14. package/dist/admin/components/CheckboxConfirmation.js.map +1 -0
  15. package/dist/admin/components/CheckboxConfirmation.mjs +134 -0
  16. package/dist/admin/components/CheckboxConfirmation.mjs.map +1 -0
  17. package/dist/admin/components/CreateLocale.js +395 -0
  18. package/dist/admin/components/CreateLocale.js.map +1 -0
  19. package/dist/admin/components/CreateLocale.mjs +369 -0
  20. package/dist/admin/components/CreateLocale.mjs.map +1 -0
  21. package/dist/admin/components/DeleteLocale.js +90 -0
  22. package/dist/admin/components/DeleteLocale.js.map +1 -0
  23. package/dist/admin/components/DeleteLocale.mjs +69 -0
  24. package/dist/admin/components/DeleteLocale.mjs.map +1 -0
  25. package/dist/admin/components/EditLocale.js +212 -0
  26. package/dist/admin/components/EditLocale.js.map +1 -0
  27. package/dist/admin/components/EditLocale.mjs +190 -0
  28. package/dist/admin/components/EditLocale.mjs.map +1 -0
  29. package/dist/admin/components/LocaleListCell.js +82 -0
  30. package/dist/admin/components/LocaleListCell.js.map +1 -0
  31. package/dist/admin/components/LocaleListCell.mjs +80 -0
  32. package/dist/admin/components/LocaleListCell.mjs.map +1 -0
  33. package/dist/admin/components/LocalePicker.js +98 -0
  34. package/dist/admin/components/LocalePicker.js.map +1 -0
  35. package/dist/admin/components/LocalePicker.mjs +77 -0
  36. package/dist/admin/components/LocalePicker.mjs.map +1 -0
  37. package/dist/admin/components/LocaleTable.js +143 -0
  38. package/dist/admin/components/LocaleTable.js.map +1 -0
  39. package/dist/admin/components/LocaleTable.mjs +122 -0
  40. package/dist/admin/components/LocaleTable.mjs.map +1 -0
  41. package/dist/admin/constants.js +37 -0
  42. package/dist/admin/constants.js.map +1 -0
  43. package/dist/admin/constants.mjs +35 -0
  44. package/dist/admin/constants.mjs.map +1 -0
  45. package/dist/admin/contentManagerHooks/editView.js +106 -0
  46. package/dist/admin/contentManagerHooks/editView.js.map +1 -0
  47. package/dist/admin/contentManagerHooks/editView.mjs +85 -0
  48. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -0
  49. package/dist/admin/contentManagerHooks/listView.js +43 -0
  50. package/dist/admin/contentManagerHooks/listView.js.map +1 -0
  51. package/dist/admin/contentManagerHooks/listView.mjs +41 -0
  52. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -0
  53. package/dist/admin/contentReleasesHooks/releaseDetailsView.js +20 -0
  54. package/dist/admin/contentReleasesHooks/releaseDetailsView.js.map +1 -0
  55. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs +18 -0
  56. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs.map +1 -0
  57. package/dist/admin/hooks/useI18n.js +78 -0
  58. package/dist/admin/hooks/useI18n.js.map +1 -0
  59. package/dist/admin/hooks/useI18n.mjs +57 -0
  60. package/dist/admin/hooks/useI18n.mjs.map +1 -0
  61. package/dist/admin/index.js +220 -16
  62. package/dist/admin/index.js.map +1 -1
  63. package/dist/admin/index.mjs +202 -15
  64. package/dist/admin/index.mjs.map +1 -1
  65. package/dist/admin/middlewares/extendCTBAttributeInitialData.js +71 -0
  66. package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -0
  67. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +69 -0
  68. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -0
  69. package/dist/admin/middlewares/extendCTBInitialData.js +40 -0
  70. package/dist/admin/middlewares/extendCTBInitialData.js.map +1 -0
  71. package/dist/admin/middlewares/extendCTBInitialData.mjs +38 -0
  72. package/dist/admin/middlewares/extendCTBInitialData.mjs.map +1 -0
  73. package/dist/admin/middlewares/rbac-middleware.js +49 -0
  74. package/dist/admin/middlewares/rbac-middleware.js.map +1 -0
  75. package/dist/admin/middlewares/rbac-middleware.mjs +28 -0
  76. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -0
  77. package/dist/admin/pages/SettingsPage.js +107 -0
  78. package/dist/admin/pages/SettingsPage.js.map +1 -0
  79. package/dist/admin/pages/SettingsPage.mjs +85 -0
  80. package/dist/admin/pages/SettingsPage.mjs.map +1 -0
  81. package/dist/admin/pluginId.js +6 -0
  82. package/dist/admin/pluginId.js.map +1 -0
  83. package/dist/admin/pluginId.mjs +4 -0
  84. package/dist/admin/pluginId.mjs.map +1 -0
  85. package/dist/admin/services/api.js +12 -0
  86. package/dist/admin/services/api.js.map +1 -0
  87. package/dist/admin/services/api.mjs +10 -0
  88. package/dist/admin/services/api.mjs.map +1 -0
  89. package/dist/admin/services/locales.js +70 -0
  90. package/dist/admin/services/locales.js.map +1 -0
  91. package/dist/admin/services/locales.mjs +64 -0
  92. package/dist/admin/services/locales.mjs.map +1 -0
  93. package/dist/admin/services/relations.js +23 -0
  94. package/dist/admin/services/relations.js.map +1 -0
  95. package/dist/admin/services/relations.mjs +21 -0
  96. package/dist/admin/services/relations.mjs.map +1 -0
  97. package/dist/admin/src/utils/schemas.d.ts +424 -16
  98. package/dist/admin/{chunks/de-nEMWvIiY.js → translations/de.json.js} +2 -2
  99. package/dist/admin/translations/de.json.js.map +1 -0
  100. package/dist/admin/{chunks/de-Cm8mYdaO.js → translations/de.json.mjs} +1 -1
  101. package/dist/admin/translations/de.json.mjs.map +1 -0
  102. package/dist/admin/{chunks/dk-CYATLPVe.js → translations/dk.json.js} +2 -2
  103. package/dist/admin/translations/dk.json.js.map +1 -0
  104. package/dist/admin/{chunks/dk-BeUFOegB.js → translations/dk.json.mjs} +1 -1
  105. package/dist/admin/translations/dk.json.mjs.map +1 -0
  106. package/dist/admin/{chunks/en-CG5cUCbD.js → translations/en.json.js} +2 -2
  107. package/dist/admin/translations/en.json.js.map +1 -0
  108. package/dist/admin/{chunks/en-eWSaCeOb.js → translations/en.json.mjs} +1 -1
  109. package/dist/admin/translations/en.json.mjs.map +1 -0
  110. package/dist/admin/{chunks/es-CWsogTGm.js → translations/es.json.js} +2 -2
  111. package/dist/admin/translations/es.json.js.map +1 -0
  112. package/dist/admin/{chunks/es-DqF_IdAc.js → translations/es.json.mjs} +1 -1
  113. package/dist/admin/translations/es.json.mjs.map +1 -0
  114. package/dist/admin/{chunks/fr-CC7UFcYd.js → translations/fr.json.js} +2 -2
  115. package/dist/admin/translations/fr.json.js.map +1 -0
  116. package/dist/admin/{chunks/fr-CyARbZ3c.js → translations/fr.json.mjs} +1 -1
  117. package/dist/admin/translations/fr.json.mjs.map +1 -0
  118. package/dist/admin/{chunks/ko-XwGmfhoq.js → translations/ko.json.js} +2 -2
  119. package/dist/admin/translations/ko.json.js.map +1 -0
  120. package/dist/admin/{chunks/ko-Ax4NSedM.js → translations/ko.json.mjs} +1 -1
  121. package/dist/admin/translations/ko.json.mjs.map +1 -0
  122. package/dist/admin/{chunks/pl-B_vzY_ZB.js → translations/pl.json.js} +2 -2
  123. package/dist/admin/translations/pl.json.js.map +1 -0
  124. package/dist/admin/{chunks/pl-B-aqvMqL.js → translations/pl.json.mjs} +1 -1
  125. package/dist/admin/translations/pl.json.mjs.map +1 -0
  126. package/dist/admin/{chunks/ru-WzHcJV1f.js → translations/ru.json.js} +2 -2
  127. package/dist/admin/translations/ru.json.js.map +1 -0
  128. package/dist/admin/{chunks/ru-VkPjQ-Sk.js → translations/ru.json.mjs} +1 -1
  129. package/dist/admin/translations/ru.json.mjs.map +1 -0
  130. package/dist/admin/{chunks/tr-CcWp6u3w.js → translations/tr.json.js} +2 -2
  131. package/dist/admin/translations/tr.json.js.map +1 -0
  132. package/dist/admin/{chunks/tr-DcTR88c9.js → translations/tr.json.mjs} +1 -1
  133. package/dist/admin/translations/tr.json.mjs.map +1 -0
  134. package/dist/admin/translations/uk.json.js +82 -0
  135. package/dist/admin/translations/uk.json.js.map +1 -0
  136. package/dist/admin/translations/uk.json.mjs +80 -0
  137. package/dist/admin/translations/uk.json.mjs.map +1 -0
  138. package/dist/admin/{chunks/zh-Hans-DnU2bhri.js → translations/zh-Hans.json.js} +2 -2
  139. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  140. package/dist/admin/{chunks/zh-Hans-L3wsRegj.js → translations/zh-Hans.json.mjs} +1 -1
  141. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  142. package/dist/admin/{chunks/zh-C9So4SGq.js → translations/zh.json.js} +2 -2
  143. package/dist/admin/translations/zh.json.js.map +1 -0
  144. package/dist/admin/{chunks/zh-RZyMiPIs.js → translations/zh.json.mjs} +1 -1
  145. package/dist/admin/translations/zh.json.mjs.map +1 -0
  146. package/dist/admin/utils/baseQuery.js +8 -0
  147. package/dist/admin/utils/baseQuery.js.map +1 -0
  148. package/dist/admin/utils/baseQuery.mjs +6 -0
  149. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  150. package/dist/admin/utils/clean.js +70 -0
  151. package/dist/admin/utils/clean.js.map +1 -0
  152. package/dist/admin/utils/clean.mjs +68 -0
  153. package/dist/admin/utils/clean.mjs.map +1 -0
  154. package/dist/admin/utils/fields.js +34 -0
  155. package/dist/admin/utils/fields.js.map +1 -0
  156. package/dist/admin/utils/fields.mjs +31 -0
  157. package/dist/admin/utils/fields.mjs.map +1 -0
  158. package/dist/admin/utils/getTranslation.js +8 -0
  159. package/dist/admin/utils/getTranslation.js.map +1 -0
  160. package/dist/admin/utils/getTranslation.mjs +6 -0
  161. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  162. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  163. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  164. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  165. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  166. package/dist/admin/utils/schemas.js +74 -0
  167. package/dist/admin/utils/schemas.js.map +1 -0
  168. package/dist/admin/utils/schemas.mjs +72 -0
  169. package/dist/admin/utils/schemas.mjs.map +1 -0
  170. package/dist/admin/utils/strings.js +6 -0
  171. package/dist/admin/utils/strings.js.map +1 -0
  172. package/dist/admin/utils/strings.mjs +4 -0
  173. package/dist/admin/utils/strings.mjs.map +1 -0
  174. package/dist/server/bootstrap.js +79 -0
  175. package/dist/server/bootstrap.js.map +1 -0
  176. package/dist/server/bootstrap.mjs +77 -0
  177. package/dist/server/bootstrap.mjs.map +1 -0
  178. package/dist/server/constants/index.js +29 -0
  179. package/dist/server/constants/index.js.map +1 -0
  180. package/dist/server/constants/index.mjs +25 -0
  181. package/dist/server/constants/index.mjs.map +1 -0
  182. package/dist/server/constants/iso-locales.json.js +2423 -0
  183. package/dist/server/constants/iso-locales.json.js.map +1 -0
  184. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  185. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  186. package/dist/server/content-types/index.js +10 -0
  187. package/dist/server/content-types/index.js.map +1 -0
  188. package/dist/server/content-types/index.mjs +8 -0
  189. package/dist/server/content-types/index.mjs.map +1 -0
  190. package/dist/server/content-types/locale/index.js +10 -0
  191. package/dist/server/content-types/locale/index.js.map +1 -0
  192. package/dist/server/content-types/locale/index.mjs +8 -0
  193. package/dist/server/content-types/locale/index.mjs.map +1 -0
  194. package/dist/server/content-types/locale/schema.json.js +46 -0
  195. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  196. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  197. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  198. package/dist/server/controllers/content-types.js +76 -0
  199. package/dist/server/controllers/content-types.js.map +1 -0
  200. package/dist/server/controllers/content-types.mjs +74 -0
  201. package/dist/server/controllers/content-types.mjs.map +1 -0
  202. package/dist/server/controllers/index.js +14 -0
  203. package/dist/server/controllers/index.js.map +1 -0
  204. package/dist/server/controllers/index.mjs +12 -0
  205. package/dist/server/controllers/index.mjs.map +1 -0
  206. package/dist/server/controllers/iso-locales.js +13 -0
  207. package/dist/server/controllers/iso-locales.js.map +1 -0
  208. package/dist/server/controllers/iso-locales.mjs +11 -0
  209. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  210. package/dist/server/controllers/locales.js +108 -0
  211. package/dist/server/controllers/locales.js.map +1 -0
  212. package/dist/server/controllers/locales.mjs +87 -0
  213. package/dist/server/controllers/locales.mjs.map +1 -0
  214. package/dist/server/controllers/validate-locale-creation.js +47 -0
  215. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  216. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  217. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  218. package/dist/server/domain/locale.js +11 -0
  219. package/dist/server/domain/locale.js.map +1 -0
  220. package/dist/server/domain/locale.mjs +9 -0
  221. package/dist/server/domain/locale.mjs.map +1 -0
  222. package/dist/server/graphql.js +115 -0
  223. package/dist/server/graphql.js.map +1 -0
  224. package/dist/server/graphql.mjs +113 -0
  225. package/dist/server/graphql.mjs.map +1 -0
  226. package/dist/server/index.js +10 -3712
  227. package/dist/server/index.js.map +1 -1
  228. package/dist/server/index.mjs +7 -3691
  229. package/dist/server/index.mjs.map +1 -1
  230. package/dist/server/register.js +79 -0
  231. package/dist/server/register.js.map +1 -0
  232. package/dist/server/register.mjs +77 -0
  233. package/dist/server/register.mjs.map +1 -0
  234. package/dist/server/routes/admin.js +102 -0
  235. package/dist/server/routes/admin.js.map +1 -0
  236. package/dist/server/routes/admin.mjs +100 -0
  237. package/dist/server/routes/admin.mjs.map +1 -0
  238. package/dist/server/routes/content-api.js +15 -0
  239. package/dist/server/routes/content-api.js.map +1 -0
  240. package/dist/server/routes/content-api.mjs +13 -0
  241. package/dist/server/routes/content-api.mjs.map +1 -0
  242. package/dist/server/routes/index.js +12 -0
  243. package/dist/server/routes/index.js.map +1 -0
  244. package/dist/server/routes/index.mjs +10 -0
  245. package/dist/server/routes/index.mjs.map +1 -0
  246. package/dist/server/services/content-types.js +157 -0
  247. package/dist/server/services/content-types.js.map +1 -0
  248. package/dist/server/services/content-types.mjs +155 -0
  249. package/dist/server/services/content-types.mjs.map +1 -0
  250. package/dist/server/services/index.js +22 -0
  251. package/dist/server/services/index.js.map +1 -0
  252. package/dist/server/services/index.mjs +20 -0
  253. package/dist/server/services/index.mjs.map +1 -0
  254. package/dist/server/services/iso-locales.js +12 -0
  255. package/dist/server/services/iso-locales.js.map +1 -0
  256. package/dist/server/services/iso-locales.mjs +10 -0
  257. package/dist/server/services/iso-locales.mjs.map +1 -0
  258. package/dist/server/services/locales.js +114 -0
  259. package/dist/server/services/locales.js.map +1 -0
  260. package/dist/server/services/locales.mjs +112 -0
  261. package/dist/server/services/locales.mjs.map +1 -0
  262. package/dist/server/services/localizations.js +68 -0
  263. package/dist/server/services/localizations.js.map +1 -0
  264. package/dist/server/services/localizations.mjs +66 -0
  265. package/dist/server/services/localizations.mjs.map +1 -0
  266. package/dist/server/services/metrics.js +30 -0
  267. package/dist/server/services/metrics.js.map +1 -0
  268. package/dist/server/services/metrics.mjs +28 -0
  269. package/dist/server/services/metrics.mjs.map +1 -0
  270. package/dist/server/services/permissions/actions.js +136 -0
  271. package/dist/server/services/permissions/actions.js.map +1 -0
  272. package/dist/server/services/permissions/actions.mjs +134 -0
  273. package/dist/server/services/permissions/actions.mjs.map +1 -0
  274. package/dist/server/services/permissions/engine.js +52 -0
  275. package/dist/server/services/permissions/engine.js.map +1 -0
  276. package/dist/server/services/permissions/engine.mjs +50 -0
  277. package/dist/server/services/permissions/engine.mjs.map +1 -0
  278. package/dist/server/services/permissions/sections-builder.js +45 -0
  279. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  280. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  281. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  282. package/dist/server/services/permissions.js +14 -0
  283. package/dist/server/services/permissions.js.map +1 -0
  284. package/dist/server/services/permissions.mjs +12 -0
  285. package/dist/server/services/permissions.mjs.map +1 -0
  286. package/dist/server/services/sanitize/index.js +34 -0
  287. package/dist/server/services/sanitize/index.js.map +1 -0
  288. package/dist/server/services/sanitize/index.mjs +32 -0
  289. package/dist/server/services/sanitize/index.mjs.map +1 -0
  290. package/dist/server/utils/index.js +16 -0
  291. package/dist/server/utils/index.js.map +1 -0
  292. package/dist/server/utils/index.mjs +13 -0
  293. package/dist/server/utils/index.mjs.map +1 -0
  294. package/dist/server/validation/content-types.js +18 -0
  295. package/dist/server/validation/content-types.js.map +1 -0
  296. package/dist/server/validation/content-types.mjs +16 -0
  297. package/dist/server/validation/content-types.mjs.map +1 -0
  298. package/dist/server/validation/locales.js +23 -0
  299. package/dist/server/validation/locales.js.map +1 -0
  300. package/dist/server/validation/locales.mjs +20 -0
  301. package/dist/server/validation/locales.mjs.map +1 -0
  302. package/package.json +8 -8
  303. package/dist/admin/chunks/SettingsPage-B6ikxVOg.js +0 -820
  304. package/dist/admin/chunks/SettingsPage-B6ikxVOg.js.map +0 -1
  305. package/dist/admin/chunks/SettingsPage-Kg4GAThm.js +0 -797
  306. package/dist/admin/chunks/SettingsPage-Kg4GAThm.js.map +0 -1
  307. package/dist/admin/chunks/de-Cm8mYdaO.js.map +0 -1
  308. package/dist/admin/chunks/de-nEMWvIiY.js.map +0 -1
  309. package/dist/admin/chunks/dk-BeUFOegB.js.map +0 -1
  310. package/dist/admin/chunks/dk-CYATLPVe.js.map +0 -1
  311. package/dist/admin/chunks/en-CG5cUCbD.js.map +0 -1
  312. package/dist/admin/chunks/en-eWSaCeOb.js.map +0 -1
  313. package/dist/admin/chunks/es-CWsogTGm.js.map +0 -1
  314. package/dist/admin/chunks/es-DqF_IdAc.js.map +0 -1
  315. package/dist/admin/chunks/fr-CC7UFcYd.js.map +0 -1
  316. package/dist/admin/chunks/fr-CyARbZ3c.js.map +0 -1
  317. package/dist/admin/chunks/index-Dch-2xao.js +0 -2035
  318. package/dist/admin/chunks/index-Dch-2xao.js.map +0 -1
  319. package/dist/admin/chunks/index-DyvbIjH9.js +0 -2006
  320. package/dist/admin/chunks/index-DyvbIjH9.js.map +0 -1
  321. package/dist/admin/chunks/ko-Ax4NSedM.js.map +0 -1
  322. package/dist/admin/chunks/ko-XwGmfhoq.js.map +0 -1
  323. package/dist/admin/chunks/pl-B-aqvMqL.js.map +0 -1
  324. package/dist/admin/chunks/pl-B_vzY_ZB.js.map +0 -1
  325. package/dist/admin/chunks/ru-VkPjQ-Sk.js.map +0 -1
  326. package/dist/admin/chunks/ru-WzHcJV1f.js.map +0 -1
  327. package/dist/admin/chunks/tr-CcWp6u3w.js.map +0 -1
  328. package/dist/admin/chunks/tr-DcTR88c9.js.map +0 -1
  329. package/dist/admin/chunks/zh-C9So4SGq.js.map +0 -1
  330. package/dist/admin/chunks/zh-Hans-DnU2bhri.js.map +0 -1
  331. package/dist/admin/chunks/zh-Hans-L3wsRegj.js.map +0 -1
  332. package/dist/admin/chunks/zh-RZyMiPIs.js.map +0 -1
@@ -0,0 +1,134 @@
1
+ import { isArray, prop, getOr } from 'lodash/fp';
2
+ import { getService } from '../../utils/index.mjs';
3
+
4
+ const actions = [
5
+ {
6
+ section: 'settings',
7
+ category: 'Internationalization',
8
+ subCategory: 'Locales',
9
+ pluginName: 'i18n',
10
+ displayName: 'Create',
11
+ uid: 'locale.create'
12
+ },
13
+ {
14
+ section: 'settings',
15
+ category: 'Internationalization',
16
+ subCategory: 'Locales',
17
+ pluginName: 'i18n',
18
+ displayName: 'Read',
19
+ uid: 'locale.read',
20
+ aliases: [
21
+ {
22
+ actionId: 'plugin::content-manager.explorer.read',
23
+ subjects: [
24
+ 'plugin::i18n.locale'
25
+ ]
26
+ }
27
+ ]
28
+ },
29
+ {
30
+ section: 'settings',
31
+ category: 'Internationalization',
32
+ subCategory: 'Locales',
33
+ pluginName: 'i18n',
34
+ displayName: 'Update',
35
+ uid: 'locale.update'
36
+ },
37
+ {
38
+ section: 'settings',
39
+ category: 'Internationalization',
40
+ subCategory: 'Locales',
41
+ pluginName: 'i18n',
42
+ displayName: 'Delete',
43
+ uid: 'locale.delete'
44
+ }
45
+ ];
46
+ const addLocalesPropertyIfNeeded = ({ value: action })=>{
47
+ const { section, options: { applyToProperties } } = action;
48
+ // Only add the locales property to contentTypes' actions
49
+ if (section !== 'contentTypes') {
50
+ return;
51
+ }
52
+ // If the 'locales' property is already declared within the applyToProperties array, then ignore the next steps
53
+ if (isArray(applyToProperties) && applyToProperties.includes('locales')) {
54
+ return;
55
+ }
56
+ // Add the 'locales' property to the applyToProperties array (create it if necessary)
57
+ action.options.applyToProperties = isArray(applyToProperties) ? applyToProperties.concat('locales') : [
58
+ 'locales'
59
+ ];
60
+ };
61
+ const shouldApplyLocalesPropertyToSubject = ({ property, subject })=>{
62
+ if (property === 'locales') {
63
+ const model = strapi.getModel(subject);
64
+ return getService('content-types').isLocalizedContentType(model);
65
+ }
66
+ return true;
67
+ };
68
+ const addAllLocalesToPermissions = async (permissions)=>{
69
+ const { actionProvider } = strapi.service('admin::permission');
70
+ const { find: findAllLocales } = getService('locales');
71
+ const allLocales = await findAllLocales();
72
+ const allLocalesCode = allLocales.map(prop('code'));
73
+ return Promise.all(permissions.map(async (permission)=>{
74
+ const { action, subject } = permission;
75
+ const appliesToLocalesProperty = await actionProvider.appliesToProperty('locales', action, subject);
76
+ if (!appliesToLocalesProperty) {
77
+ return permission;
78
+ }
79
+ const oldPermissionProperties = getOr({}, 'properties', permission);
80
+ return {
81
+ ...permission,
82
+ properties: {
83
+ ...oldPermissionProperties,
84
+ locales: allLocalesCode
85
+ }
86
+ };
87
+ }));
88
+ };
89
+ const syncSuperAdminPermissionsWithLocales = async ()=>{
90
+ const roleService = strapi.service('admin::role');
91
+ const permissionService = strapi.service('admin::permission');
92
+ const superAdminRole = await roleService.getSuperAdmin();
93
+ if (!superAdminRole) {
94
+ return;
95
+ }
96
+ const superAdminPermissions = await permissionService.findMany({
97
+ where: {
98
+ role: {
99
+ id: superAdminRole.id
100
+ }
101
+ }
102
+ });
103
+ const newSuperAdminPermissions = await addAllLocalesToPermissions(superAdminPermissions);
104
+ await roleService.assignPermissions(superAdminRole.id, newSuperAdminPermissions);
105
+ };
106
+ const registerI18nActions = async ()=>{
107
+ const { actionProvider } = strapi.service('admin::permission');
108
+ await actionProvider.registerMany(actions);
109
+ };
110
+ const registerI18nActionsHooks = ()=>{
111
+ const { actionProvider } = strapi.service('admin::permission');
112
+ const { hooks } = strapi.service('admin::role');
113
+ actionProvider.hooks.appliesPropertyToSubject.register(shouldApplyLocalesPropertyToSubject);
114
+ hooks.willResetSuperAdminPermissions.register(addAllLocalesToPermissions);
115
+ };
116
+ const updateActionsProperties = ()=>{
117
+ const { actionProvider } = strapi.service('admin::permission');
118
+ // Register the transformation for every new action
119
+ actionProvider.hooks.willRegister.register(addLocalesPropertyIfNeeded);
120
+ // Handle already registered actions
121
+ actionProvider.values().forEach((action)=>addLocalesPropertyIfNeeded({
122
+ value: action
123
+ }));
124
+ };
125
+ var i18nActionsService = {
126
+ actions,
127
+ registerI18nActions,
128
+ registerI18nActionsHooks,
129
+ updateActionsProperties,
130
+ syncSuperAdminPermissionsWithLocales
131
+ };
132
+
133
+ export { i18nActionsService as default };
134
+ //# sourceMappingURL=actions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.mjs","sources":["../../../../server/src/services/permissions/actions.ts"],"sourcesContent":["import { isArray, getOr, prop } from 'lodash/fp';\nimport { getService } from '../../utils';\n\nconst actions = [\n {\n section: 'settings',\n category: 'Internationalization',\n subCategory: 'Locales',\n pluginName: 'i18n',\n displayName: 'Create',\n uid: 'locale.create',\n },\n {\n section: 'settings',\n category: 'Internationalization',\n subCategory: 'Locales',\n pluginName: 'i18n',\n displayName: 'Read',\n uid: 'locale.read',\n aliases: [\n { actionId: 'plugin::content-manager.explorer.read', subjects: ['plugin::i18n.locale'] },\n ],\n },\n {\n section: 'settings',\n category: 'Internationalization',\n subCategory: 'Locales',\n pluginName: 'i18n',\n displayName: 'Update',\n uid: 'locale.update',\n },\n {\n section: 'settings',\n category: 'Internationalization',\n subCategory: 'Locales',\n pluginName: 'i18n',\n displayName: 'Delete',\n uid: 'locale.delete',\n },\n];\n\nconst addLocalesPropertyIfNeeded = ({ value: action }: any) => {\n const {\n section,\n options: { applyToProperties },\n } = action;\n\n // Only add the locales property to contentTypes' actions\n if (section !== 'contentTypes') {\n return;\n }\n\n // If the 'locales' property is already declared within the applyToProperties array, then ignore the next steps\n if (isArray(applyToProperties) && applyToProperties.includes('locales')) {\n return;\n }\n\n // Add the 'locales' property to the applyToProperties array (create it if necessary)\n action.options.applyToProperties = isArray(applyToProperties)\n ? applyToProperties.concat('locales')\n : ['locales'];\n};\n\nconst shouldApplyLocalesPropertyToSubject = ({ property, subject }: any) => {\n if (property === 'locales') {\n const model = strapi.getModel(subject);\n\n return getService('content-types').isLocalizedContentType(model);\n }\n\n return true;\n};\n\nconst addAllLocalesToPermissions = async (permissions: any) => {\n const { actionProvider } = strapi.service('admin::permission');\n const { find: findAllLocales } = getService('locales');\n\n const allLocales = await findAllLocales();\n const allLocalesCode = allLocales.map(prop('code'));\n\n return Promise.all(\n permissions.map(async (permission: any) => {\n const { action, subject } = permission;\n\n const appliesToLocalesProperty = await actionProvider.appliesToProperty(\n 'locales',\n action,\n subject\n );\n\n if (!appliesToLocalesProperty) {\n return permission;\n }\n\n const oldPermissionProperties = getOr({}, 'properties', permission);\n\n return { ...permission, properties: { ...oldPermissionProperties, locales: allLocalesCode } };\n })\n );\n};\n\nconst syncSuperAdminPermissionsWithLocales = async () => {\n const roleService = strapi.service('admin::role');\n const permissionService = strapi.service('admin::permission');\n\n const superAdminRole = await roleService.getSuperAdmin();\n\n if (!superAdminRole) {\n return;\n }\n\n const superAdminPermissions = await permissionService.findMany({\n where: {\n role: {\n id: superAdminRole.id,\n },\n },\n });\n\n const newSuperAdminPermissions = await addAllLocalesToPermissions(superAdminPermissions);\n\n await roleService.assignPermissions(superAdminRole.id, newSuperAdminPermissions);\n};\n\nconst registerI18nActions = async () => {\n const { actionProvider } = strapi.service('admin::permission');\n\n await actionProvider.registerMany(actions);\n};\n\nconst registerI18nActionsHooks = () => {\n const { actionProvider } = strapi.service('admin::permission');\n const { hooks } = strapi.service('admin::role');\n\n actionProvider.hooks.appliesPropertyToSubject.register(shouldApplyLocalesPropertyToSubject);\n hooks.willResetSuperAdminPermissions.register(addAllLocalesToPermissions);\n};\n\nconst updateActionsProperties = () => {\n const { actionProvider } = strapi.service('admin::permission');\n\n // Register the transformation for every new action\n actionProvider.hooks.willRegister.register(addLocalesPropertyIfNeeded);\n\n // Handle already registered actions\n actionProvider.values().forEach((action: any) => addLocalesPropertyIfNeeded({ value: action }));\n};\n\nexport default {\n actions,\n registerI18nActions,\n registerI18nActionsHooks,\n updateActionsProperties,\n syncSuperAdminPermissionsWithLocales,\n};\n"],"names":["actions","section","category","subCategory","pluginName","displayName","uid","aliases","actionId","subjects","addLocalesPropertyIfNeeded","value","action","options","applyToProperties","isArray","includes","concat","shouldApplyLocalesPropertyToSubject","property","subject","model","strapi","getModel","getService","isLocalizedContentType","addAllLocalesToPermissions","permissions","actionProvider","service","find","findAllLocales","allLocales","allLocalesCode","map","prop","Promise","all","permission","appliesToLocalesProperty","appliesToProperty","oldPermissionProperties","getOr","properties","locales","syncSuperAdminPermissionsWithLocales","roleService","permissionService","superAdminRole","getSuperAdmin","superAdminPermissions","findMany","where","role","id","newSuperAdminPermissions","assignPermissions","registerI18nActions","registerMany","registerI18nActionsHooks","hooks","appliesPropertyToSubject","register","willResetSuperAdminPermissions","updateActionsProperties","willRegister","values","forEach"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ var index = require('../../utils/index.js');
4
+
5
+ /**
6
+ * @typedef {object} WillRegisterPermissionContext
7
+ * @property {Permission} permission
8
+ * @property {object} user
9
+ * @property {object} condition
10
+ */ /**
11
+ * Locales property handler for the permission engine
12
+ * Add the has-locale-access condition if the locales property is defined
13
+ * @param {WillRegisterPermissionContext} context
14
+ */ const willRegisterPermission = (context)=>{
15
+ const { permission, condition, user } = context;
16
+ const { subject, properties } = permission;
17
+ const isSuperAdmin = strapi.service('admin::role').hasSuperAdminRole(user);
18
+ if (isSuperAdmin) {
19
+ return;
20
+ }
21
+ const { locales } = properties || {};
22
+ const { isLocalizedContentType } = index.getService('content-types');
23
+ // If there is no subject defined, ignore the permission
24
+ if (!subject) {
25
+ return;
26
+ }
27
+ const ct = strapi.contentTypes[subject];
28
+ // If the subject exists but isn't localized, ignore the permission
29
+ if (!isLocalizedContentType(ct)) {
30
+ return;
31
+ }
32
+ // If the subject is localized but the locales property is null (access to all locales), ignore the permission
33
+ if (locales === null) {
34
+ return;
35
+ }
36
+ condition.and({
37
+ locale: {
38
+ $in: locales || []
39
+ }
40
+ });
41
+ };
42
+ const registerI18nPermissionsHandlers = ()=>{
43
+ const { engine } = strapi.service('admin::permission');
44
+ engine.hooks['before-register.permission'].register(willRegisterPermission);
45
+ };
46
+ var engineService = {
47
+ willRegisterPermission,
48
+ registerI18nPermissionsHandlers
49
+ };
50
+
51
+ module.exports = engineService;
52
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sources":["../../../../server/src/services/permissions/engine.ts"],"sourcesContent":["import { getService } from '../../utils';\n\n/**\n * @typedef {object} WillRegisterPermissionContext\n * @property {Permission} permission\n * @property {object} user\n * @property {object} condition\n */\n\n/**\n * Locales property handler for the permission engine\n * Add the has-locale-access condition if the locales property is defined\n * @param {WillRegisterPermissionContext} context\n */\nconst willRegisterPermission = (context: any) => {\n const { permission, condition, user } = context;\n const { subject, properties } = permission;\n\n const isSuperAdmin = strapi.service('admin::role').hasSuperAdminRole(user);\n\n if (isSuperAdmin) {\n return;\n }\n\n const { locales } = properties || {};\n const { isLocalizedContentType } = getService('content-types');\n\n // If there is no subject defined, ignore the permission\n if (!subject) {\n return;\n }\n\n const ct = strapi.contentTypes[subject];\n\n // If the subject exists but isn't localized, ignore the permission\n if (!isLocalizedContentType(ct)) {\n return;\n }\n\n // If the subject is localized but the locales property is null (access to all locales), ignore the permission\n if (locales === null) {\n return;\n }\n\n condition.and({\n locale: {\n $in: locales || [],\n },\n });\n};\n\nconst registerI18nPermissionsHandlers = () => {\n const { engine } = strapi.service('admin::permission');\n\n engine.hooks['before-register.permission'].register(willRegisterPermission);\n};\n\nexport default {\n willRegisterPermission,\n registerI18nPermissionsHandlers,\n};\n"],"names":["willRegisterPermission","context","permission","condition","user","subject","properties","isSuperAdmin","strapi","service","hasSuperAdminRole","locales","isLocalizedContentType","getService","ct","contentTypes","and","locale","$in","registerI18nPermissionsHandlers","engine","hooks","register"],"mappings":";;;;AAEA;;;;;;;;;IAYA,MAAMA,yBAAyB,CAACC,OAAAA,GAAAA;AAC9B,IAAA,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAEC,IAAI,EAAE,GAAGH,OAAAA;AACxC,IAAA,MAAM,EAAEI,OAAO,EAAEC,UAAU,EAAE,GAAGJ,UAAAA;AAEhC,IAAA,MAAMK,eAAeC,MAAOC,CAAAA,OAAO,CAAC,aAAA,CAAA,CAAeC,iBAAiB,CAACN,IAAAA,CAAAA;AAErE,IAAA,IAAIG,YAAc,EAAA;AAChB,QAAA;AACF;AAEA,IAAA,MAAM,EAAEI,OAAO,EAAE,GAAGL,cAAc,EAAC;AACnC,IAAA,MAAM,EAAEM,sBAAsB,EAAE,GAAGC,gBAAW,CAAA,eAAA,CAAA;;AAG9C,IAAA,IAAI,CAACR,OAAS,EAAA;AACZ,QAAA;AACF;AAEA,IAAA,MAAMS,EAAKN,GAAAA,MAAAA,CAAOO,YAAY,CAACV,OAAQ,CAAA;;IAGvC,IAAI,CAACO,uBAAuBE,EAAK,CAAA,EAAA;AAC/B,QAAA;AACF;;AAGA,IAAA,IAAIH,YAAY,IAAM,EAAA;AACpB,QAAA;AACF;AAEAR,IAAAA,SAAAA,CAAUa,GAAG,CAAC;QACZC,MAAQ,EAAA;AACNC,YAAAA,GAAAA,EAAKP,WAAW;AAClB;AACF,KAAA,CAAA;AACF,CAAA;AAEA,MAAMQ,+BAAkC,GAAA,IAAA;AACtC,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAGZ,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;AAElCW,IAAAA,MAAAA,CAAOC,KAAK,CAAC,4BAA6B,CAAA,CAACC,QAAQ,CAACtB,sBAAAA,CAAAA;AACtD,CAAA;AAEA,oBAAe;AACbA,IAAAA,sBAAAA;AACAmB,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,50 @@
1
+ import { getService } from '../../utils/index.mjs';
2
+
3
+ /**
4
+ * @typedef {object} WillRegisterPermissionContext
5
+ * @property {Permission} permission
6
+ * @property {object} user
7
+ * @property {object} condition
8
+ */ /**
9
+ * Locales property handler for the permission engine
10
+ * Add the has-locale-access condition if the locales property is defined
11
+ * @param {WillRegisterPermissionContext} context
12
+ */ const willRegisterPermission = (context)=>{
13
+ const { permission, condition, user } = context;
14
+ const { subject, properties } = permission;
15
+ const isSuperAdmin = strapi.service('admin::role').hasSuperAdminRole(user);
16
+ if (isSuperAdmin) {
17
+ return;
18
+ }
19
+ const { locales } = properties || {};
20
+ const { isLocalizedContentType } = getService('content-types');
21
+ // If there is no subject defined, ignore the permission
22
+ if (!subject) {
23
+ return;
24
+ }
25
+ const ct = strapi.contentTypes[subject];
26
+ // If the subject exists but isn't localized, ignore the permission
27
+ if (!isLocalizedContentType(ct)) {
28
+ return;
29
+ }
30
+ // If the subject is localized but the locales property is null (access to all locales), ignore the permission
31
+ if (locales === null) {
32
+ return;
33
+ }
34
+ condition.and({
35
+ locale: {
36
+ $in: locales || []
37
+ }
38
+ });
39
+ };
40
+ const registerI18nPermissionsHandlers = ()=>{
41
+ const { engine } = strapi.service('admin::permission');
42
+ engine.hooks['before-register.permission'].register(willRegisterPermission);
43
+ };
44
+ var engineService = {
45
+ willRegisterPermission,
46
+ registerI18nPermissionsHandlers
47
+ };
48
+
49
+ export { engineService as default };
50
+ //# sourceMappingURL=engine.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.mjs","sources":["../../../../server/src/services/permissions/engine.ts"],"sourcesContent":["import { getService } from '../../utils';\n\n/**\n * @typedef {object} WillRegisterPermissionContext\n * @property {Permission} permission\n * @property {object} user\n * @property {object} condition\n */\n\n/**\n * Locales property handler for the permission engine\n * Add the has-locale-access condition if the locales property is defined\n * @param {WillRegisterPermissionContext} context\n */\nconst willRegisterPermission = (context: any) => {\n const { permission, condition, user } = context;\n const { subject, properties } = permission;\n\n const isSuperAdmin = strapi.service('admin::role').hasSuperAdminRole(user);\n\n if (isSuperAdmin) {\n return;\n }\n\n const { locales } = properties || {};\n const { isLocalizedContentType } = getService('content-types');\n\n // If there is no subject defined, ignore the permission\n if (!subject) {\n return;\n }\n\n const ct = strapi.contentTypes[subject];\n\n // If the subject exists but isn't localized, ignore the permission\n if (!isLocalizedContentType(ct)) {\n return;\n }\n\n // If the subject is localized but the locales property is null (access to all locales), ignore the permission\n if (locales === null) {\n return;\n }\n\n condition.and({\n locale: {\n $in: locales || [],\n },\n });\n};\n\nconst registerI18nPermissionsHandlers = () => {\n const { engine } = strapi.service('admin::permission');\n\n engine.hooks['before-register.permission'].register(willRegisterPermission);\n};\n\nexport default {\n willRegisterPermission,\n registerI18nPermissionsHandlers,\n};\n"],"names":["willRegisterPermission","context","permission","condition","user","subject","properties","isSuperAdmin","strapi","service","hasSuperAdminRole","locales","isLocalizedContentType","getService","ct","contentTypes","and","locale","$in","registerI18nPermissionsHandlers","engine","hooks","register"],"mappings":";;AAEA;;;;;;;;;IAYA,MAAMA,yBAAyB,CAACC,OAAAA,GAAAA;AAC9B,IAAA,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAEC,IAAI,EAAE,GAAGH,OAAAA;AACxC,IAAA,MAAM,EAAEI,OAAO,EAAEC,UAAU,EAAE,GAAGJ,UAAAA;AAEhC,IAAA,MAAMK,eAAeC,MAAOC,CAAAA,OAAO,CAAC,aAAA,CAAA,CAAeC,iBAAiB,CAACN,IAAAA,CAAAA;AAErE,IAAA,IAAIG,YAAc,EAAA;AAChB,QAAA;AACF;AAEA,IAAA,MAAM,EAAEI,OAAO,EAAE,GAAGL,cAAc,EAAC;AACnC,IAAA,MAAM,EAAEM,sBAAsB,EAAE,GAAGC,UAAW,CAAA,eAAA,CAAA;;AAG9C,IAAA,IAAI,CAACR,OAAS,EAAA;AACZ,QAAA;AACF;AAEA,IAAA,MAAMS,EAAKN,GAAAA,MAAAA,CAAOO,YAAY,CAACV,OAAQ,CAAA;;IAGvC,IAAI,CAACO,uBAAuBE,EAAK,CAAA,EAAA;AAC/B,QAAA;AACF;;AAGA,IAAA,IAAIH,YAAY,IAAM,EAAA;AACpB,QAAA;AACF;AAEAR,IAAAA,SAAAA,CAAUa,GAAG,CAAC;QACZC,MAAQ,EAAA;AACNC,YAAAA,GAAAA,EAAKP,WAAW;AAClB;AACF,KAAA,CAAA;AACF,CAAA;AAEA,MAAMQ,+BAAkC,GAAA,IAAA;AACtC,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAGZ,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;AAElCW,IAAAA,MAAAA,CAAOC,KAAK,CAAC,4BAA6B,CAAA,CAACC,QAAQ,CAACtB,sBAAAA,CAAAA;AACtD,CAAA;AAEA,oBAAe;AACbA,IAAAA,sBAAAA;AACAmB,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var index = require('../../utils/index.js');
5
+
6
+ /**
7
+ * Handler for the permissions layout (sections builder)
8
+ * Adds the locales property to the subjects
9
+ * @param {Action} action
10
+ * @param {ContentTypesSection} section
11
+ * @return {Promise<void>}
12
+ */ const localesPropertyHandler = async ({ action, section })=>{
13
+ const { actionProvider } = strapi.service('admin::permission');
14
+ const locales = await index.getService('locales').find();
15
+ // Do not add the locales property if there is none registered
16
+ if (fp.isEmpty(locales)) {
17
+ return;
18
+ }
19
+ for (const subject of section.subjects){
20
+ const applies = await actionProvider.appliesToProperty('locales', action.actionId, subject.uid);
21
+ const hasLocalesProperty = subject.properties.find((property)=>property.value === 'locales');
22
+ if (applies && !hasLocalesProperty) {
23
+ subject.properties.push({
24
+ label: 'Locales',
25
+ value: 'locales',
26
+ children: locales.map(({ name, code })=>({
27
+ label: name || code,
28
+ value: code
29
+ }))
30
+ });
31
+ }
32
+ }
33
+ };
34
+ const registerLocalesPropertyHandler = ()=>{
35
+ const { sectionsBuilder } = strapi.service('admin::permission');
36
+ sectionsBuilder.addHandler('singleTypes', localesPropertyHandler);
37
+ sectionsBuilder.addHandler('collectionTypes', localesPropertyHandler);
38
+ };
39
+ var sectionsBuilderService = {
40
+ localesPropertyHandler,
41
+ registerLocalesPropertyHandler
42
+ };
43
+
44
+ module.exports = sectionsBuilderService;
45
+ //# sourceMappingURL=sections-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections-builder.js","sources":["../../../../server/src/services/permissions/sections-builder.ts"],"sourcesContent":["import { isEmpty } from 'lodash/fp';\n\nimport { getService } from '../../utils';\n\n/**\n * Handler for the permissions layout (sections builder)\n * Adds the locales property to the subjects\n * @param {Action} action\n * @param {ContentTypesSection} section\n * @return {Promise<void>}\n */\nconst localesPropertyHandler = async ({ action, section }: any) => {\n const { actionProvider } = strapi.service('admin::permission');\n\n const locales = await getService('locales').find();\n\n // Do not add the locales property if there is none registered\n if (isEmpty(locales)) {\n return;\n }\n\n for (const subject of section.subjects) {\n const applies = await actionProvider.appliesToProperty('locales', action.actionId, subject.uid);\n const hasLocalesProperty = subject.properties.find(\n (property: any) => property.value === 'locales'\n );\n\n if (applies && !hasLocalesProperty) {\n subject.properties.push({\n label: 'Locales',\n value: 'locales',\n children: locales.map(({ name, code }: any) => ({ label: name || code, value: code })),\n });\n }\n }\n};\n\nconst registerLocalesPropertyHandler = () => {\n const { sectionsBuilder } = strapi.service('admin::permission');\n\n sectionsBuilder.addHandler('singleTypes', localesPropertyHandler);\n sectionsBuilder.addHandler('collectionTypes', localesPropertyHandler);\n};\n\nexport default {\n localesPropertyHandler,\n registerLocalesPropertyHandler,\n};\n"],"names":["localesPropertyHandler","action","section","actionProvider","strapi","service","locales","getService","find","isEmpty","subject","subjects","applies","appliesToProperty","actionId","uid","hasLocalesProperty","properties","property","value","push","label","children","map","name","code","registerLocalesPropertyHandler","sectionsBuilder","addHandler"],"mappings":";;;;;AAIA;;;;;;AAMC,IACD,MAAMA,sBAAyB,GAAA,OAAO,EAAEC,MAAM,EAAEC,OAAO,EAAO,GAAA;AAC5D,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;AAE1C,IAAA,MAAMC,OAAU,GAAA,MAAMC,gBAAW,CAAA,SAAA,CAAA,CAAWC,IAAI,EAAA;;AAGhD,IAAA,IAAIC,WAAQH,OAAU,CAAA,EAAA;AACpB,QAAA;AACF;AAEA,IAAA,KAAK,MAAMI,OAAAA,IAAWR,OAAQS,CAAAA,QAAQ,CAAE;QACtC,MAAMC,OAAAA,GAAU,MAAMT,cAAAA,CAAeU,iBAAiB,CAAC,WAAWZ,MAAOa,CAAAA,QAAQ,EAAEJ,OAAAA,CAAQK,GAAG,CAAA;QAC9F,MAAMC,kBAAAA,GAAqBN,OAAQO,CAAAA,UAAU,CAACT,IAAI,CAChD,CAACU,QAAAA,GAAkBA,QAASC,CAAAA,KAAK,KAAK,SAAA,CAAA;QAGxC,IAAIP,OAAAA,IAAW,CAACI,kBAAoB,EAAA;YAClCN,OAAQO,CAAAA,UAAU,CAACG,IAAI,CAAC;gBACtBC,KAAO,EAAA,SAAA;gBACPF,KAAO,EAAA,SAAA;gBACPG,QAAUhB,EAAAA,OAAAA,CAAQiB,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAO,IAAM;AAAEJ,wBAAAA,KAAAA,EAAOG,IAAQC,IAAAA,IAAAA;wBAAMN,KAAOM,EAAAA;qBAAK,CAAA;AACrF,aAAA,CAAA;AACF;AACF;AACF,CAAA;AAEA,MAAMC,8BAAiC,GAAA,IAAA;AACrC,IAAA,MAAM,EAAEC,eAAe,EAAE,GAAGvB,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;IAE3CsB,eAAgBC,CAAAA,UAAU,CAAC,aAAe5B,EAAAA,sBAAAA,CAAAA;IAC1C2B,eAAgBC,CAAAA,UAAU,CAAC,iBAAmB5B,EAAAA,sBAAAA,CAAAA;AAChD,CAAA;AAEA,6BAAe;AACbA,IAAAA,sBAAAA;AACA0B,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,43 @@
1
+ import { isEmpty } from 'lodash/fp';
2
+ import { getService } from '../../utils/index.mjs';
3
+
4
+ /**
5
+ * Handler for the permissions layout (sections builder)
6
+ * Adds the locales property to the subjects
7
+ * @param {Action} action
8
+ * @param {ContentTypesSection} section
9
+ * @return {Promise<void>}
10
+ */ const localesPropertyHandler = async ({ action, section })=>{
11
+ const { actionProvider } = strapi.service('admin::permission');
12
+ const locales = await getService('locales').find();
13
+ // Do not add the locales property if there is none registered
14
+ if (isEmpty(locales)) {
15
+ return;
16
+ }
17
+ for (const subject of section.subjects){
18
+ const applies = await actionProvider.appliesToProperty('locales', action.actionId, subject.uid);
19
+ const hasLocalesProperty = subject.properties.find((property)=>property.value === 'locales');
20
+ if (applies && !hasLocalesProperty) {
21
+ subject.properties.push({
22
+ label: 'Locales',
23
+ value: 'locales',
24
+ children: locales.map(({ name, code })=>({
25
+ label: name || code,
26
+ value: code
27
+ }))
28
+ });
29
+ }
30
+ }
31
+ };
32
+ const registerLocalesPropertyHandler = ()=>{
33
+ const { sectionsBuilder } = strapi.service('admin::permission');
34
+ sectionsBuilder.addHandler('singleTypes', localesPropertyHandler);
35
+ sectionsBuilder.addHandler('collectionTypes', localesPropertyHandler);
36
+ };
37
+ var sectionsBuilderService = {
38
+ localesPropertyHandler,
39
+ registerLocalesPropertyHandler
40
+ };
41
+
42
+ export { sectionsBuilderService as default };
43
+ //# sourceMappingURL=sections-builder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections-builder.mjs","sources":["../../../../server/src/services/permissions/sections-builder.ts"],"sourcesContent":["import { isEmpty } from 'lodash/fp';\n\nimport { getService } from '../../utils';\n\n/**\n * Handler for the permissions layout (sections builder)\n * Adds the locales property to the subjects\n * @param {Action} action\n * @param {ContentTypesSection} section\n * @return {Promise<void>}\n */\nconst localesPropertyHandler = async ({ action, section }: any) => {\n const { actionProvider } = strapi.service('admin::permission');\n\n const locales = await getService('locales').find();\n\n // Do not add the locales property if there is none registered\n if (isEmpty(locales)) {\n return;\n }\n\n for (const subject of section.subjects) {\n const applies = await actionProvider.appliesToProperty('locales', action.actionId, subject.uid);\n const hasLocalesProperty = subject.properties.find(\n (property: any) => property.value === 'locales'\n );\n\n if (applies && !hasLocalesProperty) {\n subject.properties.push({\n label: 'Locales',\n value: 'locales',\n children: locales.map(({ name, code }: any) => ({ label: name || code, value: code })),\n });\n }\n }\n};\n\nconst registerLocalesPropertyHandler = () => {\n const { sectionsBuilder } = strapi.service('admin::permission');\n\n sectionsBuilder.addHandler('singleTypes', localesPropertyHandler);\n sectionsBuilder.addHandler('collectionTypes', localesPropertyHandler);\n};\n\nexport default {\n localesPropertyHandler,\n registerLocalesPropertyHandler,\n};\n"],"names":["localesPropertyHandler","action","section","actionProvider","strapi","service","locales","getService","find","isEmpty","subject","subjects","applies","appliesToProperty","actionId","uid","hasLocalesProperty","properties","property","value","push","label","children","map","name","code","registerLocalesPropertyHandler","sectionsBuilder","addHandler"],"mappings":";;;AAIA;;;;;;AAMC,IACD,MAAMA,sBAAyB,GAAA,OAAO,EAAEC,MAAM,EAAEC,OAAO,EAAO,GAAA;AAC5D,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;AAE1C,IAAA,MAAMC,OAAU,GAAA,MAAMC,UAAW,CAAA,SAAA,CAAA,CAAWC,IAAI,EAAA;;AAGhD,IAAA,IAAIC,QAAQH,OAAU,CAAA,EAAA;AACpB,QAAA;AACF;AAEA,IAAA,KAAK,MAAMI,OAAAA,IAAWR,OAAQS,CAAAA,QAAQ,CAAE;QACtC,MAAMC,OAAAA,GAAU,MAAMT,cAAAA,CAAeU,iBAAiB,CAAC,WAAWZ,MAAOa,CAAAA,QAAQ,EAAEJ,OAAAA,CAAQK,GAAG,CAAA;QAC9F,MAAMC,kBAAAA,GAAqBN,OAAQO,CAAAA,UAAU,CAACT,IAAI,CAChD,CAACU,QAAAA,GAAkBA,QAASC,CAAAA,KAAK,KAAK,SAAA,CAAA;QAGxC,IAAIP,OAAAA,IAAW,CAACI,kBAAoB,EAAA;YAClCN,OAAQO,CAAAA,UAAU,CAACG,IAAI,CAAC;gBACtBC,KAAO,EAAA,SAAA;gBACPF,KAAO,EAAA,SAAA;gBACPG,QAAUhB,EAAAA,OAAAA,CAAQiB,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAO,IAAM;AAAEJ,wBAAAA,KAAAA,EAAOG,IAAQC,IAAAA,IAAAA;wBAAMN,KAAOM,EAAAA;qBAAK,CAAA;AACrF,aAAA,CAAA;AACF;AACF;AACF,CAAA;AAEA,MAAMC,8BAAiC,GAAA,IAAA;AACrC,IAAA,MAAM,EAAEC,eAAe,EAAE,GAAGvB,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;IAE3CsB,eAAgBC,CAAAA,UAAU,CAAC,aAAe5B,EAAAA,sBAAAA,CAAAA;IAC1C2B,eAAgBC,CAAAA,UAAU,CAAC,iBAAmB5B,EAAAA,sBAAAA,CAAAA;AAChD,CAAA;AAEA,6BAAe;AACbA,IAAAA,sBAAAA;AACA0B,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var actions = require('./permissions/actions.js');
4
+ var sectionsBuilder = require('./permissions/sections-builder.js');
5
+ var engine = require('./permissions/engine.js');
6
+
7
+ const permissions = ()=>({
8
+ actions: actions,
9
+ sectionsBuilder: sectionsBuilder,
10
+ engine: engine
11
+ });
12
+
13
+ module.exports = permissions;
14
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sources":["../../../server/src/services/permissions.ts"],"sourcesContent":["import i18nActionsService from './permissions/actions';\nimport sectionsBuilderService from './permissions/sections-builder';\nimport engineService from './permissions/engine';\n\nconst permissions = () => ({\n actions: i18nActionsService,\n sectionsBuilder: sectionsBuilderService,\n engine: engineService,\n});\n\ntype PermissionsService = typeof permissions;\n\nexport default permissions;\nexport type { PermissionsService };\n"],"names":["permissions","actions","i18nActionsService","sectionsBuilder","sectionsBuilderService","engine","engineService"],"mappings":";;;;;;AAIMA,MAAAA,WAAAA,GAAc,KAAO;QACzBC,OAASC,EAAAA,OAAAA;QACTC,eAAiBC,EAAAA,eAAAA;QACjBC,MAAQC,EAAAA;KACV;;;;"}
@@ -0,0 +1,12 @@
1
+ import i18nActionsService from './permissions/actions.mjs';
2
+ import sectionsBuilderService from './permissions/sections-builder.mjs';
3
+ import engineService from './permissions/engine.mjs';
4
+
5
+ const permissions = ()=>({
6
+ actions: i18nActionsService,
7
+ sectionsBuilder: sectionsBuilderService,
8
+ engine: engineService
9
+ });
10
+
11
+ export { permissions as default };
12
+ //# sourceMappingURL=permissions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.mjs","sources":["../../../server/src/services/permissions.ts"],"sourcesContent":["import i18nActionsService from './permissions/actions';\nimport sectionsBuilderService from './permissions/sections-builder';\nimport engineService from './permissions/engine';\n\nconst permissions = () => ({\n actions: i18nActionsService,\n sectionsBuilder: sectionsBuilderService,\n engine: engineService,\n});\n\ntype PermissionsService = typeof permissions;\n\nexport default permissions;\nexport type { PermissionsService };\n"],"names":["permissions","actions","i18nActionsService","sectionsBuilder","sectionsBuilderService","engine","engineService"],"mappings":";;;;AAIMA,MAAAA,WAAAA,GAAc,KAAO;QACzBC,OAASC,EAAAA,kBAAAA;QACTC,eAAiBC,EAAAA,sBAAAA;QACjBC,MAAQC,EAAAA;KACV;;;;"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var fp = require('lodash/fp');
5
+ var index = require('../../utils/index.js');
6
+
7
+ const LOCALIZATION_FIELDS = [
8
+ 'locale',
9
+ 'localizations'
10
+ ];
11
+ const sanitize = ({ strapi })=>{
12
+ const { isLocalizedContentType } = index.getService('content-types');
13
+ /**
14
+ * Sanitizes localization fields of a given entity based on its schema.
15
+ *
16
+ * Remove localization-related fields that are unnecessary, that is
17
+ * for schemas that aren't localized.
18
+ */ const sanitizeLocalizationFields = fp.curry((schema, entity)=>utils.traverseEntity(({ key, schema }, { remove })=>{
19
+ const isLocalized = isLocalizedContentType(schema);
20
+ const isLocalizationField = LOCALIZATION_FIELDS.includes(key);
21
+ if (!isLocalized && isLocalizationField) {
22
+ remove(key);
23
+ }
24
+ }, {
25
+ schema,
26
+ getModel: strapi.getModel.bind(strapi)
27
+ }, entity));
28
+ return {
29
+ sanitizeLocalizationFields
30
+ };
31
+ };
32
+
33
+ module.exports = sanitize;
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../server/src/services/sanitize/index.ts"],"sourcesContent":["import type { Core, Schema, Data } from '@strapi/types';\n\nimport { traverseEntity } from '@strapi/utils';\nimport { curry } from 'lodash/fp';\n\nimport { getService } from '../../utils';\n\nconst LOCALIZATION_FIELDS = ['locale', 'localizations'];\n\nconst sanitize = ({ strapi }: { strapi: Core.Strapi }) => {\n const { isLocalizedContentType } = getService('content-types');\n\n /**\n * Sanitizes localization fields of a given entity based on its schema.\n *\n * Remove localization-related fields that are unnecessary, that is\n * for schemas that aren't localized.\n */\n const sanitizeLocalizationFields = curry((schema: Schema.Schema, entity: Data.Entity) =>\n traverseEntity(\n ({ key, schema }, { remove }) => {\n const isLocalized = isLocalizedContentType(schema);\n const isLocalizationField = LOCALIZATION_FIELDS.includes(key);\n\n if (!isLocalized && isLocalizationField) {\n remove(key);\n }\n },\n { schema, getModel: strapi.getModel.bind(strapi) },\n entity\n )\n );\n\n return {\n sanitizeLocalizationFields,\n };\n};\n\ntype SanitizeService = typeof sanitize;\n\nexport default sanitize;\nexport type { SanitizeService };\n"],"names":["LOCALIZATION_FIELDS","sanitize","strapi","isLocalizedContentType","getService","sanitizeLocalizationFields","curry","schema","entity","traverseEntity","key","remove","isLocalized","isLocalizationField","includes","getModel","bind"],"mappings":";;;;;;AAOA,MAAMA,mBAAsB,GAAA;AAAC,IAAA,QAAA;AAAU,IAAA;AAAgB,CAAA;AAEvD,MAAMC,QAAW,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACnD,IAAA,MAAM,EAAEC,sBAAsB,EAAE,GAAGC,gBAAW,CAAA,eAAA,CAAA;AAE9C;;;;;AAKC,MACD,MAAMC,0BAA6BC,GAAAA,QAAAA,CAAM,CAACC,MAAAA,EAAuBC,SAC/DC,oBACE,CAAA,CAAC,EAAEC,GAAG,EAAEH,MAAM,EAAE,EAAE,EAAEI,MAAM,EAAE,GAAA;AAC1B,YAAA,MAAMC,cAAcT,sBAAuBI,CAAAA,MAAAA,CAAAA;YAC3C,MAAMM,mBAAAA,GAAsBb,mBAAoBc,CAAAA,QAAQ,CAACJ,GAAAA,CAAAA;YAEzD,IAAI,CAACE,eAAeC,mBAAqB,EAAA;gBACvCF,MAAOD,CAAAA,GAAAA,CAAAA;AACT;SAEF,EAAA;AAAEH,YAAAA,MAAAA;AAAQQ,YAAAA,QAAAA,EAAUb,MAAOa,CAAAA,QAAQ,CAACC,IAAI,CAACd,MAAAA;SACzCM,EAAAA,MAAAA,CAAAA,CAAAA;IAIJ,OAAO;AACLH,QAAAA;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,32 @@
1
+ import { traverseEntity } from '@strapi/utils';
2
+ import { curry } from 'lodash/fp';
3
+ import { getService } from '../../utils/index.mjs';
4
+
5
+ const LOCALIZATION_FIELDS = [
6
+ 'locale',
7
+ 'localizations'
8
+ ];
9
+ const sanitize = ({ strapi })=>{
10
+ const { isLocalizedContentType } = getService('content-types');
11
+ /**
12
+ * Sanitizes localization fields of a given entity based on its schema.
13
+ *
14
+ * Remove localization-related fields that are unnecessary, that is
15
+ * for schemas that aren't localized.
16
+ */ const sanitizeLocalizationFields = curry((schema, entity)=>traverseEntity(({ key, schema }, { remove })=>{
17
+ const isLocalized = isLocalizedContentType(schema);
18
+ const isLocalizationField = LOCALIZATION_FIELDS.includes(key);
19
+ if (!isLocalized && isLocalizationField) {
20
+ remove(key);
21
+ }
22
+ }, {
23
+ schema,
24
+ getModel: strapi.getModel.bind(strapi)
25
+ }, entity));
26
+ return {
27
+ sanitizeLocalizationFields
28
+ };
29
+ };
30
+
31
+ export { sanitize as default };
32
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../server/src/services/sanitize/index.ts"],"sourcesContent":["import type { Core, Schema, Data } from '@strapi/types';\n\nimport { traverseEntity } from '@strapi/utils';\nimport { curry } from 'lodash/fp';\n\nimport { getService } from '../../utils';\n\nconst LOCALIZATION_FIELDS = ['locale', 'localizations'];\n\nconst sanitize = ({ strapi }: { strapi: Core.Strapi }) => {\n const { isLocalizedContentType } = getService('content-types');\n\n /**\n * Sanitizes localization fields of a given entity based on its schema.\n *\n * Remove localization-related fields that are unnecessary, that is\n * for schemas that aren't localized.\n */\n const sanitizeLocalizationFields = curry((schema: Schema.Schema, entity: Data.Entity) =>\n traverseEntity(\n ({ key, schema }, { remove }) => {\n const isLocalized = isLocalizedContentType(schema);\n const isLocalizationField = LOCALIZATION_FIELDS.includes(key);\n\n if (!isLocalized && isLocalizationField) {\n remove(key);\n }\n },\n { schema, getModel: strapi.getModel.bind(strapi) },\n entity\n )\n );\n\n return {\n sanitizeLocalizationFields,\n };\n};\n\ntype SanitizeService = typeof sanitize;\n\nexport default sanitize;\nexport type { SanitizeService };\n"],"names":["LOCALIZATION_FIELDS","sanitize","strapi","isLocalizedContentType","getService","sanitizeLocalizationFields","curry","schema","entity","traverseEntity","key","remove","isLocalized","isLocalizationField","includes","getModel","bind"],"mappings":";;;;AAOA,MAAMA,mBAAsB,GAAA;AAAC,IAAA,QAAA;AAAU,IAAA;AAAgB,CAAA;AAEvD,MAAMC,QAAW,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACnD,IAAA,MAAM,EAAEC,sBAAsB,EAAE,GAAGC,UAAW,CAAA,eAAA,CAAA;AAE9C;;;;;AAKC,MACD,MAAMC,0BAA6BC,GAAAA,KAAAA,CAAM,CAACC,MAAAA,EAAuBC,SAC/DC,cACE,CAAA,CAAC,EAAEC,GAAG,EAAEH,MAAM,EAAE,EAAE,EAAEI,MAAM,EAAE,GAAA;AAC1B,YAAA,MAAMC,cAAcT,sBAAuBI,CAAAA,MAAAA,CAAAA;YAC3C,MAAMM,mBAAAA,GAAsBb,mBAAoBc,CAAAA,QAAQ,CAACJ,GAAAA,CAAAA;YAEzD,IAAI,CAACE,eAAeC,mBAAqB,EAAA;gBACvCF,MAAOD,CAAAA,GAAAA,CAAAA;AACT;SAEF,EAAA;AAAEH,YAAAA,MAAAA;AAAQQ,YAAAA,QAAAA,EAAUb,MAAOa,CAAAA,QAAQ,CAACC,IAAI,CAACd,MAAAA;SACzCM,EAAAA,MAAAA,CAAAA,CAAAA;IAIJ,OAAO;AACLH,QAAAA;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ const getCoreStore = ()=>{
4
+ return strapi.store({
5
+ type: 'plugin',
6
+ name: 'i18n'
7
+ });
8
+ };
9
+ // retrieve a local service
10
+ const getService = (name)=>{
11
+ return strapi.plugin('i18n').service(name);
12
+ };
13
+
14
+ exports.getCoreStore = getCoreStore;
15
+ exports.getService = getService;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { LocaleService } from '../services/locales';\nimport type { PermissionsService } from '../services/permissions';\nimport type { ContentTypesService } from '../services/content-types';\nimport type { MetricsService } from '../services/metrics';\nimport type { ISOLocalesService } from '../services/iso-locales';\nimport type { LocalizationsService } from '../services/localizations';\nimport type { SanitizeService } from '../services/sanitize';\n\ntype S = {\n permissions: PermissionsService;\n metrics: MetricsService;\n locales: LocaleService;\n localizations: LocalizationsService;\n ['iso-locales']: ISOLocalesService;\n ['content-types']: ContentTypesService;\n sanitize: SanitizeService;\n};\n\nconst getCoreStore = () => {\n return strapi.store({ type: 'plugin', name: 'i18n' });\n};\n\n// retrieve a local service\nconst getService = <T extends keyof S>(name: T): ReturnType<S[T]> => {\n return strapi.plugin('i18n').service(name);\n};\n\nexport { getService, getCoreStore };\n"],"names":["getCoreStore","strapi","store","type","name","getService","plugin","service"],"mappings":";;AAkBA,MAAMA,YAAe,GAAA,IAAA;IACnB,OAAOC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAM,EAAA,QAAA;QAAUC,IAAM,EAAA;AAAO,KAAA,CAAA;AACrD;AAEA;AACA,MAAMC,aAAa,CAAoBD,IAAAA,GAAAA;AACrC,IAAA,OAAOH,MAAOK,CAAAA,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAACH,IAAAA,CAAAA;AACvC;;;;;"}
@@ -0,0 +1,13 @@
1
+ const getCoreStore = ()=>{
2
+ return strapi.store({
3
+ type: 'plugin',
4
+ name: 'i18n'
5
+ });
6
+ };
7
+ // retrieve a local service
8
+ const getService = (name)=>{
9
+ return strapi.plugin('i18n').service(name);
10
+ };
11
+
12
+ export { getCoreStore, getService };
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { LocaleService } from '../services/locales';\nimport type { PermissionsService } from '../services/permissions';\nimport type { ContentTypesService } from '../services/content-types';\nimport type { MetricsService } from '../services/metrics';\nimport type { ISOLocalesService } from '../services/iso-locales';\nimport type { LocalizationsService } from '../services/localizations';\nimport type { SanitizeService } from '../services/sanitize';\n\ntype S = {\n permissions: PermissionsService;\n metrics: MetricsService;\n locales: LocaleService;\n localizations: LocalizationsService;\n ['iso-locales']: ISOLocalesService;\n ['content-types']: ContentTypesService;\n sanitize: SanitizeService;\n};\n\nconst getCoreStore = () => {\n return strapi.store({ type: 'plugin', name: 'i18n' });\n};\n\n// retrieve a local service\nconst getService = <T extends keyof S>(name: T): ReturnType<S[T]> => {\n return strapi.plugin('i18n').service(name);\n};\n\nexport { getService, getCoreStore };\n"],"names":["getCoreStore","strapi","store","type","name","getService","plugin","service"],"mappings":"AAkBA,MAAMA,YAAe,GAAA,IAAA;IACnB,OAAOC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAM,EAAA,QAAA;QAAUC,IAAM,EAAA;AAAO,KAAA,CAAA;AACrD;AAEA;AACA,MAAMC,aAAa,CAAoBD,IAAAA,GAAAA;AACrC,IAAA,OAAOH,MAAOK,CAAAA,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAACH,IAAAA,CAAAA;AACvC;;;;"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var fp = require('lodash/fp');
5
+
6
+ const validateGetNonLocalizedAttributesSchema = utils.yup.object().shape({
7
+ model: utils.yup.string().required(),
8
+ id: utils.yup.mixed().when('model', {
9
+ is: (model)=>fp.get('kind', strapi.contentType(model)) === 'singleType',
10
+ then: utils.yup.strapiID().nullable(),
11
+ otherwise: utils.yup.strapiID().required()
12
+ }),
13
+ locale: utils.yup.string().required()
14
+ }).noUnknown().required();
15
+ const validateGetNonLocalizedAttributesInput = utils.validateYupSchema(validateGetNonLocalizedAttributesSchema);
16
+
17
+ exports.validateGetNonLocalizedAttributesInput = validateGetNonLocalizedAttributesInput;
18
+ //# sourceMappingURL=content-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.js","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { get } from 'lodash/fp';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => get('kind', strapi.contentType(model)) === 'singleType',\n then: yup.strapiID().nullable(),\n otherwise: yup.strapiID().required(),\n }),\n locale: yup.string().required(),\n })\n .noUnknown()\n .required();\n\nconst validateGetNonLocalizedAttributesInput = validateYupSchema(\n validateGetNonLocalizedAttributesSchema\n);\n\nexport { validateGetNonLocalizedAttributesInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","get","strapi","contentType","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema"],"mappings":";;;;;AAIA,MAAMA,uCAA0CC,GAAAA,SAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAOH,EAAAA,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,SAAIO,CAAAA,KAAK,EAAGC,CAAAA,IAAI,CAAC,OAAS,EAAA;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAeO,GAAAA,MAAAA,CAAI,QAAQC,MAAOC,CAAAA,WAAW,CAACT,KAAY,CAAA,CAAA,KAAA,YAAA;QAC/DU,IAAMb,EAAAA,SAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAWhB,EAAAA,SAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAQjB,EAAAA,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CACCa,CAAAA,CAAAA,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,uBAC7CrB,CAAAA,uCAAAA;;;;"}
@@ -0,0 +1,16 @@
1
+ import { yup, validateYupSchema } from '@strapi/utils';
2
+ import { get } from 'lodash/fp';
3
+
4
+ const validateGetNonLocalizedAttributesSchema = yup.object().shape({
5
+ model: yup.string().required(),
6
+ id: yup.mixed().when('model', {
7
+ is: (model)=>get('kind', strapi.contentType(model)) === 'singleType',
8
+ then: yup.strapiID().nullable(),
9
+ otherwise: yup.strapiID().required()
10
+ }),
11
+ locale: yup.string().required()
12
+ }).noUnknown().required();
13
+ const validateGetNonLocalizedAttributesInput = validateYupSchema(validateGetNonLocalizedAttributesSchema);
14
+
15
+ export { validateGetNonLocalizedAttributesInput };
16
+ //# sourceMappingURL=content-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.mjs","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { get } from 'lodash/fp';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => get('kind', strapi.contentType(model)) === 'singleType',\n then: yup.strapiID().nullable(),\n otherwise: yup.strapiID().required(),\n }),\n locale: yup.string().required(),\n })\n .noUnknown()\n .required();\n\nconst validateGetNonLocalizedAttributesInput = validateYupSchema(\n validateGetNonLocalizedAttributesSchema\n);\n\nexport { validateGetNonLocalizedAttributesInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","get","strapi","contentType","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema"],"mappings":";;;AAIA,MAAMA,uCAA0CC,GAAAA,GAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAOH,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,GAAIO,CAAAA,KAAK,EAAGC,CAAAA,IAAI,CAAC,OAAS,EAAA;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAeO,GAAAA,GAAAA,CAAI,QAAQC,MAAOC,CAAAA,WAAW,CAACT,KAAY,CAAA,CAAA,KAAA,YAAA;QAC/DU,IAAMb,EAAAA,GAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAWhB,EAAAA,GAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAQjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CACCa,CAAAA,CAAAA,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,iBAC7CrB,CAAAA,uCAAAA;;;;"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var utils = require('@strapi/utils');
5
+ require('../constants/index.js');
6
+ var isoLocales = require('../constants/iso-locales.json.js');
7
+
8
+ const allowedLocaleCodes = isoLocales.map(fp.prop('code'));
9
+ const createLocaleSchema = utils.yup.object().shape({
10
+ name: utils.yup.string().max(50).nullable(),
11
+ code: utils.yup.string().oneOf(allowedLocaleCodes).required(),
12
+ isDefault: utils.yup.boolean().required()
13
+ }).noUnknown();
14
+ const updateLocaleSchema = utils.yup.object().shape({
15
+ name: utils.yup.string().min(1).max(50).nullable(),
16
+ isDefault: utils.yup.boolean()
17
+ }).noUnknown();
18
+ const validateCreateLocaleInput = utils.validateYupSchema(createLocaleSchema);
19
+ const validateUpdateLocaleInput = utils.validateYupSchema(updateLocaleSchema);
20
+
21
+ exports.validateCreateLocaleInput = validateCreateLocaleInput;
22
+ exports.validateUpdateLocaleInput = validateUpdateLocaleInput;
23
+ //# sourceMappingURL=locales.js.map