@strapi/i18n 5.55.1 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/contentManagerHooks/editView.js +0 -1
- package/dist/admin/contentManagerHooks/editView.js.map +1 -1
- package/dist/admin/contentManagerHooks/editView.mjs +0 -1
- package/dist/admin/contentManagerHooks/editView.mjs.map +1 -1
- package/dist/server/bootstrap.js +2 -2
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +1 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +11 -11
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +11 -11
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/locales.js +2 -2
- package/dist/server/controllers/locales.js.map +1 -1
- package/dist/server/controllers/locales.mjs +2 -2
- package/dist/server/controllers/locales.mjs.map +1 -1
- package/dist/server/controllers/validate-locale-creation.js +1 -2
- package/dist/server/controllers/validate-locale-creation.js.map +1 -1
- package/dist/server/controllers/validate-locale-creation.mjs +1 -2
- package/dist/server/controllers/validate-locale-creation.mjs.map +1 -1
- package/dist/server/graphql.js +4 -4
- package/dist/server/graphql.js.map +1 -1
- package/dist/server/graphql.mjs +2 -2
- package/dist/server/graphql.mjs.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/localization.js +36 -0
- package/dist/server/localization.js.map +1 -0
- package/dist/server/localization.mjs +34 -0
- package/dist/server/localization.mjs.map +1 -0
- package/dist/server/register.js +2 -0
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +2 -0
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/services/ai-translations-strapi-managed.js +1 -1
- package/dist/server/services/ai-translations-strapi-managed.js.map +1 -1
- package/dist/server/services/ai-translations-strapi-managed.mjs +1 -1
- package/dist/server/services/ai-translations-strapi-managed.mjs.map +1 -1
- package/dist/server/services/ai-translations.js +2 -0
- package/dist/server/services/ai-translations.js.map +1 -1
- package/dist/server/services/ai-translations.mjs +2 -0
- package/dist/server/services/ai-translations.mjs.map +1 -1
- package/dist/server/services/content-types.js +12 -12
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +11 -11
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/fill-from-locale.js +5 -6
- package/dist/server/services/fill-from-locale.js.map +1 -1
- package/dist/server/services/fill-from-locale.mjs +5 -6
- package/dist/server/services/fill-from-locale.mjs.map +1 -1
- package/dist/server/services/locales.js +1 -2
- package/dist/server/services/locales.js.map +1 -1
- package/dist/server/services/locales.mjs +1 -2
- package/dist/server/services/locales.mjs.map +1 -1
- package/dist/server/services/localizations.js +4 -4
- package/dist/server/services/localizations.js.map +1 -1
- package/dist/server/services/localizations.mjs +1 -1
- package/dist/server/services/localizations.mjs.map +1 -1
- package/dist/server/services/metrics.js +1 -2
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +1 -2
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/permissions/actions.js +5 -5
- package/dist/server/services/permissions/actions.js.map +1 -1
- package/dist/server/services/permissions/actions.mjs +5 -5
- package/dist/server/services/permissions/actions.mjs.map +1 -1
- package/dist/server/services/permissions/sections-builder.js +2 -2
- package/dist/server/services/permissions/sections-builder.js.map +1 -1
- package/dist/server/services/permissions/sections-builder.mjs +1 -1
- package/dist/server/services/permissions/sections-builder.mjs.map +1 -1
- package/dist/server/services/sanitize/index.js +2 -2
- package/dist/server/services/sanitize/index.js.map +1 -1
- package/dist/server/services/sanitize/index.mjs +1 -1
- package/dist/server/services/sanitize/index.mjs.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/validate-locale-creation.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/localization.d.ts +4 -0
- package/dist/server/src/localization.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/ai-translations.d.ts.map +1 -1
- package/dist/server/src/services/fill-from-locale.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/locales.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/validation/content-types.d.ts.map +1 -1
- package/dist/server/src/validation/locales.d.ts.map +1 -1
- package/dist/server/validation/content-types.js +1 -2
- package/dist/server/validation/content-types.js.map +1 -1
- package/dist/server/validation/content-types.mjs +1 -2
- package/dist/server/validation/content-types.mjs.map +1 -1
- package/dist/server/validation/locales.js +1 -2
- package/dist/server/validation/locales.js.map +1 -1
- package/dist/server/validation/locales.mjs +1 -2
- package/dist/server/validation/locales.mjs.map +1 -1
- package/package.json +12 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","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\n/**\n * `properties.locales === null` means access to all locales (see engine handler) — do not patch.\n */\nconst needsLocalesPatch = (properties: Record<string, unknown> = {}) => {\n if (!('locales' in properties)) {\n return true;\n }\n\n const { locales } = properties;\n\n if (locales === null) {\n return false;\n }\n\n return Array.isArray(locales) && locales.length === 0;\n};\n\nconst normalizeRolePermissionsLocales = async (permissions: any[]): Promise<any[]> => {\n const { isLocalizedContentType } = getService('content-types');\n const { actionProvider } = strapi.service('admin::permission');\n const defaultLocale = await getService('locales').getDefaultLocale();\n\n return Promise.all(\n permissions.map(async (permission) => {\n const { subject, action, properties = {} } = permission;\n\n if (!subject) {\n return permission;\n }\n\n const model = strapi.getModel(subject);\n\n if (!model || !isLocalizedContentType(model)) {\n return permission;\n }\n\n const appliesToLocales = await actionProvider.appliesToProperty('locales', action, subject);\n\n if (!appliesToLocales) {\n return permission;\n }\n\n // null means access to all locales — same semantics as the permission engine handler\n if (properties.locales === null) {\n return permission;\n }\n\n if (needsLocalesPatch(properties) && defaultLocale) {\n return { ...permission, properties: { ...properties, locales: [defaultLocale] } };\n }\n\n return permission;\n })\n );\n};\n\n/**\n * Repairs role permissions on content types that just had i18n enabled in this sync.\n * Only patches permissions where `properties.locales` is missing or `[]`; leaves `null` alone.\n * Safe to run at `afterSync` time because it does not depend on the actionProvider.\n */\nconst repairPermissionsForNewlyLocalizedTypes = async ({\n oldContentTypes,\n contentTypes,\n}: {\n oldContentTypes: Record<string, any> | null | undefined;\n contentTypes: Record<string, any>;\n}) => {\n if (!oldContentTypes) {\n return;\n }\n\n const { isLocalizedContentType } = getService('content-types');\n\n const newlyLocalizedUids = Object.keys(contentTypes).filter(\n (uid) =>\n oldContentTypes[uid] &&\n !isLocalizedContentType(oldContentTypes[uid]) &&\n isLocalizedContentType(contentTypes[uid])\n );\n\n if (newlyLocalizedUids.length === 0) {\n return;\n }\n\n try {\n const defaultLocaleCode = await getService('locales').getDefaultLocale();\n if (!defaultLocaleCode) {\n return;\n }\n\n const permissionService = strapi.service('admin::permission');\n const allPermissions = await permissionService.findMany({\n where: { subject: { $in: newlyLocalizedUids } },\n });\n\n const results = await Promise.allSettled(\n allPermissions\n .filter((permission: any) => needsLocalesPatch(permission.properties))\n .map((permission: any) =>\n strapi.db.query('admin::permission').update({\n where: { id: permission.id },\n data: {\n properties: { ...permission.properties, locales: [defaultLocaleCode] },\n },\n })\n )\n );\n\n results\n .filter((r): r is PromiseRejectedResult => r.status === 'rejected')\n .forEach((r) =>\n strapi.log.error(\n 'Failed to patch i18n permission during newly-localized type repair.',\n r.reason\n )\n );\n } catch (error) {\n strapi.log.error('Failed to repair i18n permissions for newly localized content types.', error);\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 hooks.willValidateUpdatePermissions.register(normalizeRolePermissionsLocales);\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 repairPermissionsForNewlyLocalizedTypes,\n normalizeRolePermissionsLocales,\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","needsLocalesPatch","Array","length","normalizeRolePermissionsLocales","defaultLocale","getDefaultLocale","appliesToLocales","repairPermissionsForNewlyLocalizedTypes","oldContentTypes","contentTypes","newlyLocalizedUids","Object","keys","filter","defaultLocaleCode","permissionService","allPermissions","findMany","where","$in","results","allSettled","db","query","update","id","data","r","status","forEach","log","error","reason","syncSuperAdminPermissionsWithLocales","roleService","superAdminRole","getSuperAdmin","superAdminPermissions","role","newSuperAdminPermissions","assignPermissions","registerI18nActions","registerMany","registerI18nActionsHooks","hooks","appliesPropertyToSubject","register","willResetSuperAdminPermissions","willValidateUpdatePermissions","updateActionsProperties","willRegister","values"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","sources":["../../../../server/src/services/permissions/actions.ts"],"sourcesContent":["import { get } from 'lodash';\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 (Array.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 = Array.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((locale) => locale?.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 = get(permission, 'properties', {});\n\n return { ...permission, properties: { ...oldPermissionProperties, locales: allLocalesCode } };\n })\n );\n};\n\n/**\n * `properties.locales === null` means access to all locales (see engine handler) — do not patch.\n */\nconst needsLocalesPatch = (properties: Record<string, unknown> = {}) => {\n if (!('locales' in properties)) {\n return true;\n }\n\n const { locales } = properties;\n\n if (locales === null) {\n return false;\n }\n\n return Array.isArray(locales) && locales.length === 0;\n};\n\nconst normalizeRolePermissionsLocales = async (permissions: any[]): Promise<any[]> => {\n const { isLocalizedContentType } = getService('content-types');\n const { actionProvider } = strapi.service('admin::permission');\n const defaultLocale = await getService('locales').getDefaultLocale();\n\n return Promise.all(\n permissions.map(async (permission) => {\n const { subject, action, properties = {} } = permission;\n\n if (!subject) {\n return permission;\n }\n\n const model = strapi.getModel(subject);\n\n if (!model || !isLocalizedContentType(model)) {\n return permission;\n }\n\n const appliesToLocales = await actionProvider.appliesToProperty('locales', action, subject);\n\n if (!appliesToLocales) {\n return permission;\n }\n\n // null means access to all locales — same semantics as the permission engine handler\n if (properties.locales === null) {\n return permission;\n }\n\n if (needsLocalesPatch(properties) && defaultLocale) {\n return { ...permission, properties: { ...properties, locales: [defaultLocale] } };\n }\n\n return permission;\n })\n );\n};\n\n/**\n * Repairs role permissions on content types that just had i18n enabled in this sync.\n * Only patches permissions where `properties.locales` is missing or `[]`; leaves `null` alone.\n * Safe to run at `afterSync` time because it does not depend on the actionProvider.\n */\nconst repairPermissionsForNewlyLocalizedTypes = async ({\n oldContentTypes,\n contentTypes,\n}: {\n oldContentTypes: Record<string, any> | null | undefined;\n contentTypes: Record<string, any>;\n}) => {\n if (!oldContentTypes) {\n return;\n }\n\n const { isLocalizedContentType } = getService('content-types');\n\n const newlyLocalizedUids = Object.keys(contentTypes).filter(\n (uid) =>\n oldContentTypes[uid] &&\n !isLocalizedContentType(oldContentTypes[uid]) &&\n isLocalizedContentType(contentTypes[uid])\n );\n\n if (newlyLocalizedUids.length === 0) {\n return;\n }\n\n try {\n const defaultLocaleCode = await getService('locales').getDefaultLocale();\n if (!defaultLocaleCode) {\n return;\n }\n\n const permissionService = strapi.service('admin::permission');\n const allPermissions = await permissionService.findMany({\n where: { subject: { $in: newlyLocalizedUids } },\n });\n\n const results = await Promise.allSettled(\n allPermissions\n .filter((permission: any) => needsLocalesPatch(permission.properties))\n .map((permission: any) =>\n strapi.db.query('admin::permission').update({\n where: { id: permission.id },\n data: {\n properties: { ...permission.properties, locales: [defaultLocaleCode] },\n },\n })\n )\n );\n\n results\n .filter((r): r is PromiseRejectedResult => r.status === 'rejected')\n .forEach((r) =>\n strapi.log.error(\n 'Failed to patch i18n permission during newly-localized type repair.',\n r.reason\n )\n );\n } catch (error) {\n strapi.log.error('Failed to repair i18n permissions for newly localized content types.', error);\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 hooks.willValidateUpdatePermissions.register(normalizeRolePermissionsLocales);\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 repairPermissionsForNewlyLocalizedTypes,\n normalizeRolePermissionsLocales,\n};\n"],"names":["actions","section","category","subCategory","pluginName","displayName","uid","aliases","actionId","subjects","addLocalesPropertyIfNeeded","value","action","options","applyToProperties","Array","isArray","includes","concat","shouldApplyLocalesPropertyToSubject","property","subject","model","strapi","getModel","getService","isLocalizedContentType","addAllLocalesToPermissions","permissions","actionProvider","service","find","findAllLocales","allLocales","allLocalesCode","map","locale","code","Promise","all","permission","appliesToLocalesProperty","appliesToProperty","oldPermissionProperties","get","properties","locales","needsLocalesPatch","length","normalizeRolePermissionsLocales","defaultLocale","getDefaultLocale","appliesToLocales","repairPermissionsForNewlyLocalizedTypes","oldContentTypes","contentTypes","newlyLocalizedUids","Object","keys","filter","defaultLocaleCode","permissionService","allPermissions","findMany","where","$in","results","allSettled","db","query","update","id","data","r","status","forEach","log","error","reason","syncSuperAdminPermissionsWithLocales","roleService","superAdminRole","getSuperAdmin","superAdminPermissions","role","newSuperAdminPermissions","assignPermissions","registerI18nActions","registerMany","registerI18nActionsHooks","hooks","appliesPropertyToSubject","register","willResetSuperAdminPermissions","willValidateUpdatePermissions","updateActionsProperties","willRegister","values"],"mappings":";;;;;AAGA,MAAMA,OAAAA,GAAU;AACd,IAAA;QACEC,OAAAA,EAAS,UAAA;QACTC,QAAAA,EAAU,sBAAA;QACVC,WAAAA,EAAa,SAAA;QACbC,UAAAA,EAAY,MAAA;QACZC,WAAAA,EAAa,QAAA;QACbC,GAAAA,EAAK;AACP,KAAA;AACA,IAAA;QACEL,OAAAA,EAAS,UAAA;QACTC,QAAAA,EAAU,sBAAA;QACVC,WAAAA,EAAa,SAAA;QACbC,UAAAA,EAAY,MAAA;QACZC,WAAAA,EAAa,MAAA;QACbC,GAAAA,EAAK,aAAA;QACLC,OAAAA,EAAS;AACP,YAAA;gBAAEC,QAAAA,EAAU,uCAAA;gBAAyCC,QAAAA,EAAU;AAAC,oBAAA;AAAsB;AAAC;AACxF;AACH,KAAA;AACA,IAAA;QACER,OAAAA,EAAS,UAAA;QACTC,QAAAA,EAAU,sBAAA;QACVC,WAAAA,EAAa,SAAA;QACbC,UAAAA,EAAY,MAAA;QACZC,WAAAA,EAAa,QAAA;QACbC,GAAAA,EAAK;AACP,KAAA;AACA,IAAA;QACEL,OAAAA,EAAS,UAAA;QACTC,QAAAA,EAAU,sBAAA;QACVC,WAAAA,EAAa,SAAA;QACbC,UAAAA,EAAY,MAAA;QACZC,WAAAA,EAAa,QAAA;QACbC,GAAAA,EAAK;AACP;AACD,CAAA;AAED,MAAMI,0BAAAA,GAA6B,CAAC,EAAEC,KAAAA,EAAOC,MAAM,EAAO,GAAA;IACxD,MAAM,EACJX,OAAO,EACPY,OAAAA,EAAS,EAAEC,iBAAiB,EAAE,EAC/B,GAAGF,MAAAA;;AAGJ,IAAA,IAAIX,YAAY,cAAA,EAAgB;AAC9B,QAAA;AACF,IAAA;;AAGA,IAAA,IAAIc,MAAMC,OAAO,CAACF,sBAAsBA,iBAAAA,CAAkBG,QAAQ,CAAC,SAAA,CAAA,EAAY;AAC7E,QAAA;AACF,IAAA;;IAGAL,MAAAA,CAAOC,OAAO,CAACC,iBAAiB,GAAGC,KAAAA,CAAMC,OAAO,CAACF,iBAAAA,CAAAA,GAC7CA,iBAAAA,CAAkBI,MAAM,CAAC,SAAA,CAAA,GACzB;AAAC,QAAA;AAAU,KAAA;AACjB,CAAA;AAEA,MAAMC,sCAAsC,CAAC,EAAEC,QAAQ,EAAEC,OAAO,EAAO,GAAA;AACrE,IAAA,IAAID,aAAa,SAAA,EAAW;QAC1B,MAAME,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAACH,OAAAA,CAAAA;QAE9B,OAAOI,gBAAAA,CAAW,eAAA,CAAA,CAAiBC,sBAAsB,CAACJ,KAAAA,CAAAA;AAC5D,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMK,6BAA6B,OAAOC,WAAAA,GAAAA;AACxC,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGN,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;AAC1C,IAAA,MAAM,EAAEC,IAAAA,EAAMC,cAAc,EAAE,GAAGP,gBAAAA,CAAW,SAAA,CAAA;AAE5C,IAAA,MAAMQ,aAAa,MAAMD,cAAAA,EAAAA;AACzB,IAAA,MAAME,iBAAiBD,UAAAA,CAAWE,GAAG,CAAC,CAACC,SAAWA,MAAAA,EAAQC,IAAAA,CAAAA;AAE1D,IAAA,OAAOC,QAAQC,GAAG,CAChBX,WAAAA,CAAYO,GAAG,CAAC,OAAOK,UAAAA,GAAAA;AACrB,QAAA,MAAM,EAAE5B,MAAM,EAAES,OAAO,EAAE,GAAGmB,UAAAA;AAE5B,QAAA,MAAMC,2BAA2B,MAAMZ,cAAAA,CAAea,iBAAiB,CACrE,WACA9B,MAAAA,EACAS,OAAAA,CAAAA;AAGF,QAAA,IAAI,CAACoB,wBAAAA,EAA0B;YAC7B,OAAOD,UAAAA;AACT,QAAA;AAEA,QAAA,MAAMG,uBAAAA,GAA0BC,KAAAA,CAAIJ,UAAAA,EAAY,YAAA,EAAc,EAAC,CAAA;QAE/D,OAAO;AAAE,YAAA,GAAGA,UAAU;YAAEK,UAAAA,EAAY;AAAE,gBAAA,GAAGF,uBAAuB;gBAAEG,OAAAA,EAASZ;AAAe;AAAE,SAAA;AAC9F,IAAA,CAAA,CAAA,CAAA;AAEJ,CAAA;AAEA;;AAEC,IACD,MAAMa,iBAAAA,GAAoB,CAACF,UAAAA,GAAsC,EAAE,GAAA;AACjE,IAAA,IAAI,EAAE,SAAA,IAAaA,UAAS,CAAA,EAAI;QAC9B,OAAO,IAAA;AACT,IAAA;IAEA,MAAM,EAAEC,OAAO,EAAE,GAAGD,UAAAA;AAEpB,IAAA,IAAIC,YAAY,IAAA,EAAM;QACpB,OAAO,KAAA;AACT,IAAA;AAEA,IAAA,OAAO/B,MAAMC,OAAO,CAAC8B,OAAAA,CAAAA,IAAYA,OAAAA,CAAQE,MAAM,KAAK,CAAA;AACtD,CAAA;AAEA,MAAMC,kCAAkC,OAAOrB,WAAAA,GAAAA;AAC7C,IAAA,MAAM,EAAEF,sBAAsB,EAAE,GAAGD,gBAAAA,CAAW,eAAA,CAAA;AAC9C,IAAA,MAAM,EAAEI,cAAc,EAAE,GAAGN,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;AAC1C,IAAA,MAAMoB,aAAAA,GAAgB,MAAMzB,gBAAAA,CAAW,SAAA,CAAA,CAAW0B,gBAAgB,EAAA;AAElE,IAAA,OAAOb,QAAQC,GAAG,CAChBX,WAAAA,CAAYO,GAAG,CAAC,OAAOK,UAAAA,GAAAA;QACrB,MAAM,EAAEnB,OAAO,EAAET,MAAM,EAAEiC,UAAAA,GAAa,EAAE,EAAE,GAAGL,UAAAA;AAE7C,QAAA,IAAI,CAACnB,OAAAA,EAAS;YACZ,OAAOmB,UAAAA;AACT,QAAA;QAEA,MAAMlB,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAACH,OAAAA,CAAAA;AAE9B,QAAA,IAAI,CAACC,KAAAA,IAAS,CAACI,sBAAAA,CAAuBJ,KAAAA,CAAAA,EAAQ;YAC5C,OAAOkB,UAAAA;AACT,QAAA;AAEA,QAAA,MAAMY,mBAAmB,MAAMvB,cAAAA,CAAea,iBAAiB,CAAC,WAAW9B,MAAAA,EAAQS,OAAAA,CAAAA;AAEnF,QAAA,IAAI,CAAC+B,gBAAAA,EAAkB;YACrB,OAAOZ,UAAAA;AACT,QAAA;;QAGA,IAAIK,UAAAA,CAAWC,OAAO,KAAK,IAAA,EAAM;YAC/B,OAAON,UAAAA;AACT,QAAA;QAEA,IAAIO,iBAAAA,CAAkBF,eAAeK,aAAAA,EAAe;YAClD,OAAO;AAAE,gBAAA,GAAGV,UAAU;gBAAEK,UAAAA,EAAY;AAAE,oBAAA,GAAGA,UAAU;oBAAEC,OAAAA,EAAS;AAACI,wBAAAA;AAAc;AAAC;AAAE,aAAA;AAClF,QAAA;QAEA,OAAOV,UAAAA;AACT,IAAA,CAAA,CAAA,CAAA;AAEJ,CAAA;AAEA;;;;AAIC,IACD,MAAMa,uCAAAA,GAA0C,OAAO,EACrDC,eAAe,EACfC,YAAY,EAIb,GAAA;AACC,IAAA,IAAI,CAACD,eAAAA,EAAiB;AACpB,QAAA;AACF,IAAA;AAEA,IAAA,MAAM,EAAE5B,sBAAsB,EAAE,GAAGD,gBAAAA,CAAW,eAAA,CAAA;IAE9C,MAAM+B,kBAAAA,GAAqBC,OAAOC,IAAI,CAACH,cAAcI,MAAM,CACzD,CAACrD,GAAAA,GACCgD,eAAe,CAAChD,IAAI,IACpB,CAACoB,uBAAuB4B,eAAe,CAAChD,IAAI,CAAA,IAC5CoB,sBAAAA,CAAuB6B,YAAY,CAACjD,GAAAA,CAAI,CAAA,CAAA;IAG5C,IAAIkD,kBAAAA,CAAmBR,MAAM,KAAK,CAAA,EAAG;AACnC,QAAA;AACF,IAAA;IAEA,IAAI;AACF,QAAA,MAAMY,iBAAAA,GAAoB,MAAMnC,gBAAAA,CAAW,SAAA,CAAA,CAAW0B,gBAAgB,EAAA;AACtE,QAAA,IAAI,CAACS,iBAAAA,EAAmB;AACtB,YAAA;AACF,QAAA;QAEA,MAAMC,iBAAAA,GAAoBtC,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;AACzC,QAAA,MAAMgC,cAAAA,GAAiB,MAAMD,iBAAAA,CAAkBE,QAAQ,CAAC;YACtDC,KAAAA,EAAO;gBAAE3C,OAAAA,EAAS;oBAAE4C,GAAAA,EAAKT;AAAmB;AAAE;AAChD,SAAA,CAAA;QAEA,MAAMU,OAAAA,GAAU,MAAM5B,OAAAA,CAAQ6B,UAAU,CACtCL,eACGH,MAAM,CAAC,CAACnB,UAAAA,GAAoBO,iBAAAA,CAAkBP,UAAAA,CAAWK,UAAU,CAAA,CAAA,CACnEV,GAAG,CAAC,CAACK,UAAAA,GACJjB,MAAAA,CAAO6C,EAAE,CAACC,KAAK,CAAC,mBAAA,CAAA,CAAqBC,MAAM,CAAC;gBAC1CN,KAAAA,EAAO;AAAEO,oBAAAA,EAAAA,EAAI/B,WAAW+B;AAAG,iBAAA;gBAC3BC,IAAAA,EAAM;oBACJ3B,UAAAA,EAAY;AAAE,wBAAA,GAAGL,WAAWK,UAAU;wBAAEC,OAAAA,EAAS;AAACc,4BAAAA;AAAkB;AAAC;AACvE;AACF,aAAA,CAAA,CAAA,CAAA;AAINM,QAAAA,OAAAA,CACGP,MAAM,CAAC,CAACc,IAAkCA,CAAAA,CAAEC,MAAM,KAAK,UAAA,CAAA,CACvDC,OAAO,CAAC,CAACF,CAAAA,GACRlD,OAAOqD,GAAG,CAACC,KAAK,CACd,qEAAA,EACAJ,EAAEK,MAAM,CAAA,CAAA;AAGhB,IAAA,CAAA,CAAE,OAAOD,KAAAA,EAAO;AACdtD,QAAAA,MAAAA,CAAOqD,GAAG,CAACC,KAAK,CAAC,sEAAA,EAAwEA,KAAAA,CAAAA;AAC3F,IAAA;AACF,CAAA;AAEA,MAAME,oCAAAA,GAAuC,UAAA;IAC3C,MAAMC,WAAAA,GAAczD,MAAAA,CAAOO,OAAO,CAAC,aAAA,CAAA;IACnC,MAAM+B,iBAAAA,GAAoBtC,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;IAEzC,MAAMmD,cAAAA,GAAiB,MAAMD,WAAAA,CAAYE,aAAa,EAAA;AAEtD,IAAA,IAAI,CAACD,cAAAA,EAAgB;AACnB,QAAA;AACF,IAAA;AAEA,IAAA,MAAME,qBAAAA,GAAwB,MAAMtB,iBAAAA,CAAkBE,QAAQ,CAAC;QAC7DC,KAAAA,EAAO;YACLoB,IAAAA,EAAM;AACJb,gBAAAA,EAAAA,EAAIU,eAAeV;AACrB;AACF;AACF,KAAA,CAAA;IAEA,MAAMc,wBAAAA,GAA2B,MAAM1D,0BAAAA,CAA2BwD,qBAAAA,CAAAA;AAElE,IAAA,MAAMH,WAAAA,CAAYM,iBAAiB,CAACL,cAAAA,CAAeV,EAAE,EAAEc,wBAAAA,CAAAA;AACzD,CAAA;AAEA,MAAME,mBAAAA,GAAsB,UAAA;AAC1B,IAAA,MAAM,EAAE1D,cAAc,EAAE,GAAGN,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;IAE1C,MAAMD,cAAAA,CAAe2D,YAAY,CAACxF,OAAAA,CAAAA;AACpC,CAAA;AAEA,MAAMyF,wBAAAA,GAA2B,IAAA;AAC/B,IAAA,MAAM,EAAE5D,cAAc,EAAE,GAAGN,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;AAC1C,IAAA,MAAM,EAAE4D,KAAK,EAAE,GAAGnE,MAAAA,CAAOO,OAAO,CAAC,aAAA,CAAA;AAEjCD,IAAAA,cAAAA,CAAe6D,KAAK,CAACC,wBAAwB,CAACC,QAAQ,CAACzE,mCAAAA,CAAAA;IACvDuE,KAAAA,CAAMG,8BAA8B,CAACD,QAAQ,CAACjE,0BAAAA,CAAAA;IAC9C+D,KAAAA,CAAMI,6BAA6B,CAACF,QAAQ,CAAC3C,+BAAAA,CAAAA;AAC/C,CAAA;AAEA,MAAM8C,uBAAAA,GAA0B,IAAA;AAC9B,IAAA,MAAM,EAAElE,cAAc,EAAE,GAAGN,MAAAA,CAAOO,OAAO,CAAC,mBAAA,CAAA;;AAG1CD,IAAAA,cAAAA,CAAe6D,KAAK,CAACM,YAAY,CAACJ,QAAQ,CAAClF,0BAAAA,CAAAA;;AAG3CmB,IAAAA,cAAAA,CAAeoE,MAAM,EAAA,CAAGtB,OAAO,CAAC,CAAC/D,SAAgBF,0BAAAA,CAA2B;YAAEC,KAAAA,EAAOC;AAAO,SAAA,CAAA,CAAA;AAC9F,CAAA;AAEA,yBAAe;AACbZ,IAAAA,OAAAA;AACAuF,IAAAA,mBAAAA;AACAE,IAAAA,wBAAAA;AACAM,IAAAA,uBAAAA;AACAhB,IAAAA,oCAAAA;AACA1B,IAAAA,uCAAAA;AACAJ,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { get } from 'lodash';
|
|
2
2
|
import { getService } from '../../utils/index.mjs';
|
|
3
3
|
|
|
4
4
|
const actions = [
|
|
@@ -50,11 +50,11 @@ const addLocalesPropertyIfNeeded = ({ value: action })=>{
|
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
52
|
// If the 'locales' property is already declared within the applyToProperties array, then ignore the next steps
|
|
53
|
-
if (isArray(applyToProperties) && applyToProperties.includes('locales')) {
|
|
53
|
+
if (Array.isArray(applyToProperties) && applyToProperties.includes('locales')) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
// Add the 'locales' property to the applyToProperties array (create it if necessary)
|
|
57
|
-
action.options.applyToProperties = isArray(applyToProperties) ? applyToProperties.concat('locales') : [
|
|
57
|
+
action.options.applyToProperties = Array.isArray(applyToProperties) ? applyToProperties.concat('locales') : [
|
|
58
58
|
'locales'
|
|
59
59
|
];
|
|
60
60
|
};
|
|
@@ -69,14 +69,14 @@ const addAllLocalesToPermissions = async (permissions)=>{
|
|
|
69
69
|
const { actionProvider } = strapi.service('admin::permission');
|
|
70
70
|
const { find: findAllLocales } = getService('locales');
|
|
71
71
|
const allLocales = await findAllLocales();
|
|
72
|
-
const allLocalesCode = allLocales.map(
|
|
72
|
+
const allLocalesCode = allLocales.map((locale)=>locale?.code);
|
|
73
73
|
return Promise.all(permissions.map(async (permission)=>{
|
|
74
74
|
const { action, subject } = permission;
|
|
75
75
|
const appliesToLocalesProperty = await actionProvider.appliesToProperty('locales', action, subject);
|
|
76
76
|
if (!appliesToLocalesProperty) {
|
|
77
77
|
return permission;
|
|
78
78
|
}
|
|
79
|
-
const oldPermissionProperties =
|
|
79
|
+
const oldPermissionProperties = get(permission, 'properties', {});
|
|
80
80
|
return {
|
|
81
81
|
...permission,
|
|
82
82
|
properties: {
|
|
@@ -1 +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\n/**\n * `properties.locales === null` means access to all locales (see engine handler) — do not patch.\n */\nconst needsLocalesPatch = (properties: Record<string, unknown> = {}) => {\n if (!('locales' in properties)) {\n return true;\n }\n\n const { locales } = properties;\n\n if (locales === null) {\n return false;\n }\n\n return Array.isArray(locales) && locales.length === 0;\n};\n\nconst normalizeRolePermissionsLocales = async (permissions: any[]): Promise<any[]> => {\n const { isLocalizedContentType } = getService('content-types');\n const { actionProvider } = strapi.service('admin::permission');\n const defaultLocale = await getService('locales').getDefaultLocale();\n\n return Promise.all(\n permissions.map(async (permission) => {\n const { subject, action, properties = {} } = permission;\n\n if (!subject) {\n return permission;\n }\n\n const model = strapi.getModel(subject);\n\n if (!model || !isLocalizedContentType(model)) {\n return permission;\n }\n\n const appliesToLocales = await actionProvider.appliesToProperty('locales', action, subject);\n\n if (!appliesToLocales) {\n return permission;\n }\n\n // null means access to all locales — same semantics as the permission engine handler\n if (properties.locales === null) {\n return permission;\n }\n\n if (needsLocalesPatch(properties) && defaultLocale) {\n return { ...permission, properties: { ...properties, locales: [defaultLocale] } };\n }\n\n return permission;\n })\n );\n};\n\n/**\n * Repairs role permissions on content types that just had i18n enabled in this sync.\n * Only patches permissions where `properties.locales` is missing or `[]`; leaves `null` alone.\n * Safe to run at `afterSync` time because it does not depend on the actionProvider.\n */\nconst repairPermissionsForNewlyLocalizedTypes = async ({\n oldContentTypes,\n contentTypes,\n}: {\n oldContentTypes: Record<string, any> | null | undefined;\n contentTypes: Record<string, any>;\n}) => {\n if (!oldContentTypes) {\n return;\n }\n\n const { isLocalizedContentType } = getService('content-types');\n\n const newlyLocalizedUids = Object.keys(contentTypes).filter(\n (uid) =>\n oldContentTypes[uid] &&\n !isLocalizedContentType(oldContentTypes[uid]) &&\n isLocalizedContentType(contentTypes[uid])\n );\n\n if (newlyLocalizedUids.length === 0) {\n return;\n }\n\n try {\n const defaultLocaleCode = await getService('locales').getDefaultLocale();\n if (!defaultLocaleCode) {\n return;\n }\n\n const permissionService = strapi.service('admin::permission');\n const allPermissions = await permissionService.findMany({\n where: { subject: { $in: newlyLocalizedUids } },\n });\n\n const results = await Promise.allSettled(\n allPermissions\n .filter((permission: any) => needsLocalesPatch(permission.properties))\n .map((permission: any) =>\n strapi.db.query('admin::permission').update({\n where: { id: permission.id },\n data: {\n properties: { ...permission.properties, locales: [defaultLocaleCode] },\n },\n })\n )\n );\n\n results\n .filter((r): r is PromiseRejectedResult => r.status === 'rejected')\n .forEach((r) =>\n strapi.log.error(\n 'Failed to patch i18n permission during newly-localized type repair.',\n r.reason\n )\n );\n } catch (error) {\n strapi.log.error('Failed to repair i18n permissions for newly localized content types.', error);\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 hooks.willValidateUpdatePermissions.register(normalizeRolePermissionsLocales);\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 repairPermissionsForNewlyLocalizedTypes,\n normalizeRolePermissionsLocales,\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","needsLocalesPatch","Array","length","normalizeRolePermissionsLocales","defaultLocale","getDefaultLocale","appliesToLocales","repairPermissionsForNewlyLocalizedTypes","oldContentTypes","contentTypes","newlyLocalizedUids","Object","keys","filter","defaultLocaleCode","permissionService","allPermissions","findMany","where","$in","results","allSettled","db","query","update","id","data","r","status","forEach","log","error","reason","syncSuperAdminPermissionsWithLocales","roleService","superAdminRole","getSuperAdmin","superAdminPermissions","role","newSuperAdminPermissions","assignPermissions","registerI18nActions","registerMany","registerI18nActionsHooks","hooks","appliesPropertyToSubject","register","willResetSuperAdminPermissions","willValidateUpdatePermissions","updateActionsProperties","willRegister","values"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.mjs","sources":["../../../../server/src/services/permissions/actions.ts"],"sourcesContent":["import { get } from 'lodash';\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 (Array.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 = Array.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((locale) => locale?.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 = get(permission, 'properties', {});\n\n return { ...permission, properties: { ...oldPermissionProperties, locales: allLocalesCode } };\n })\n );\n};\n\n/**\n * `properties.locales === null` means access to all locales (see engine handler) — do not patch.\n */\nconst needsLocalesPatch = (properties: Record<string, unknown> = {}) => {\n if (!('locales' in properties)) {\n return true;\n }\n\n const { locales } = properties;\n\n if (locales === null) {\n return false;\n }\n\n return Array.isArray(locales) && locales.length === 0;\n};\n\nconst normalizeRolePermissionsLocales = async (permissions: any[]): Promise<any[]> => {\n const { isLocalizedContentType } = getService('content-types');\n const { actionProvider } = strapi.service('admin::permission');\n const defaultLocale = await getService('locales').getDefaultLocale();\n\n return Promise.all(\n permissions.map(async (permission) => {\n const { subject, action, properties = {} } = permission;\n\n if (!subject) {\n return permission;\n }\n\n const model = strapi.getModel(subject);\n\n if (!model || !isLocalizedContentType(model)) {\n return permission;\n }\n\n const appliesToLocales = await actionProvider.appliesToProperty('locales', action, subject);\n\n if (!appliesToLocales) {\n return permission;\n }\n\n // null means access to all locales — same semantics as the permission engine handler\n if (properties.locales === null) {\n return permission;\n }\n\n if (needsLocalesPatch(properties) && defaultLocale) {\n return { ...permission, properties: { ...properties, locales: [defaultLocale] } };\n }\n\n return permission;\n })\n );\n};\n\n/**\n * Repairs role permissions on content types that just had i18n enabled in this sync.\n * Only patches permissions where `properties.locales` is missing or `[]`; leaves `null` alone.\n * Safe to run at `afterSync` time because it does not depend on the actionProvider.\n */\nconst repairPermissionsForNewlyLocalizedTypes = async ({\n oldContentTypes,\n contentTypes,\n}: {\n oldContentTypes: Record<string, any> | null | undefined;\n contentTypes: Record<string, any>;\n}) => {\n if (!oldContentTypes) {\n return;\n }\n\n const { isLocalizedContentType } = getService('content-types');\n\n const newlyLocalizedUids = Object.keys(contentTypes).filter(\n (uid) =>\n oldContentTypes[uid] &&\n !isLocalizedContentType(oldContentTypes[uid]) &&\n isLocalizedContentType(contentTypes[uid])\n );\n\n if (newlyLocalizedUids.length === 0) {\n return;\n }\n\n try {\n const defaultLocaleCode = await getService('locales').getDefaultLocale();\n if (!defaultLocaleCode) {\n return;\n }\n\n const permissionService = strapi.service('admin::permission');\n const allPermissions = await permissionService.findMany({\n where: { subject: { $in: newlyLocalizedUids } },\n });\n\n const results = await Promise.allSettled(\n allPermissions\n .filter((permission: any) => needsLocalesPatch(permission.properties))\n .map((permission: any) =>\n strapi.db.query('admin::permission').update({\n where: { id: permission.id },\n data: {\n properties: { ...permission.properties, locales: [defaultLocaleCode] },\n },\n })\n )\n );\n\n results\n .filter((r): r is PromiseRejectedResult => r.status === 'rejected')\n .forEach((r) =>\n strapi.log.error(\n 'Failed to patch i18n permission during newly-localized type repair.',\n r.reason\n )\n );\n } catch (error) {\n strapi.log.error('Failed to repair i18n permissions for newly localized content types.', error);\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 hooks.willValidateUpdatePermissions.register(normalizeRolePermissionsLocales);\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 repairPermissionsForNewlyLocalizedTypes,\n normalizeRolePermissionsLocales,\n};\n"],"names":["actions","section","category","subCategory","pluginName","displayName","uid","aliases","actionId","subjects","addLocalesPropertyIfNeeded","value","action","options","applyToProperties","Array","isArray","includes","concat","shouldApplyLocalesPropertyToSubject","property","subject","model","strapi","getModel","getService","isLocalizedContentType","addAllLocalesToPermissions","permissions","actionProvider","service","find","findAllLocales","allLocales","allLocalesCode","map","locale","code","Promise","all","permission","appliesToLocalesProperty","appliesToProperty","oldPermissionProperties","get","properties","locales","needsLocalesPatch","length","normalizeRolePermissionsLocales","defaultLocale","getDefaultLocale","appliesToLocales","repairPermissionsForNewlyLocalizedTypes","oldContentTypes","contentTypes","newlyLocalizedUids","Object","keys","filter","defaultLocaleCode","permissionService","allPermissions","findMany","where","$in","results","allSettled","db","query","update","id","data","r","status","forEach","log","error","reason","syncSuperAdminPermissionsWithLocales","roleService","superAdminRole","getSuperAdmin","superAdminPermissions","role","newSuperAdminPermissions","assignPermissions","registerI18nActions","registerMany","registerI18nActionsHooks","hooks","appliesPropertyToSubject","register","willResetSuperAdminPermissions","willValidateUpdatePermissions","updateActionsProperties","willRegister","values"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var index = require('../../utils/index.js');
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -14,7 +14,7 @@ var index = require('../../utils/index.js');
|
|
|
14
14
|
const localesService = index.getService('locales');
|
|
15
15
|
const locales = await localesService.setIsDefault(await localesService.find());
|
|
16
16
|
// Do not add the locales property if there is none registered
|
|
17
|
-
if (
|
|
17
|
+
if (_.isEmpty(locales)) {
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
for (const subject of section.subjects){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections-builder.js","sources":["../../../../server/src/services/permissions/sections-builder.ts"],"sourcesContent":["import { isEmpty } from 'lodash
|
|
1
|
+
{"version":3,"file":"sections-builder.js","sources":["../../../../server/src/services/permissions/sections-builder.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\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 localesService = getService('locales');\n const locales = await localesService.setIsDefault(await localesService.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.some(\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, isDefault }: any) => ({\n label: name || code,\n value: code,\n isDefault,\n })),\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","localesService","getService","locales","setIsDefault","find","isEmpty","subject","subjects","applies","appliesToProperty","actionId","uid","hasLocalesProperty","properties","some","property","value","push","label","children","map","name","code","isDefault","registerLocalesPropertyHandler","sectionsBuilder","addHandler"],"mappings":";;;;;AAIA;;;;;;AAMC,IACD,MAAMA,sBAAAA,GAAyB,OAAO,EAAEC,MAAM,EAAEC,OAAO,EAAO,GAAA;AAC5D,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;AAE1C,IAAA,MAAMC,iBAAiBC,gBAAAA,CAAW,SAAA,CAAA;AAClC,IAAA,MAAMC,UAAU,MAAMF,cAAAA,CAAeG,YAAY,CAAC,MAAMH,eAAeI,IAAI,EAAA,CAAA;;AAG3E,IAAA,IAAIC,UAAQH,OAAAA,CAAAA,EAAU;AACpB,QAAA;AACF,IAAA;AAEA,IAAA,KAAK,MAAMI,OAAAA,IAAWV,OAAAA,CAAQW,QAAQ,CAAE;QACtC,MAAMC,OAAAA,GAAU,MAAMX,cAAAA,CAAeY,iBAAiB,CAAC,WAAWd,MAAAA,CAAOe,QAAQ,EAAEJ,OAAAA,CAAQK,GAAG,CAAA;QAC9F,MAAMC,kBAAAA,GAAqBN,OAAAA,CAAQO,UAAU,CAACC,IAAI,CAChD,CAACC,QAAAA,GAAkBA,QAAAA,CAASC,KAAK,KAAK,SAAA,CAAA;QAGxC,IAAIR,OAAAA,IAAW,CAACI,kBAAAA,EAAoB;YAClCN,OAAAA,CAAQO,UAAU,CAACI,IAAI,CAAC;gBACtBC,KAAAA,EAAO,SAAA;gBACPF,KAAAA,EAAO,SAAA;AACPG,gBAAAA,QAAAA,EAAUjB,OAAAA,CAAQkB,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAEC,SAAS,EAAO,IAAM;AACzDL,wBAAAA,KAAAA,EAAOG,IAAAA,IAAQC,IAAAA;wBACfN,KAAAA,EAAOM,IAAAA;AACPC,wBAAAA;qBACF,CAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA;AACF,CAAA;AAEA,MAAMC,8BAAAA,GAAiC,IAAA;AACrC,IAAA,MAAM,EAAEC,eAAe,EAAE,GAAG3B,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;IAE3C0B,eAAAA,CAAgBC,UAAU,CAAC,aAAA,EAAehC,sBAAAA,CAAAA;IAC1C+B,eAAAA,CAAgBC,UAAU,CAAC,iBAAA,EAAmBhC,sBAAAA,CAAAA;AAChD,CAAA;AAEA,6BAAe;AACbA,IAAAA,sBAAAA;AACA8B,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections-builder.mjs","sources":["../../../../server/src/services/permissions/sections-builder.ts"],"sourcesContent":["import { isEmpty } from 'lodash
|
|
1
|
+
{"version":3,"file":"sections-builder.mjs","sources":["../../../../server/src/services/permissions/sections-builder.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\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 localesService = getService('locales');\n const locales = await localesService.setIsDefault(await localesService.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.some(\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, isDefault }: any) => ({\n label: name || code,\n value: code,\n isDefault,\n })),\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","localesService","getService","locales","setIsDefault","find","isEmpty","subject","subjects","applies","appliesToProperty","actionId","uid","hasLocalesProperty","properties","some","property","value","push","label","children","map","name","code","isDefault","registerLocalesPropertyHandler","sectionsBuilder","addHandler"],"mappings":";;;AAIA;;;;;;AAMC,IACD,MAAMA,sBAAAA,GAAyB,OAAO,EAAEC,MAAM,EAAEC,OAAO,EAAO,GAAA;AAC5D,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;AAE1C,IAAA,MAAMC,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAClC,IAAA,MAAMC,UAAU,MAAMF,cAAAA,CAAeG,YAAY,CAAC,MAAMH,eAAeI,IAAI,EAAA,CAAA;;AAG3E,IAAA,IAAIC,QAAQH,OAAAA,CAAAA,EAAU;AACpB,QAAA;AACF,IAAA;AAEA,IAAA,KAAK,MAAMI,OAAAA,IAAWV,OAAAA,CAAQW,QAAQ,CAAE;QACtC,MAAMC,OAAAA,GAAU,MAAMX,cAAAA,CAAeY,iBAAiB,CAAC,WAAWd,MAAAA,CAAOe,QAAQ,EAAEJ,OAAAA,CAAQK,GAAG,CAAA;QAC9F,MAAMC,kBAAAA,GAAqBN,OAAAA,CAAQO,UAAU,CAACC,IAAI,CAChD,CAACC,QAAAA,GAAkBA,QAAAA,CAASC,KAAK,KAAK,SAAA,CAAA;QAGxC,IAAIR,OAAAA,IAAW,CAACI,kBAAAA,EAAoB;YAClCN,OAAAA,CAAQO,UAAU,CAACI,IAAI,CAAC;gBACtBC,KAAAA,EAAO,SAAA;gBACPF,KAAAA,EAAO,SAAA;AACPG,gBAAAA,QAAAA,EAAUjB,OAAAA,CAAQkB,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAEC,SAAS,EAAO,IAAM;AACzDL,wBAAAA,KAAAA,EAAOG,IAAAA,IAAQC,IAAAA;wBACfN,KAAAA,EAAOM,IAAAA;AACPC,wBAAAA;qBACF,CAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA;AACF,CAAA;AAEA,MAAMC,8BAAAA,GAAiC,IAAA;AACrC,IAAA,MAAM,EAAEC,eAAe,EAAE,GAAG3B,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA;IAE3C0B,eAAAA,CAAgBC,UAAU,CAAC,aAAA,EAAehC,sBAAAA,CAAAA;IAC1C+B,eAAAA,CAAgBC,UAAU,CAAC,iBAAA,EAAmBhC,sBAAAA,CAAAA;AAChD,CAAA;AAEA,6BAAe;AACbA,IAAAA,sBAAAA;AACA8B,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var utils = require('@strapi/utils');
|
|
4
|
-
var
|
|
4
|
+
var _ = require('lodash');
|
|
5
5
|
var index = require('../../utils/index.js');
|
|
6
6
|
|
|
7
7
|
const LOCALIZATION_FIELDS = [
|
|
@@ -15,7 +15,7 @@ const sanitize = ({ strapi })=>{
|
|
|
15
15
|
*
|
|
16
16
|
* Remove localization-related fields that are unnecessary, that is
|
|
17
17
|
* for schemas that aren't localized.
|
|
18
|
-
*/ const sanitizeLocalizationFields =
|
|
18
|
+
*/ const sanitizeLocalizationFields = _.curry((schema, entity)=>utils.traverseEntity(({ key, schema }, { remove })=>{
|
|
19
19
|
const isLocalized = isLocalizedContentType(schema);
|
|
20
20
|
const isLocalizationField = LOCALIZATION_FIELDS.includes(key);
|
|
21
21
|
if (!isLocalized && isLocalizationField) {
|
|
@@ -1 +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
|
|
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';\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,mBAAAA,GAAsB;AAAC,IAAA,QAAA;AAAU,IAAA;AAAgB,CAAA;AAEvD,MAAMC,QAAAA,GAAW,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACnD,IAAA,MAAM,EAAEC,sBAAsB,EAAE,GAAGC,gBAAAA,CAAW,eAAA,CAAA;AAE9C;;;;;AAKC,MACD,MAAMC,0BAAAA,GAA6BC,OAAAA,CAAM,CAACC,MAAAA,EAAuBC,SAC/DC,oBAAAA,CACE,CAAC,EAAEC,GAAG,EAAEH,MAAM,EAAE,EAAE,EAAEI,MAAM,EAAE,GAAA;AAC1B,YAAA,MAAMC,cAAcT,sBAAAA,CAAuBI,MAAAA,CAAAA;YAC3C,MAAMM,mBAAAA,GAAsBb,mBAAAA,CAAoBc,QAAQ,CAACJ,GAAAA,CAAAA;YAEzD,IAAI,CAACE,eAAeC,mBAAAA,EAAqB;gBACvCF,MAAAA,CAAOD,GAAAA,CAAAA;AACT,YAAA;QACF,CAAA,EACA;AAAEH,YAAAA,MAAAA;AAAQQ,YAAAA,QAAAA,EAAUb,MAAAA,CAAOa,QAAQ,CAACC,IAAI,CAACd,MAAAA;SAAQ,EACjDM,MAAAA,CAAAA,CAAAA;IAIJ,OAAO;AACLH,QAAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -1 +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
|
|
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';\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,mBAAAA,GAAsB;AAAC,IAAA,QAAA;AAAU,IAAA;AAAgB,CAAA;AAEvD,MAAMC,QAAAA,GAAW,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACnD,IAAA,MAAM,EAAEC,sBAAsB,EAAE,GAAGC,UAAAA,CAAW,eAAA,CAAA;AAE9C;;;;;AAKC,MACD,MAAMC,0BAAAA,GAA6BC,KAAAA,CAAM,CAACC,MAAAA,EAAuBC,SAC/DC,cAAAA,CACE,CAAC,EAAEC,GAAG,EAAEH,MAAM,EAAE,EAAE,EAAEI,MAAM,EAAE,GAAA;AAC1B,YAAA,MAAMC,cAAcT,sBAAAA,CAAuBI,MAAAA,CAAAA;YAC3C,MAAMM,mBAAAA,GAAsBb,mBAAAA,CAAoBc,QAAQ,CAACJ,GAAAA,CAAAA;YAEzD,IAAI,CAACE,eAAeC,mBAAAA,EAAqB;gBACvCF,MAAAA,CAAOD,GAAAA,CAAAA;AACT,YAAA;QACF,CAAA,EACA;AAAEH,YAAAA,MAAAA;AAAQQ,YAAAA,QAAAA,EAAUb,MAAAA,CAAOa,QAAQ,CAACC,IAAI,CAACd,MAAAA;SAAQ,EACjDM,MAAAA,CAAAA,CAAAA;IAIJ,OAAO;AACLH,QAAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/content-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/content-types.ts"],"names":[],"mappings":"AAoBA,QAAA,MAAM,UAAU;;;CAyIW,CAAC;AAE5B,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-locale-creation.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/validate-locale-creation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-locale-creation.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/validate-locale-creation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,eAAe,CAAC;AAMlD,QAAA,MAAM,sBAAsB,EAAE,IAAI,CAAC,iBAgDlC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export type { AiTranslationsProvider, AiTranslationsService, GenerateTranslationsParams, GenerateTranslationsResult, } from './services/ai-translations';
|
|
2
1
|
declare const _default: () => {
|
|
3
2
|
register: ({ strapi }: {
|
|
4
3
|
strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
|
|
@@ -175,7 +174,7 @@ declare const _default: () => {
|
|
|
175
174
|
};
|
|
176
175
|
'ai-translations': ({ strapi, }: {
|
|
177
176
|
strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
|
|
178
|
-
}) => import("
|
|
177
|
+
}) => import("./services/ai-translations").AiTranslationsService;
|
|
179
178
|
'ai-localization-jobs': ({ strapi }: {
|
|
180
179
|
strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
|
|
181
180
|
}) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAeuT,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAA2C,CAAC;;;;;;;;;;;;;;;;;;;;;AARpW,wBAOG"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Core, Modules } from '@strapi/types';
|
|
2
|
+
/** Adapts i18n services to core's capability without resolving them before registration finishes. */
|
|
3
|
+
export declare const createLocalizationProvider: (strapi: Core.Strapi) => Modules.Localization.Provider;
|
|
4
|
+
//# sourceMappingURL=localization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localization.d.ts","sourceRoot":"","sources":["../../../server/src/localization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAInD,qGAAqG;AACrG,eAAO,MAAM,0BAA0B,GAAI,QAAQ,IAAI,CAAC,MAAM,KAAG,OAAO,CAAC,YAAY,CAAC,QAgCrF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAQpB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAeE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-translations.d.ts","sourceRoot":"","sources":["../../../../server/src/services/ai-translations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGnD,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,GAAG;IAC3D,oBAAoB,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACnG,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,OAAO,CAAC;IACvB,gBAAgB,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,sBAAsB,CAAA;KAAE,GAAG,IAAI,CAAC;IACrE,6BAA6B,IAAI,IAAI,CAAC;IACtC,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC/F;
|
|
1
|
+
{"version":3,"file":"ai-translations.d.ts","sourceRoot":"","sources":["../../../../server/src/services/ai-translations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGnD,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,GAAG;IAC3D,oBAAoB,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACnG,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,OAAO,CAAC;IACvB,gBAAgB,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,sBAAsB,CAAA;KAAE,GAAG,IAAI,CAAC;IACrE,6BAA6B,IAAI,IAAI,CAAC;IACtC,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC/F;AAID,QAAA,MAAM,2BAA2B,GAAI,aAElC;IACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB,KAAG,qBA6DH,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-from-locale.d.ts","sourceRoot":"","sources":["../../../../server/src/services/fill-from-locale.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fill-from-locale.d.ts","sourceRoot":"","sources":["../../../../server/src/services/fill-from-locale.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAU,IAAI,EAAE,MAAM,eAAe,CAAC;AAqgBvD,eAAO,MAAM,2BAA2B,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;IAE3E;;;OAGG;4BAC2B,GAAG,CAAC,WAAW,gBAAgB,MAAM,eAAe,MAAM;IA0BxF;;;OAGG;gCAES,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAC1B,GAAG,CAAC,WAAW,gBACR,MAAM,eACP,GAAG;CAgBrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAgBE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAGG,CAAC;;;;;;;;;;;;;;;;;;;;AANP,wBAaE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../server/src/services/locales.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../server/src/services/locales.ts"],"names":[],"mappings":"AAwIA,QAAA,MAAM,OAAO;oBApIS,GAAG;mBAGH,GAAG;uBAEC,GAAG;qBAKC,GAAG,kBAAyB;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;qBAiBnD,GAAG,WAAW,GAAG;qBAnBxB,GAAG;iCA6DgB,GAAG;;4BA8BR,GAAG;qBAnDR,GAAG;;CAgGjC,CAAC;AAEH,KAAK,aAAa,GAAG,OAAO,OAAO,CAAC;AAEpC,eAAe,OAAO,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../../server/src/services/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../../server/src/services/metrics.ts"],"names":[],"mappings":"AAyBA,QAAA,MAAM,OAAO;;;CAGX,CAAC;AAEH,KAAK,cAAc,GAAG,OAAO,OAAO,CAAC;AAErC,eAAe,OAAO,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/validation/content-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/validation/content-types.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,sCAAsC,wDAE3C,CAAC;AAiBF,QAAA,MAAM,2BAA2B,wDAAuD,CAAC;AAEzF,OAAO,EAAE,sCAAsC,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../server/src/validation/locales.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../server/src/validation/locales.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,eAAe,CAAC;AAuBvD,QAAA,MAAM,yBAAyB;;;;IAAwC,CAAC;AACxE,QAAA,MAAM,yBAAyB;;;IAAwC,CAAC;AAExE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var utils = require('@strapi/utils');
|
|
4
|
-
var fp = require('lodash/fp');
|
|
5
4
|
|
|
6
5
|
const validateGetNonLocalizedAttributesSchema = utils.yup.object().shape({
|
|
7
6
|
model: utils.yup.string().required(),
|
|
8
7
|
id: utils.yup.mixed().when('model', {
|
|
9
|
-
is: (model)=>
|
|
8
|
+
is: (model)=>strapi.contentType(model)?.kind === 'singleType',
|
|
10
9
|
then: utils.yup.strapiID().nullable(),
|
|
11
10
|
otherwise: utils.yup.strapiID().required()
|
|
12
11
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.js","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\
|
|
1
|
+
{"version":3,"file":"content-types.js","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => strapi.contentType(model)?.kind === '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\nconst validateFillFromLocaleInputSchema = yup\n .object()\n .shape({\n documentId: yup.string().when('collectionType', {\n is: 'single-types',\n then: (schema) => schema.nullable(),\n otherwise: (schema) => schema.required(),\n }),\n sourceLocale: yup.string().required(),\n targetLocale: yup.string().required(),\n collectionType: yup.string().oneOf(['collection-types', 'single-types']).required(),\n })\n .noUnknown()\n .required();\n\nconst validateFillFromLocaleInput = validateYupSchema(validateFillFromLocaleInputSchema);\n\nexport { validateGetNonLocalizedAttributesInput, validateFillFromLocaleInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","strapi","contentType","kind","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema","validateFillFromLocaleInputSchema","documentId","schema","sourceLocale","targetLocale","collectionType","oneOf","validateFillFromLocaleInput"],"mappings":";;;;AAEA,MAAMA,uCAAAA,GAA0CC,SAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOH,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,SAAAA,CAAIO,KAAK,EAAA,CAAGC,IAAI,CAAC,OAAA,EAAS;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAAA,GAAeO,MAAAA,CAAOC,WAAW,CAACR,QAAQS,IAAAA,KAAS,YAAA;QACxDC,IAAAA,EAAMb,SAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAAA,EAAWhB,SAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAAA,EAAQjB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,uBAAAA,CAC7CrB,uCAAAA;AAGF,MAAMsB,iCAAAA,GAAoCrB,SAAAA,CACvCC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLoB,IAAAA,UAAAA,EAAYtB,SAAAA,CAAII,MAAM,EAAA,CAAGI,IAAI,CAAC,gBAAA,EAAkB;QAC9CC,EAAAA,EAAI,cAAA;QACJI,IAAAA,EAAM,CAACU,MAAAA,GAAWA,MAAAA,CAAOR,QAAQ,EAAA;QACjCC,SAAAA,EAAW,CAACO,MAAAA,GAAWA,MAAAA,CAAOlB,QAAQ;AACxC,KAAA,CAAA;IACAmB,YAAAA,EAAcxB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACnCoB,YAAAA,EAAczB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACnCqB,IAAAA,cAAAA,EAAgB1B,SAAAA,CAAII,MAAM,EAAA,CAAGuB,KAAK,CAAC;AAAC,QAAA,kBAAA;AAAoB,QAAA;AAAe,KAAA,CAAA,CAAEtB,QAAQ;AACnF,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMuB,8BAA8BR,uBAAAA,CAAkBC,iCAAAA;;;;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { yup, validateYupSchema } from '@strapi/utils';
|
|
2
|
-
import { get } from 'lodash/fp';
|
|
3
2
|
|
|
4
3
|
const validateGetNonLocalizedAttributesSchema = yup.object().shape({
|
|
5
4
|
model: yup.string().required(),
|
|
6
5
|
id: yup.mixed().when('model', {
|
|
7
|
-
is: (model)=>
|
|
6
|
+
is: (model)=>strapi.contentType(model)?.kind === 'singleType',
|
|
8
7
|
then: yup.strapiID().nullable(),
|
|
9
8
|
otherwise: yup.strapiID().required()
|
|
10
9
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.mjs","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\
|
|
1
|
+
{"version":3,"file":"content-types.mjs","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => strapi.contentType(model)?.kind === '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\nconst validateFillFromLocaleInputSchema = yup\n .object()\n .shape({\n documentId: yup.string().when('collectionType', {\n is: 'single-types',\n then: (schema) => schema.nullable(),\n otherwise: (schema) => schema.required(),\n }),\n sourceLocale: yup.string().required(),\n targetLocale: yup.string().required(),\n collectionType: yup.string().oneOf(['collection-types', 'single-types']).required(),\n })\n .noUnknown()\n .required();\n\nconst validateFillFromLocaleInput = validateYupSchema(validateFillFromLocaleInputSchema);\n\nexport { validateGetNonLocalizedAttributesInput, validateFillFromLocaleInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","strapi","contentType","kind","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema","validateFillFromLocaleInputSchema","documentId","schema","sourceLocale","targetLocale","collectionType","oneOf","validateFillFromLocaleInput"],"mappings":";;AAEA,MAAMA,uCAAAA,GAA0CC,GAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOH,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,GAAAA,CAAIO,KAAK,EAAA,CAAGC,IAAI,CAAC,OAAA,EAAS;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAAA,GAAeO,MAAAA,CAAOC,WAAW,CAACR,QAAQS,IAAAA,KAAS,YAAA;QACxDC,IAAAA,EAAMb,GAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAAA,EAAWhB,GAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAAA,EAAQjB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,iBAAAA,CAC7CrB,uCAAAA;AAGF,MAAMsB,iCAAAA,GAAoCrB,GAAAA,CACvCC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLoB,IAAAA,UAAAA,EAAYtB,GAAAA,CAAII,MAAM,EAAA,CAAGI,IAAI,CAAC,gBAAA,EAAkB;QAC9CC,EAAAA,EAAI,cAAA;QACJI,IAAAA,EAAM,CAACU,MAAAA,GAAWA,MAAAA,CAAOR,QAAQ,EAAA;QACjCC,SAAAA,EAAW,CAACO,MAAAA,GAAWA,MAAAA,CAAOlB,QAAQ;AACxC,KAAA,CAAA;IACAmB,YAAAA,EAAcxB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACnCoB,YAAAA,EAAczB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACnCqB,IAAAA,cAAAA,EAAgB1B,GAAAA,CAAII,MAAM,EAAA,CAAGuB,KAAK,CAAC;AAAC,QAAA,kBAAA;AAAoB,QAAA;AAAe,KAAA,CAAA,CAAEtB,QAAQ;AACnF,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMuB,8BAA8BR,iBAAAA,CAAkBC,iCAAAA;;;;"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var fp = require('lodash/fp');
|
|
4
3
|
var utils = require('@strapi/utils');
|
|
5
4
|
require('../constants/index.js');
|
|
6
5
|
var isoLocales = require('../constants/iso-locales.json.js');
|
|
7
6
|
|
|
8
|
-
const allowedLocaleCodes = isoLocales.map(
|
|
7
|
+
const allowedLocaleCodes = isoLocales.map((locale)=>locale.code);
|
|
9
8
|
const createLocaleSchema = utils.yup.object().shape({
|
|
10
9
|
name: utils.yup.string().max(50).nullable(),
|
|
11
10
|
code: utils.yup.string().oneOf(allowedLocaleCodes).required(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sources":["../../../server/src/validation/locales.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"locales.js","sources":["../../../server/src/validation/locales.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { isoLocales } from '../constants';\n\nconst allowedLocaleCodes = isoLocales.map((locale) => locale.code);\n\nconst createLocaleSchema = yup\n .object()\n .shape({\n name: yup.string().max(50).nullable(),\n code: yup.string().oneOf(allowedLocaleCodes).required(),\n isDefault: yup.boolean().required(),\n })\n .noUnknown();\n\nconst updateLocaleSchema = yup\n .object()\n .shape({\n name: yup.string().min(1).max(50).nullable(),\n isDefault: yup.boolean(),\n })\n .noUnknown();\n\nconst validateCreateLocaleInput = validateYupSchema(createLocaleSchema);\nconst validateUpdateLocaleInput = validateYupSchema(updateLocaleSchema);\n\nexport { validateCreateLocaleInput, validateUpdateLocaleInput };\n"],"names":["allowedLocaleCodes","isoLocales","map","locale","code","createLocaleSchema","yup","object","shape","name","string","max","nullable","oneOf","required","isDefault","boolean","noUnknown","updateLocaleSchema","min","validateCreateLocaleInput","validateYupSchema","validateUpdateLocaleInput"],"mappings":";;;;;;AAIA,MAAMA,qBAAqBC,UAAAA,CAAWC,GAAG,CAAC,CAACC,MAAAA,GAAWA,OAAOC,IAAI,CAAA;AAEjE,MAAMC,kBAAAA,GAAqBC,SAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,IAAAA,IAAAA,EAAMH,UAAII,MAAM,EAAA,CAAGC,GAAG,CAAC,IAAIC,QAAQ,EAAA;AACnCR,IAAAA,IAAAA,EAAME,UAAII,MAAM,EAAA,CAAGG,KAAK,CAACb,oBAAoBc,QAAQ,EAAA;IACrDC,SAAAA,EAAWT,SAAAA,CAAIU,OAAO,EAAA,CAAGF,QAAQ;AACnC,CAAA,CAAA,CACCG,SAAS,EAAA;AAEZ,MAAMC,kBAAAA,GAAqBZ,SAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,IAAAA,EAAMH,SAAAA,CAAII,MAAM,EAAA,CAAGS,GAAG,CAAC,CAAA,CAAA,CAAGR,GAAG,CAAC,EAAA,CAAA,CAAIC,QAAQ,EAAA;AAC1CG,IAAAA,SAAAA,EAAWT,UAAIU,OAAO;AACxB,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMG,4BAA4BC,uBAAAA,CAAkBhB,kBAAAA;AACpD,MAAMiB,4BAA4BD,uBAAAA,CAAkBH,kBAAAA;;;;;"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { prop } from 'lodash/fp';
|
|
2
1
|
import { yup, validateYupSchema } from '@strapi/utils';
|
|
3
2
|
import '../constants/index.mjs';
|
|
4
3
|
import isoLocales from '../constants/iso-locales.json.mjs';
|
|
5
4
|
|
|
6
|
-
const allowedLocaleCodes = isoLocales.map(
|
|
5
|
+
const allowedLocaleCodes = isoLocales.map((locale)=>locale.code);
|
|
7
6
|
const createLocaleSchema = yup.object().shape({
|
|
8
7
|
name: yup.string().max(50).nullable(),
|
|
9
8
|
code: yup.string().oneOf(allowedLocaleCodes).required(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.mjs","sources":["../../../server/src/validation/locales.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"locales.mjs","sources":["../../../server/src/validation/locales.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { isoLocales } from '../constants';\n\nconst allowedLocaleCodes = isoLocales.map((locale) => locale.code);\n\nconst createLocaleSchema = yup\n .object()\n .shape({\n name: yup.string().max(50).nullable(),\n code: yup.string().oneOf(allowedLocaleCodes).required(),\n isDefault: yup.boolean().required(),\n })\n .noUnknown();\n\nconst updateLocaleSchema = yup\n .object()\n .shape({\n name: yup.string().min(1).max(50).nullable(),\n isDefault: yup.boolean(),\n })\n .noUnknown();\n\nconst validateCreateLocaleInput = validateYupSchema(createLocaleSchema);\nconst validateUpdateLocaleInput = validateYupSchema(updateLocaleSchema);\n\nexport { validateCreateLocaleInput, validateUpdateLocaleInput };\n"],"names":["allowedLocaleCodes","isoLocales","map","locale","code","createLocaleSchema","yup","object","shape","name","string","max","nullable","oneOf","required","isDefault","boolean","noUnknown","updateLocaleSchema","min","validateCreateLocaleInput","validateYupSchema","validateUpdateLocaleInput"],"mappings":";;;;AAIA,MAAMA,qBAAqBC,UAAAA,CAAWC,GAAG,CAAC,CAACC,MAAAA,GAAWA,OAAOC,IAAI,CAAA;AAEjE,MAAMC,kBAAAA,GAAqBC,GAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,IAAAA,IAAAA,EAAMH,IAAII,MAAM,EAAA,CAAGC,GAAG,CAAC,IAAIC,QAAQ,EAAA;AACnCR,IAAAA,IAAAA,EAAME,IAAII,MAAM,EAAA,CAAGG,KAAK,CAACb,oBAAoBc,QAAQ,EAAA;IACrDC,SAAAA,EAAWT,GAAAA,CAAIU,OAAO,EAAA,CAAGF,QAAQ;AACnC,CAAA,CAAA,CACCG,SAAS,EAAA;AAEZ,MAAMC,kBAAAA,GAAqBZ,GAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,IAAAA,EAAMH,GAAAA,CAAII,MAAM,EAAA,CAAGS,GAAG,CAAC,CAAA,CAAA,CAAGR,GAAG,CAAC,EAAA,CAAA,CAAIC,QAAQ,EAAA;AAC1CG,IAAAA,SAAAA,EAAWT,IAAIU,OAAO;AACxB,CAAA,CAAA,CACCC,SAAS,EAAA;AAEZ,MAAMG,4BAA4BC,iBAAAA,CAAkBhB,kBAAAA;AACpD,MAAMiB,4BAA4BD,iBAAAA,CAAkBH,kBAAAA;;;;"}
|