@strapi/i18n 5.52.1 → 5.52.3

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.
@@ -37,7 +37,7 @@ const LocalePicker = ()=>{
37
37
  skip: !hasI18n
38
38
  });
39
39
  const handleChange = React__namespace.useCallback((code, replace = false)=>{
40
- setQuery({
40
+ setQuery(strapiAdmin.withEncodedUserParams(query, {
41
41
  page: 1,
42
42
  plugins: {
43
43
  ...query.plugins,
@@ -45,9 +45,9 @@ const LocalePicker = ()=>{
45
45
  locale: code
46
46
  }
47
47
  }
48
- }, 'push', replace);
48
+ }), 'push', replace);
49
49
  }, [
50
- query.plugins,
50
+ query,
51
51
  setQuery
52
52
  ]);
53
53
  React__namespace.useEffect(()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"LocalePicker.js","sources":["../../../admin/src/components/LocalePicker.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface Query extends I18nBaseQuery {\n page?: number;\n}\n\nconst LocalePicker = () => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<Query>();\n\n const { hasI18n, canRead, canCreate } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery(undefined, {\n skip: !hasI18n,\n });\n\n const handleChange = React.useCallback(\n (code: string, replace = false) => {\n setQuery(\n {\n page: 1,\n plugins: { ...query.plugins, i18n: { locale: code } },\n },\n 'push',\n replace\n );\n },\n [query.plugins, setQuery]\n );\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale\n * when the user can read it, or the first locale they can read: the list\n * cannot be displayed for the other locales.\n */\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const readableLocales = locales.filter((locale) => canRead.includes(locale.code));\n const targetLocale = readableLocales.find((locale) => locale.isDefault) ?? readableLocales[0];\n if (!doesLocaleExist && targetLocale?.code) {\n handleChange(targetLocale.code, true);\n }\n }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale, canRead]);\n\n const sortedLocaleOptions = React.useMemo(() => {\n const displayedLocales = Array.isArray(locales)\n ? locales.filter((locale) => {\n /**\n * If you can create or read we allow you to see the locale exists\n * this is because in the ListView, you may be able to create a new entry\n * in a locale you can't read.\n */\n return canCreate.includes(locale.code) || canRead.includes(locale.code);\n })\n : [];\n\n return displayedLocales\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((locale) => (\n <SingleSelectOption key={locale.id} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ));\n }, [locales, canCreate, canRead]);\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n return (\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: getTranslation('actions.select-locale'),\n defaultMessage: 'Select locale',\n })}\n value={query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code}\n // @ts-expect-error – This can be removed in V2 of the DS.\n onChange={handleChange}\n >\n {sortedLocaleOptions}\n </SingleSelect>\n );\n};\n\nexport { LocalePicker };\n"],"names":["LocalePicker","formatMessage","useIntl","query","setQuery","useQueryParams","hasI18n","canRead","canCreate","useI18n","data","locales","useGetLocalesQuery","undefined","skip","handleChange","React","useCallback","code","replace","page","plugins","i18n","locale","useEffect","Array","isArray","currentDesiredLocale","doesLocaleExist","find","loc","readableLocales","filter","includes","targetLocale","isDefault","sortedLocaleOptions","useMemo","displayedLocales","sort","a","b","name","localeCompare","map","_jsx","SingleSelectOption","value","id","length","SingleSelect","size","aria-label","getTranslation","defaultMessage","onChange"],"mappings":"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"}
1
+ {"version":3,"file":"LocalePicker.js","sources":["../../../admin/src/components/LocalePicker.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, withEncodedUserParams } from '@strapi/admin/strapi-admin';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface Query extends I18nBaseQuery {\n page?: number;\n filters?: unknown;\n _q?: unknown;\n}\n\nconst LocalePicker = () => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<Query>();\n\n const { hasI18n, canRead, canCreate } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery(undefined, {\n skip: !hasI18n,\n });\n\n const handleChange = React.useCallback(\n (code: string, replace = false) => {\n setQuery(\n withEncodedUserParams(query, {\n page: 1,\n plugins: { ...query.plugins, i18n: { locale: code } },\n }),\n 'push',\n replace\n );\n },\n [query, setQuery]\n );\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale\n * when the user can read it, or the first locale they can read: the list\n * cannot be displayed for the other locales.\n */\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const readableLocales = locales.filter((locale) => canRead.includes(locale.code));\n const targetLocale = readableLocales.find((locale) => locale.isDefault) ?? readableLocales[0];\n if (!doesLocaleExist && targetLocale?.code) {\n handleChange(targetLocale.code, true);\n }\n }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale, canRead]);\n\n const sortedLocaleOptions = React.useMemo(() => {\n const displayedLocales = Array.isArray(locales)\n ? locales.filter((locale) => {\n /**\n * If you can create or read we allow you to see the locale exists\n * this is because in the ListView, you may be able to create a new entry\n * in a locale you can't read.\n */\n return canCreate.includes(locale.code) || canRead.includes(locale.code);\n })\n : [];\n\n return displayedLocales\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((locale) => (\n <SingleSelectOption key={locale.id} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ));\n }, [locales, canCreate, canRead]);\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n return (\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: getTranslation('actions.select-locale'),\n defaultMessage: 'Select locale',\n })}\n value={query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code}\n // @ts-expect-error – This can be removed in V2 of the DS.\n onChange={handleChange}\n >\n {sortedLocaleOptions}\n </SingleSelect>\n );\n};\n\nexport { LocalePicker };\n"],"names":["LocalePicker","formatMessage","useIntl","query","setQuery","useQueryParams","hasI18n","canRead","canCreate","useI18n","data","locales","useGetLocalesQuery","undefined","skip","handleChange","React","useCallback","code","replace","withEncodedUserParams","page","plugins","i18n","locale","useEffect","Array","isArray","currentDesiredLocale","doesLocaleExist","find","loc","readableLocales","filter","includes","targetLocale","isDefault","sortedLocaleOptions","useMemo","displayedLocales","sort","a","b","name","localeCompare","map","_jsx","SingleSelectOption","value","id","length","SingleSelect","size","aria-label","getTranslation","defaultMessage","onChange"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useQueryParams } from '@strapi/admin/strapi-admin';
3
+ import { useQueryParams, withEncodedUserParams } from '@strapi/admin/strapi-admin';
4
4
  import { SingleSelectOption, SingleSelect } from '@strapi/design-system';
5
5
  import { useIntl } from 'react-intl';
6
6
  import { useI18n } from '../hooks/useI18n.mjs';
@@ -15,7 +15,7 @@ const LocalePicker = ()=>{
15
15
  skip: !hasI18n
16
16
  });
17
17
  const handleChange = React.useCallback((code, replace = false)=>{
18
- setQuery({
18
+ setQuery(withEncodedUserParams(query, {
19
19
  page: 1,
20
20
  plugins: {
21
21
  ...query.plugins,
@@ -23,9 +23,9 @@ const LocalePicker = ()=>{
23
23
  locale: code
24
24
  }
25
25
  }
26
- }, 'push', replace);
26
+ }), 'push', replace);
27
27
  }, [
28
- query.plugins,
28
+ query,
29
29
  setQuery
30
30
  ]);
31
31
  React.useEffect(()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"LocalePicker.mjs","sources":["../../../admin/src/components/LocalePicker.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface Query extends I18nBaseQuery {\n page?: number;\n}\n\nconst LocalePicker = () => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<Query>();\n\n const { hasI18n, canRead, canCreate } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery(undefined, {\n skip: !hasI18n,\n });\n\n const handleChange = React.useCallback(\n (code: string, replace = false) => {\n setQuery(\n {\n page: 1,\n plugins: { ...query.plugins, i18n: { locale: code } },\n },\n 'push',\n replace\n );\n },\n [query.plugins, setQuery]\n );\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale\n * when the user can read it, or the first locale they can read: the list\n * cannot be displayed for the other locales.\n */\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const readableLocales = locales.filter((locale) => canRead.includes(locale.code));\n const targetLocale = readableLocales.find((locale) => locale.isDefault) ?? readableLocales[0];\n if (!doesLocaleExist && targetLocale?.code) {\n handleChange(targetLocale.code, true);\n }\n }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale, canRead]);\n\n const sortedLocaleOptions = React.useMemo(() => {\n const displayedLocales = Array.isArray(locales)\n ? locales.filter((locale) => {\n /**\n * If you can create or read we allow you to see the locale exists\n * this is because in the ListView, you may be able to create a new entry\n * in a locale you can't read.\n */\n return canCreate.includes(locale.code) || canRead.includes(locale.code);\n })\n : [];\n\n return displayedLocales\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((locale) => (\n <SingleSelectOption key={locale.id} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ));\n }, [locales, canCreate, canRead]);\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n return (\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: getTranslation('actions.select-locale'),\n defaultMessage: 'Select locale',\n })}\n value={query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code}\n // @ts-expect-error – This can be removed in V2 of the DS.\n onChange={handleChange}\n >\n {sortedLocaleOptions}\n </SingleSelect>\n );\n};\n\nexport { LocalePicker };\n"],"names":["LocalePicker","formatMessage","useIntl","query","setQuery","useQueryParams","hasI18n","canRead","canCreate","useI18n","data","locales","useGetLocalesQuery","undefined","skip","handleChange","React","useCallback","code","replace","page","plugins","i18n","locale","useEffect","Array","isArray","currentDesiredLocale","doesLocaleExist","find","loc","readableLocales","filter","includes","targetLocale","isDefault","sortedLocaleOptions","useMemo","displayedLocales","sort","a","b","name","localeCompare","map","_jsx","SingleSelectOption","value","id","length","SingleSelect","size","aria-label","getTranslation","defaultMessage","onChange"],"mappings":"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"}
1
+ {"version":3,"file":"LocalePicker.mjs","sources":["../../../admin/src/components/LocalePicker.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, withEncodedUserParams } from '@strapi/admin/strapi-admin';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface Query extends I18nBaseQuery {\n page?: number;\n filters?: unknown;\n _q?: unknown;\n}\n\nconst LocalePicker = () => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<Query>();\n\n const { hasI18n, canRead, canCreate } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery(undefined, {\n skip: !hasI18n,\n });\n\n const handleChange = React.useCallback(\n (code: string, replace = false) => {\n setQuery(\n withEncodedUserParams(query, {\n page: 1,\n plugins: { ...query.plugins, i18n: { locale: code } },\n }),\n 'push',\n replace\n );\n },\n [query, setQuery]\n );\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale\n * when the user can read it, or the first locale they can read: the list\n * cannot be displayed for the other locales.\n */\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const readableLocales = locales.filter((locale) => canRead.includes(locale.code));\n const targetLocale = readableLocales.find((locale) => locale.isDefault) ?? readableLocales[0];\n if (!doesLocaleExist && targetLocale?.code) {\n handleChange(targetLocale.code, true);\n }\n }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale, canRead]);\n\n const sortedLocaleOptions = React.useMemo(() => {\n const displayedLocales = Array.isArray(locales)\n ? locales.filter((locale) => {\n /**\n * If you can create or read we allow you to see the locale exists\n * this is because in the ListView, you may be able to create a new entry\n * in a locale you can't read.\n */\n return canCreate.includes(locale.code) || canRead.includes(locale.code);\n })\n : [];\n\n return displayedLocales\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((locale) => (\n <SingleSelectOption key={locale.id} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ));\n }, [locales, canCreate, canRead]);\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n return (\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: getTranslation('actions.select-locale'),\n defaultMessage: 'Select locale',\n })}\n value={query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code}\n // @ts-expect-error – This can be removed in V2 of the DS.\n onChange={handleChange}\n >\n {sortedLocaleOptions}\n </SingleSelect>\n );\n};\n\nexport { LocalePicker };\n"],"names":["LocalePicker","formatMessage","useIntl","query","setQuery","useQueryParams","hasI18n","canRead","canCreate","useI18n","data","locales","useGetLocalesQuery","undefined","skip","handleChange","React","useCallback","code","replace","withEncodedUserParams","page","plugins","i18n","locale","useEffect","Array","isArray","currentDesiredLocale","doesLocaleExist","find","loc","readableLocales","filter","includes","targetLocale","isDefault","sortedLocaleOptions","useMemo","displayedLocales","sort","a","b","name","localeCompare","map","_jsx","SingleSelectOption","value","id","length","SingleSelect","size","aria-label","getTranslation","defaultMessage","onChange"],"mappings":"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"}
@@ -1,14 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('lodash');
4
3
  var fp = require('lodash/fp');
5
4
  var utils = require('@strapi/utils');
6
5
  var index = require('../utils/index.js');
7
6
 
8
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
-
10
- var ___default = /*#__PURE__*/_interopDefault(_);
11
-
12
7
  const { isRelationalAttribute, getVisibleAttributes, isTypedAttribute, getScalarAttributes, getRelationalAttributes } = utils.contentTypes;
13
8
  const { ApplicationError } = utils.errors;
14
9
  const hasLocalizedOption = (modelOrAttribute)=>{
@@ -57,7 +52,7 @@ const removeIdsMut = (model, entry)=>{
57
52
  return entry;
58
53
  }
59
54
  removeId(entry);
60
- ___default.default.forEach(model.attributes, (attr, attrName)=>{
55
+ for (const [attrName, attr] of Object.entries(model.attributes)){
61
56
  const value = entry[attrName];
62
57
  if (attr.type === 'dynamiczone' && fp.isArray(value)) {
63
58
  value.forEach((compo)=>{
@@ -74,7 +69,7 @@ const removeIdsMut = (model, entry)=>{
74
69
  removeIdsMut(model, value);
75
70
  }
76
71
  }
77
- });
72
+ }
78
73
  return entry;
79
74
  };
80
75
  /**
@@ -105,11 +100,11 @@ const removeIdsMut = (model, entry)=>{
105
100
  }
106
101
  const modelDef = strapi.getModel(model);
107
102
  const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);
108
- ___default.default.forEach(relatedEntryCopy, (value, field)=>{
103
+ for (const [field, value] of Object.entries(relatedEntryCopy)){
109
104
  if (fp.isNil(entry[field])) {
110
105
  entry[field] = value;
111
106
  }
112
- });
107
+ }
113
108
  };
114
109
  /**
115
110
  * build the populate param to
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.js","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { pick, pipe, has, prop, isNil, cloneDeep, isArray } from 'lodash/fp';\nimport { errors, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport { getService } from '../utils';\n\nconst {\n isRelationalAttribute,\n getVisibleAttributes,\n isTypedAttribute,\n getScalarAttributes,\n getRelationalAttributes,\n} = contentTypeUtils;\nconst { ApplicationError } = errors;\n\nconst hasLocalizedOption = (modelOrAttribute: any) => {\n return prop('pluginOptions.i18n.localized', modelOrAttribute) === true;\n};\n\nconst getValidLocale = async (locale: any) => {\n const localesService = getService('locales');\n\n if (isNil(locale)) {\n return localesService.getDefaultLocale();\n }\n\n const foundLocale = await localesService.findByCode(locale);\n if (!foundLocale) {\n throw new ApplicationError('Locale not found');\n }\n\n return locale;\n};\n\n/**\n * Returns whether an attribute is localized or not\n * @param {*} attribute\n * @returns\n */\nconst isLocalizedAttribute = (attribute: any) => {\n return (\n hasLocalizedOption(attribute) ||\n isRelationalAttribute(attribute) ||\n isTypedAttribute(attribute, 'uid')\n );\n};\n\n/**\n * Returns whether a model is localized or not\n * @param {*} model\n * @returns\n */\nconst isLocalizedContentType = (model: any) => {\n return hasLocalizedOption(model);\n};\n\n/**\n * Returns the list of attribute names that are not localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getNonLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter(\n (attrName) => !isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\nconst removeId = (value: any) => {\n if (typeof value === 'object' && has('id', value)) {\n delete value.id;\n }\n};\n\nconst removeIds = (model: any) => (entry: any) => removeIdsMut(model, cloneDeep(entry));\n\nconst removeIdsMut = (model: any, entry: any): Record<string, any> => {\n if (isNil(entry)) {\n return entry as unknown as Record<string, any>;\n }\n\n removeId(entry);\n\n _.forEach(model.attributes, (attr, attrName) => {\n const value = entry[attrName];\n if (attr.type === 'dynamiczone' && isArray(value)) {\n value.forEach((compo) => {\n if (has('__component', compo)) {\n const model = strapi.components[compo.__component];\n removeIdsMut(model, compo);\n }\n });\n } else if (attr.type === 'component') {\n const model = strapi.components[attr.component];\n if (isArray(value)) {\n value.forEach((compo) => removeIdsMut(model, compo));\n } else {\n removeIdsMut(model, value);\n }\n }\n });\n\n return entry;\n};\n\n/**\n * Returns a copy of an entry picking only its non localized attributes\n * @param {object} model\n * @param {object} entry\n * @returns {object}\n */\nconst copyNonLocalizedAttributes = (model: any, entry: any) => {\n const nonLocalizedAttributes = getNonLocalizedAttributes(model);\n\n return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);\n};\n\n/**\n * Returns the list of attribute names that are localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter((attrName) =>\n isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\n/**\n * Fill non localized fields of an entry if there are nil\n * @param {Object} entry entry to fill\n * @param {Object} relatedEntry values used to fill\n * @param {Object} options\n * @param {Object} options.model corresponding model\n */\nconst fillNonLocalizedAttributes = (entry: any, relatedEntry: any, { model }: any) => {\n if (isNil(relatedEntry)) {\n return;\n }\n\n const modelDef = strapi.getModel(model);\n const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);\n\n _.forEach(relatedEntryCopy, (value, field) => {\n if (isNil(entry[field])) {\n entry[field] = value;\n }\n });\n};\n\n/**\n * build the populate param to\n * @param {String} modelUID uid of the model, could be of a content-type or a component\n */\nconst getNestedPopulateOfNonLocalizedAttributes = (modelUID: any): string[] => {\n const schema = strapi.getModel(modelUID);\n const scalarAttributes = getScalarAttributes(schema);\n const nonLocalizedAttributes = getNonLocalizedAttributes(schema);\n\n const allAttributes = [...scalarAttributes, ...nonLocalizedAttributes];\n if (schema.modelType === 'component') {\n // When called recursively on a non localized component we\n // need to explicitly populate that components relations\n allAttributes.push(...getRelationalAttributes(schema));\n }\n\n const currentAttributesToPopulate = allAttributes.filter((value, index, self) => {\n return self.indexOf(value) === index && self.lastIndexOf(value) === index;\n });\n\n const attributesToPopulate = [...currentAttributesToPopulate];\n for (const attrName of currentAttributesToPopulate) {\n const attr = schema.attributes[attrName];\n if (attr.type === 'component') {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n } else if (attr.type === 'dynamiczone') {\n attr.components.forEach((componentName) => {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n });\n }\n }\n\n return attributesToPopulate;\n};\n\nconst contentTypes = () => ({\n isLocalizedContentType,\n getValidLocale,\n getLocalizedAttributes,\n getNonLocalizedAttributes,\n copyNonLocalizedAttributes,\n fillNonLocalizedAttributes,\n getNestedPopulateOfNonLocalizedAttributes,\n});\n\ntype ContentTypesService = typeof contentTypes;\n\nexport default contentTypes;\nexport { ContentTypesService };\n"],"names":["isRelationalAttribute","getVisibleAttributes","isTypedAttribute","getScalarAttributes","getRelationalAttributes","contentTypeUtils","ApplicationError","errors","hasLocalizedOption","modelOrAttribute","prop","getValidLocale","locale","localesService","getService","isNil","getDefaultLocale","foundLocale","findByCode","isLocalizedAttribute","attribute","isLocalizedContentType","model","getNonLocalizedAttributes","filter","attrName","attributes","removeId","value","has","id","removeIds","entry","removeIdsMut","cloneDeep","_","forEach","attr","type","isArray","compo","strapi","components","__component","component","copyNonLocalizedAttributes","nonLocalizedAttributes","pipe","pick","getLocalizedAttributes","fillNonLocalizedAttributes","relatedEntry","modelDef","getModel","relatedEntryCopy","field","getNestedPopulateOfNonLocalizedAttributes","modelUID","schema","scalarAttributes","allAttributes","modelType","push","currentAttributesToPopulate","index","self","indexOf","lastIndexOf","attributesToPopulate","nestedPopulate","map","nestedAttr","componentName","contentTypes"],"mappings":"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"}
1
+ {"version":3,"file":"content-types.js","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import { pick, pipe, has, prop, isNil, cloneDeep, isArray } from 'lodash/fp';\nimport { errors, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport { getService } from '../utils';\n\nconst {\n isRelationalAttribute,\n getVisibleAttributes,\n isTypedAttribute,\n getScalarAttributes,\n getRelationalAttributes,\n} = contentTypeUtils;\nconst { ApplicationError } = errors;\n\nconst hasLocalizedOption = (modelOrAttribute: any) => {\n return prop('pluginOptions.i18n.localized', modelOrAttribute) === true;\n};\n\nconst getValidLocale = async (locale: any) => {\n const localesService = getService('locales');\n\n if (isNil(locale)) {\n return localesService.getDefaultLocale();\n }\n\n const foundLocale = await localesService.findByCode(locale);\n if (!foundLocale) {\n throw new ApplicationError('Locale not found');\n }\n\n return locale;\n};\n\n/**\n * Returns whether an attribute is localized or not\n * @param {*} attribute\n * @returns\n */\nconst isLocalizedAttribute = (attribute: any) => {\n return (\n hasLocalizedOption(attribute) ||\n isRelationalAttribute(attribute) ||\n isTypedAttribute(attribute, 'uid')\n );\n};\n\n/**\n * Returns whether a model is localized or not\n * @param {*} model\n * @returns\n */\nconst isLocalizedContentType = (model: any) => {\n return hasLocalizedOption(model);\n};\n\n/**\n * Returns the list of attribute names that are not localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getNonLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter(\n (attrName) => !isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\nconst removeId = (value: any) => {\n if (typeof value === 'object' && has('id', value)) {\n delete value.id;\n }\n};\n\nconst removeIds = (model: Struct.ComponentSchema | Struct.ContentTypeSchema) => (entry: any) =>\n removeIdsMut(model, cloneDeep(entry));\n\nconst removeIdsMut = (\n model: Struct.ComponentSchema | Struct.ContentTypeSchema,\n entry: any\n): Record<string, any> => {\n if (isNil(entry)) {\n return entry as unknown as Record<string, any>;\n }\n\n removeId(entry);\n\n for (const [attrName, attr] of Object.entries(model.attributes)) {\n const value = entry[attrName];\n if (attr.type === 'dynamiczone' && isArray(value)) {\n value.forEach((compo) => {\n if (has('__component', compo)) {\n const model = strapi.components[compo.__component];\n removeIdsMut(model, compo);\n }\n });\n } else if (attr.type === 'component') {\n const model = strapi.components[attr.component];\n if (isArray(value)) {\n value.forEach((compo) => removeIdsMut(model, compo));\n } else {\n removeIdsMut(model, value);\n }\n }\n }\n\n return entry;\n};\n\n/**\n * Returns a copy of an entry picking only its non localized attributes\n * @param {object} model\n * @param {object} entry\n * @returns {object}\n */\nconst copyNonLocalizedAttributes = (\n model: Struct.ComponentSchema | Struct.ContentTypeSchema,\n entry: any\n) => {\n const nonLocalizedAttributes = getNonLocalizedAttributes(model);\n\n return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);\n};\n\n/**\n * Returns the list of attribute names that are localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter((attrName) =>\n isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\n/**\n * Fill non localized fields of an entry if there are nil\n * @param {Object} entry entry to fill\n * @param {Object} relatedEntry values used to fill\n * @param {Object} options\n * @param {Object} options.model corresponding model\n */\nconst fillNonLocalizedAttributes = (entry: any, relatedEntry: any, { model }: any) => {\n if (isNil(relatedEntry)) {\n return;\n }\n\n const modelDef = strapi.getModel(model);\n const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);\n\n for (const [field, value] of Object.entries(relatedEntryCopy)) {\n if (isNil(entry[field])) {\n entry[field] = value;\n }\n }\n};\n\n/**\n * build the populate param to\n * @param {String} modelUID uid of the model, could be of a content-type or a component\n */\nconst getNestedPopulateOfNonLocalizedAttributes = (modelUID: any): string[] => {\n const schema = strapi.getModel(modelUID);\n const scalarAttributes = getScalarAttributes(schema);\n const nonLocalizedAttributes = getNonLocalizedAttributes(schema);\n\n const allAttributes = [...scalarAttributes, ...nonLocalizedAttributes];\n if (schema.modelType === 'component') {\n // When called recursively on a non localized component we\n // need to explicitly populate that components relations\n allAttributes.push(...getRelationalAttributes(schema));\n }\n\n const currentAttributesToPopulate = allAttributes.filter((value, index, self) => {\n return self.indexOf(value) === index && self.lastIndexOf(value) === index;\n });\n\n const attributesToPopulate = [...currentAttributesToPopulate];\n for (const attrName of currentAttributesToPopulate) {\n const attr = schema.attributes[attrName];\n if (attr.type === 'component') {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n } else if (attr.type === 'dynamiczone') {\n attr.components.forEach((componentName) => {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n });\n }\n }\n\n return attributesToPopulate;\n};\n\nconst contentTypes = () => ({\n isLocalizedContentType,\n getValidLocale,\n getLocalizedAttributes,\n getNonLocalizedAttributes,\n copyNonLocalizedAttributes,\n fillNonLocalizedAttributes,\n getNestedPopulateOfNonLocalizedAttributes,\n});\n\ntype ContentTypesService = typeof contentTypes;\n\nexport default contentTypes;\nexport { ContentTypesService };\n"],"names":["isRelationalAttribute","getVisibleAttributes","isTypedAttribute","getScalarAttributes","getRelationalAttributes","contentTypeUtils","ApplicationError","errors","hasLocalizedOption","modelOrAttribute","prop","getValidLocale","locale","localesService","getService","isNil","getDefaultLocale","foundLocale","findByCode","isLocalizedAttribute","attribute","isLocalizedContentType","model","getNonLocalizedAttributes","filter","attrName","attributes","removeId","value","has","id","removeIds","entry","removeIdsMut","cloneDeep","attr","Object","entries","type","isArray","forEach","compo","strapi","components","__component","component","copyNonLocalizedAttributes","nonLocalizedAttributes","pipe","pick","getLocalizedAttributes","fillNonLocalizedAttributes","relatedEntry","modelDef","getModel","relatedEntryCopy","field","getNestedPopulateOfNonLocalizedAttributes","modelUID","schema","scalarAttributes","allAttributes","modelType","push","currentAttributesToPopulate","index","self","indexOf","lastIndexOf","attributesToPopulate","nestedPopulate","map","nestedAttr","componentName","contentTypes"],"mappings":";;;;;;AAKA,MAAM,EACJA,qBAAqB,EACrBC,oBAAoB,EACpBC,gBAAgB,EAChBC,mBAAmB,EACnBC,uBAAuB,EACxB,GAAGC,kBAAAA;AACJ,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,YAAAA;AAE7B,MAAMC,qBAAqB,CAACC,gBAAAA,GAAAA;IAC1B,OAAOC,OAAAA,CAAK,gCAAgCD,gBAAAA,CAAAA,KAAsB,IAAA;AACpE,CAAA;AAEA,MAAME,iBAAiB,OAAOC,MAAAA,GAAAA;AAC5B,IAAA,MAAMC,iBAAiBC,gBAAAA,CAAW,SAAA,CAAA;AAElC,IAAA,IAAIC,SAAMH,MAAAA,CAAAA,EAAS;AACjB,QAAA,OAAOC,eAAeG,gBAAgB,EAAA;AACxC,IAAA;AAEA,IAAA,MAAMC,WAAAA,GAAc,MAAMJ,cAAAA,CAAeK,UAAU,CAACN,MAAAA,CAAAA;AACpD,IAAA,IAAI,CAACK,WAAAA,EAAa;AAChB,QAAA,MAAM,IAAIX,gBAAAA,CAAiB,kBAAA,CAAA;AAC7B,IAAA;IAEA,OAAOM,MAAAA;AACT,CAAA;AAEA;;;;IAKA,MAAMO,uBAAuB,CAACC,SAAAA,GAAAA;AAC5B,IAAA,OACEZ,kBAAAA,CAAmBY,SAAAA,CAAAA,IACnBpB,qBAAAA,CAAsBoB,SAAAA,CAAAA,IACtBlB,iBAAiBkB,SAAAA,EAAW,KAAA,CAAA;AAEhC,CAAA;AAEA;;;;IAKA,MAAMC,yBAAyB,CAACC,KAAAA,GAAAA;AAC9B,IAAA,OAAOd,kBAAAA,CAAmBc,KAAAA,CAAAA;AAC5B,CAAA;AAEA;;;;IAKA,MAAMC,4BAA4B,CAACD,KAAAA,GAAAA;IACjC,OAAOrB,oBAAAA,CAAqBqB,KAAAA,CAAAA,CAAOE,MAAM,CACvC,CAACC,QAAAA,GAAa,CAACN,oBAAAA,CAAqBG,KAAAA,CAAMI,UAAU,CAACD,QAAAA,CAAS,CAAA,CAAA;AAElE,CAAA;AAEA,MAAME,WAAW,CAACC,KAAAA,GAAAA;AAChB,IAAA,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAYC,MAAAA,CAAI,MAAMD,KAAAA,CAAAA,EAAQ;AACjD,QAAA,OAAOA,MAAME,EAAE;AACjB,IAAA;AACF,CAAA;AAEA,MAAMC,YAAY,CAACT,KAAAA,GAA6D,CAACU,KAAAA,GAC/EC,YAAAA,CAAaX,OAAOY,YAAAA,CAAUF,KAAAA,CAAAA,CAAAA;AAEhC,MAAMC,YAAAA,GAAe,CACnBX,KAAAA,EACAU,KAAAA,GAAAA;AAEA,IAAA,IAAIjB,SAAMiB,KAAAA,CAAAA,EAAQ;QAChB,OAAOA,KAAAA;AACT,IAAA;IAEAL,QAAAA,CAASK,KAAAA,CAAAA;IAET,KAAK,MAAM,CAACP,QAAAA,EAAUU,IAAAA,CAAK,IAAIC,OAAOC,OAAO,CAACf,KAAAA,CAAMI,UAAU,CAAA,CAAG;QAC/D,MAAME,KAAAA,GAAQI,KAAK,CAACP,QAAAA,CAAS;AAC7B,QAAA,IAAIU,IAAAA,CAAKG,IAAI,KAAK,aAAA,IAAiBC,WAAQX,KAAAA,CAAAA,EAAQ;YACjDA,KAAAA,CAAMY,OAAO,CAAC,CAACC,KAAAA,GAAAA;gBACb,IAAIZ,MAAAA,CAAI,eAAeY,KAAAA,CAAAA,EAAQ;AAC7B,oBAAA,MAAMnB,QAAQoB,MAAAA,CAAOC,UAAU,CAACF,KAAAA,CAAMG,WAAW,CAAC;AAClDX,oBAAAA,YAAAA,CAAaX,KAAAA,EAAOmB,KAAAA,CAAAA;AACtB,gBAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA,MAAO,IAAIN,IAAAA,CAAKG,IAAI,KAAK,WAAA,EAAa;AACpC,YAAA,MAAMhB,QAAQoB,MAAAA,CAAOC,UAAU,CAACR,IAAAA,CAAKU,SAAS,CAAC;AAC/C,YAAA,IAAIN,WAAQX,KAAAA,CAAAA,EAAQ;AAClBA,gBAAAA,KAAAA,CAAMY,OAAO,CAAC,CAACC,KAAAA,GAAUR,aAAaX,KAAAA,EAAOmB,KAAAA,CAAAA,CAAAA;YAC/C,CAAA,MAAO;AACLR,gBAAAA,YAAAA,CAAaX,KAAAA,EAAOM,KAAAA,CAAAA;AACtB,YAAA;AACF,QAAA;AACF,IAAA;IAEA,OAAOI,KAAAA;AACT,CAAA;AAEA;;;;;IAMA,MAAMc,0BAAAA,GAA6B,CACjCxB,KAAAA,EACAU,KAAAA,GAAAA;AAEA,IAAA,MAAMe,yBAAyBxB,yBAAAA,CAA0BD,KAAAA,CAAAA;AAEzD,IAAA,OAAO0B,OAAAA,CAAKC,OAAAA,CAAKF,sBAAAA,CAAAA,EAAyBhB,SAAAA,CAAUT,KAAAA,CAAAA,CAAAA,CAAQU,KAAAA,CAAAA;AAC9D,CAAA;AAEA;;;;IAKA,MAAMkB,yBAAyB,CAAC5B,KAAAA,GAAAA;IAC9B,OAAOrB,oBAAAA,CAAqBqB,KAAAA,CAAAA,CAAOE,MAAM,CAAC,CAACC,WACzCN,oBAAAA,CAAqBG,KAAAA,CAAMI,UAAU,CAACD,QAAAA,CAAS,CAAA,CAAA;AAEnD,CAAA;AAEA;;;;;;AAMC,IACD,MAAM0B,0BAAAA,GAA6B,CAACnB,OAAYoB,YAAAA,EAAmB,EAAE9B,KAAK,EAAO,GAAA;AAC/E,IAAA,IAAIP,SAAMqC,YAAAA,CAAAA,EAAe;AACvB,QAAA;AACF,IAAA;IAEA,MAAMC,QAAAA,GAAWX,MAAAA,CAAOY,QAAQ,CAAChC,KAAAA,CAAAA;IACjC,MAAMiC,gBAAAA,GAAmBT,2BAA2BO,QAAAA,EAAUD,YAAAA,CAAAA;IAE9D,KAAK,MAAM,CAACI,KAAAA,EAAO5B,KAAAA,CAAM,IAAIQ,MAAAA,CAAOC,OAAO,CAACkB,gBAAAA,CAAAA,CAAmB;AAC7D,QAAA,IAAIxC,QAAAA,CAAMiB,KAAK,CAACwB,KAAAA,CAAM,CAAA,EAAG;YACvBxB,KAAK,CAACwB,MAAM,GAAG5B,KAAAA;AACjB,QAAA;AACF,IAAA;AACF,CAAA;AAEA;;;IAIA,MAAM6B,4CAA4C,CAACC,QAAAA,GAAAA;IACjD,MAAMC,MAAAA,GAASjB,MAAAA,CAAOY,QAAQ,CAACI,QAAAA,CAAAA;AAC/B,IAAA,MAAME,mBAAmBzD,mBAAAA,CAAoBwD,MAAAA,CAAAA;AAC7C,IAAA,MAAMZ,yBAAyBxB,yBAAAA,CAA0BoC,MAAAA,CAAAA;AAEzD,IAAA,MAAME,aAAAA,GAAgB;AAAID,QAAAA,GAAAA,gBAAAA;AAAqBb,QAAAA,GAAAA;AAAuB,KAAA;IACtE,IAAIY,MAAAA,CAAOG,SAAS,KAAK,WAAA,EAAa;;;QAGpCD,aAAAA,CAAcE,IAAI,IAAI3D,uBAAAA,CAAwBuD,MAAAA,CAAAA,CAAAA;AAChD,IAAA;AAEA,IAAA,MAAMK,8BAA8BH,aAAAA,CAAcrC,MAAM,CAAC,CAACI,OAAOqC,KAAAA,EAAOC,IAAAA,GAAAA;QACtE,OAAOA,IAAAA,CAAKC,OAAO,CAACvC,KAAAA,CAAAA,KAAWqC,SAASC,IAAAA,CAAKE,WAAW,CAACxC,KAAAA,CAAAA,KAAWqC,KAAAA;AACtE,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMI,oBAAAA,GAAuB;AAAIL,QAAAA,GAAAA;AAA4B,KAAA;IAC7D,KAAK,MAAMvC,YAAYuC,2BAAAA,CAA6B;AAClD,QAAA,MAAM7B,IAAAA,GAAOwB,MAAAA,CAAOjC,UAAU,CAACD,QAAAA,CAAS;QACxC,IAAIU,IAAAA,CAAKG,IAAI,KAAK,WAAA,EAAa;AAC7B,YAAA,MAAMgC,cAAAA,GAAiBb,yCAAAA,CAA0CtB,IAAAA,CAAKU,SAAS,CAAA,CAAE0B,GAAG,CAClF,CAACC,UAAAA,GAAe,CAAA,EAAG/C,QAAAA,CAAS,CAAC,EAAE+C,UAAAA,CAAAA,CAAY,CAAA;AAE7CH,YAAAA,oBAAAA,CAAqBN,IAAI,CAAA,GAAIO,cAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAInC,IAAAA,CAAKG,IAAI,KAAK,aAAA,EAAe;AACtCH,YAAAA,IAAAA,CAAKQ,UAAU,CAACH,OAAO,CAAC,CAACiC,aAAAA,GAAAA;gBACvB,MAAMH,cAAAA,GAAiBb,yCAAAA,CAA0CgB,aAAAA,CAAAA,CAAeF,GAAG,CACjF,CAACC,UAAAA,GAAe,CAAA,EAAG/C,QAAAA,CAAS,CAAC,EAAE+C,UAAAA,CAAAA,CAAY,CAAA;AAE7CH,gBAAAA,oBAAAA,CAAqBN,IAAI,CAAA,GAAIO,cAAAA,CAAAA;AAC/B,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA;IAEA,OAAOD,oBAAAA;AACT,CAAA;AAEA,MAAMK,YAAAA,GAAe,KAAO;AAC1BrD,QAAAA,sBAAAA;AACAV,QAAAA,cAAAA;AACAuC,QAAAA,sBAAAA;AACA3B,QAAAA,yBAAAA;AACAuB,QAAAA,0BAAAA;AACAK,QAAAA,0BAAAA;AACAM,QAAAA;KACF;;;;"}
@@ -1,4 +1,3 @@
1
- import _ from 'lodash';
2
1
  import { isNil, pipe, pick, cloneDeep, prop, isArray, has } from 'lodash/fp';
3
2
  import { contentTypes as contentTypes$1, errors } from '@strapi/utils';
4
3
  import { getService } from '../utils/index.mjs';
@@ -51,7 +50,7 @@ const removeIdsMut = (model, entry)=>{
51
50
  return entry;
52
51
  }
53
52
  removeId(entry);
54
- _.forEach(model.attributes, (attr, attrName)=>{
53
+ for (const [attrName, attr] of Object.entries(model.attributes)){
55
54
  const value = entry[attrName];
56
55
  if (attr.type === 'dynamiczone' && isArray(value)) {
57
56
  value.forEach((compo)=>{
@@ -68,7 +67,7 @@ const removeIdsMut = (model, entry)=>{
68
67
  removeIdsMut(model, value);
69
68
  }
70
69
  }
71
- });
70
+ }
72
71
  return entry;
73
72
  };
74
73
  /**
@@ -99,11 +98,11 @@ const removeIdsMut = (model, entry)=>{
99
98
  }
100
99
  const modelDef = strapi.getModel(model);
101
100
  const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);
102
- _.forEach(relatedEntryCopy, (value, field)=>{
101
+ for (const [field, value] of Object.entries(relatedEntryCopy)){
103
102
  if (isNil(entry[field])) {
104
103
  entry[field] = value;
105
104
  }
106
- });
105
+ }
107
106
  };
108
107
  /**
109
108
  * build the populate param to
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.mjs","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { pick, pipe, has, prop, isNil, cloneDeep, isArray } from 'lodash/fp';\nimport { errors, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport { getService } from '../utils';\n\nconst {\n isRelationalAttribute,\n getVisibleAttributes,\n isTypedAttribute,\n getScalarAttributes,\n getRelationalAttributes,\n} = contentTypeUtils;\nconst { ApplicationError } = errors;\n\nconst hasLocalizedOption = (modelOrAttribute: any) => {\n return prop('pluginOptions.i18n.localized', modelOrAttribute) === true;\n};\n\nconst getValidLocale = async (locale: any) => {\n const localesService = getService('locales');\n\n if (isNil(locale)) {\n return localesService.getDefaultLocale();\n }\n\n const foundLocale = await localesService.findByCode(locale);\n if (!foundLocale) {\n throw new ApplicationError('Locale not found');\n }\n\n return locale;\n};\n\n/**\n * Returns whether an attribute is localized or not\n * @param {*} attribute\n * @returns\n */\nconst isLocalizedAttribute = (attribute: any) => {\n return (\n hasLocalizedOption(attribute) ||\n isRelationalAttribute(attribute) ||\n isTypedAttribute(attribute, 'uid')\n );\n};\n\n/**\n * Returns whether a model is localized or not\n * @param {*} model\n * @returns\n */\nconst isLocalizedContentType = (model: any) => {\n return hasLocalizedOption(model);\n};\n\n/**\n * Returns the list of attribute names that are not localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getNonLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter(\n (attrName) => !isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\nconst removeId = (value: any) => {\n if (typeof value === 'object' && has('id', value)) {\n delete value.id;\n }\n};\n\nconst removeIds = (model: any) => (entry: any) => removeIdsMut(model, cloneDeep(entry));\n\nconst removeIdsMut = (model: any, entry: any): Record<string, any> => {\n if (isNil(entry)) {\n return entry as unknown as Record<string, any>;\n }\n\n removeId(entry);\n\n _.forEach(model.attributes, (attr, attrName) => {\n const value = entry[attrName];\n if (attr.type === 'dynamiczone' && isArray(value)) {\n value.forEach((compo) => {\n if (has('__component', compo)) {\n const model = strapi.components[compo.__component];\n removeIdsMut(model, compo);\n }\n });\n } else if (attr.type === 'component') {\n const model = strapi.components[attr.component];\n if (isArray(value)) {\n value.forEach((compo) => removeIdsMut(model, compo));\n } else {\n removeIdsMut(model, value);\n }\n }\n });\n\n return entry;\n};\n\n/**\n * Returns a copy of an entry picking only its non localized attributes\n * @param {object} model\n * @param {object} entry\n * @returns {object}\n */\nconst copyNonLocalizedAttributes = (model: any, entry: any) => {\n const nonLocalizedAttributes = getNonLocalizedAttributes(model);\n\n return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);\n};\n\n/**\n * Returns the list of attribute names that are localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter((attrName) =>\n isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\n/**\n * Fill non localized fields of an entry if there are nil\n * @param {Object} entry entry to fill\n * @param {Object} relatedEntry values used to fill\n * @param {Object} options\n * @param {Object} options.model corresponding model\n */\nconst fillNonLocalizedAttributes = (entry: any, relatedEntry: any, { model }: any) => {\n if (isNil(relatedEntry)) {\n return;\n }\n\n const modelDef = strapi.getModel(model);\n const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);\n\n _.forEach(relatedEntryCopy, (value, field) => {\n if (isNil(entry[field])) {\n entry[field] = value;\n }\n });\n};\n\n/**\n * build the populate param to\n * @param {String} modelUID uid of the model, could be of a content-type or a component\n */\nconst getNestedPopulateOfNonLocalizedAttributes = (modelUID: any): string[] => {\n const schema = strapi.getModel(modelUID);\n const scalarAttributes = getScalarAttributes(schema);\n const nonLocalizedAttributes = getNonLocalizedAttributes(schema);\n\n const allAttributes = [...scalarAttributes, ...nonLocalizedAttributes];\n if (schema.modelType === 'component') {\n // When called recursively on a non localized component we\n // need to explicitly populate that components relations\n allAttributes.push(...getRelationalAttributes(schema));\n }\n\n const currentAttributesToPopulate = allAttributes.filter((value, index, self) => {\n return self.indexOf(value) === index && self.lastIndexOf(value) === index;\n });\n\n const attributesToPopulate = [...currentAttributesToPopulate];\n for (const attrName of currentAttributesToPopulate) {\n const attr = schema.attributes[attrName];\n if (attr.type === 'component') {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n } else if (attr.type === 'dynamiczone') {\n attr.components.forEach((componentName) => {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n });\n }\n }\n\n return attributesToPopulate;\n};\n\nconst contentTypes = () => ({\n isLocalizedContentType,\n getValidLocale,\n getLocalizedAttributes,\n getNonLocalizedAttributes,\n copyNonLocalizedAttributes,\n fillNonLocalizedAttributes,\n getNestedPopulateOfNonLocalizedAttributes,\n});\n\ntype ContentTypesService = typeof contentTypes;\n\nexport default contentTypes;\nexport { ContentTypesService };\n"],"names":["isRelationalAttribute","getVisibleAttributes","isTypedAttribute","getScalarAttributes","getRelationalAttributes","contentTypeUtils","ApplicationError","errors","hasLocalizedOption","modelOrAttribute","prop","getValidLocale","locale","localesService","getService","isNil","getDefaultLocale","foundLocale","findByCode","isLocalizedAttribute","attribute","isLocalizedContentType","model","getNonLocalizedAttributes","filter","attrName","attributes","removeId","value","has","id","removeIds","entry","removeIdsMut","cloneDeep","_","forEach","attr","type","isArray","compo","strapi","components","__component","component","copyNonLocalizedAttributes","nonLocalizedAttributes","pipe","pick","getLocalizedAttributes","fillNonLocalizedAttributes","relatedEntry","modelDef","getModel","relatedEntryCopy","field","getNestedPopulateOfNonLocalizedAttributes","modelUID","schema","scalarAttributes","allAttributes","modelType","push","currentAttributesToPopulate","index","self","indexOf","lastIndexOf","attributesToPopulate","nestedPopulate","map","nestedAttr","componentName","contentTypes"],"mappings":"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"}
1
+ {"version":3,"file":"content-types.mjs","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import { pick, pipe, has, prop, isNil, cloneDeep, isArray } from 'lodash/fp';\nimport { errors, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport { getService } from '../utils';\n\nconst {\n isRelationalAttribute,\n getVisibleAttributes,\n isTypedAttribute,\n getScalarAttributes,\n getRelationalAttributes,\n} = contentTypeUtils;\nconst { ApplicationError } = errors;\n\nconst hasLocalizedOption = (modelOrAttribute: any) => {\n return prop('pluginOptions.i18n.localized', modelOrAttribute) === true;\n};\n\nconst getValidLocale = async (locale: any) => {\n const localesService = getService('locales');\n\n if (isNil(locale)) {\n return localesService.getDefaultLocale();\n }\n\n const foundLocale = await localesService.findByCode(locale);\n if (!foundLocale) {\n throw new ApplicationError('Locale not found');\n }\n\n return locale;\n};\n\n/**\n * Returns whether an attribute is localized or not\n * @param {*} attribute\n * @returns\n */\nconst isLocalizedAttribute = (attribute: any) => {\n return (\n hasLocalizedOption(attribute) ||\n isRelationalAttribute(attribute) ||\n isTypedAttribute(attribute, 'uid')\n );\n};\n\n/**\n * Returns whether a model is localized or not\n * @param {*} model\n * @returns\n */\nconst isLocalizedContentType = (model: any) => {\n return hasLocalizedOption(model);\n};\n\n/**\n * Returns the list of attribute names that are not localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getNonLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter(\n (attrName) => !isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\nconst removeId = (value: any) => {\n if (typeof value === 'object' && has('id', value)) {\n delete value.id;\n }\n};\n\nconst removeIds = (model: Struct.ComponentSchema | Struct.ContentTypeSchema) => (entry: any) =>\n removeIdsMut(model, cloneDeep(entry));\n\nconst removeIdsMut = (\n model: Struct.ComponentSchema | Struct.ContentTypeSchema,\n entry: any\n): Record<string, any> => {\n if (isNil(entry)) {\n return entry as unknown as Record<string, any>;\n }\n\n removeId(entry);\n\n for (const [attrName, attr] of Object.entries(model.attributes)) {\n const value = entry[attrName];\n if (attr.type === 'dynamiczone' && isArray(value)) {\n value.forEach((compo) => {\n if (has('__component', compo)) {\n const model = strapi.components[compo.__component];\n removeIdsMut(model, compo);\n }\n });\n } else if (attr.type === 'component') {\n const model = strapi.components[attr.component];\n if (isArray(value)) {\n value.forEach((compo) => removeIdsMut(model, compo));\n } else {\n removeIdsMut(model, value);\n }\n }\n }\n\n return entry;\n};\n\n/**\n * Returns a copy of an entry picking only its non localized attributes\n * @param {object} model\n * @param {object} entry\n * @returns {object}\n */\nconst copyNonLocalizedAttributes = (\n model: Struct.ComponentSchema | Struct.ContentTypeSchema,\n entry: any\n) => {\n const nonLocalizedAttributes = getNonLocalizedAttributes(model);\n\n return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);\n};\n\n/**\n * Returns the list of attribute names that are localized\n * @param {object} model\n * @returns {string[]}\n */\nconst getLocalizedAttributes = (model: any) => {\n return getVisibleAttributes(model).filter((attrName) =>\n isLocalizedAttribute(model.attributes[attrName])\n );\n};\n\n/**\n * Fill non localized fields of an entry if there are nil\n * @param {Object} entry entry to fill\n * @param {Object} relatedEntry values used to fill\n * @param {Object} options\n * @param {Object} options.model corresponding model\n */\nconst fillNonLocalizedAttributes = (entry: any, relatedEntry: any, { model }: any) => {\n if (isNil(relatedEntry)) {\n return;\n }\n\n const modelDef = strapi.getModel(model);\n const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);\n\n for (const [field, value] of Object.entries(relatedEntryCopy)) {\n if (isNil(entry[field])) {\n entry[field] = value;\n }\n }\n};\n\n/**\n * build the populate param to\n * @param {String} modelUID uid of the model, could be of a content-type or a component\n */\nconst getNestedPopulateOfNonLocalizedAttributes = (modelUID: any): string[] => {\n const schema = strapi.getModel(modelUID);\n const scalarAttributes = getScalarAttributes(schema);\n const nonLocalizedAttributes = getNonLocalizedAttributes(schema);\n\n const allAttributes = [...scalarAttributes, ...nonLocalizedAttributes];\n if (schema.modelType === 'component') {\n // When called recursively on a non localized component we\n // need to explicitly populate that components relations\n allAttributes.push(...getRelationalAttributes(schema));\n }\n\n const currentAttributesToPopulate = allAttributes.filter((value, index, self) => {\n return self.indexOf(value) === index && self.lastIndexOf(value) === index;\n });\n\n const attributesToPopulate = [...currentAttributesToPopulate];\n for (const attrName of currentAttributesToPopulate) {\n const attr = schema.attributes[attrName];\n if (attr.type === 'component') {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n } else if (attr.type === 'dynamiczone') {\n attr.components.forEach((componentName) => {\n const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map(\n (nestedAttr) => `${attrName}.${nestedAttr}`\n );\n attributesToPopulate.push(...nestedPopulate);\n });\n }\n }\n\n return attributesToPopulate;\n};\n\nconst contentTypes = () => ({\n isLocalizedContentType,\n getValidLocale,\n getLocalizedAttributes,\n getNonLocalizedAttributes,\n copyNonLocalizedAttributes,\n fillNonLocalizedAttributes,\n getNestedPopulateOfNonLocalizedAttributes,\n});\n\ntype ContentTypesService = typeof contentTypes;\n\nexport default contentTypes;\nexport { ContentTypesService };\n"],"names":["isRelationalAttribute","getVisibleAttributes","isTypedAttribute","getScalarAttributes","getRelationalAttributes","contentTypeUtils","ApplicationError","errors","hasLocalizedOption","modelOrAttribute","prop","getValidLocale","locale","localesService","getService","isNil","getDefaultLocale","foundLocale","findByCode","isLocalizedAttribute","attribute","isLocalizedContentType","model","getNonLocalizedAttributes","filter","attrName","attributes","removeId","value","has","id","removeIds","entry","removeIdsMut","cloneDeep","attr","Object","entries","type","isArray","forEach","compo","strapi","components","__component","component","copyNonLocalizedAttributes","nonLocalizedAttributes","pipe","pick","getLocalizedAttributes","fillNonLocalizedAttributes","relatedEntry","modelDef","getModel","relatedEntryCopy","field","getNestedPopulateOfNonLocalizedAttributes","modelUID","schema","scalarAttributes","allAttributes","modelType","push","currentAttributesToPopulate","index","self","indexOf","lastIndexOf","attributesToPopulate","nestedPopulate","map","nestedAttr","componentName","contentTypes"],"mappings":"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"}
@@ -16,11 +16,11 @@ const TEMP_KEY_DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrs
16
16
  return configuration.settings.mainField;
17
17
  };
18
18
  /**
19
- * Returns the display label for a relation.
20
- * Matches the logic of the getRelationLabel function in the content-manager plugin.
19
+ * Returns the display label for a relation in form state.
20
+ * Empty configured values stay untranslated so the admin can provide its localized fallback.
21
21
  */ const getRelationLabel = (relation, mainField)=>{
22
22
  const label = relation[mainField];
23
- if (typeof label === 'string') return label;
23
+ if (label === null || typeof label === 'string') return label ?? '';
24
24
  return String(relation.documentId ?? '');
25
25
  };
26
26
  const FIELDS_TO_IGNORE = new Set([
@@ -1 +1 @@
1
- {"version":3,"file":"fill-from-locale.js","sources":["../../../server/src/services/fill-from-locale.ts"],"sourcesContent":["import { isArray } from 'lodash/fp';\nimport { contentTypes } from '@strapi/utils';\nimport type { UID, Schema, Core } from '@strapi/types';\n\nconst READ_ACTION = 'plugin::content-manager.explorer.read';\nconst TEMP_KEY_DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\n/**\n * Returns the main display field for a model (e.g. title, name).\n * Uses content-manager configuration when available, falls back to first string attribute or 'id'.\n */\nconst getMainField = async (targetUid: UID.Schema): Promise<string> => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const configuration = await contentManagerContentTypeService.findConfiguration({\n uid: targetUid,\n });\n return configuration.settings.mainField;\n};\n\n/**\n * Returns the display label for a relation.\n * Matches the logic of the getRelationLabel function in the content-manager plugin.\n */\nconst getRelationLabel = (relation: Record<string, unknown>, mainField: string): string => {\n const label = relation[mainField];\n if (typeof label === 'string') return label;\n return String(relation.documentId ?? '');\n};\n\nconst FIELDS_TO_IGNORE = new Set([\n 'createdAt',\n 'createdBy',\n 'updatedAt',\n 'updatedBy',\n 'id',\n 'documentId',\n 'publishedAt',\n 'strapi_stage',\n 'strapi_assignee',\n 'locale',\n 'status',\n 'localizations',\n]);\n\nconst STATUS_FIELDS = new Set(['id', 'documentId', 'locale', 'updatedAt', 'publishedAt']);\n\n/**\n * Mirrors fractional-indexing's initial key range, i.e. generateNKeysBetween(undefined, undefined, n).\n */\nconst generateInitialTempKeys = (length: number): string[] => {\n let previousKey: string | undefined;\n\n return Array.from({ length }, () => {\n const nextKey = incrementInitialTempKey(previousKey);\n previousKey = nextKey;\n return nextKey;\n });\n};\n\nconst incrementInitialTempKey = (key?: string): string => {\n if (!key) {\n return `a${TEMP_KEY_DIGITS[0]}`;\n }\n\n const [head, ...digits] = key;\n let carry = true;\n\n for (let index = digits.length - 1; carry && index >= 0; index -= 1) {\n const nextDigitIndex = TEMP_KEY_DIGITS.indexOf(digits[index]) + 1;\n\n if (nextDigitIndex === 0) {\n throw new Error(`Invalid temporary key digit: ${digits[index]}`);\n }\n\n if (nextDigitIndex === TEMP_KEY_DIGITS.length) {\n digits[index] = TEMP_KEY_DIGITS[0];\n } else {\n digits[index] = TEMP_KEY_DIGITS[nextDigitIndex];\n carry = false;\n }\n }\n\n if (!carry) {\n return `${head}${digits.join('')}`;\n }\n\n if (head === 'z') {\n throw new Error('Cannot increment temporary keys any further');\n }\n\n const nextHead = String.fromCharCode(head.charCodeAt(0) + 1);\n if (nextHead > 'a') {\n digits.push(TEMP_KEY_DIGITS[0]);\n } else {\n digits.pop();\n }\n\n return `${nextHead}${digits.join('')}`;\n};\n\n/**\n * Normalizes a value to an array: arrays pass through, single values become [value], null/undefined become [].\n */\nconst normalizeToArray = (value: unknown): unknown[] => {\n if (isArray(value)) return value;\n if (value) return [value];\n return [];\n};\n\n/**\n * Type guard: returns true if the value is a valid relation object with documentId.\n */\nconst isValidRelation = (\n rel: unknown\n): rel is { documentId: string; id?: number; locale?: string } =>\n typeof rel === 'object' && rel !== null && 'documentId' in rel && !!(rel as any).documentId;\n\n/**\n * Maps relations from the source locale to target locale (batched for better performance).\n */\nconst resolveRelationsForLocaleBatch = async (\n relations: Array<{ documentId: string; id?: number; locale?: string }>,\n targetUid: UID.Schema,\n targetLocale: string\n): Promise<Array<{ documentId: string; id: number | string; locale?: string } | null>> => {\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n\n if (!isTargetLocalized) {\n return relations.map((rel) => {\n if (rel.id === undefined) return null;\n return { documentId: rel.documentId, id: rel.id };\n });\n }\n\n const documentIds = [...new Set(relations.map((r) => r.documentId))];\n const targetEntriesQuery = {\n where: { documentId: { $in: documentIds }, locale: targetLocale },\n select: [...STATUS_FIELDS],\n };\n const targetEntries = await strapi.db.query(targetUid).findMany(targetEntriesQuery);\n const byDocumentId = new Map<string, (typeof targetEntries)[0]>();\n for (const e of targetEntries) {\n const existing = byDocumentId.get(e.documentId);\n if (!existing || (e.publishedAt === null && existing.publishedAt !== null)) {\n byDocumentId.set(e.documentId, e);\n }\n }\n\n return relations.map((rel) => {\n const entry = byDocumentId.get(rel.documentId);\n if (!entry) return null;\n return {\n documentId: entry.documentId,\n id: entry.id,\n locale: entry.locale,\n };\n });\n};\n\n/**\n * Builds the where clause for relation queries: documentIds + locales (when target model is localized).\n */\nconst buildWhereForRelations = (\n relations: Array<{ documentId: string; locale?: string }>,\n documentIds: string[],\n targetUid: UID.Schema\n): { documentId: { $in: string[] }; locale?: { $in: string[] } } => {\n const where: { documentId: { $in: string[] }; locale?: { $in: string[] } } = {\n documentId: { $in: documentIds },\n };\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n if (isTargetLocalized) {\n const locales = [...new Set(relations.map((r) => r.locale).filter(Boolean))] as string[];\n if (locales.length > 0) {\n where.locale = { $in: locales };\n }\n }\n return where;\n};\n\n// ---------------------------------------------------------------------------\n// Batch pre-resolution\n// ---------------------------------------------------------------------------\n\ntype ValidRelation = { documentId: string; id?: number; locale?: string };\ntype ResolvedRelation = { documentId: string; id: number | string; locale?: string };\ntype RelationsByUid = Map<string, ValidRelation[]>;\n\ninterface UidResolutionData {\n blocked: boolean;\n mainField: string;\n /** sourceDocumentId → resolved entry in targetLocale (null if not found) */\n bySourceDocumentId: Map<string, ResolvedRelation | null>;\n /** resolvedEntry.id → status string */\n statusById: Map<number | string, string | undefined>;\n /** resolvedEntry.id → mainField value */\n labelById: Map<number | string, unknown>;\n}\n\n/**\n * Walk the full document tree and collect all valid relation objects grouped by targetUid.\n */\nconst collectRelationsByUid = (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>\n): RelationsByUid => {\n const result: RelationsByUid = new Map();\n\n const addRels = (uid: string, rels: ValidRelation[]) => {\n const existing = result.get(uid) ?? [];\n result.set(uid, existing.concat(rels));\n };\n\n const collect = (d: Record<string, unknown>, s: Schema.ContentType | Schema.Component) => {\n if (!d || typeof d !== 'object') return;\n for (const [key, value] of Object.entries(d)) {\n const attribute = s?.attributes?.[key];\n if (!attribute) continue;\n\n if (attribute.type === 'relation') {\n const attr = attribute as Schema.Attribute.Relation & {\n relation?: string;\n target?: string;\n };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) continue;\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length > 0) addRels(attr.target, validRels);\n } else if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] ?? {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n collect(item, compSchema);\n }\n } else if (value) {\n collect(value as Record<string, unknown>, compSchema);\n }\n } else if (attribute.type === 'dynamiczone' && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n const compUid = (item as any)?.__component as string;\n const compSchema = (components[compUid] ?? { attributes: {} }) as Schema.Component;\n collect(item as Record<string, unknown>, compSchema);\n }\n }\n }\n };\n\n collect(data, schema);\n return result;\n};\n\n/**\n * Resolves all relation targets for the requested locale in batches (per related content-type UID):\n * locale mapping, permissions, status, and labels.\n */\nconst resolveAllRelationsBatched = async (\n relationsByUid: RelationsByUid,\n targetLocale: string,\n userAbility: any\n): Promise<Map<string, UidResolutionData>> => {\n const result = new Map<string, UidResolutionData>();\n await Promise.all(\n [...relationsByUid.entries()].map(async ([targetUid, allRels]) => {\n const empty: UidResolutionData = {\n blocked: !userAbility.can(READ_ACTION, targetUid),\n mainField: '',\n bySourceDocumentId: new Map(),\n statusById: new Map(),\n labelById: new Map(),\n };\n\n if (empty.blocked) {\n result.set(targetUid, empty);\n return;\n }\n\n const mainField = await getMainField(targetUid as UID.Schema);\n const validRels = allRels.filter(isValidRelation);\n\n if (validRels.length === 0) {\n result.set(targetUid, { ...empty, mainField });\n return;\n }\n\n // Deduplicate by documentId before querying\n const uniqueRels = [...new Map(validRels.map((r) => [r.documentId, r])).values()];\n const resolvedList = await resolveRelationsForLocaleBatch(\n uniqueRels,\n targetUid as UID.Schema,\n targetLocale\n );\n\n const bySourceDocumentId = new Map<string, ResolvedRelation | null>();\n for (let i = 0; i < uniqueRels.length; i += 1) {\n bySourceDocumentId.set(uniqueRels[i].documentId, resolvedList[i]);\n }\n\n const resolvedEntries = resolvedList.filter((r): r is ResolvedRelation => r !== null);\n\n if (resolvedEntries.length === 0) {\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById: new Map(),\n labelById: new Map(),\n });\n return;\n }\n\n const documentIds = [...new Set(resolvedEntries.map((r) => r.documentId))];\n const where = buildWhereForRelations(resolvedEntries, documentIds, targetUid as UID.Schema);\n\n const [allStatusEntries, labelEntries] = await Promise.all([\n contentTypes.hasDraftAndPublish(strapi.getModel(targetUid as UID.Schema))\n ? strapi.db.query(targetUid).findMany({ where, select: [...STATUS_FIELDS] })\n : Promise.resolve([]),\n strapi.db.query(targetUid).findMany({\n where,\n select: ['documentId', 'id', 'locale', mainField],\n }),\n ]);\n\n // Build status map\n const statusById = new Map<number | string, string | undefined>();\n if (allStatusEntries.length > 0) {\n const documentMetadata = strapi.plugin('content-manager')?.service('document-metadata');\n if (documentMetadata) {\n const model = strapi.getModel(targetUid as UID.Schema);\n const isLocalized = strapi\n .plugin('i18n')\n ?.service('content-types')\n ?.isLocalizedContentType(model);\n const groupKey = (e: { documentId: string; locale?: string }) =>\n isLocalized && e.locale ? `${e.documentId}:${e.locale}` : e.documentId;\n\n const byGroup = new Map<string, typeof allStatusEntries>();\n for (const e of allStatusEntries) {\n const key = groupKey(e);\n const list = byGroup.get(key) ?? [];\n list.push(e);\n byGroup.set(key, list);\n }\n\n for (const entry of resolvedEntries) {\n const key = groupKey(entry);\n const entries = byGroup.get(key) ?? [];\n if (!entries.length) continue;\n const version = entries.find((e) => e.id === entry.id) ?? entries[0];\n const otherVersions = entries.filter((e) => e.id !== version.id);\n statusById.set(entry.id, documentMetadata.getStatus(version, otherVersions));\n }\n }\n }\n\n // Build label map\n const labelById = new Map<number | string, unknown>();\n for (const entry of labelEntries) {\n labelById.set(entry.id, entry[mainField]);\n }\n\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById,\n labelById,\n });\n })\n );\n\n return result;\n};\n\n/**\n * Build the { connect, disconnect } for a single relation attribute using pre-fetched data.\n */\nconst buildConnectFromPreResolved = (\n value: unknown,\n attribute: Schema.Attribute.Relation,\n preResolved: Map<string, UidResolutionData>\n): { connect: unknown[]; disconnect: unknown[] } => {\n const attr = attribute as Schema.Attribute.Relation & { relation?: string; target?: string };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) {\n return { connect: [], disconnect: [] };\n }\n\n const uidData = preResolved.get(attr.target);\n if (!uidData || uidData.blocked) {\n return { connect: [], disconnect: [] };\n }\n\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length === 0) {\n return { connect: [], disconnect: [] };\n }\n\n const connect = validRels\n .map((rel, index) => {\n const resolved = uidData.bySourceDocumentId.get(rel.documentId);\n if (!resolved) return null;\n\n const status = uidData.statusById.get(resolved.id);\n const mainFieldValue = uidData.labelById.get(resolved.id);\n const relationWithMainField: Record<string, unknown> = {\n ...resolved,\n [uidData.mainField]: mainFieldValue,\n };\n if (status !== undefined) {\n relationWithMainField.status = status;\n }\n\n return {\n ...relationWithMainField,\n __temp_key__: `a${index}`,\n label: getRelationLabel(relationWithMainField, uidData.mainField),\n };\n })\n .filter((r): r is NonNullable<typeof r> => r !== null);\n\n return { connect, disconnect: [] };\n};\n\n/**\n * Recursively process document data: remove internal fields and resolve relations using\n * pre-fetched resolution data (no additional DB calls).\n */\nconst processDocumentData = async (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>,\n preResolved: Map<string, UidResolutionData>\n): Promise<Record<string, unknown>> => {\n if (!data) {\n return {};\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (FIELDS_TO_IGNORE.has(key)) {\n continue;\n }\n\n const attribute = schema?.attributes?.[key];\n if (!attribute) {\n result[key] = value;\n continue;\n }\n\n if (attribute.type === 'password') {\n continue;\n }\n\n if (attribute.type === 'relation') {\n result[key] = buildConnectFromPreResolved(\n value,\n attribute as Schema.Attribute.Relation,\n preResolved\n );\n continue;\n }\n\n if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] || {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n } else if (value) {\n const processed = await processDocumentData(\n value as Record<string, unknown>,\n compSchema,\n components,\n preResolved\n );\n result[key] = processed;\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const compSchema = (components[item?.__component as string] || {\n attributes: {},\n }) as Schema.Component;\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n};\n\nexport const createFillFromLocaleService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n /**\n * Fetch the raw populated document for the given locale without any transformation.\n * The caller is responsible for sanitizing the output before passing it to transformDocument.\n */\n async fetchRawDocument(model: UID.ContentType, sourceLocale: string, documentId?: string) {\n const populateBuilderService = strapi\n .plugin('content-manager')\n .service('populate-builder') as (uid: UID.ContentType) => {\n populateDeep: (level: number) => { build: () => Promise<unknown> };\n };\n const modelDef = strapi.getModel(model);\n\n if (!modelDef) {\n throw new Error(`Model ${model} not found`);\n }\n\n // Build populate WITHOUT countRelations so we get full relation objects\n const populate = await populateBuilderService(model).populateDeep(Infinity).build();\n\n const docs = strapi.documents(model);\n const baseParams = {\n locale: sourceLocale,\n populate: populate as never,\n };\n\n return documentId\n ? docs.findOne({ ...baseParams, documentId })\n : docs.findFirst({ ...baseParams });\n },\n\n /**\n * Transform a (sanitized) document: strip internal fields, resolve relations to the target\n * locale, and skip relations to content types the user cannot read.\n */\n async transformDocument(\n document: Record<string, unknown>,\n model: UID.ContentType,\n targetLocale: string,\n userAbility: any\n ) {\n const schema = strapi.getModel(model) as Schema.ContentType;\n const getComponentSchema = (uid: string) =>\n (strapi.getModel(uid as UID.Schema) ?? { attributes: {} }) as Schema.Component;\n const components = new Proxy({} as Record<string, Schema.Component>, {\n get(_, uid: string) {\n return getComponentSchema(uid);\n },\n });\n\n const relsByUid = collectRelationsByUid(document, schema, components);\n const preResolved = await resolveAllRelationsBatched(relsByUid, targetLocale, userAbility);\n return processDocumentData(document, schema, components, preResolved);\n },\n };\n};\n"],"names":["READ_ACTION","TEMP_KEY_DIGITS","getMainField","targetUid","contentManagerContentTypeService","strapi","plugin","service","configuration","findConfiguration","uid","settings","mainField","getRelationLabel","relation","label","String","documentId","FIELDS_TO_IGNORE","Set","STATUS_FIELDS","generateInitialTempKeys","length","previousKey","Array","from","nextKey","incrementInitialTempKey","key","head","digits","carry","index","nextDigitIndex","indexOf","Error","join","nextHead","fromCharCode","charCodeAt","push","pop","normalizeToArray","value","isArray","isValidRelation","rel","resolveRelationsForLocaleBatch","relations","targetLocale","i18nContentTypesService","isTargetLocalized","isLocalizedContentType","getModel","map","id","undefined","documentIds","r","targetEntriesQuery","where","$in","locale","select","targetEntries","db","query","findMany","byDocumentId","Map","e","existing","get","publishedAt","set","entry","buildWhereForRelations","locales","filter","Boolean","collectRelationsByUid","data","schema","components","result","addRels","rels","concat","collect","d","s","Object","entries","attribute","attributes","type","attr","toLowerCase","includes","target","validRels","compSchema","component","repeatable","item","compUid","__component","resolveAllRelationsBatched","relationsByUid","userAbility","Promise","all","allRels","empty","blocked","can","bySourceDocumentId","statusById","labelById","uniqueRels","values","resolvedList","i","resolvedEntries","allStatusEntries","labelEntries","contentTypes","hasDraftAndPublish","resolve","documentMetadata","model","isLocalized","groupKey","byGroup","list","version","find","otherVersions","getStatus","buildConnectFromPreResolved","preResolved","connect","disconnect","uidData","resolved","status","mainFieldValue","relationWithMainField","__temp_key__","processDocumentData","has","tempKeys","processed","createFillFromLocaleService","fetchRawDocument","sourceLocale","populateBuilderService","modelDef","populate","populateDeep","Infinity","build","docs","documents","baseParams","findOne","findFirst","transformDocument","document","getComponentSchema","Proxy","_","relsByUid"],"mappings":"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"}
1
+ {"version":3,"file":"fill-from-locale.js","sources":["../../../server/src/services/fill-from-locale.ts"],"sourcesContent":["import { isArray } from 'lodash/fp';\nimport { contentTypes } from '@strapi/utils';\nimport type { UID, Schema, Core } from '@strapi/types';\n\nconst READ_ACTION = 'plugin::content-manager.explorer.read';\nconst TEMP_KEY_DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\n/**\n * Returns the main display field for a model (e.g. title, name).\n * Uses content-manager configuration when available, falls back to first string attribute or 'id'.\n */\nconst getMainField = async (targetUid: UID.Schema): Promise<string> => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const configuration = await contentManagerContentTypeService.findConfiguration({\n uid: targetUid,\n });\n return configuration.settings.mainField;\n};\n\n/**\n * Returns the display label for a relation in form state.\n * Empty configured values stay untranslated so the admin can provide its localized fallback.\n */\nconst getRelationLabel = (relation: Record<string, unknown>, mainField: string): string => {\n const label = relation[mainField];\n if (label === null || typeof label === 'string') return label ?? '';\n return String(relation.documentId ?? '');\n};\n\nconst FIELDS_TO_IGNORE = new Set([\n 'createdAt',\n 'createdBy',\n 'updatedAt',\n 'updatedBy',\n 'id',\n 'documentId',\n 'publishedAt',\n 'strapi_stage',\n 'strapi_assignee',\n 'locale',\n 'status',\n 'localizations',\n]);\n\nconst STATUS_FIELDS = new Set(['id', 'documentId', 'locale', 'updatedAt', 'publishedAt']);\n\n/**\n * Mirrors fractional-indexing's initial key range, i.e. generateNKeysBetween(undefined, undefined, n).\n */\nconst generateInitialTempKeys = (length: number): string[] => {\n let previousKey: string | undefined;\n\n return Array.from({ length }, () => {\n const nextKey = incrementInitialTempKey(previousKey);\n previousKey = nextKey;\n return nextKey;\n });\n};\n\nconst incrementInitialTempKey = (key?: string): string => {\n if (!key) {\n return `a${TEMP_KEY_DIGITS[0]}`;\n }\n\n const [head, ...digits] = key;\n let carry = true;\n\n for (let index = digits.length - 1; carry && index >= 0; index -= 1) {\n const nextDigitIndex = TEMP_KEY_DIGITS.indexOf(digits[index]) + 1;\n\n if (nextDigitIndex === 0) {\n throw new Error(`Invalid temporary key digit: ${digits[index]}`);\n }\n\n if (nextDigitIndex === TEMP_KEY_DIGITS.length) {\n digits[index] = TEMP_KEY_DIGITS[0];\n } else {\n digits[index] = TEMP_KEY_DIGITS[nextDigitIndex];\n carry = false;\n }\n }\n\n if (!carry) {\n return `${head}${digits.join('')}`;\n }\n\n if (head === 'z') {\n throw new Error('Cannot increment temporary keys any further');\n }\n\n const nextHead = String.fromCharCode(head.charCodeAt(0) + 1);\n if (nextHead > 'a') {\n digits.push(TEMP_KEY_DIGITS[0]);\n } else {\n digits.pop();\n }\n\n return `${nextHead}${digits.join('')}`;\n};\n\n/**\n * Normalizes a value to an array: arrays pass through, single values become [value], null/undefined become [].\n */\nconst normalizeToArray = (value: unknown): unknown[] => {\n if (isArray(value)) return value;\n if (value) return [value];\n return [];\n};\n\n/**\n * Type guard: returns true if the value is a valid relation object with documentId.\n */\nconst isValidRelation = (\n rel: unknown\n): rel is { documentId: string; id?: number; locale?: string } =>\n typeof rel === 'object' && rel !== null && 'documentId' in rel && !!(rel as any).documentId;\n\n/**\n * Maps relations from the source locale to target locale (batched for better performance).\n */\nconst resolveRelationsForLocaleBatch = async (\n relations: Array<{ documentId: string; id?: number; locale?: string }>,\n targetUid: UID.Schema,\n targetLocale: string\n): Promise<Array<{ documentId: string; id: number | string; locale?: string } | null>> => {\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n\n if (!isTargetLocalized) {\n return relations.map((rel) => {\n if (rel.id === undefined) return null;\n return { documentId: rel.documentId, id: rel.id };\n });\n }\n\n const documentIds = [...new Set(relations.map((r) => r.documentId))];\n const targetEntriesQuery = {\n where: { documentId: { $in: documentIds }, locale: targetLocale },\n select: [...STATUS_FIELDS],\n };\n const targetEntries = await strapi.db.query(targetUid).findMany(targetEntriesQuery);\n const byDocumentId = new Map<string, (typeof targetEntries)[0]>();\n for (const e of targetEntries) {\n const existing = byDocumentId.get(e.documentId);\n if (!existing || (e.publishedAt === null && existing.publishedAt !== null)) {\n byDocumentId.set(e.documentId, e);\n }\n }\n\n return relations.map((rel) => {\n const entry = byDocumentId.get(rel.documentId);\n if (!entry) return null;\n return {\n documentId: entry.documentId,\n id: entry.id,\n locale: entry.locale,\n };\n });\n};\n\n/**\n * Builds the where clause for relation queries: documentIds + locales (when target model is localized).\n */\nconst buildWhereForRelations = (\n relations: Array<{ documentId: string; locale?: string }>,\n documentIds: string[],\n targetUid: UID.Schema\n): { documentId: { $in: string[] }; locale?: { $in: string[] } } => {\n const where: { documentId: { $in: string[] }; locale?: { $in: string[] } } = {\n documentId: { $in: documentIds },\n };\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n if (isTargetLocalized) {\n const locales = [...new Set(relations.map((r) => r.locale).filter(Boolean))] as string[];\n if (locales.length > 0) {\n where.locale = { $in: locales };\n }\n }\n return where;\n};\n\n// ---------------------------------------------------------------------------\n// Batch pre-resolution\n// ---------------------------------------------------------------------------\n\ntype ValidRelation = { documentId: string; id?: number; locale?: string };\ntype ResolvedRelation = { documentId: string; id: number | string; locale?: string };\ntype RelationsByUid = Map<string, ValidRelation[]>;\n\ninterface UidResolutionData {\n blocked: boolean;\n mainField: string;\n /** sourceDocumentId → resolved entry in targetLocale (null if not found) */\n bySourceDocumentId: Map<string, ResolvedRelation | null>;\n /** resolvedEntry.id → status string */\n statusById: Map<number | string, string | undefined>;\n /** resolvedEntry.id → mainField value */\n labelById: Map<number | string, unknown>;\n}\n\n/**\n * Walk the full document tree and collect all valid relation objects grouped by targetUid.\n */\nconst collectRelationsByUid = (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>\n): RelationsByUid => {\n const result: RelationsByUid = new Map();\n\n const addRels = (uid: string, rels: ValidRelation[]) => {\n const existing = result.get(uid) ?? [];\n result.set(uid, existing.concat(rels));\n };\n\n const collect = (d: Record<string, unknown>, s: Schema.ContentType | Schema.Component) => {\n if (!d || typeof d !== 'object') return;\n for (const [key, value] of Object.entries(d)) {\n const attribute = s?.attributes?.[key];\n if (!attribute) continue;\n\n if (attribute.type === 'relation') {\n const attr = attribute as Schema.Attribute.Relation & {\n relation?: string;\n target?: string;\n };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) continue;\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length > 0) addRels(attr.target, validRels);\n } else if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] ?? {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n collect(item, compSchema);\n }\n } else if (value) {\n collect(value as Record<string, unknown>, compSchema);\n }\n } else if (attribute.type === 'dynamiczone' && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n const compUid = (item as any)?.__component as string;\n const compSchema = (components[compUid] ?? { attributes: {} }) as Schema.Component;\n collect(item as Record<string, unknown>, compSchema);\n }\n }\n }\n };\n\n collect(data, schema);\n return result;\n};\n\n/**\n * Resolves all relation targets for the requested locale in batches (per related content-type UID):\n * locale mapping, permissions, status, and labels.\n */\nconst resolveAllRelationsBatched = async (\n relationsByUid: RelationsByUid,\n targetLocale: string,\n userAbility: any\n): Promise<Map<string, UidResolutionData>> => {\n const result = new Map<string, UidResolutionData>();\n await Promise.all(\n [...relationsByUid.entries()].map(async ([targetUid, allRels]) => {\n const empty: UidResolutionData = {\n blocked: !userAbility.can(READ_ACTION, targetUid),\n mainField: '',\n bySourceDocumentId: new Map(),\n statusById: new Map(),\n labelById: new Map(),\n };\n\n if (empty.blocked) {\n result.set(targetUid, empty);\n return;\n }\n\n const mainField = await getMainField(targetUid as UID.Schema);\n const validRels = allRels.filter(isValidRelation);\n\n if (validRels.length === 0) {\n result.set(targetUid, { ...empty, mainField });\n return;\n }\n\n // Deduplicate by documentId before querying\n const uniqueRels = [...new Map(validRels.map((r) => [r.documentId, r])).values()];\n const resolvedList = await resolveRelationsForLocaleBatch(\n uniqueRels,\n targetUid as UID.Schema,\n targetLocale\n );\n\n const bySourceDocumentId = new Map<string, ResolvedRelation | null>();\n for (let i = 0; i < uniqueRels.length; i += 1) {\n bySourceDocumentId.set(uniqueRels[i].documentId, resolvedList[i]);\n }\n\n const resolvedEntries = resolvedList.filter((r): r is ResolvedRelation => r !== null);\n\n if (resolvedEntries.length === 0) {\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById: new Map(),\n labelById: new Map(),\n });\n return;\n }\n\n const documentIds = [...new Set(resolvedEntries.map((r) => r.documentId))];\n const where = buildWhereForRelations(resolvedEntries, documentIds, targetUid as UID.Schema);\n\n const [allStatusEntries, labelEntries] = await Promise.all([\n contentTypes.hasDraftAndPublish(strapi.getModel(targetUid as UID.Schema))\n ? strapi.db.query(targetUid).findMany({ where, select: [...STATUS_FIELDS] })\n : Promise.resolve([]),\n strapi.db.query(targetUid).findMany({\n where,\n select: ['documentId', 'id', 'locale', mainField],\n }),\n ]);\n\n // Build status map\n const statusById = new Map<number | string, string | undefined>();\n if (allStatusEntries.length > 0) {\n const documentMetadata = strapi.plugin('content-manager')?.service('document-metadata');\n if (documentMetadata) {\n const model = strapi.getModel(targetUid as UID.Schema);\n const isLocalized = strapi\n .plugin('i18n')\n ?.service('content-types')\n ?.isLocalizedContentType(model);\n const groupKey = (e: { documentId: string; locale?: string }) =>\n isLocalized && e.locale ? `${e.documentId}:${e.locale}` : e.documentId;\n\n const byGroup = new Map<string, typeof allStatusEntries>();\n for (const e of allStatusEntries) {\n const key = groupKey(e);\n const list = byGroup.get(key) ?? [];\n list.push(e);\n byGroup.set(key, list);\n }\n\n for (const entry of resolvedEntries) {\n const key = groupKey(entry);\n const entries = byGroup.get(key) ?? [];\n if (!entries.length) continue;\n const version = entries.find((e) => e.id === entry.id) ?? entries[0];\n const otherVersions = entries.filter((e) => e.id !== version.id);\n statusById.set(entry.id, documentMetadata.getStatus(version, otherVersions));\n }\n }\n }\n\n // Build label map\n const labelById = new Map<number | string, unknown>();\n for (const entry of labelEntries) {\n labelById.set(entry.id, entry[mainField]);\n }\n\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById,\n labelById,\n });\n })\n );\n\n return result;\n};\n\n/**\n * Build the { connect, disconnect } for a single relation attribute using pre-fetched data.\n */\nconst buildConnectFromPreResolved = (\n value: unknown,\n attribute: Schema.Attribute.Relation,\n preResolved: Map<string, UidResolutionData>\n): { connect: unknown[]; disconnect: unknown[] } => {\n const attr = attribute as Schema.Attribute.Relation & { relation?: string; target?: string };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) {\n return { connect: [], disconnect: [] };\n }\n\n const uidData = preResolved.get(attr.target);\n if (!uidData || uidData.blocked) {\n return { connect: [], disconnect: [] };\n }\n\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length === 0) {\n return { connect: [], disconnect: [] };\n }\n\n const connect = validRels\n .map((rel, index) => {\n const resolved = uidData.bySourceDocumentId.get(rel.documentId);\n if (!resolved) return null;\n\n const status = uidData.statusById.get(resolved.id);\n const mainFieldValue = uidData.labelById.get(resolved.id);\n const relationWithMainField: Record<string, unknown> = {\n ...resolved,\n [uidData.mainField]: mainFieldValue,\n };\n if (status !== undefined) {\n relationWithMainField.status = status;\n }\n\n return {\n ...relationWithMainField,\n __temp_key__: `a${index}`,\n label: getRelationLabel(relationWithMainField, uidData.mainField),\n };\n })\n .filter((r): r is NonNullable<typeof r> => r !== null);\n\n return { connect, disconnect: [] };\n};\n\n/**\n * Recursively process document data: remove internal fields and resolve relations using\n * pre-fetched resolution data (no additional DB calls).\n */\nconst processDocumentData = async (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>,\n preResolved: Map<string, UidResolutionData>\n): Promise<Record<string, unknown>> => {\n if (!data) {\n return {};\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (FIELDS_TO_IGNORE.has(key)) {\n continue;\n }\n\n const attribute = schema?.attributes?.[key];\n if (!attribute) {\n result[key] = value;\n continue;\n }\n\n if (attribute.type === 'password') {\n continue;\n }\n\n if (attribute.type === 'relation') {\n result[key] = buildConnectFromPreResolved(\n value,\n attribute as Schema.Attribute.Relation,\n preResolved\n );\n continue;\n }\n\n if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] || {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n } else if (value) {\n const processed = await processDocumentData(\n value as Record<string, unknown>,\n compSchema,\n components,\n preResolved\n );\n result[key] = processed;\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const compSchema = (components[item?.__component as string] || {\n attributes: {},\n }) as Schema.Component;\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n};\n\nexport const createFillFromLocaleService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n /**\n * Fetch the raw populated document for the given locale without any transformation.\n * The caller is responsible for sanitizing the output before passing it to transformDocument.\n */\n async fetchRawDocument(model: UID.ContentType, sourceLocale: string, documentId?: string) {\n const populateBuilderService = strapi\n .plugin('content-manager')\n .service('populate-builder') as (uid: UID.ContentType) => {\n populateDeep: (level: number) => { build: () => Promise<unknown> };\n };\n const modelDef = strapi.getModel(model);\n\n if (!modelDef) {\n throw new Error(`Model ${model} not found`);\n }\n\n // Build populate WITHOUT countRelations so we get full relation objects\n const populate = await populateBuilderService(model).populateDeep(Infinity).build();\n\n const docs = strapi.documents(model);\n const baseParams = {\n locale: sourceLocale,\n populate: populate as never,\n };\n\n return documentId\n ? docs.findOne({ ...baseParams, documentId })\n : docs.findFirst({ ...baseParams });\n },\n\n /**\n * Transform a (sanitized) document: strip internal fields, resolve relations to the target\n * locale, and skip relations to content types the user cannot read.\n */\n async transformDocument(\n document: Record<string, unknown>,\n model: UID.ContentType,\n targetLocale: string,\n userAbility: any\n ) {\n const schema = strapi.getModel(model) as Schema.ContentType;\n const getComponentSchema = (uid: string) =>\n (strapi.getModel(uid as UID.Schema) ?? { attributes: {} }) as Schema.Component;\n const components = new Proxy({} as Record<string, Schema.Component>, {\n get(_, uid: string) {\n return getComponentSchema(uid);\n },\n });\n\n const relsByUid = collectRelationsByUid(document, schema, components);\n const preResolved = await resolveAllRelationsBatched(relsByUid, targetLocale, userAbility);\n return processDocumentData(document, schema, components, preResolved);\n },\n };\n};\n"],"names":["READ_ACTION","TEMP_KEY_DIGITS","getMainField","targetUid","contentManagerContentTypeService","strapi","plugin","service","configuration","findConfiguration","uid","settings","mainField","getRelationLabel","relation","label","String","documentId","FIELDS_TO_IGNORE","Set","STATUS_FIELDS","generateInitialTempKeys","length","previousKey","Array","from","nextKey","incrementInitialTempKey","key","head","digits","carry","index","nextDigitIndex","indexOf","Error","join","nextHead","fromCharCode","charCodeAt","push","pop","normalizeToArray","value","isArray","isValidRelation","rel","resolveRelationsForLocaleBatch","relations","targetLocale","i18nContentTypesService","isTargetLocalized","isLocalizedContentType","getModel","map","id","undefined","documentIds","r","targetEntriesQuery","where","$in","locale","select","targetEntries","db","query","findMany","byDocumentId","Map","e","existing","get","publishedAt","set","entry","buildWhereForRelations","locales","filter","Boolean","collectRelationsByUid","data","schema","components","result","addRels","rels","concat","collect","d","s","Object","entries","attribute","attributes","type","attr","toLowerCase","includes","target","validRels","compSchema","component","repeatable","item","compUid","__component","resolveAllRelationsBatched","relationsByUid","userAbility","Promise","all","allRels","empty","blocked","can","bySourceDocumentId","statusById","labelById","uniqueRels","values","resolvedList","i","resolvedEntries","allStatusEntries","labelEntries","contentTypes","hasDraftAndPublish","resolve","documentMetadata","model","isLocalized","groupKey","byGroup","list","version","find","otherVersions","getStatus","buildConnectFromPreResolved","preResolved","connect","disconnect","uidData","resolved","status","mainFieldValue","relationWithMainField","__temp_key__","processDocumentData","has","tempKeys","processed","createFillFromLocaleService","fetchRawDocument","sourceLocale","populateBuilderService","modelDef","populate","populateDeep","Infinity","build","docs","documents","baseParams","findOne","findFirst","transformDocument","document","getComponentSchema","Proxy","_","relsByUid"],"mappings":"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"}
@@ -14,11 +14,11 @@ const TEMP_KEY_DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrs
14
14
  return configuration.settings.mainField;
15
15
  };
16
16
  /**
17
- * Returns the display label for a relation.
18
- * Matches the logic of the getRelationLabel function in the content-manager plugin.
17
+ * Returns the display label for a relation in form state.
18
+ * Empty configured values stay untranslated so the admin can provide its localized fallback.
19
19
  */ const getRelationLabel = (relation, mainField)=>{
20
20
  const label = relation[mainField];
21
- if (typeof label === 'string') return label;
21
+ if (label === null || typeof label === 'string') return label ?? '';
22
22
  return String(relation.documentId ?? '');
23
23
  };
24
24
  const FIELDS_TO_IGNORE = new Set([
@@ -1 +1 @@
1
- {"version":3,"file":"fill-from-locale.mjs","sources":["../../../server/src/services/fill-from-locale.ts"],"sourcesContent":["import { isArray } from 'lodash/fp';\nimport { contentTypes } from '@strapi/utils';\nimport type { UID, Schema, Core } from '@strapi/types';\n\nconst READ_ACTION = 'plugin::content-manager.explorer.read';\nconst TEMP_KEY_DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\n/**\n * Returns the main display field for a model (e.g. title, name).\n * Uses content-manager configuration when available, falls back to first string attribute or 'id'.\n */\nconst getMainField = async (targetUid: UID.Schema): Promise<string> => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const configuration = await contentManagerContentTypeService.findConfiguration({\n uid: targetUid,\n });\n return configuration.settings.mainField;\n};\n\n/**\n * Returns the display label for a relation.\n * Matches the logic of the getRelationLabel function in the content-manager plugin.\n */\nconst getRelationLabel = (relation: Record<string, unknown>, mainField: string): string => {\n const label = relation[mainField];\n if (typeof label === 'string') return label;\n return String(relation.documentId ?? '');\n};\n\nconst FIELDS_TO_IGNORE = new Set([\n 'createdAt',\n 'createdBy',\n 'updatedAt',\n 'updatedBy',\n 'id',\n 'documentId',\n 'publishedAt',\n 'strapi_stage',\n 'strapi_assignee',\n 'locale',\n 'status',\n 'localizations',\n]);\n\nconst STATUS_FIELDS = new Set(['id', 'documentId', 'locale', 'updatedAt', 'publishedAt']);\n\n/**\n * Mirrors fractional-indexing's initial key range, i.e. generateNKeysBetween(undefined, undefined, n).\n */\nconst generateInitialTempKeys = (length: number): string[] => {\n let previousKey: string | undefined;\n\n return Array.from({ length }, () => {\n const nextKey = incrementInitialTempKey(previousKey);\n previousKey = nextKey;\n return nextKey;\n });\n};\n\nconst incrementInitialTempKey = (key?: string): string => {\n if (!key) {\n return `a${TEMP_KEY_DIGITS[0]}`;\n }\n\n const [head, ...digits] = key;\n let carry = true;\n\n for (let index = digits.length - 1; carry && index >= 0; index -= 1) {\n const nextDigitIndex = TEMP_KEY_DIGITS.indexOf(digits[index]) + 1;\n\n if (nextDigitIndex === 0) {\n throw new Error(`Invalid temporary key digit: ${digits[index]}`);\n }\n\n if (nextDigitIndex === TEMP_KEY_DIGITS.length) {\n digits[index] = TEMP_KEY_DIGITS[0];\n } else {\n digits[index] = TEMP_KEY_DIGITS[nextDigitIndex];\n carry = false;\n }\n }\n\n if (!carry) {\n return `${head}${digits.join('')}`;\n }\n\n if (head === 'z') {\n throw new Error('Cannot increment temporary keys any further');\n }\n\n const nextHead = String.fromCharCode(head.charCodeAt(0) + 1);\n if (nextHead > 'a') {\n digits.push(TEMP_KEY_DIGITS[0]);\n } else {\n digits.pop();\n }\n\n return `${nextHead}${digits.join('')}`;\n};\n\n/**\n * Normalizes a value to an array: arrays pass through, single values become [value], null/undefined become [].\n */\nconst normalizeToArray = (value: unknown): unknown[] => {\n if (isArray(value)) return value;\n if (value) return [value];\n return [];\n};\n\n/**\n * Type guard: returns true if the value is a valid relation object with documentId.\n */\nconst isValidRelation = (\n rel: unknown\n): rel is { documentId: string; id?: number; locale?: string } =>\n typeof rel === 'object' && rel !== null && 'documentId' in rel && !!(rel as any).documentId;\n\n/**\n * Maps relations from the source locale to target locale (batched for better performance).\n */\nconst resolveRelationsForLocaleBatch = async (\n relations: Array<{ documentId: string; id?: number; locale?: string }>,\n targetUid: UID.Schema,\n targetLocale: string\n): Promise<Array<{ documentId: string; id: number | string; locale?: string } | null>> => {\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n\n if (!isTargetLocalized) {\n return relations.map((rel) => {\n if (rel.id === undefined) return null;\n return { documentId: rel.documentId, id: rel.id };\n });\n }\n\n const documentIds = [...new Set(relations.map((r) => r.documentId))];\n const targetEntriesQuery = {\n where: { documentId: { $in: documentIds }, locale: targetLocale },\n select: [...STATUS_FIELDS],\n };\n const targetEntries = await strapi.db.query(targetUid).findMany(targetEntriesQuery);\n const byDocumentId = new Map<string, (typeof targetEntries)[0]>();\n for (const e of targetEntries) {\n const existing = byDocumentId.get(e.documentId);\n if (!existing || (e.publishedAt === null && existing.publishedAt !== null)) {\n byDocumentId.set(e.documentId, e);\n }\n }\n\n return relations.map((rel) => {\n const entry = byDocumentId.get(rel.documentId);\n if (!entry) return null;\n return {\n documentId: entry.documentId,\n id: entry.id,\n locale: entry.locale,\n };\n });\n};\n\n/**\n * Builds the where clause for relation queries: documentIds + locales (when target model is localized).\n */\nconst buildWhereForRelations = (\n relations: Array<{ documentId: string; locale?: string }>,\n documentIds: string[],\n targetUid: UID.Schema\n): { documentId: { $in: string[] }; locale?: { $in: string[] } } => {\n const where: { documentId: { $in: string[] }; locale?: { $in: string[] } } = {\n documentId: { $in: documentIds },\n };\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n if (isTargetLocalized) {\n const locales = [...new Set(relations.map((r) => r.locale).filter(Boolean))] as string[];\n if (locales.length > 0) {\n where.locale = { $in: locales };\n }\n }\n return where;\n};\n\n// ---------------------------------------------------------------------------\n// Batch pre-resolution\n// ---------------------------------------------------------------------------\n\ntype ValidRelation = { documentId: string; id?: number; locale?: string };\ntype ResolvedRelation = { documentId: string; id: number | string; locale?: string };\ntype RelationsByUid = Map<string, ValidRelation[]>;\n\ninterface UidResolutionData {\n blocked: boolean;\n mainField: string;\n /** sourceDocumentId → resolved entry in targetLocale (null if not found) */\n bySourceDocumentId: Map<string, ResolvedRelation | null>;\n /** resolvedEntry.id → status string */\n statusById: Map<number | string, string | undefined>;\n /** resolvedEntry.id → mainField value */\n labelById: Map<number | string, unknown>;\n}\n\n/**\n * Walk the full document tree and collect all valid relation objects grouped by targetUid.\n */\nconst collectRelationsByUid = (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>\n): RelationsByUid => {\n const result: RelationsByUid = new Map();\n\n const addRels = (uid: string, rels: ValidRelation[]) => {\n const existing = result.get(uid) ?? [];\n result.set(uid, existing.concat(rels));\n };\n\n const collect = (d: Record<string, unknown>, s: Schema.ContentType | Schema.Component) => {\n if (!d || typeof d !== 'object') return;\n for (const [key, value] of Object.entries(d)) {\n const attribute = s?.attributes?.[key];\n if (!attribute) continue;\n\n if (attribute.type === 'relation') {\n const attr = attribute as Schema.Attribute.Relation & {\n relation?: string;\n target?: string;\n };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) continue;\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length > 0) addRels(attr.target, validRels);\n } else if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] ?? {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n collect(item, compSchema);\n }\n } else if (value) {\n collect(value as Record<string, unknown>, compSchema);\n }\n } else if (attribute.type === 'dynamiczone' && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n const compUid = (item as any)?.__component as string;\n const compSchema = (components[compUid] ?? { attributes: {} }) as Schema.Component;\n collect(item as Record<string, unknown>, compSchema);\n }\n }\n }\n };\n\n collect(data, schema);\n return result;\n};\n\n/**\n * Resolves all relation targets for the requested locale in batches (per related content-type UID):\n * locale mapping, permissions, status, and labels.\n */\nconst resolveAllRelationsBatched = async (\n relationsByUid: RelationsByUid,\n targetLocale: string,\n userAbility: any\n): Promise<Map<string, UidResolutionData>> => {\n const result = new Map<string, UidResolutionData>();\n await Promise.all(\n [...relationsByUid.entries()].map(async ([targetUid, allRels]) => {\n const empty: UidResolutionData = {\n blocked: !userAbility.can(READ_ACTION, targetUid),\n mainField: '',\n bySourceDocumentId: new Map(),\n statusById: new Map(),\n labelById: new Map(),\n };\n\n if (empty.blocked) {\n result.set(targetUid, empty);\n return;\n }\n\n const mainField = await getMainField(targetUid as UID.Schema);\n const validRels = allRels.filter(isValidRelation);\n\n if (validRels.length === 0) {\n result.set(targetUid, { ...empty, mainField });\n return;\n }\n\n // Deduplicate by documentId before querying\n const uniqueRels = [...new Map(validRels.map((r) => [r.documentId, r])).values()];\n const resolvedList = await resolveRelationsForLocaleBatch(\n uniqueRels,\n targetUid as UID.Schema,\n targetLocale\n );\n\n const bySourceDocumentId = new Map<string, ResolvedRelation | null>();\n for (let i = 0; i < uniqueRels.length; i += 1) {\n bySourceDocumentId.set(uniqueRels[i].documentId, resolvedList[i]);\n }\n\n const resolvedEntries = resolvedList.filter((r): r is ResolvedRelation => r !== null);\n\n if (resolvedEntries.length === 0) {\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById: new Map(),\n labelById: new Map(),\n });\n return;\n }\n\n const documentIds = [...new Set(resolvedEntries.map((r) => r.documentId))];\n const where = buildWhereForRelations(resolvedEntries, documentIds, targetUid as UID.Schema);\n\n const [allStatusEntries, labelEntries] = await Promise.all([\n contentTypes.hasDraftAndPublish(strapi.getModel(targetUid as UID.Schema))\n ? strapi.db.query(targetUid).findMany({ where, select: [...STATUS_FIELDS] })\n : Promise.resolve([]),\n strapi.db.query(targetUid).findMany({\n where,\n select: ['documentId', 'id', 'locale', mainField],\n }),\n ]);\n\n // Build status map\n const statusById = new Map<number | string, string | undefined>();\n if (allStatusEntries.length > 0) {\n const documentMetadata = strapi.plugin('content-manager')?.service('document-metadata');\n if (documentMetadata) {\n const model = strapi.getModel(targetUid as UID.Schema);\n const isLocalized = strapi\n .plugin('i18n')\n ?.service('content-types')\n ?.isLocalizedContentType(model);\n const groupKey = (e: { documentId: string; locale?: string }) =>\n isLocalized && e.locale ? `${e.documentId}:${e.locale}` : e.documentId;\n\n const byGroup = new Map<string, typeof allStatusEntries>();\n for (const e of allStatusEntries) {\n const key = groupKey(e);\n const list = byGroup.get(key) ?? [];\n list.push(e);\n byGroup.set(key, list);\n }\n\n for (const entry of resolvedEntries) {\n const key = groupKey(entry);\n const entries = byGroup.get(key) ?? [];\n if (!entries.length) continue;\n const version = entries.find((e) => e.id === entry.id) ?? entries[0];\n const otherVersions = entries.filter((e) => e.id !== version.id);\n statusById.set(entry.id, documentMetadata.getStatus(version, otherVersions));\n }\n }\n }\n\n // Build label map\n const labelById = new Map<number | string, unknown>();\n for (const entry of labelEntries) {\n labelById.set(entry.id, entry[mainField]);\n }\n\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById,\n labelById,\n });\n })\n );\n\n return result;\n};\n\n/**\n * Build the { connect, disconnect } for a single relation attribute using pre-fetched data.\n */\nconst buildConnectFromPreResolved = (\n value: unknown,\n attribute: Schema.Attribute.Relation,\n preResolved: Map<string, UidResolutionData>\n): { connect: unknown[]; disconnect: unknown[] } => {\n const attr = attribute as Schema.Attribute.Relation & { relation?: string; target?: string };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) {\n return { connect: [], disconnect: [] };\n }\n\n const uidData = preResolved.get(attr.target);\n if (!uidData || uidData.blocked) {\n return { connect: [], disconnect: [] };\n }\n\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length === 0) {\n return { connect: [], disconnect: [] };\n }\n\n const connect = validRels\n .map((rel, index) => {\n const resolved = uidData.bySourceDocumentId.get(rel.documentId);\n if (!resolved) return null;\n\n const status = uidData.statusById.get(resolved.id);\n const mainFieldValue = uidData.labelById.get(resolved.id);\n const relationWithMainField: Record<string, unknown> = {\n ...resolved,\n [uidData.mainField]: mainFieldValue,\n };\n if (status !== undefined) {\n relationWithMainField.status = status;\n }\n\n return {\n ...relationWithMainField,\n __temp_key__: `a${index}`,\n label: getRelationLabel(relationWithMainField, uidData.mainField),\n };\n })\n .filter((r): r is NonNullable<typeof r> => r !== null);\n\n return { connect, disconnect: [] };\n};\n\n/**\n * Recursively process document data: remove internal fields and resolve relations using\n * pre-fetched resolution data (no additional DB calls).\n */\nconst processDocumentData = async (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>,\n preResolved: Map<string, UidResolutionData>\n): Promise<Record<string, unknown>> => {\n if (!data) {\n return {};\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (FIELDS_TO_IGNORE.has(key)) {\n continue;\n }\n\n const attribute = schema?.attributes?.[key];\n if (!attribute) {\n result[key] = value;\n continue;\n }\n\n if (attribute.type === 'password') {\n continue;\n }\n\n if (attribute.type === 'relation') {\n result[key] = buildConnectFromPreResolved(\n value,\n attribute as Schema.Attribute.Relation,\n preResolved\n );\n continue;\n }\n\n if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] || {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n } else if (value) {\n const processed = await processDocumentData(\n value as Record<string, unknown>,\n compSchema,\n components,\n preResolved\n );\n result[key] = processed;\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const compSchema = (components[item?.__component as string] || {\n attributes: {},\n }) as Schema.Component;\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n};\n\nexport const createFillFromLocaleService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n /**\n * Fetch the raw populated document for the given locale without any transformation.\n * The caller is responsible for sanitizing the output before passing it to transformDocument.\n */\n async fetchRawDocument(model: UID.ContentType, sourceLocale: string, documentId?: string) {\n const populateBuilderService = strapi\n .plugin('content-manager')\n .service('populate-builder') as (uid: UID.ContentType) => {\n populateDeep: (level: number) => { build: () => Promise<unknown> };\n };\n const modelDef = strapi.getModel(model);\n\n if (!modelDef) {\n throw new Error(`Model ${model} not found`);\n }\n\n // Build populate WITHOUT countRelations so we get full relation objects\n const populate = await populateBuilderService(model).populateDeep(Infinity).build();\n\n const docs = strapi.documents(model);\n const baseParams = {\n locale: sourceLocale,\n populate: populate as never,\n };\n\n return documentId\n ? docs.findOne({ ...baseParams, documentId })\n : docs.findFirst({ ...baseParams });\n },\n\n /**\n * Transform a (sanitized) document: strip internal fields, resolve relations to the target\n * locale, and skip relations to content types the user cannot read.\n */\n async transformDocument(\n document: Record<string, unknown>,\n model: UID.ContentType,\n targetLocale: string,\n userAbility: any\n ) {\n const schema = strapi.getModel(model) as Schema.ContentType;\n const getComponentSchema = (uid: string) =>\n (strapi.getModel(uid as UID.Schema) ?? { attributes: {} }) as Schema.Component;\n const components = new Proxy({} as Record<string, Schema.Component>, {\n get(_, uid: string) {\n return getComponentSchema(uid);\n },\n });\n\n const relsByUid = collectRelationsByUid(document, schema, components);\n const preResolved = await resolveAllRelationsBatched(relsByUid, targetLocale, userAbility);\n return processDocumentData(document, schema, components, preResolved);\n },\n };\n};\n"],"names":["READ_ACTION","TEMP_KEY_DIGITS","getMainField","targetUid","contentManagerContentTypeService","strapi","plugin","service","configuration","findConfiguration","uid","settings","mainField","getRelationLabel","relation","label","String","documentId","FIELDS_TO_IGNORE","Set","STATUS_FIELDS","generateInitialTempKeys","length","previousKey","Array","from","nextKey","incrementInitialTempKey","key","head","digits","carry","index","nextDigitIndex","indexOf","Error","join","nextHead","fromCharCode","charCodeAt","push","pop","normalizeToArray","value","isArray","isValidRelation","rel","resolveRelationsForLocaleBatch","relations","targetLocale","i18nContentTypesService","isTargetLocalized","isLocalizedContentType","getModel","map","id","undefined","documentIds","r","targetEntriesQuery","where","$in","locale","select","targetEntries","db","query","findMany","byDocumentId","Map","e","existing","get","publishedAt","set","entry","buildWhereForRelations","locales","filter","Boolean","collectRelationsByUid","data","schema","components","result","addRels","rels","concat","collect","d","s","Object","entries","attribute","attributes","type","attr","toLowerCase","includes","target","validRels","compSchema","component","repeatable","item","compUid","__component","resolveAllRelationsBatched","relationsByUid","userAbility","Promise","all","allRels","empty","blocked","can","bySourceDocumentId","statusById","labelById","uniqueRels","values","resolvedList","i","resolvedEntries","allStatusEntries","labelEntries","contentTypes","hasDraftAndPublish","resolve","documentMetadata","model","isLocalized","groupKey","byGroup","list","version","find","otherVersions","getStatus","buildConnectFromPreResolved","preResolved","connect","disconnect","uidData","resolved","status","mainFieldValue","relationWithMainField","__temp_key__","processDocumentData","has","tempKeys","processed","createFillFromLocaleService","fetchRawDocument","sourceLocale","populateBuilderService","modelDef","populate","populateDeep","Infinity","build","docs","documents","baseParams","findOne","findFirst","transformDocument","document","getComponentSchema","Proxy","_","relsByUid"],"mappings":"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"}
1
+ {"version":3,"file":"fill-from-locale.mjs","sources":["../../../server/src/services/fill-from-locale.ts"],"sourcesContent":["import { isArray } from 'lodash/fp';\nimport { contentTypes } from '@strapi/utils';\nimport type { UID, Schema, Core } from '@strapi/types';\n\nconst READ_ACTION = 'plugin::content-manager.explorer.read';\nconst TEMP_KEY_DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\n/**\n * Returns the main display field for a model (e.g. title, name).\n * Uses content-manager configuration when available, falls back to first string attribute or 'id'.\n */\nconst getMainField = async (targetUid: UID.Schema): Promise<string> => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const configuration = await contentManagerContentTypeService.findConfiguration({\n uid: targetUid,\n });\n return configuration.settings.mainField;\n};\n\n/**\n * Returns the display label for a relation in form state.\n * Empty configured values stay untranslated so the admin can provide its localized fallback.\n */\nconst getRelationLabel = (relation: Record<string, unknown>, mainField: string): string => {\n const label = relation[mainField];\n if (label === null || typeof label === 'string') return label ?? '';\n return String(relation.documentId ?? '');\n};\n\nconst FIELDS_TO_IGNORE = new Set([\n 'createdAt',\n 'createdBy',\n 'updatedAt',\n 'updatedBy',\n 'id',\n 'documentId',\n 'publishedAt',\n 'strapi_stage',\n 'strapi_assignee',\n 'locale',\n 'status',\n 'localizations',\n]);\n\nconst STATUS_FIELDS = new Set(['id', 'documentId', 'locale', 'updatedAt', 'publishedAt']);\n\n/**\n * Mirrors fractional-indexing's initial key range, i.e. generateNKeysBetween(undefined, undefined, n).\n */\nconst generateInitialTempKeys = (length: number): string[] => {\n let previousKey: string | undefined;\n\n return Array.from({ length }, () => {\n const nextKey = incrementInitialTempKey(previousKey);\n previousKey = nextKey;\n return nextKey;\n });\n};\n\nconst incrementInitialTempKey = (key?: string): string => {\n if (!key) {\n return `a${TEMP_KEY_DIGITS[0]}`;\n }\n\n const [head, ...digits] = key;\n let carry = true;\n\n for (let index = digits.length - 1; carry && index >= 0; index -= 1) {\n const nextDigitIndex = TEMP_KEY_DIGITS.indexOf(digits[index]) + 1;\n\n if (nextDigitIndex === 0) {\n throw new Error(`Invalid temporary key digit: ${digits[index]}`);\n }\n\n if (nextDigitIndex === TEMP_KEY_DIGITS.length) {\n digits[index] = TEMP_KEY_DIGITS[0];\n } else {\n digits[index] = TEMP_KEY_DIGITS[nextDigitIndex];\n carry = false;\n }\n }\n\n if (!carry) {\n return `${head}${digits.join('')}`;\n }\n\n if (head === 'z') {\n throw new Error('Cannot increment temporary keys any further');\n }\n\n const nextHead = String.fromCharCode(head.charCodeAt(0) + 1);\n if (nextHead > 'a') {\n digits.push(TEMP_KEY_DIGITS[0]);\n } else {\n digits.pop();\n }\n\n return `${nextHead}${digits.join('')}`;\n};\n\n/**\n * Normalizes a value to an array: arrays pass through, single values become [value], null/undefined become [].\n */\nconst normalizeToArray = (value: unknown): unknown[] => {\n if (isArray(value)) return value;\n if (value) return [value];\n return [];\n};\n\n/**\n * Type guard: returns true if the value is a valid relation object with documentId.\n */\nconst isValidRelation = (\n rel: unknown\n): rel is { documentId: string; id?: number; locale?: string } =>\n typeof rel === 'object' && rel !== null && 'documentId' in rel && !!(rel as any).documentId;\n\n/**\n * Maps relations from the source locale to target locale (batched for better performance).\n */\nconst resolveRelationsForLocaleBatch = async (\n relations: Array<{ documentId: string; id?: number; locale?: string }>,\n targetUid: UID.Schema,\n targetLocale: string\n): Promise<Array<{ documentId: string; id: number | string; locale?: string } | null>> => {\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n\n if (!isTargetLocalized) {\n return relations.map((rel) => {\n if (rel.id === undefined) return null;\n return { documentId: rel.documentId, id: rel.id };\n });\n }\n\n const documentIds = [...new Set(relations.map((r) => r.documentId))];\n const targetEntriesQuery = {\n where: { documentId: { $in: documentIds }, locale: targetLocale },\n select: [...STATUS_FIELDS],\n };\n const targetEntries = await strapi.db.query(targetUid).findMany(targetEntriesQuery);\n const byDocumentId = new Map<string, (typeof targetEntries)[0]>();\n for (const e of targetEntries) {\n const existing = byDocumentId.get(e.documentId);\n if (!existing || (e.publishedAt === null && existing.publishedAt !== null)) {\n byDocumentId.set(e.documentId, e);\n }\n }\n\n return relations.map((rel) => {\n const entry = byDocumentId.get(rel.documentId);\n if (!entry) return null;\n return {\n documentId: entry.documentId,\n id: entry.id,\n locale: entry.locale,\n };\n });\n};\n\n/**\n * Builds the where clause for relation queries: documentIds + locales (when target model is localized).\n */\nconst buildWhereForRelations = (\n relations: Array<{ documentId: string; locale?: string }>,\n documentIds: string[],\n targetUid: UID.Schema\n): { documentId: { $in: string[] }; locale?: { $in: string[] } } => {\n const where: { documentId: { $in: string[] }; locale?: { $in: string[] } } = {\n documentId: { $in: documentIds },\n };\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n if (isTargetLocalized) {\n const locales = [...new Set(relations.map((r) => r.locale).filter(Boolean))] as string[];\n if (locales.length > 0) {\n where.locale = { $in: locales };\n }\n }\n return where;\n};\n\n// ---------------------------------------------------------------------------\n// Batch pre-resolution\n// ---------------------------------------------------------------------------\n\ntype ValidRelation = { documentId: string; id?: number; locale?: string };\ntype ResolvedRelation = { documentId: string; id: number | string; locale?: string };\ntype RelationsByUid = Map<string, ValidRelation[]>;\n\ninterface UidResolutionData {\n blocked: boolean;\n mainField: string;\n /** sourceDocumentId → resolved entry in targetLocale (null if not found) */\n bySourceDocumentId: Map<string, ResolvedRelation | null>;\n /** resolvedEntry.id → status string */\n statusById: Map<number | string, string | undefined>;\n /** resolvedEntry.id → mainField value */\n labelById: Map<number | string, unknown>;\n}\n\n/**\n * Walk the full document tree and collect all valid relation objects grouped by targetUid.\n */\nconst collectRelationsByUid = (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>\n): RelationsByUid => {\n const result: RelationsByUid = new Map();\n\n const addRels = (uid: string, rels: ValidRelation[]) => {\n const existing = result.get(uid) ?? [];\n result.set(uid, existing.concat(rels));\n };\n\n const collect = (d: Record<string, unknown>, s: Schema.ContentType | Schema.Component) => {\n if (!d || typeof d !== 'object') return;\n for (const [key, value] of Object.entries(d)) {\n const attribute = s?.attributes?.[key];\n if (!attribute) continue;\n\n if (attribute.type === 'relation') {\n const attr = attribute as Schema.Attribute.Relation & {\n relation?: string;\n target?: string;\n };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) continue;\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length > 0) addRels(attr.target, validRels);\n } else if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] ?? {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n collect(item, compSchema);\n }\n } else if (value) {\n collect(value as Record<string, unknown>, compSchema);\n }\n } else if (attribute.type === 'dynamiczone' && isArray(value)) {\n for (const item of value as Record<string, unknown>[]) {\n const compUid = (item as any)?.__component as string;\n const compSchema = (components[compUid] ?? { attributes: {} }) as Schema.Component;\n collect(item as Record<string, unknown>, compSchema);\n }\n }\n }\n };\n\n collect(data, schema);\n return result;\n};\n\n/**\n * Resolves all relation targets for the requested locale in batches (per related content-type UID):\n * locale mapping, permissions, status, and labels.\n */\nconst resolveAllRelationsBatched = async (\n relationsByUid: RelationsByUid,\n targetLocale: string,\n userAbility: any\n): Promise<Map<string, UidResolutionData>> => {\n const result = new Map<string, UidResolutionData>();\n await Promise.all(\n [...relationsByUid.entries()].map(async ([targetUid, allRels]) => {\n const empty: UidResolutionData = {\n blocked: !userAbility.can(READ_ACTION, targetUid),\n mainField: '',\n bySourceDocumentId: new Map(),\n statusById: new Map(),\n labelById: new Map(),\n };\n\n if (empty.blocked) {\n result.set(targetUid, empty);\n return;\n }\n\n const mainField = await getMainField(targetUid as UID.Schema);\n const validRels = allRels.filter(isValidRelation);\n\n if (validRels.length === 0) {\n result.set(targetUid, { ...empty, mainField });\n return;\n }\n\n // Deduplicate by documentId before querying\n const uniqueRels = [...new Map(validRels.map((r) => [r.documentId, r])).values()];\n const resolvedList = await resolveRelationsForLocaleBatch(\n uniqueRels,\n targetUid as UID.Schema,\n targetLocale\n );\n\n const bySourceDocumentId = new Map<string, ResolvedRelation | null>();\n for (let i = 0; i < uniqueRels.length; i += 1) {\n bySourceDocumentId.set(uniqueRels[i].documentId, resolvedList[i]);\n }\n\n const resolvedEntries = resolvedList.filter((r): r is ResolvedRelation => r !== null);\n\n if (resolvedEntries.length === 0) {\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById: new Map(),\n labelById: new Map(),\n });\n return;\n }\n\n const documentIds = [...new Set(resolvedEntries.map((r) => r.documentId))];\n const where = buildWhereForRelations(resolvedEntries, documentIds, targetUid as UID.Schema);\n\n const [allStatusEntries, labelEntries] = await Promise.all([\n contentTypes.hasDraftAndPublish(strapi.getModel(targetUid as UID.Schema))\n ? strapi.db.query(targetUid).findMany({ where, select: [...STATUS_FIELDS] })\n : Promise.resolve([]),\n strapi.db.query(targetUid).findMany({\n where,\n select: ['documentId', 'id', 'locale', mainField],\n }),\n ]);\n\n // Build status map\n const statusById = new Map<number | string, string | undefined>();\n if (allStatusEntries.length > 0) {\n const documentMetadata = strapi.plugin('content-manager')?.service('document-metadata');\n if (documentMetadata) {\n const model = strapi.getModel(targetUid as UID.Schema);\n const isLocalized = strapi\n .plugin('i18n')\n ?.service('content-types')\n ?.isLocalizedContentType(model);\n const groupKey = (e: { documentId: string; locale?: string }) =>\n isLocalized && e.locale ? `${e.documentId}:${e.locale}` : e.documentId;\n\n const byGroup = new Map<string, typeof allStatusEntries>();\n for (const e of allStatusEntries) {\n const key = groupKey(e);\n const list = byGroup.get(key) ?? [];\n list.push(e);\n byGroup.set(key, list);\n }\n\n for (const entry of resolvedEntries) {\n const key = groupKey(entry);\n const entries = byGroup.get(key) ?? [];\n if (!entries.length) continue;\n const version = entries.find((e) => e.id === entry.id) ?? entries[0];\n const otherVersions = entries.filter((e) => e.id !== version.id);\n statusById.set(entry.id, documentMetadata.getStatus(version, otherVersions));\n }\n }\n }\n\n // Build label map\n const labelById = new Map<number | string, unknown>();\n for (const entry of labelEntries) {\n labelById.set(entry.id, entry[mainField]);\n }\n\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById,\n labelById,\n });\n })\n );\n\n return result;\n};\n\n/**\n * Build the { connect, disconnect } for a single relation attribute using pre-fetched data.\n */\nconst buildConnectFromPreResolved = (\n value: unknown,\n attribute: Schema.Attribute.Relation,\n preResolved: Map<string, UidResolutionData>\n): { connect: unknown[]; disconnect: unknown[] } => {\n const attr = attribute as Schema.Attribute.Relation & { relation?: string; target?: string };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) {\n return { connect: [], disconnect: [] };\n }\n\n const uidData = preResolved.get(attr.target);\n if (!uidData || uidData.blocked) {\n return { connect: [], disconnect: [] };\n }\n\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length === 0) {\n return { connect: [], disconnect: [] };\n }\n\n const connect = validRels\n .map((rel, index) => {\n const resolved = uidData.bySourceDocumentId.get(rel.documentId);\n if (!resolved) return null;\n\n const status = uidData.statusById.get(resolved.id);\n const mainFieldValue = uidData.labelById.get(resolved.id);\n const relationWithMainField: Record<string, unknown> = {\n ...resolved,\n [uidData.mainField]: mainFieldValue,\n };\n if (status !== undefined) {\n relationWithMainField.status = status;\n }\n\n return {\n ...relationWithMainField,\n __temp_key__: `a${index}`,\n label: getRelationLabel(relationWithMainField, uidData.mainField),\n };\n })\n .filter((r): r is NonNullable<typeof r> => r !== null);\n\n return { connect, disconnect: [] };\n};\n\n/**\n * Recursively process document data: remove internal fields and resolve relations using\n * pre-fetched resolution data (no additional DB calls).\n */\nconst processDocumentData = async (\n data: Record<string, unknown>,\n schema: Schema.ContentType | Schema.Component,\n components: Record<string, Schema.Component>,\n preResolved: Map<string, UidResolutionData>\n): Promise<Record<string, unknown>> => {\n if (!data) {\n return {};\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (FIELDS_TO_IGNORE.has(key)) {\n continue;\n }\n\n const attribute = schema?.attributes?.[key];\n if (!attribute) {\n result[key] = value;\n continue;\n }\n\n if (attribute.type === 'password') {\n continue;\n }\n\n if (attribute.type === 'relation') {\n result[key] = buildConnectFromPreResolved(\n value,\n attribute as Schema.Attribute.Relation,\n preResolved\n );\n continue;\n }\n\n if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] || {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n } else if (value) {\n const processed = await processDocumentData(\n value as Record<string, unknown>,\n compSchema,\n components,\n preResolved\n );\n result[key] = processed;\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const tempKeys = generateInitialTempKeys(value.length);\n result[key] = await Promise.all(\n value.map(async (item: Record<string, unknown>, index: number) => {\n const compSchema = (components[item?.__component as string] || {\n attributes: {},\n }) as Schema.Component;\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: tempKeys[index] };\n })\n );\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n};\n\nexport const createFillFromLocaleService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n /**\n * Fetch the raw populated document for the given locale without any transformation.\n * The caller is responsible for sanitizing the output before passing it to transformDocument.\n */\n async fetchRawDocument(model: UID.ContentType, sourceLocale: string, documentId?: string) {\n const populateBuilderService = strapi\n .plugin('content-manager')\n .service('populate-builder') as (uid: UID.ContentType) => {\n populateDeep: (level: number) => { build: () => Promise<unknown> };\n };\n const modelDef = strapi.getModel(model);\n\n if (!modelDef) {\n throw new Error(`Model ${model} not found`);\n }\n\n // Build populate WITHOUT countRelations so we get full relation objects\n const populate = await populateBuilderService(model).populateDeep(Infinity).build();\n\n const docs = strapi.documents(model);\n const baseParams = {\n locale: sourceLocale,\n populate: populate as never,\n };\n\n return documentId\n ? docs.findOne({ ...baseParams, documentId })\n : docs.findFirst({ ...baseParams });\n },\n\n /**\n * Transform a (sanitized) document: strip internal fields, resolve relations to the target\n * locale, and skip relations to content types the user cannot read.\n */\n async transformDocument(\n document: Record<string, unknown>,\n model: UID.ContentType,\n targetLocale: string,\n userAbility: any\n ) {\n const schema = strapi.getModel(model) as Schema.ContentType;\n const getComponentSchema = (uid: string) =>\n (strapi.getModel(uid as UID.Schema) ?? { attributes: {} }) as Schema.Component;\n const components = new Proxy({} as Record<string, Schema.Component>, {\n get(_, uid: string) {\n return getComponentSchema(uid);\n },\n });\n\n const relsByUid = collectRelationsByUid(document, schema, components);\n const preResolved = await resolveAllRelationsBatched(relsByUid, targetLocale, userAbility);\n return processDocumentData(document, schema, components, preResolved);\n },\n };\n};\n"],"names":["READ_ACTION","TEMP_KEY_DIGITS","getMainField","targetUid","contentManagerContentTypeService","strapi","plugin","service","configuration","findConfiguration","uid","settings","mainField","getRelationLabel","relation","label","String","documentId","FIELDS_TO_IGNORE","Set","STATUS_FIELDS","generateInitialTempKeys","length","previousKey","Array","from","nextKey","incrementInitialTempKey","key","head","digits","carry","index","nextDigitIndex","indexOf","Error","join","nextHead","fromCharCode","charCodeAt","push","pop","normalizeToArray","value","isArray","isValidRelation","rel","resolveRelationsForLocaleBatch","relations","targetLocale","i18nContentTypesService","isTargetLocalized","isLocalizedContentType","getModel","map","id","undefined","documentIds","r","targetEntriesQuery","where","$in","locale","select","targetEntries","db","query","findMany","byDocumentId","Map","e","existing","get","publishedAt","set","entry","buildWhereForRelations","locales","filter","Boolean","collectRelationsByUid","data","schema","components","result","addRels","rels","concat","collect","d","s","Object","entries","attribute","attributes","type","attr","toLowerCase","includes","target","validRels","compSchema","component","repeatable","item","compUid","__component","resolveAllRelationsBatched","relationsByUid","userAbility","Promise","all","allRels","empty","blocked","can","bySourceDocumentId","statusById","labelById","uniqueRels","values","resolvedList","i","resolvedEntries","allStatusEntries","labelEntries","contentTypes","hasDraftAndPublish","resolve","documentMetadata","model","isLocalized","groupKey","byGroup","list","version","find","otherVersions","getStatus","buildConnectFromPreResolved","preResolved","connect","disconnect","uidData","resolved","status","mainFieldValue","relationWithMainField","__temp_key__","processDocumentData","has","tempKeys","processed","createFillFromLocaleService","fetchRawDocument","sourceLocale","populateBuilderService","modelDef","populate","populateDeep","Infinity","build","docs","documents","baseParams","findOne","findFirst","transformDocument","document","getComponentSchema","Proxy","_","relsByUid"],"mappings":"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"}
@@ -156,7 +156,7 @@ declare const _default: () => {
156
156
  getValidLocale: (locale: any) => Promise<any>;
157
157
  getLocalizedAttributes: (model: any) => string[];
158
158
  getNonLocalizedAttributes: (model: any) => string[];
159
- copyNonLocalizedAttributes: (model: any, entry: any) => Record<string, any>;
159
+ copyNonLocalizedAttributes: (model: import("@strapi/types/dist/struct/schema.js").ComponentSchema | import("@strapi/types/dist/struct/schema.js").ContentTypeSchema, entry: any) => Record<string, any>;
160
160
  fillNonLocalizedAttributes: (entry: any, relatedEntry: any, { model }: any) => void;
161
161
  getNestedPopulateOfNonLocalizedAttributes: (modelUID: any) => string[];
162
162
  };
@@ -1,9 +1,10 @@
1
+ import type { Struct } from '@strapi/types';
1
2
  declare const contentTypes: () => {
2
3
  isLocalizedContentType: (model: any) => boolean;
3
4
  getValidLocale: (locale: any) => Promise<any>;
4
5
  getLocalizedAttributes: (model: any) => string[];
5
6
  getNonLocalizedAttributes: (model: any) => string[];
6
- copyNonLocalizedAttributes: (model: any, entry: any) => Record<string, any>;
7
+ copyNonLocalizedAttributes: (model: Struct.ComponentSchema | Struct.ContentTypeSchema, entry: any) => Record<string, any>;
7
8
  fillNonLocalizedAttributes: (entry: any, relatedEntry: any, { model }: any) => void;
8
9
  getNestedPopulateOfNonLocalizedAttributes: (modelUID: any) => string[];
9
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/services/content-types.ts"],"names":[],"mappings":"AA6LA,QAAA,MAAM,YAAY;oCA1IqB,GAAG;6BAjCJ,GAAG;oCAsGF,GAAG;uCA5DA,GAAG;wCAiDF,GAAG,SAAS,GAAG;wCAwBf,GAAG,gBAAgB,GAAG,aAAa,GAAG;0DAmBpB,GAAG,KAAG,MAAM,EAAE;CA6CzE,CAAC;AAEH,KAAK,mBAAmB,GAAG,OAAO,YAAY,CAAC;AAE/C,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/services/content-types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAkM5C,QAAA,MAAM,YAAY;oCAjJqB,GAAG;6BAjCJ,GAAG;oCA6GF,GAAG;uCAnEA,GAAG;wCAsDpC,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,SACjD,GAAG;wCAyB+B,GAAG,gBAAgB,GAAG,aAAa,GAAG;0DAmBpB,GAAG,KAAG,MAAM,EAAE;CA6CzE,CAAC;AAEH,KAAK,mBAAmB,GAAG,OAAO,YAAY,CAAC;AAE/C,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -76,7 +76,7 @@ declare const _default: {
76
76
  getValidLocale: (locale: any) => Promise<any>;
77
77
  getLocalizedAttributes: (model: any) => string[];
78
78
  getNonLocalizedAttributes: (model: any) => string[];
79
- copyNonLocalizedAttributes: (model: any, entry: any) => Record<string, any>;
79
+ copyNonLocalizedAttributes: (model: import("@strapi/types/dist/struct/schema.js").ComponentSchema | import("@strapi/types/dist/struct/schema.js").ContentTypeSchema, entry: any) => Record<string, any>;
80
80
  fillNonLocalizedAttributes: (entry: any, relatedEntry: any, { model }: any) => void;
81
81
  getNestedPopulateOfNonLocalizedAttributes: (modelUID: any) => string[];
82
82
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/i18n",
3
- "version": "5.52.1",
3
+ "version": "5.52.3",
4
4
  "description": "Create read and update content in different languages, both from the Admin Panel and from the API",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -63,20 +63,20 @@
63
63
  "@reduxjs/toolkit": "1.9.7",
64
64
  "@strapi/design-system": "2.2.4",
65
65
  "@strapi/icons": "2.2.4",
66
- "@strapi/utils": "5.52.1",
66
+ "@strapi/utils": "5.52.3",
67
67
  "lodash": "4.18.1",
68
68
  "qs": "6.15.3",
69
69
  "react-intl": "6.6.2",
70
70
  "react-redux": "8.1.3",
71
71
  "yup": "0.32.9",
72
- "zod": "3.25.76"
72
+ "zod": "4.4.3"
73
73
  },
74
74
  "devDependencies": {
75
- "@strapi/admin": "5.52.1",
76
- "@strapi/admin-test-utils": "5.52.1",
77
- "@strapi/content-manager": "5.52.1",
78
- "@strapi/database": "5.52.1",
79
- "@strapi/types": "5.52.1",
75
+ "@strapi/admin": "5.52.3",
76
+ "@strapi/admin-test-utils": "5.52.3",
77
+ "@strapi/content-manager": "5.52.3",
78
+ "@strapi/database": "5.52.3",
79
+ "@strapi/types": "5.52.3",
80
80
  "@testing-library/dom": "10.4.1",
81
81
  "@testing-library/jest-dom": "6.9.1",
82
82
  "@testing-library/react": "16.3.2",