@strapi/i18n 5.42.0 → 5.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/CMHeaderActions.js +28 -25
- package/dist/admin/components/CMHeaderActions.js.map +1 -1
- package/dist/admin/components/CMHeaderActions.mjs +26 -23
- package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/services/fillFromLocale.js +21 -0
- package/dist/admin/services/fillFromLocale.js.map +1 -0
- package/dist/admin/services/fillFromLocale.mjs +18 -0
- package/dist/admin/services/fillFromLocale.mjs.map +1 -0
- package/dist/admin/services/settings.js +1 -1
- package/dist/admin/services/settings.js.map +1 -1
- package/dist/admin/services/settings.mjs +1 -1
- package/dist/admin/services/settings.mjs.map +1 -1
- package/dist/admin/src/services/aiLocalizationJobs.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/fillFromLocale.d.ts +2 -0
- package/dist/admin/src/services/locales.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +1 -1
- package/dist/admin/src/services/settings.d.ts +2 -2
- package/dist/admin/translations/nl.json.js +91 -0
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/translations/nl.json.mjs +89 -0
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/translations/pl.json.js +48 -23
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +48 -23
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/server/bootstrap.js +3 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +3 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/ai-localization-jobs.js +8 -0
- package/dist/server/controllers/ai-localization-jobs.js.map +1 -1
- package/dist/server/controllers/ai-localization-jobs.mjs +8 -0
- package/dist/server/controllers/ai-localization-jobs.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +42 -2
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +43 -3
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/routes/admin.js +18 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +18 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-localizations.js +3 -13
- package/dist/server/services/ai-localizations.js.map +1 -1
- package/dist/server/services/ai-localizations.mjs +3 -13
- package/dist/server/services/ai-localizations.mjs.map +1 -1
- package/dist/server/services/fill-from-locale.js +435 -0
- package/dist/server/services/fill-from-locale.js.map +1 -0
- package/dist/server/services/fill-from-locale.mjs +433 -0
- package/dist/server/services/fill-from-locale.mjs.map +1 -0
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/ai-localization-jobs.d.ts.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts +1 -0
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +7 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/ai-localizations.d.ts.map +1 -1
- package/dist/server/src/services/fill-from-locale.d.ts +16 -0
- package/dist/server/src/services/fill-from-locale.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +6 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/validation/content-types.d.ts +2 -1
- package/dist/server/src/validation/content-types.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/server/validation/content-types.js +15 -0
- package/dist/server/validation/content-types.js.map +1 -1
- package/dist/server/validation/content-types.mjs +15 -1
- package/dist/server/validation/content-types.mjs.map +1 -1
- package/dist/shared/contracts/content-manager.d.ts +27 -0
- package/dist/shared/contracts/content-manager.d.ts.map +1 -0
- package/package.json +8 -8
- package/dist/admin/src/utils/clean.d.ts +0 -4
- package/dist/admin/utils/clean.js +0 -70
- package/dist/admin/utils/clean.js.map +0 -1
- package/dist/admin/utils/clean.mjs +0 -68
- package/dist/admin/utils/clean.mjs.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { UID, Core } from '@strapi/types';
|
|
2
|
+
export declare const createFillFromLocaleService: ({ strapi }: {
|
|
3
|
+
strapi: Core.Strapi;
|
|
4
|
+
}) => {
|
|
5
|
+
/**
|
|
6
|
+
* Fetch the raw populated document for the given locale without any transformation.
|
|
7
|
+
* The caller is responsible for sanitizing the output before passing it to transformDocument.
|
|
8
|
+
*/
|
|
9
|
+
fetchRawDocument(model: UID.ContentType, sourceLocale: string, documentId?: string): Promise<import("@strapi/types/dist/modules/documents").AnyDocument | null>;
|
|
10
|
+
/**
|
|
11
|
+
* Transform a (sanitized) document: strip internal fields, resolve relations to the target
|
|
12
|
+
* locale, and skip relations to content types the user cannot read.
|
|
13
|
+
*/
|
|
14
|
+
transformDocument(document: Record<string, unknown>, model: UID.ContentType, targetLocale: string, userAbility: any): Promise<Record<string, unknown>>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=fill-from-locale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill-from-locale.d.ts","sourceRoot":"","sources":["../../../../server/src/services/fill-from-locale.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAU,IAAI,EAAE,MAAM,eAAe,CAAC;AA4cvD,eAAO,MAAM,2BAA2B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;IAE3E;;;OAGG;4BAC2B,IAAI,WAAW,gBAAgB,MAAM,eAAe,MAAM;IA0BxF;;;OAGG;gCAES,OAAO,MAAM,EAAE,OAAO,CAAC,SAC1B,IAAI,WAAW,gBACR,MAAM,eACP,GAAG;CAgBrB,CAAC"}
|
|
@@ -109,6 +109,12 @@ declare const _default: {
|
|
|
109
109
|
aiLocalizations: import("yup").BooleanSchema<boolean, Record<string, any>, boolean>;
|
|
110
110
|
}>) => Promise<void>;
|
|
111
111
|
};
|
|
112
|
+
'fill-from-locale': ({ strapi }: {
|
|
113
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
114
|
+
}) => {
|
|
115
|
+
fetchRawDocument(model: import("@strapi/types/dist/uid").ContentType, sourceLocale: string, documentId?: string | undefined): Promise<import("@strapi/types/dist/modules/documents").AnyDocument | null>;
|
|
116
|
+
transformDocument(document: Record<string, unknown>, model: import("@strapi/types/dist/uid").ContentType, targetLocale: string, userAbility: any): Promise<Record<string, unknown>>;
|
|
117
|
+
};
|
|
112
118
|
};
|
|
113
119
|
export default _default;
|
|
114
120
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,wBAYE"}
|
|
@@ -8,6 +8,7 @@ import type { SanitizeService } from '../services/sanitize';
|
|
|
8
8
|
import type { SettingsService } from '../services/settings';
|
|
9
9
|
import type { createAILocalizationsService } from '../services/ai-localizations';
|
|
10
10
|
import type { createAILocalizationJobsService } from '../services/ai-localization-jobs';
|
|
11
|
+
import type { createFillFromLocaleService } from '../services/fill-from-locale';
|
|
11
12
|
type S = {
|
|
12
13
|
permissions: PermissionsService;
|
|
13
14
|
metrics: MetricsService;
|
|
@@ -19,6 +20,7 @@ type S = {
|
|
|
19
20
|
sanitize: SanitizeService;
|
|
20
21
|
['ai-localizations']: ReturnType<typeof createAILocalizationsService>;
|
|
21
22
|
'ai-localization-jobs': ReturnType<typeof createAILocalizationJobsService>;
|
|
23
|
+
'fill-from-locale': ReturnType<typeof createFillFromLocaleService>;
|
|
22
24
|
};
|
|
23
25
|
declare const getCoreStore: () => {
|
|
24
26
|
get(params?: Partial<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAEhF,KAAK,CAAC,GAAG;IACP,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,oBAAoB,CAAC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IACnC,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,EAAE,eAAe,CAAC;IAC1B,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;IACtE,sBAAsB,EAAE,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC3E,kBAAkB,EAAE,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC;CACpE,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;CAEjB,CAAC;AAGF,QAAA,MAAM,UAAU,4BACR,CAAC,KACN,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAE7D,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
declare const validateGetNonLocalizedAttributesInput: (body: unknown, errorMessage?: string | undefined) => Promise<any>;
|
|
2
|
-
|
|
2
|
+
declare const validateFillFromLocaleInput: (body: unknown, errorMessage?: string | undefined) => Promise<any>;
|
|
3
|
+
export { validateGetNonLocalizedAttributesInput, validateFillFromLocaleInput };
|
|
3
4
|
//# sourceMappingURL=content-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/validation/content-types.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,sCAAsC,oEAE3C,CAAC;
|
|
1
|
+
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/validation/content-types.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,sCAAsC,oEAE3C,CAAC;AAiBF,QAAA,MAAM,2BAA2B,oEAAuD,CAAC;AAEzF,OAAO,EAAE,sCAAsC,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { LocaleService } from '../services/locales';\nimport type { PermissionsService } from '../services/permissions';\nimport type { ContentTypesService } from '../services/content-types';\nimport type { MetricsService } from '../services/metrics';\nimport type { ISOLocalesService } from '../services/iso-locales';\nimport type { LocalizationsService } from '../services/localizations';\nimport type { SanitizeService } from '../services/sanitize';\nimport type { SettingsService } from '../services/settings';\nimport type { createAILocalizationsService } from '../services/ai-localizations';\nimport type { createAILocalizationJobsService } from '../services/ai-localization-jobs';\n\ntype S = {\n permissions: PermissionsService;\n metrics: MetricsService;\n locales: LocaleService;\n localizations: LocalizationsService;\n settings: SettingsService;\n ['iso-locales']: ISOLocalesService;\n ['content-types']: ContentTypesService;\n sanitize: SanitizeService;\n ['ai-localizations']: ReturnType<typeof createAILocalizationsService>;\n 'ai-localization-jobs': ReturnType<typeof createAILocalizationJobsService>;\n};\n\nconst getCoreStore = () => {\n return strapi.store({ type: 'plugin', name: 'i18n' });\n};\n\n// retrieve a local service\nconst getService = <T extends keyof S>(\n name: T\n): S[T] extends (...args: any) => any ? ReturnType<S[T]> : S[T] => {\n return strapi.plugin('i18n').service(name);\n};\n\nexport { getService, getCoreStore };\n"],"names":["getCoreStore","strapi","store","type","name","getService","plugin","service"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { LocaleService } from '../services/locales';\nimport type { PermissionsService } from '../services/permissions';\nimport type { ContentTypesService } from '../services/content-types';\nimport type { MetricsService } from '../services/metrics';\nimport type { ISOLocalesService } from '../services/iso-locales';\nimport type { LocalizationsService } from '../services/localizations';\nimport type { SanitizeService } from '../services/sanitize';\nimport type { SettingsService } from '../services/settings';\nimport type { createAILocalizationsService } from '../services/ai-localizations';\nimport type { createAILocalizationJobsService } from '../services/ai-localization-jobs';\nimport type { createFillFromLocaleService } from '../services/fill-from-locale';\n\ntype S = {\n permissions: PermissionsService;\n metrics: MetricsService;\n locales: LocaleService;\n localizations: LocalizationsService;\n settings: SettingsService;\n ['iso-locales']: ISOLocalesService;\n ['content-types']: ContentTypesService;\n sanitize: SanitizeService;\n ['ai-localizations']: ReturnType<typeof createAILocalizationsService>;\n 'ai-localization-jobs': ReturnType<typeof createAILocalizationJobsService>;\n 'fill-from-locale': ReturnType<typeof createFillFromLocaleService>;\n};\n\nconst getCoreStore = () => {\n return strapi.store({ type: 'plugin', name: 'i18n' });\n};\n\n// retrieve a local service\nconst getService = <T extends keyof S>(\n name: T\n): S[T] extends (...args: any) => any ? ReturnType<S[T]> : S[T] => {\n return strapi.plugin('i18n').service(name);\n};\n\nexport { getService, getCoreStore };\n"],"names":["getCoreStore","strapi","store","type","name","getService","plugin","service"],"mappings":";;AA0BA,MAAMA,YAAAA,GAAe,IAAA;IACnB,OAAOC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAAA,EAAM,QAAA;QAAUC,IAAAA,EAAM;AAAO,KAAA,CAAA;AACrD;AAEA;AACA,MAAMC,aAAa,CACjBD,IAAAA,GAAAA;AAEA,IAAA,OAAOH,MAAAA,CAAOK,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAACH,IAAAA,CAAAA;AACvC;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { LocaleService } from '../services/locales';\nimport type { PermissionsService } from '../services/permissions';\nimport type { ContentTypesService } from '../services/content-types';\nimport type { MetricsService } from '../services/metrics';\nimport type { ISOLocalesService } from '../services/iso-locales';\nimport type { LocalizationsService } from '../services/localizations';\nimport type { SanitizeService } from '../services/sanitize';\nimport type { SettingsService } from '../services/settings';\nimport type { createAILocalizationsService } from '../services/ai-localizations';\nimport type { createAILocalizationJobsService } from '../services/ai-localization-jobs';\n\ntype S = {\n permissions: PermissionsService;\n metrics: MetricsService;\n locales: LocaleService;\n localizations: LocalizationsService;\n settings: SettingsService;\n ['iso-locales']: ISOLocalesService;\n ['content-types']: ContentTypesService;\n sanitize: SanitizeService;\n ['ai-localizations']: ReturnType<typeof createAILocalizationsService>;\n 'ai-localization-jobs': ReturnType<typeof createAILocalizationJobsService>;\n};\n\nconst getCoreStore = () => {\n return strapi.store({ type: 'plugin', name: 'i18n' });\n};\n\n// retrieve a local service\nconst getService = <T extends keyof S>(\n name: T\n): S[T] extends (...args: any) => any ? ReturnType<S[T]> : S[T] => {\n return strapi.plugin('i18n').service(name);\n};\n\nexport { getService, getCoreStore };\n"],"names":["getCoreStore","strapi","store","type","name","getService","plugin","service"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { LocaleService } from '../services/locales';\nimport type { PermissionsService } from '../services/permissions';\nimport type { ContentTypesService } from '../services/content-types';\nimport type { MetricsService } from '../services/metrics';\nimport type { ISOLocalesService } from '../services/iso-locales';\nimport type { LocalizationsService } from '../services/localizations';\nimport type { SanitizeService } from '../services/sanitize';\nimport type { SettingsService } from '../services/settings';\nimport type { createAILocalizationsService } from '../services/ai-localizations';\nimport type { createAILocalizationJobsService } from '../services/ai-localization-jobs';\nimport type { createFillFromLocaleService } from '../services/fill-from-locale';\n\ntype S = {\n permissions: PermissionsService;\n metrics: MetricsService;\n locales: LocaleService;\n localizations: LocalizationsService;\n settings: SettingsService;\n ['iso-locales']: ISOLocalesService;\n ['content-types']: ContentTypesService;\n sanitize: SanitizeService;\n ['ai-localizations']: ReturnType<typeof createAILocalizationsService>;\n 'ai-localization-jobs': ReturnType<typeof createAILocalizationJobsService>;\n 'fill-from-locale': ReturnType<typeof createFillFromLocaleService>;\n};\n\nconst getCoreStore = () => {\n return strapi.store({ type: 'plugin', name: 'i18n' });\n};\n\n// retrieve a local service\nconst getService = <T extends keyof S>(\n name: T\n): S[T] extends (...args: any) => any ? ReturnType<S[T]> : S[T] => {\n return strapi.plugin('i18n').service(name);\n};\n\nexport { getService, getCoreStore };\n"],"names":["getCoreStore","strapi","store","type","name","getService","plugin","service"],"mappings":"AA0BA,MAAMA,YAAAA,GAAe,IAAA;IACnB,OAAOC,MAAAA,CAAOC,KAAK,CAAC;QAAEC,IAAAA,EAAM,QAAA;QAAUC,IAAAA,EAAM;AAAO,KAAA,CAAA;AACrD;AAEA;AACA,MAAMC,aAAa,CACjBD,IAAAA,GAAAA;AAEA,IAAA,OAAOH,MAAAA,CAAOK,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAACH,IAAAA,CAAAA;AACvC;;;;"}
|
|
@@ -13,6 +13,21 @@ const validateGetNonLocalizedAttributesSchema = utils.yup.object().shape({
|
|
|
13
13
|
locale: utils.yup.string().required()
|
|
14
14
|
}).noUnknown().required();
|
|
15
15
|
const validateGetNonLocalizedAttributesInput = utils.validateYupSchema(validateGetNonLocalizedAttributesSchema);
|
|
16
|
+
const validateFillFromLocaleInputSchema = utils.yup.object().shape({
|
|
17
|
+
documentId: utils.yup.string().when('collectionType', {
|
|
18
|
+
is: 'single-types',
|
|
19
|
+
then: (schema)=>schema.nullable(),
|
|
20
|
+
otherwise: (schema)=>schema.required()
|
|
21
|
+
}),
|
|
22
|
+
sourceLocale: utils.yup.string().required(),
|
|
23
|
+
targetLocale: utils.yup.string().required(),
|
|
24
|
+
collectionType: utils.yup.string().oneOf([
|
|
25
|
+
'collection-types',
|
|
26
|
+
'single-types'
|
|
27
|
+
]).required()
|
|
28
|
+
}).noUnknown().required();
|
|
29
|
+
const validateFillFromLocaleInput = utils.validateYupSchema(validateFillFromLocaleInputSchema);
|
|
16
30
|
|
|
31
|
+
exports.validateFillFromLocaleInput = validateFillFromLocaleInput;
|
|
17
32
|
exports.validateGetNonLocalizedAttributesInput = validateGetNonLocalizedAttributesInput;
|
|
18
33
|
//# sourceMappingURL=content-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.js","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { get } from 'lodash/fp';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => get('kind', strapi.contentType(model)) === 'singleType',\n then: yup.strapiID().nullable(),\n otherwise: yup.strapiID().required(),\n }),\n locale: yup.string().required(),\n })\n .noUnknown()\n .required();\n\nconst validateGetNonLocalizedAttributesInput = validateYupSchema(\n validateGetNonLocalizedAttributesSchema\n);\n\nexport { validateGetNonLocalizedAttributesInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","get","strapi","contentType","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema"],"mappings":";;;;;AAIA,MAAMA,uCAAAA,GAA0CC,SAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOH,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,SAAAA,CAAIO,KAAK,EAAA,CAAGC,IAAI,CAAC,OAAA,EAAS;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAAA,GAAeO,MAAAA,CAAI,QAAQC,MAAAA,CAAOC,WAAW,CAACT,KAAAA,CAAAA,CAAAA,KAAY,YAAA;QAC/DU,IAAAA,EAAMb,SAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAAA,EAAWhB,SAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAAA,EAAQjB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,uBAAAA,CAC7CrB,uCAAAA
|
|
1
|
+
{"version":3,"file":"content-types.js","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { get } from 'lodash/fp';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => get('kind', strapi.contentType(model)) === 'singleType',\n then: yup.strapiID().nullable(),\n otherwise: yup.strapiID().required(),\n }),\n locale: yup.string().required(),\n })\n .noUnknown()\n .required();\n\nconst validateGetNonLocalizedAttributesInput = validateYupSchema(\n validateGetNonLocalizedAttributesSchema\n);\n\nconst validateFillFromLocaleInputSchema = yup\n .object()\n .shape({\n documentId: yup.string().when('collectionType', {\n is: 'single-types',\n then: (schema) => schema.nullable(),\n otherwise: (schema) => schema.required(),\n }),\n sourceLocale: yup.string().required(),\n targetLocale: yup.string().required(),\n collectionType: yup.string().oneOf(['collection-types', 'single-types']).required(),\n })\n .noUnknown()\n .required();\n\nconst validateFillFromLocaleInput = validateYupSchema(validateFillFromLocaleInputSchema);\n\nexport { validateGetNonLocalizedAttributesInput, validateFillFromLocaleInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","get","strapi","contentType","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema","validateFillFromLocaleInputSchema","documentId","schema","sourceLocale","targetLocale","collectionType","oneOf","validateFillFromLocaleInput"],"mappings":";;;;;AAIA,MAAMA,uCAAAA,GAA0CC,SAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOH,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,SAAAA,CAAIO,KAAK,EAAA,CAAGC,IAAI,CAAC,OAAA,EAAS;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAAA,GAAeO,MAAAA,CAAI,QAAQC,MAAAA,CAAOC,WAAW,CAACT,KAAAA,CAAAA,CAAAA,KAAY,YAAA;QAC/DU,IAAAA,EAAMb,SAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAAA,EAAWhB,SAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAAA,EAAQjB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,uBAAAA,CAC7CrB,uCAAAA;AAGF,MAAMsB,iCAAAA,GAAoCrB,SAAAA,CACvCC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLoB,IAAAA,UAAAA,EAAYtB,SAAAA,CAAII,MAAM,EAAA,CAAGI,IAAI,CAAC,gBAAA,EAAkB;QAC9CC,EAAAA,EAAI,cAAA;QACJI,IAAAA,EAAM,CAACU,MAAAA,GAAWA,MAAAA,CAAOR,QAAQ,EAAA;QACjCC,SAAAA,EAAW,CAACO,MAAAA,GAAWA,MAAAA,CAAOlB,QAAQ;AACxC,KAAA,CAAA;IACAmB,YAAAA,EAAcxB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACnCoB,YAAAA,EAAczB,SAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACnCqB,IAAAA,cAAAA,EAAgB1B,SAAAA,CAAII,MAAM,EAAA,CAAGuB,KAAK,CAAC;AAAC,QAAA,kBAAA;AAAoB,QAAA;AAAe,KAAA,CAAA,CAAEtB,QAAQ;AACnF,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMuB,8BAA8BR,uBAAAA,CAAkBC,iCAAAA;;;;;"}
|
|
@@ -11,6 +11,20 @@ const validateGetNonLocalizedAttributesSchema = yup.object().shape({
|
|
|
11
11
|
locale: yup.string().required()
|
|
12
12
|
}).noUnknown().required();
|
|
13
13
|
const validateGetNonLocalizedAttributesInput = validateYupSchema(validateGetNonLocalizedAttributesSchema);
|
|
14
|
+
const validateFillFromLocaleInputSchema = yup.object().shape({
|
|
15
|
+
documentId: yup.string().when('collectionType', {
|
|
16
|
+
is: 'single-types',
|
|
17
|
+
then: (schema)=>schema.nullable(),
|
|
18
|
+
otherwise: (schema)=>schema.required()
|
|
19
|
+
}),
|
|
20
|
+
sourceLocale: yup.string().required(),
|
|
21
|
+
targetLocale: yup.string().required(),
|
|
22
|
+
collectionType: yup.string().oneOf([
|
|
23
|
+
'collection-types',
|
|
24
|
+
'single-types'
|
|
25
|
+
]).required()
|
|
26
|
+
}).noUnknown().required();
|
|
27
|
+
const validateFillFromLocaleInput = validateYupSchema(validateFillFromLocaleInputSchema);
|
|
14
28
|
|
|
15
|
-
export { validateGetNonLocalizedAttributesInput };
|
|
29
|
+
export { validateFillFromLocaleInput, validateGetNonLocalizedAttributesInput };
|
|
16
30
|
//# sourceMappingURL=content-types.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.mjs","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { get } from 'lodash/fp';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => get('kind', strapi.contentType(model)) === 'singleType',\n then: yup.strapiID().nullable(),\n otherwise: yup.strapiID().required(),\n }),\n locale: yup.string().required(),\n })\n .noUnknown()\n .required();\n\nconst validateGetNonLocalizedAttributesInput = validateYupSchema(\n validateGetNonLocalizedAttributesSchema\n);\n\nexport { validateGetNonLocalizedAttributesInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","get","strapi","contentType","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema"],"mappings":";;;AAIA,MAAMA,uCAAAA,GAA0CC,GAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOH,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,GAAAA,CAAIO,KAAK,EAAA,CAAGC,IAAI,CAAC,OAAA,EAAS;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAAA,GAAeO,GAAAA,CAAI,QAAQC,MAAAA,CAAOC,WAAW,CAACT,KAAAA,CAAAA,CAAAA,KAAY,YAAA;QAC/DU,IAAAA,EAAMb,GAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAAA,EAAWhB,GAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAAA,EAAQjB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,iBAAAA,CAC7CrB,uCAAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"content-types.mjs","sources":["../../../server/src/validation/content-types.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nimport { get } from 'lodash/fp';\n\nconst validateGetNonLocalizedAttributesSchema = yup\n .object()\n .shape({\n model: yup.string().required(),\n id: yup.mixed().when('model', {\n is: (model: any) => get('kind', strapi.contentType(model)) === 'singleType',\n then: yup.strapiID().nullable(),\n otherwise: yup.strapiID().required(),\n }),\n locale: yup.string().required(),\n })\n .noUnknown()\n .required();\n\nconst validateGetNonLocalizedAttributesInput = validateYupSchema(\n validateGetNonLocalizedAttributesSchema\n);\n\nconst validateFillFromLocaleInputSchema = yup\n .object()\n .shape({\n documentId: yup.string().when('collectionType', {\n is: 'single-types',\n then: (schema) => schema.nullable(),\n otherwise: (schema) => schema.required(),\n }),\n sourceLocale: yup.string().required(),\n targetLocale: yup.string().required(),\n collectionType: yup.string().oneOf(['collection-types', 'single-types']).required(),\n })\n .noUnknown()\n .required();\n\nconst validateFillFromLocaleInput = validateYupSchema(validateFillFromLocaleInputSchema);\n\nexport { validateGetNonLocalizedAttributesInput, validateFillFromLocaleInput };\n"],"names":["validateGetNonLocalizedAttributesSchema","yup","object","shape","model","string","required","id","mixed","when","is","get","strapi","contentType","then","strapiID","nullable","otherwise","locale","noUnknown","validateGetNonLocalizedAttributesInput","validateYupSchema","validateFillFromLocaleInputSchema","documentId","schema","sourceLocale","targetLocale","collectionType","oneOf","validateFillFromLocaleInput"],"mappings":";;;AAIA,MAAMA,uCAAAA,GAA0CC,GAAAA,CAC7CC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,KAAAA,EAAOH,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BC,IAAAA,EAAAA,EAAIN,GAAAA,CAAIO,KAAK,EAAA,CAAGC,IAAI,CAAC,OAAA,EAAS;AAC5BC,QAAAA,EAAAA,EAAI,CAACN,KAAAA,GAAeO,GAAAA,CAAI,QAAQC,MAAAA,CAAOC,WAAW,CAACT,KAAAA,CAAAA,CAAAA,KAAY,YAAA;QAC/DU,IAAAA,EAAMb,GAAAA,CAAIc,QAAQ,EAAA,CAAGC,QAAQ,EAAA;QAC7BC,SAAAA,EAAWhB,GAAAA,CAAIc,QAAQ,EAAA,CAAGT,QAAQ;AACpC,KAAA,CAAA;IACAY,MAAAA,EAAQjB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC/B,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMc,yCAAyCC,iBAAAA,CAC7CrB,uCAAAA;AAGF,MAAMsB,iCAAAA,GAAoCrB,GAAAA,CACvCC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLoB,IAAAA,UAAAA,EAAYtB,GAAAA,CAAII,MAAM,EAAA,CAAGI,IAAI,CAAC,gBAAA,EAAkB;QAC9CC,EAAAA,EAAI,cAAA;QACJI,IAAAA,EAAM,CAACU,MAAAA,GAAWA,MAAAA,CAAOR,QAAQ,EAAA;QACjCC,SAAAA,EAAW,CAACO,MAAAA,GAAWA,MAAAA,CAAOlB,QAAQ;AACxC,KAAA,CAAA;IACAmB,YAAAA,EAAcxB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACnCoB,YAAAA,EAAczB,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACnCqB,IAAAA,cAAAA,EAAgB1B,GAAAA,CAAII,MAAM,EAAA,CAAGuB,KAAK,CAAC;AAAC,QAAA,kBAAA;AAAoB,QAAA;AAAe,KAAA,CAAA,CAAEtB,QAAQ;AACnF,CAAA,CAAA,CACCa,SAAS,GACTb,QAAQ,EAAA;AAEX,MAAMuB,8BAA8BR,iBAAAA,CAAkBC,iCAAAA;;;;"}
|
|
@@ -25,6 +25,33 @@ export declare namespace GetNonLocalizedFields {
|
|
|
25
25
|
error?: errors.ApplicationError;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* GET /i18n/content-manager/get-fill-from-locale - Get data from source locale to fill target locale
|
|
30
|
+
*/
|
|
31
|
+
export interface FillFromLocaleParams {
|
|
32
|
+
model: string;
|
|
33
|
+
documentId?: string;
|
|
34
|
+
sourceLocale: string;
|
|
35
|
+
targetLocale: string;
|
|
36
|
+
collectionType: 'collection-types' | 'single-types';
|
|
37
|
+
}
|
|
38
|
+
export declare namespace FillFromLocale {
|
|
39
|
+
interface Request {
|
|
40
|
+
body: {};
|
|
41
|
+
query: Params;
|
|
42
|
+
}
|
|
43
|
+
interface Params {
|
|
44
|
+
model: string;
|
|
45
|
+
documentId?: string;
|
|
46
|
+
sourceLocale: string;
|
|
47
|
+
targetLocale: string;
|
|
48
|
+
collectionType: 'collection-types' | 'single-types';
|
|
49
|
+
}
|
|
50
|
+
interface Response {
|
|
51
|
+
data: Record<string, unknown>;
|
|
52
|
+
error?: errors.ApplicationError;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
28
55
|
/**
|
|
29
56
|
* GET content-manager/collection-types/:model/actions/countManyEntriesDraftRelations
|
|
30
57
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-manager.d.ts","sourceRoot":"","sources":["../../../shared/contracts/content-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,qBAAqB,CAAC;IAC7C,UAAiB,OAAO;QACtB,KAAK,EAAE,EAAE,CAAC;QACV,IAAI,EAAE;YACJ,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH;IAED;;OAEG;IACH,UAAiB,QAAQ;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,aAAa,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC,CAAC;QAClF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,kBAAkB,GAAG,cAAc,CAAC;CACrD;AAED,MAAM,CAAC,OAAO,WAAW,cAAc,CAAC;IACtC,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;KACf;IAED,UAAiB,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,kBAAkB,GAAG,cAAc,CAAC;KACrD;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,8BAA8B,CAAC;IACtD,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;QACT,KAAK,EAAE;YAGL,WAAW,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;SACnC,CAAC;KACH;IAED,UAAiB,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC;KACf;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/i18n",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.43.0",
|
|
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,8 +63,8 @@
|
|
|
63
63
|
"@reduxjs/toolkit": "1.9.7",
|
|
64
64
|
"@strapi/design-system": "2.2.0",
|
|
65
65
|
"@strapi/icons": "2.2.0",
|
|
66
|
-
"@strapi/utils": "5.
|
|
67
|
-
"lodash": "4.
|
|
66
|
+
"@strapi/utils": "5.43.0",
|
|
67
|
+
"lodash": "4.18.1",
|
|
68
68
|
"qs": "6.15.0",
|
|
69
69
|
"react-intl": "6.6.2",
|
|
70
70
|
"react-redux": "8.1.3",
|
|
@@ -72,11 +72,11 @@
|
|
|
72
72
|
"zod": "3.25.67"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@strapi/admin": "5.
|
|
76
|
-
"@strapi/admin-test-utils": "5.
|
|
77
|
-
"@strapi/content-manager": "5.
|
|
78
|
-
"@strapi/database": "5.
|
|
79
|
-
"@strapi/types": "5.
|
|
75
|
+
"@strapi/admin": "5.43.0",
|
|
76
|
+
"@strapi/admin-test-utils": "5.43.0",
|
|
77
|
+
"@strapi/content-manager": "5.43.0",
|
|
78
|
+
"@strapi/database": "5.43.0",
|
|
79
|
+
"@strapi/types": "5.43.0",
|
|
80
80
|
"@testing-library/react": "16.3.0",
|
|
81
81
|
"@testing-library/user-event": "14.6.1",
|
|
82
82
|
"koa": "2.16.4",
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const cleanData = (data, schema, components)=>{
|
|
4
|
-
const cleanedData = removeFields(data, [
|
|
5
|
-
'createdAt',
|
|
6
|
-
'createdBy',
|
|
7
|
-
'updatedAt',
|
|
8
|
-
'updatedBy',
|
|
9
|
-
'id',
|
|
10
|
-
'documentId',
|
|
11
|
-
'publishedAt',
|
|
12
|
-
'strapi_stage',
|
|
13
|
-
'strapi_assignee',
|
|
14
|
-
'locale',
|
|
15
|
-
'status'
|
|
16
|
-
]);
|
|
17
|
-
const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(cleanedData, schema, components, [
|
|
18
|
-
'relation',
|
|
19
|
-
'password'
|
|
20
|
-
]);
|
|
21
|
-
return cleanedDataWithoutPasswordAndRelation;
|
|
22
|
-
};
|
|
23
|
-
const removeFields = (data, fields)=>{
|
|
24
|
-
return Object.keys(data).reduce((acc, current)=>{
|
|
25
|
-
if (fields.includes(current)) {
|
|
26
|
-
return acc;
|
|
27
|
-
}
|
|
28
|
-
acc[current] = data[current];
|
|
29
|
-
return acc;
|
|
30
|
-
}, {});
|
|
31
|
-
};
|
|
32
|
-
const recursiveRemoveFieldTypes = (data, schema, components, fields)=>{
|
|
33
|
-
return Object.keys(data).reduce((acc, current)=>{
|
|
34
|
-
const attribute = schema.attributes[current] ?? {
|
|
35
|
-
type: undefined
|
|
36
|
-
};
|
|
37
|
-
if (fields.includes(attribute.type)) {
|
|
38
|
-
return acc;
|
|
39
|
-
}
|
|
40
|
-
if (attribute.type === 'dynamiczone') {
|
|
41
|
-
acc[current] = data[current].map((componentValue, index)=>{
|
|
42
|
-
const { id: _, ...rest } = recursiveRemoveFieldTypes(componentValue, components[componentValue.__component], components, fields);
|
|
43
|
-
return {
|
|
44
|
-
...rest,
|
|
45
|
-
__temp_key__: index + 1
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
} else if (attribute.type === 'component') {
|
|
49
|
-
const { repeatable, component } = attribute;
|
|
50
|
-
if (repeatable) {
|
|
51
|
-
acc[current] = (data[current] ?? []).map((compoData, index)=>{
|
|
52
|
-
const { id: _, ...rest } = recursiveRemoveFieldTypes(compoData, components[component], components, fields);
|
|
53
|
-
return {
|
|
54
|
-
...rest,
|
|
55
|
-
__temp_key__: index + 1
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
} else if (data[current]) {
|
|
59
|
-
const { id: _, ...rest } = recursiveRemoveFieldTypes(data[current], components[component], components, fields);
|
|
60
|
-
acc[current] = rest;
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
acc[current] = data[current];
|
|
64
|
-
}
|
|
65
|
-
return acc;
|
|
66
|
-
}, {});
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
exports.cleanData = cleanData;
|
|
70
|
-
//# sourceMappingURL=clean.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clean.js","sources":["../../../admin/src/utils/clean.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\n\ntype Data = Record<keyof Schema.ContentType['attributes'], any>;\n\nconst cleanData = (\n data: Data,\n schema: Schema.ContentType,\n components: Record<string, Schema.Component>\n) => {\n const cleanedData = removeFields(data, [\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 ]);\n\n const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(\n cleanedData,\n schema,\n components,\n ['relation', 'password']\n );\n\n return cleanedDataWithoutPasswordAndRelation;\n};\n\nconst removeFields = (data: Data, fields: Array<keyof Schema.ContentType['attributes']>) => {\n return Object.keys(data).reduce((acc, current) => {\n if (fields.includes(current)) {\n return acc;\n }\n acc[current] = data[current];\n return acc;\n }, {} as Data);\n};\n\nconst recursiveRemoveFieldTypes = (\n data: Data,\n schema: Schema.Schema,\n components: Record<string, Schema.Component>,\n fields: Array<keyof Schema.ContentType['attributes']>\n) => {\n return Object.keys(data).reduce((acc, current) => {\n const attribute = schema.attributes[current] ?? { type: undefined };\n\n if (fields.includes(attribute.type)) {\n return acc;\n }\n\n if (attribute.type === 'dynamiczone') {\n acc[current] = data[current].map((componentValue: any, index: number) => {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n componentValue,\n components[componentValue.__component],\n components,\n fields\n );\n\n return {\n ...rest,\n __temp_key__: index + 1,\n };\n });\n } else if (attribute.type === 'component') {\n const { repeatable, component } = attribute;\n\n if (repeatable) {\n acc[current] = (data[current] ?? []).map((compoData: any, index: number) => {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n compoData,\n components[component],\n components,\n fields\n );\n\n return {\n ...rest,\n __temp_key__: index + 1,\n };\n });\n } else if (data[current]) {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n data[current],\n components[component],\n components,\n fields\n );\n\n acc[current] = rest;\n }\n } else {\n acc[current] = data[current];\n }\n\n return acc;\n }, {} as any);\n};\n\nexport { cleanData };\n"],"names":["cleanData","data","schema","components","cleanedData","removeFields","cleanedDataWithoutPasswordAndRelation","recursiveRemoveFieldTypes","fields","Object","keys","reduce","acc","current","includes","attribute","attributes","type","undefined","map","componentValue","index","id","_","rest","__component","__temp_key__","repeatable","component","compoData"],"mappings":";;AAIA,MAAMA,SAAAA,GAAY,CAChBC,IAAAA,EACAC,MAAAA,EACAC,UAAAA,GAAAA;IAEA,MAAMC,WAAAA,GAAcC,aAAaJ,IAAAA,EAAM;AACrC,QAAA,WAAA;AACA,QAAA,WAAA;AACA,QAAA,WAAA;AACA,QAAA,WAAA;AACA,QAAA,IAAA;AACA,QAAA,YAAA;AACA,QAAA,aAAA;AACA,QAAA,cAAA;AACA,QAAA,iBAAA;AACA,QAAA,QAAA;AACA,QAAA;AACD,KAAA,CAAA;AAED,IAAA,MAAMK,qCAAAA,GAAwCC,yBAAAA,CAC5CH,WAAAA,EACAF,MAAAA,EACAC,UAAAA,EACA;AAAC,QAAA,UAAA;AAAY,QAAA;AAAW,KAAA,CAAA;IAG1B,OAAOG,qCAAAA;AACT;AAEA,MAAMD,YAAAA,GAAe,CAACJ,IAAAA,EAAYO,MAAAA,GAAAA;AAChC,IAAA,OAAOC,OAAOC,IAAI,CAACT,MAAMU,MAAM,CAAC,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;QACpC,IAAIL,MAAAA,CAAOM,QAAQ,CAACD,OAAAA,CAAAA,EAAU;YAC5B,OAAOD,GAAAA;AACT,QAAA;AACAA,QAAAA,GAAG,CAACC,OAAAA,CAAQ,GAAGZ,IAAI,CAACY,OAAAA,CAAQ;QAC5B,OAAOD,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAML,yBAAAA,GAA4B,CAChCN,IAAAA,EACAC,MAAAA,EACAC,UAAAA,EACAK,MAAAA,GAAAA;AAEA,IAAA,OAAOC,OAAOC,IAAI,CAACT,MAAMU,MAAM,CAAC,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;AACpC,QAAA,MAAME,SAAAA,GAAYb,MAAAA,CAAOc,UAAU,CAACH,QAAQ,IAAI;YAAEI,IAAAA,EAAMC;AAAU,SAAA;AAElE,QAAA,IAAIV,MAAAA,CAAOM,QAAQ,CAACC,SAAAA,CAAUE,IAAI,CAAA,EAAG;YACnC,OAAOL,GAAAA;AACT,QAAA;QAEA,IAAIG,SAAAA,CAAUE,IAAI,KAAK,aAAA,EAAe;YACpCL,GAAG,CAACC,OAAAA,CAAQ,GAAGZ,IAAI,CAACY,QAAQ,CAACM,GAAG,CAAC,CAACC,cAAAA,EAAqBC,KAAAA,GAAAA;AACrD,gBAAA,MAAM,EAAEC,EAAAA,EAAIC,CAAC,EAAE,GAAGC,IAAAA,EAAM,GAAGjB,yBAAAA,CACzBa,cAAAA,EACAjB,UAAU,CAACiB,cAAAA,CAAeK,WAAW,CAAC,EACtCtB,UAAAA,EACAK,MAAAA,CAAAA;gBAGF,OAAO;AACL,oBAAA,GAAGgB,IAAI;AACPE,oBAAAA,YAAAA,EAAcL,KAAAA,GAAQ;AACxB,iBAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA,MAAO,IAAIN,SAAAA,CAAUE,IAAI,KAAK,WAAA,EAAa;AACzC,YAAA,MAAM,EAAEU,UAAU,EAAEC,SAAS,EAAE,GAAGb,SAAAA;AAElC,YAAA,IAAIY,UAAAA,EAAY;AACdf,gBAAAA,GAAG,CAACC,OAAAA,CAAQ,GAAIZ,CAAAA,IAAI,CAACY,OAAAA,CAAQ,IAAI,EAAE,EAAEM,GAAG,CAAC,CAACU,SAAAA,EAAgBR,KAAAA,GAAAA;AACxD,oBAAA,MAAM,EAAEC,EAAAA,EAAIC,CAAC,EAAE,GAAGC,IAAAA,EAAM,GAAGjB,yBAAAA,CACzBsB,SAAAA,EACA1B,UAAU,CAACyB,SAAAA,CAAU,EACrBzB,UAAAA,EACAK,MAAAA,CAAAA;oBAGF,OAAO;AACL,wBAAA,GAAGgB,IAAI;AACPE,wBAAAA,YAAAA,EAAcL,KAAAA,GAAQ;AACxB,qBAAA;AACF,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA,MAAO,IAAIpB,IAAI,CAACY,OAAAA,CAAQ,EAAE;AACxB,gBAAA,MAAM,EAAES,EAAAA,EAAIC,CAAC,EAAE,GAAGC,MAAM,GAAGjB,yBAAAA,CACzBN,IAAI,CAACY,QAAQ,EACbV,UAAU,CAACyB,SAAAA,CAAU,EACrBzB,UAAAA,EACAK,MAAAA,CAAAA;gBAGFI,GAAG,CAACC,QAAQ,GAAGW,IAAAA;AACjB,YAAA;QACF,CAAA,MAAO;AACLZ,YAAAA,GAAG,CAACC,OAAAA,CAAQ,GAAGZ,IAAI,CAACY,OAAAA,CAAQ;AAC9B,QAAA;QAEA,OAAOD,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;;;;"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
const cleanData = (data, schema, components)=>{
|
|
2
|
-
const cleanedData = removeFields(data, [
|
|
3
|
-
'createdAt',
|
|
4
|
-
'createdBy',
|
|
5
|
-
'updatedAt',
|
|
6
|
-
'updatedBy',
|
|
7
|
-
'id',
|
|
8
|
-
'documentId',
|
|
9
|
-
'publishedAt',
|
|
10
|
-
'strapi_stage',
|
|
11
|
-
'strapi_assignee',
|
|
12
|
-
'locale',
|
|
13
|
-
'status'
|
|
14
|
-
]);
|
|
15
|
-
const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(cleanedData, schema, components, [
|
|
16
|
-
'relation',
|
|
17
|
-
'password'
|
|
18
|
-
]);
|
|
19
|
-
return cleanedDataWithoutPasswordAndRelation;
|
|
20
|
-
};
|
|
21
|
-
const removeFields = (data, fields)=>{
|
|
22
|
-
return Object.keys(data).reduce((acc, current)=>{
|
|
23
|
-
if (fields.includes(current)) {
|
|
24
|
-
return acc;
|
|
25
|
-
}
|
|
26
|
-
acc[current] = data[current];
|
|
27
|
-
return acc;
|
|
28
|
-
}, {});
|
|
29
|
-
};
|
|
30
|
-
const recursiveRemoveFieldTypes = (data, schema, components, fields)=>{
|
|
31
|
-
return Object.keys(data).reduce((acc, current)=>{
|
|
32
|
-
const attribute = schema.attributes[current] ?? {
|
|
33
|
-
type: undefined
|
|
34
|
-
};
|
|
35
|
-
if (fields.includes(attribute.type)) {
|
|
36
|
-
return acc;
|
|
37
|
-
}
|
|
38
|
-
if (attribute.type === 'dynamiczone') {
|
|
39
|
-
acc[current] = data[current].map((componentValue, index)=>{
|
|
40
|
-
const { id: _, ...rest } = recursiveRemoveFieldTypes(componentValue, components[componentValue.__component], components, fields);
|
|
41
|
-
return {
|
|
42
|
-
...rest,
|
|
43
|
-
__temp_key__: index + 1
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
} else if (attribute.type === 'component') {
|
|
47
|
-
const { repeatable, component } = attribute;
|
|
48
|
-
if (repeatable) {
|
|
49
|
-
acc[current] = (data[current] ?? []).map((compoData, index)=>{
|
|
50
|
-
const { id: _, ...rest } = recursiveRemoveFieldTypes(compoData, components[component], components, fields);
|
|
51
|
-
return {
|
|
52
|
-
...rest,
|
|
53
|
-
__temp_key__: index + 1
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
} else if (data[current]) {
|
|
57
|
-
const { id: _, ...rest } = recursiveRemoveFieldTypes(data[current], components[component], components, fields);
|
|
58
|
-
acc[current] = rest;
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
acc[current] = data[current];
|
|
62
|
-
}
|
|
63
|
-
return acc;
|
|
64
|
-
}, {});
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export { cleanData };
|
|
68
|
-
//# sourceMappingURL=clean.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clean.mjs","sources":["../../../admin/src/utils/clean.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\n\ntype Data = Record<keyof Schema.ContentType['attributes'], any>;\n\nconst cleanData = (\n data: Data,\n schema: Schema.ContentType,\n components: Record<string, Schema.Component>\n) => {\n const cleanedData = removeFields(data, [\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 ]);\n\n const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(\n cleanedData,\n schema,\n components,\n ['relation', 'password']\n );\n\n return cleanedDataWithoutPasswordAndRelation;\n};\n\nconst removeFields = (data: Data, fields: Array<keyof Schema.ContentType['attributes']>) => {\n return Object.keys(data).reduce((acc, current) => {\n if (fields.includes(current)) {\n return acc;\n }\n acc[current] = data[current];\n return acc;\n }, {} as Data);\n};\n\nconst recursiveRemoveFieldTypes = (\n data: Data,\n schema: Schema.Schema,\n components: Record<string, Schema.Component>,\n fields: Array<keyof Schema.ContentType['attributes']>\n) => {\n return Object.keys(data).reduce((acc, current) => {\n const attribute = schema.attributes[current] ?? { type: undefined };\n\n if (fields.includes(attribute.type)) {\n return acc;\n }\n\n if (attribute.type === 'dynamiczone') {\n acc[current] = data[current].map((componentValue: any, index: number) => {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n componentValue,\n components[componentValue.__component],\n components,\n fields\n );\n\n return {\n ...rest,\n __temp_key__: index + 1,\n };\n });\n } else if (attribute.type === 'component') {\n const { repeatable, component } = attribute;\n\n if (repeatable) {\n acc[current] = (data[current] ?? []).map((compoData: any, index: number) => {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n compoData,\n components[component],\n components,\n fields\n );\n\n return {\n ...rest,\n __temp_key__: index + 1,\n };\n });\n } else if (data[current]) {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n data[current],\n components[component],\n components,\n fields\n );\n\n acc[current] = rest;\n }\n } else {\n acc[current] = data[current];\n }\n\n return acc;\n }, {} as any);\n};\n\nexport { cleanData };\n"],"names":["cleanData","data","schema","components","cleanedData","removeFields","cleanedDataWithoutPasswordAndRelation","recursiveRemoveFieldTypes","fields","Object","keys","reduce","acc","current","includes","attribute","attributes","type","undefined","map","componentValue","index","id","_","rest","__component","__temp_key__","repeatable","component","compoData"],"mappings":"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"}
|