@strapi/i18n 5.53.0 → 5.55.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 +5 -5
- package/dist/admin/components/CMHeaderActions.js.map +1 -1
- package/dist/admin/components/CMHeaderActions.mjs +5 -5
- package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
- package/dist/admin/hooks/useAITranslations.js +11 -0
- package/dist/admin/hooks/useAITranslations.js.map +1 -0
- package/dist/admin/hooks/useAITranslations.mjs +9 -0
- package/dist/admin/hooks/useAITranslations.mjs.map +1 -0
- package/dist/admin/pages/SettingsPage.js +2 -2
- package/dist/admin/pages/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage.mjs +2 -2
- package/dist/admin/pages/SettingsPage.mjs.map +1 -1
- package/dist/admin/src/hooks/useAITranslations.d.ts +1 -0
- package/dist/admin/src/services/settings.d.ts +1 -1
- package/dist/server/audit-logs.js +39 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +37 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +11 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +11 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/constants/index.js +7 -0
- package/dist/server/constants/index.js.map +1 -1
- package/dist/server/constants/index.mjs +7 -1
- package/dist/server/constants/index.mjs.map +1 -1
- package/dist/server/controllers/locales.js +3 -1
- package/dist/server/controllers/locales.js.map +1 -1
- package/dist/server/controllers/locales.mjs +3 -1
- package/dist/server/controllers/locales.mjs.map +1 -1
- package/dist/server/controllers/settings.js +5 -2
- package/dist/server/controllers/settings.js.map +1 -1
- package/dist/server/controllers/settings.mjs +5 -2
- package/dist/server/controllers/settings.mjs.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/services/ai-localizations.js +8 -34
- package/dist/server/services/ai-localizations.js.map +1 -1
- package/dist/server/services/ai-localizations.mjs +8 -34
- package/dist/server/services/ai-localizations.mjs.map +1 -1
- package/dist/server/services/ai-translations-strapi-managed.js +44 -0
- package/dist/server/services/ai-translations-strapi-managed.js.map +1 -0
- package/dist/server/services/ai-translations-strapi-managed.mjs +42 -0
- package/dist/server/services/ai-translations-strapi-managed.mjs.map +1 -0
- package/dist/server/services/ai-translations.js +50 -0
- package/dist/server/services/ai-translations.js.map +1 -0
- package/dist/server/services/ai-translations.mjs +48 -0
- package/dist/server/services/ai-translations.mjs.map +1 -0
- package/dist/server/services/index.js +2 -0
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/locales.js +76 -2
- package/dist/server/services/locales.js.map +1 -1
- package/dist/server/services/locales.mjs +77 -3
- package/dist/server/services/locales.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +24 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/constants/index.d.ts +7 -1
- package/dist/server/src/constants/index.d.ts.map +1 -1
- package/dist/server/src/controllers/settings.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +7 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/ai-localizations.d.ts.map +1 -1
- package/dist/server/src/services/ai-translations-strapi-managed.d.ts +7 -0
- package/dist/server/src/services/ai-translations-strapi-managed.d.ts.map +1 -0
- package/dist/server/src/services/ai-translations.d.ts +29 -0
- package/dist/server/src/services/ai-translations.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +6 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/locales.d.ts +3 -1
- package/dist/server/src/services/locales.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/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/settings.d.ts +6 -1
- package/package.json +7 -7
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./constants/index.js');
|
|
4
|
+
|
|
5
|
+
const registerAuditEvents = (auditLogsLifecycle)=>{
|
|
6
|
+
const localeResource = (event)=>({
|
|
7
|
+
type: 'locale',
|
|
8
|
+
id: event.localeId,
|
|
9
|
+
name: event.name,
|
|
10
|
+
code: event.code
|
|
11
|
+
});
|
|
12
|
+
auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_CREATE, (event)=>({
|
|
13
|
+
resource: localeResource(event),
|
|
14
|
+
details: {
|
|
15
|
+
isDefault: event.isDefault
|
|
16
|
+
}
|
|
17
|
+
}));
|
|
18
|
+
auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_UPDATE, (event)=>({
|
|
19
|
+
resource: localeResource(event),
|
|
20
|
+
details: {
|
|
21
|
+
changes: event.changes
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_DELETE, (event)=>({
|
|
25
|
+
resource: localeResource(event)
|
|
26
|
+
}));
|
|
27
|
+
/**
|
|
28
|
+
* The resource is the locale that became the default. `before` is null when no
|
|
29
|
+
* default was set yet.
|
|
30
|
+
*/ auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, (event)=>({
|
|
31
|
+
resource: localeResource(event),
|
|
32
|
+
details: {
|
|
33
|
+
changes: event.changes
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.registerAuditEvents = registerAuditEvents;
|
|
39
|
+
//# sourceMappingURL=audit-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.js","sources":["../../server/src/audit-logs.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\n\nimport { AUDITED_EVENTS } from './constants';\n\ninterface LocaleEvent {\n localeId: number;\n name?: string;\n code: string;\n}\n\n/**\n * The code is what the rest of the system refers to a locale by, and it outlives the\n * row: the name can be edited, and the id resolves to nothing once it is deleted.\n */\ninterface LocaleResource extends Modules.AuditLogs.Resource {\n type: 'locale';\n code: string;\n}\n\nexport interface CreateDetails {\n isDefault: boolean;\n}\n\nexport interface UpdateDetails {\n changes: Partial<Record<'name', Modules.AuditLogs.FieldChange>>;\n}\n\nexport interface LocaleRef {\n id: number | null;\n code: string;\n}\n\nexport interface DefaultUpdateDetails {\n changes: Record<'defaultLocale', Modules.AuditLogs.FieldChange<LocaleRef | null>>;\n}\n\n/**\n * The part of the audit-logs lifecycle service used by this plugin.\n * The full service type lives in the Admin EE package and cannot be imported here.\n */\ninterface AuditLogsLifecycle {\n registerEvent<TDetails, TResource extends Modules.AuditLogs.Resource>(\n name: string,\n transform: Modules.AuditLogs.EventTransformer<TDetails, TResource>\n ): void;\n}\n\nexport const registerAuditEvents = (auditLogsLifecycle: AuditLogsLifecycle) => {\n const localeResource = (event: LocaleEvent): LocaleResource => ({\n type: 'locale',\n id: event.localeId,\n name: event.name,\n code: event.code,\n });\n\n auditLogsLifecycle.registerEvent<CreateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_CREATE,\n (event: LocaleEvent & CreateDetails) => ({\n resource: localeResource(event),\n details: { isDefault: event.isDefault },\n })\n );\n\n auditLogsLifecycle.registerEvent<UpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_UPDATE,\n (event: LocaleEvent & UpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n\n auditLogsLifecycle.registerEvent<undefined, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DELETE,\n (event: LocaleEvent) => ({\n resource: localeResource(event),\n })\n );\n\n /**\n * The resource is the locale that became the default. `before` is null when no\n * default was set yet.\n */\n auditLogsLifecycle.registerEvent<DefaultUpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE,\n (event: LocaleEvent & DefaultUpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n};\n"],"names":["registerAuditEvents","auditLogsLifecycle","localeResource","event","type","id","localeId","name","code","registerEvent","AUDITED_EVENTS","LOCALE_CREATE","resource","details","isDefault","LOCALE_UPDATE","changes","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;;;AA+CO,MAAMA,sBAAsB,CAACC,kBAAAA,GAAAA;IAClC,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAwC;YAC9DC,IAAAA,EAAM,QAAA;AACNC,YAAAA,EAAAA,EAAIF,MAAMG,QAAQ;AAClBC,YAAAA,IAAAA,EAAMJ,MAAMI,IAAI;AAChBC,YAAAA,IAAAA,EAAML,MAAMK;SACd,CAAA;AAEAP,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeC,aAAa,EAC5B,CAACR,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEC,gBAAAA,SAAAA,EAAWX,MAAMW;AAAU;SACxC,CAAA,CAAA;AAGFb,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeK,aAAa,EAC5B,CAACZ,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAGFf,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeO,aAAa,EAC5B,CAACd,SAAwB;AACvBS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA;SAC3B,CAAA,CAAA;AAGF;;;MAIAF,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeQ,qBAAqB,EACpC,CAACf,SAA+C;AAC9CS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AUDITED_EVENTS } from './constants/index.mjs';
|
|
2
|
+
|
|
3
|
+
const registerAuditEvents = (auditLogsLifecycle)=>{
|
|
4
|
+
const localeResource = (event)=>({
|
|
5
|
+
type: 'locale',
|
|
6
|
+
id: event.localeId,
|
|
7
|
+
name: event.name,
|
|
8
|
+
code: event.code
|
|
9
|
+
});
|
|
10
|
+
auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_CREATE, (event)=>({
|
|
11
|
+
resource: localeResource(event),
|
|
12
|
+
details: {
|
|
13
|
+
isDefault: event.isDefault
|
|
14
|
+
}
|
|
15
|
+
}));
|
|
16
|
+
auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_UPDATE, (event)=>({
|
|
17
|
+
resource: localeResource(event),
|
|
18
|
+
details: {
|
|
19
|
+
changes: event.changes
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_DELETE, (event)=>({
|
|
23
|
+
resource: localeResource(event)
|
|
24
|
+
}));
|
|
25
|
+
/**
|
|
26
|
+
* The resource is the locale that became the default. `before` is null when no
|
|
27
|
+
* default was set yet.
|
|
28
|
+
*/ auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, (event)=>({
|
|
29
|
+
resource: localeResource(event),
|
|
30
|
+
details: {
|
|
31
|
+
changes: event.changes
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { registerAuditEvents };
|
|
37
|
+
//# sourceMappingURL=audit-logs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.mjs","sources":["../../server/src/audit-logs.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\n\nimport { AUDITED_EVENTS } from './constants';\n\ninterface LocaleEvent {\n localeId: number;\n name?: string;\n code: string;\n}\n\n/**\n * The code is what the rest of the system refers to a locale by, and it outlives the\n * row: the name can be edited, and the id resolves to nothing once it is deleted.\n */\ninterface LocaleResource extends Modules.AuditLogs.Resource {\n type: 'locale';\n code: string;\n}\n\nexport interface CreateDetails {\n isDefault: boolean;\n}\n\nexport interface UpdateDetails {\n changes: Partial<Record<'name', Modules.AuditLogs.FieldChange>>;\n}\n\nexport interface LocaleRef {\n id: number | null;\n code: string;\n}\n\nexport interface DefaultUpdateDetails {\n changes: Record<'defaultLocale', Modules.AuditLogs.FieldChange<LocaleRef | null>>;\n}\n\n/**\n * The part of the audit-logs lifecycle service used by this plugin.\n * The full service type lives in the Admin EE package and cannot be imported here.\n */\ninterface AuditLogsLifecycle {\n registerEvent<TDetails, TResource extends Modules.AuditLogs.Resource>(\n name: string,\n transform: Modules.AuditLogs.EventTransformer<TDetails, TResource>\n ): void;\n}\n\nexport const registerAuditEvents = (auditLogsLifecycle: AuditLogsLifecycle) => {\n const localeResource = (event: LocaleEvent): LocaleResource => ({\n type: 'locale',\n id: event.localeId,\n name: event.name,\n code: event.code,\n });\n\n auditLogsLifecycle.registerEvent<CreateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_CREATE,\n (event: LocaleEvent & CreateDetails) => ({\n resource: localeResource(event),\n details: { isDefault: event.isDefault },\n })\n );\n\n auditLogsLifecycle.registerEvent<UpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_UPDATE,\n (event: LocaleEvent & UpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n\n auditLogsLifecycle.registerEvent<undefined, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DELETE,\n (event: LocaleEvent) => ({\n resource: localeResource(event),\n })\n );\n\n /**\n * The resource is the locale that became the default. `before` is null when no\n * default was set yet.\n */\n auditLogsLifecycle.registerEvent<DefaultUpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE,\n (event: LocaleEvent & DefaultUpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n};\n"],"names":["registerAuditEvents","auditLogsLifecycle","localeResource","event","type","id","localeId","name","code","registerEvent","AUDITED_EVENTS","LOCALE_CREATE","resource","details","isDefault","LOCALE_UPDATE","changes","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;AA+CO,MAAMA,sBAAsB,CAACC,kBAAAA,GAAAA;IAClC,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAwC;YAC9DC,IAAAA,EAAM,QAAA;AACNC,YAAAA,EAAAA,EAAIF,MAAMG,QAAQ;AAClBC,YAAAA,IAAAA,EAAMJ,MAAMI,IAAI;AAChBC,YAAAA,IAAAA,EAAML,MAAMK;SACd,CAAA;AAEAP,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeC,aAAa,EAC5B,CAACR,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEC,gBAAAA,SAAAA,EAAWX,MAAMW;AAAU;SACxC,CAAA,CAAA;AAGFb,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeK,aAAa,EAC5B,CAACZ,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAGFf,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeO,aAAa,EAC5B,CAACd,SAAwB;AACvBS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA;SAC3B,CAAA,CAAA;AAGF;;;MAIAF,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeQ,qBAAqB,EACpC,CAACf,SAA+C;AAC9CS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAEJ;;;;"}
|
package/dist/server/bootstrap.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var fp = require('lodash/fp');
|
|
4
|
+
var auditLogs = require('./audit-logs.js');
|
|
4
5
|
var index = require('./utils/index.js');
|
|
5
6
|
|
|
6
7
|
const registerModelsHooks = ()=>{
|
|
@@ -86,8 +87,17 @@ var bootstrap = (async ()=>{
|
|
|
86
87
|
engine.registerI18nPermissionsHandlers();
|
|
87
88
|
// Hooks & Models
|
|
88
89
|
registerModelsHooks();
|
|
90
|
+
// Absent in CE, without the audit-logs license, or when disabled by config;
|
|
91
|
+
// get() throws for services that were never added, so probe first.
|
|
92
|
+
if (strapi.has('audit-logs-lifecycle')) {
|
|
93
|
+
auditLogs.registerAuditEvents(strapi.get('audit-logs-lifecycle'));
|
|
94
|
+
}
|
|
89
95
|
// AI Localizations
|
|
90
|
-
if (strapi.ai.admin.
|
|
96
|
+
if (strapi.ai.admin.isAvailable()) {
|
|
97
|
+
const aiTranslations = index.getService('ai-translations');
|
|
98
|
+
if (!aiTranslations.hasProvider() && strapi.ai.admin.isStrapiManagedAiEnabled()) {
|
|
99
|
+
aiTranslations.registerStrapiManagedProvider();
|
|
100
|
+
}
|
|
91
101
|
index.getService('ai-localizations').setupMiddleware();
|
|
92
102
|
}
|
|
93
103
|
sendDidInitializeEvent();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport { isEqual } from 'lodash/fp';\nimport { getService } from './utils';\n\nconst registerModelsHooks = () => {\n strapi.db.lifecycles.subscribe({\n models: ['plugin::i18n.locale'],\n\n async afterCreate() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n\n async afterDelete() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n });\n\n strapi.documents.use(async (context, next) => {\n const schema: Schema.ContentType = context.contentType;\n\n if (!['create', 'update', 'discardDraft', 'publish'].includes(context.action)) {\n return next();\n }\n\n if (!getService('content-types').isLocalizedContentType(schema)) {\n return next();\n }\n\n // Build a populate array for all non localized fields within the schema\n const { getNestedPopulateOfNonLocalizedAttributes, copyNonLocalizedAttributes } =\n getService('content-types');\n const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\n\n // Get original data before the update to compare what actually changed\n const originalData =\n 'documentId' in context.params && context.params.documentId\n ? await strapi.db.query(schema.uid).findOne({\n where: { documentId: context.params.documentId },\n populate: attributesToPopulate,\n })\n : null;\n\n // Get the result of the document service action\n const result = (await next()) as any;\n\n // We may not have received a result with everything populated that we need\n // Use the id and populate built from non localized fields to get the full\n // result\n let resultID;\n // TODO: fix bug where an empty array can be returned\n if (Array.isArray(result?.entries) && result.entries[0]?.id) {\n resultID = result.entries[0].id;\n } else if (result?.id) {\n resultID = result.id;\n } else {\n return result;\n }\n\n const populatedResult = await strapi.db.query(schema.uid).findOne({\n where: { id: resultID },\n populate: attributesToPopulate,\n });\n\n const originalFields = copyNonLocalizedAttributes(schema, originalData);\n const currentFields = copyNonLocalizedAttributes(schema, populatedResult);\n\n // Only sync if there are actual changes to non-localized fields\n const shouldSync =\n !originalData ||\n Object.keys(currentFields).some((key) => {\n return !isEqual(currentFields[key], originalFields[key]);\n });\n\n if (shouldSync) {\n await getService('localizations').syncNonLocalizedAttributes(populatedResult, schema);\n }\n\n return result;\n });\n};\n\nexport default async () => {\n const { sendDidInitializeEvent } = getService('metrics');\n const { initDefaultLocale } = getService('locales');\n const { sectionsBuilder, actions, engine } = getService('permissions');\n\n // Data\n await initDefaultLocale();\n\n // Sections Builder\n sectionsBuilder.registerLocalesPropertyHandler();\n\n // Actions\n await actions.registerI18nActions();\n actions.registerI18nActionsHooks();\n actions.updateActionsProperties();\n\n // Engine/Permissions\n engine.registerI18nPermissionsHandlers();\n\n // Hooks & Models\n registerModelsHooks();\n\n // AI Localizations\n if (strapi.ai.admin.
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport { isEqual } from 'lodash/fp';\nimport { registerAuditEvents } from './audit-logs';\nimport { getService } from './utils';\n\nconst registerModelsHooks = () => {\n strapi.db.lifecycles.subscribe({\n models: ['plugin::i18n.locale'],\n\n async afterCreate() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n\n async afterDelete() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n });\n\n strapi.documents.use(async (context, next) => {\n const schema: Schema.ContentType = context.contentType;\n\n if (!['create', 'update', 'discardDraft', 'publish'].includes(context.action)) {\n return next();\n }\n\n if (!getService('content-types').isLocalizedContentType(schema)) {\n return next();\n }\n\n // Build a populate array for all non localized fields within the schema\n const { getNestedPopulateOfNonLocalizedAttributes, copyNonLocalizedAttributes } =\n getService('content-types');\n const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\n\n // Get original data before the update to compare what actually changed\n const originalData =\n 'documentId' in context.params && context.params.documentId\n ? await strapi.db.query(schema.uid).findOne({\n where: { documentId: context.params.documentId },\n populate: attributesToPopulate,\n })\n : null;\n\n // Get the result of the document service action\n const result = (await next()) as any;\n\n // We may not have received a result with everything populated that we need\n // Use the id and populate built from non localized fields to get the full\n // result\n let resultID;\n // TODO: fix bug where an empty array can be returned\n if (Array.isArray(result?.entries) && result.entries[0]?.id) {\n resultID = result.entries[0].id;\n } else if (result?.id) {\n resultID = result.id;\n } else {\n return result;\n }\n\n const populatedResult = await strapi.db.query(schema.uid).findOne({\n where: { id: resultID },\n populate: attributesToPopulate,\n });\n\n const originalFields = copyNonLocalizedAttributes(schema, originalData);\n const currentFields = copyNonLocalizedAttributes(schema, populatedResult);\n\n // Only sync if there are actual changes to non-localized fields\n const shouldSync =\n !originalData ||\n Object.keys(currentFields).some((key) => {\n return !isEqual(currentFields[key], originalFields[key]);\n });\n\n if (shouldSync) {\n await getService('localizations').syncNonLocalizedAttributes(populatedResult, schema);\n }\n\n return result;\n });\n};\n\nexport default async () => {\n const { sendDidInitializeEvent } = getService('metrics');\n const { initDefaultLocale } = getService('locales');\n const { sectionsBuilder, actions, engine } = getService('permissions');\n\n // Data\n await initDefaultLocale();\n\n // Sections Builder\n sectionsBuilder.registerLocalesPropertyHandler();\n\n // Actions\n await actions.registerI18nActions();\n actions.registerI18nActionsHooks();\n actions.updateActionsProperties();\n\n // Engine/Permissions\n engine.registerI18nPermissionsHandlers();\n\n // Hooks & Models\n registerModelsHooks();\n\n // Absent in CE, without the audit-logs license, or when disabled by config;\n // get() throws for services that were never added, so probe first.\n if (strapi.has('audit-logs-lifecycle')) {\n registerAuditEvents(strapi.get('audit-logs-lifecycle'));\n }\n\n // AI Localizations\n if (strapi.ai.admin.isAvailable()) {\n const aiTranslations = getService('ai-translations');\n\n if (!aiTranslations.hasProvider() && strapi.ai.admin.isStrapiManagedAiEnabled()) {\n aiTranslations.registerStrapiManagedProvider();\n }\n\n getService('ai-localizations').setupMiddleware();\n }\n\n sendDidInitializeEvent();\n};\n"],"names":["registerModelsHooks","strapi","db","lifecycles","subscribe","models","afterCreate","getService","actions","syncSuperAdminPermissionsWithLocales","afterDelete","documents","use","context","next","schema","contentType","includes","action","isLocalizedContentType","getNestedPopulateOfNonLocalizedAttributes","copyNonLocalizedAttributes","attributesToPopulate","uid","originalData","params","documentId","query","findOne","where","populate","result","resultID","Array","isArray","entries","id","populatedResult","originalFields","currentFields","shouldSync","Object","keys","some","key","isEqual","syncNonLocalizedAttributes","sendDidInitializeEvent","initDefaultLocale","sectionsBuilder","engine","registerLocalesPropertyHandler","registerI18nActions","registerI18nActionsHooks","updateActionsProperties","registerI18nPermissionsHandlers","has","registerAuditEvents","get","ai","admin","isAvailable","aiTranslations","hasProvider","isStrapiManagedAiEnabled","registerStrapiManagedProvider","setupMiddleware"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isEqual } from 'lodash/fp';
|
|
2
|
+
import { registerAuditEvents } from './audit-logs.mjs';
|
|
2
3
|
import { getService } from './utils/index.mjs';
|
|
3
4
|
|
|
4
5
|
const registerModelsHooks = ()=>{
|
|
@@ -84,8 +85,17 @@ var bootstrap = (async ()=>{
|
|
|
84
85
|
engine.registerI18nPermissionsHandlers();
|
|
85
86
|
// Hooks & Models
|
|
86
87
|
registerModelsHooks();
|
|
88
|
+
// Absent in CE, without the audit-logs license, or when disabled by config;
|
|
89
|
+
// get() throws for services that were never added, so probe first.
|
|
90
|
+
if (strapi.has('audit-logs-lifecycle')) {
|
|
91
|
+
registerAuditEvents(strapi.get('audit-logs-lifecycle'));
|
|
92
|
+
}
|
|
87
93
|
// AI Localizations
|
|
88
|
-
if (strapi.ai.admin.
|
|
94
|
+
if (strapi.ai.admin.isAvailable()) {
|
|
95
|
+
const aiTranslations = getService('ai-translations');
|
|
96
|
+
if (!aiTranslations.hasProvider() && strapi.ai.admin.isStrapiManagedAiEnabled()) {
|
|
97
|
+
aiTranslations.registerStrapiManagedProvider();
|
|
98
|
+
}
|
|
89
99
|
getService('ai-localizations').setupMiddleware();
|
|
90
100
|
}
|
|
91
101
|
sendDidInitializeEvent();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport { isEqual } from 'lodash/fp';\nimport { getService } from './utils';\n\nconst registerModelsHooks = () => {\n strapi.db.lifecycles.subscribe({\n models: ['plugin::i18n.locale'],\n\n async afterCreate() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n\n async afterDelete() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n });\n\n strapi.documents.use(async (context, next) => {\n const schema: Schema.ContentType = context.contentType;\n\n if (!['create', 'update', 'discardDraft', 'publish'].includes(context.action)) {\n return next();\n }\n\n if (!getService('content-types').isLocalizedContentType(schema)) {\n return next();\n }\n\n // Build a populate array for all non localized fields within the schema\n const { getNestedPopulateOfNonLocalizedAttributes, copyNonLocalizedAttributes } =\n getService('content-types');\n const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\n\n // Get original data before the update to compare what actually changed\n const originalData =\n 'documentId' in context.params && context.params.documentId\n ? await strapi.db.query(schema.uid).findOne({\n where: { documentId: context.params.documentId },\n populate: attributesToPopulate,\n })\n : null;\n\n // Get the result of the document service action\n const result = (await next()) as any;\n\n // We may not have received a result with everything populated that we need\n // Use the id and populate built from non localized fields to get the full\n // result\n let resultID;\n // TODO: fix bug where an empty array can be returned\n if (Array.isArray(result?.entries) && result.entries[0]?.id) {\n resultID = result.entries[0].id;\n } else if (result?.id) {\n resultID = result.id;\n } else {\n return result;\n }\n\n const populatedResult = await strapi.db.query(schema.uid).findOne({\n where: { id: resultID },\n populate: attributesToPopulate,\n });\n\n const originalFields = copyNonLocalizedAttributes(schema, originalData);\n const currentFields = copyNonLocalizedAttributes(schema, populatedResult);\n\n // Only sync if there are actual changes to non-localized fields\n const shouldSync =\n !originalData ||\n Object.keys(currentFields).some((key) => {\n return !isEqual(currentFields[key], originalFields[key]);\n });\n\n if (shouldSync) {\n await getService('localizations').syncNonLocalizedAttributes(populatedResult, schema);\n }\n\n return result;\n });\n};\n\nexport default async () => {\n const { sendDidInitializeEvent } = getService('metrics');\n const { initDefaultLocale } = getService('locales');\n const { sectionsBuilder, actions, engine } = getService('permissions');\n\n // Data\n await initDefaultLocale();\n\n // Sections Builder\n sectionsBuilder.registerLocalesPropertyHandler();\n\n // Actions\n await actions.registerI18nActions();\n actions.registerI18nActionsHooks();\n actions.updateActionsProperties();\n\n // Engine/Permissions\n engine.registerI18nPermissionsHandlers();\n\n // Hooks & Models\n registerModelsHooks();\n\n // AI Localizations\n if (strapi.ai.admin.
|
|
1
|
+
{"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport { isEqual } from 'lodash/fp';\nimport { registerAuditEvents } from './audit-logs';\nimport { getService } from './utils';\n\nconst registerModelsHooks = () => {\n strapi.db.lifecycles.subscribe({\n models: ['plugin::i18n.locale'],\n\n async afterCreate() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n\n async afterDelete() {\n await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();\n },\n });\n\n strapi.documents.use(async (context, next) => {\n const schema: Schema.ContentType = context.contentType;\n\n if (!['create', 'update', 'discardDraft', 'publish'].includes(context.action)) {\n return next();\n }\n\n if (!getService('content-types').isLocalizedContentType(schema)) {\n return next();\n }\n\n // Build a populate array for all non localized fields within the schema\n const { getNestedPopulateOfNonLocalizedAttributes, copyNonLocalizedAttributes } =\n getService('content-types');\n const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\n\n // Get original data before the update to compare what actually changed\n const originalData =\n 'documentId' in context.params && context.params.documentId\n ? await strapi.db.query(schema.uid).findOne({\n where: { documentId: context.params.documentId },\n populate: attributesToPopulate,\n })\n : null;\n\n // Get the result of the document service action\n const result = (await next()) as any;\n\n // We may not have received a result with everything populated that we need\n // Use the id and populate built from non localized fields to get the full\n // result\n let resultID;\n // TODO: fix bug where an empty array can be returned\n if (Array.isArray(result?.entries) && result.entries[0]?.id) {\n resultID = result.entries[0].id;\n } else if (result?.id) {\n resultID = result.id;\n } else {\n return result;\n }\n\n const populatedResult = await strapi.db.query(schema.uid).findOne({\n where: { id: resultID },\n populate: attributesToPopulate,\n });\n\n const originalFields = copyNonLocalizedAttributes(schema, originalData);\n const currentFields = copyNonLocalizedAttributes(schema, populatedResult);\n\n // Only sync if there are actual changes to non-localized fields\n const shouldSync =\n !originalData ||\n Object.keys(currentFields).some((key) => {\n return !isEqual(currentFields[key], originalFields[key]);\n });\n\n if (shouldSync) {\n await getService('localizations').syncNonLocalizedAttributes(populatedResult, schema);\n }\n\n return result;\n });\n};\n\nexport default async () => {\n const { sendDidInitializeEvent } = getService('metrics');\n const { initDefaultLocale } = getService('locales');\n const { sectionsBuilder, actions, engine } = getService('permissions');\n\n // Data\n await initDefaultLocale();\n\n // Sections Builder\n sectionsBuilder.registerLocalesPropertyHandler();\n\n // Actions\n await actions.registerI18nActions();\n actions.registerI18nActionsHooks();\n actions.updateActionsProperties();\n\n // Engine/Permissions\n engine.registerI18nPermissionsHandlers();\n\n // Hooks & Models\n registerModelsHooks();\n\n // Absent in CE, without the audit-logs license, or when disabled by config;\n // get() throws for services that were never added, so probe first.\n if (strapi.has('audit-logs-lifecycle')) {\n registerAuditEvents(strapi.get('audit-logs-lifecycle'));\n }\n\n // AI Localizations\n if (strapi.ai.admin.isAvailable()) {\n const aiTranslations = getService('ai-translations');\n\n if (!aiTranslations.hasProvider() && strapi.ai.admin.isStrapiManagedAiEnabled()) {\n aiTranslations.registerStrapiManagedProvider();\n }\n\n getService('ai-localizations').setupMiddleware();\n }\n\n sendDidInitializeEvent();\n};\n"],"names":["registerModelsHooks","strapi","db","lifecycles","subscribe","models","afterCreate","getService","actions","syncSuperAdminPermissionsWithLocales","afterDelete","documents","use","context","next","schema","contentType","includes","action","isLocalizedContentType","getNestedPopulateOfNonLocalizedAttributes","copyNonLocalizedAttributes","attributesToPopulate","uid","originalData","params","documentId","query","findOne","where","populate","result","resultID","Array","isArray","entries","id","populatedResult","originalFields","currentFields","shouldSync","Object","keys","some","key","isEqual","syncNonLocalizedAttributes","sendDidInitializeEvent","initDefaultLocale","sectionsBuilder","engine","registerLocalesPropertyHandler","registerI18nActions","registerI18nActionsHooks","updateActionsProperties","registerI18nPermissionsHandlers","has","registerAuditEvents","get","ai","admin","isAvailable","aiTranslations","hasProvider","isStrapiManagedAiEnabled","registerStrapiManagedProvider","setupMiddleware"],"mappings":"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"}
|
|
@@ -22,8 +22,15 @@ var isoLocales = require('./iso-locales.json.js');
|
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
24
|
const DEFAULT_LOCALE = getInitLocale();
|
|
25
|
+
const AUDITED_EVENTS = {
|
|
26
|
+
LOCALE_CREATE: 'locale.create',
|
|
27
|
+
LOCALE_UPDATE: 'locale.update',
|
|
28
|
+
LOCALE_DELETE: 'locale.delete',
|
|
29
|
+
LOCALE_DEFAULT_UPDATE: 'locale.default.update'
|
|
30
|
+
};
|
|
25
31
|
|
|
26
32
|
exports.isoLocales = isoLocales;
|
|
33
|
+
exports.AUDITED_EVENTS = AUDITED_EVENTS;
|
|
27
34
|
exports.DEFAULT_LOCALE = DEFAULT_LOCALE;
|
|
28
35
|
exports.getInitLocale = getInitLocale;
|
|
29
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE"],"mappings":";;;;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nconst AUDITED_EVENTS = {\n LOCALE_CREATE: 'locale.create',\n LOCALE_UPDATE: 'locale.update',\n LOCALE_DELETE: 'locale.delete',\n LOCALE_DEFAULT_UPDATE: 'locale.default.update',\n} as const;\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale, AUDITED_EVENTS };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE","AUDITED_EVENTS","LOCALE_CREATE","LOCALE_UPDATE","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;;;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA;AAEvB,MAAMY,cAAAA,GAAiB;IACrBC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,qBAAAA,EAAuB;AACzB;;;;;;;"}
|
|
@@ -20,6 +20,12 @@ import isoLocales from './iso-locales.json.mjs';
|
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
22
|
const DEFAULT_LOCALE = getInitLocale();
|
|
23
|
+
const AUDITED_EVENTS = {
|
|
24
|
+
LOCALE_CREATE: 'locale.create',
|
|
25
|
+
LOCALE_UPDATE: 'locale.update',
|
|
26
|
+
LOCALE_DELETE: 'locale.delete',
|
|
27
|
+
LOCALE_DEFAULT_UPDATE: 'locale.default.update'
|
|
28
|
+
};
|
|
23
29
|
|
|
24
|
-
export { DEFAULT_LOCALE, getInitLocale, isoLocales };
|
|
30
|
+
export { AUDITED_EVENTS, DEFAULT_LOCALE, getInitLocale, isoLocales };
|
|
25
31
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE"],"mappings":";;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nconst AUDITED_EVENTS = {\n LOCALE_CREATE: 'locale.create',\n LOCALE_UPDATE: 'locale.update',\n LOCALE_DELETE: 'locale.delete',\n LOCALE_DEFAULT_UPDATE: 'locale.default.update',\n} as const;\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale, AUDITED_EVENTS };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE","AUDITED_EVENTS","LOCALE_CREATE","LOCALE_UPDATE","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA;AAEvB,MAAMY,cAAAA,GAAiB;IACrBC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,qBAAAA,EAAuB;AACzB;;;;"}
|
|
@@ -52,7 +52,9 @@ const controller = {
|
|
|
52
52
|
const localeToPersist = setCreatorFields({
|
|
53
53
|
user
|
|
54
54
|
})(locale.formatLocale(localeToCreate));
|
|
55
|
-
const locale$1 = await localesService.create(localeToPersist
|
|
55
|
+
const locale$1 = await localesService.create(localeToPersist, {
|
|
56
|
+
isDefault: Boolean(isDefault)
|
|
57
|
+
});
|
|
56
58
|
if (isDefault) {
|
|
57
59
|
await localesService.setDefaultLocale(locale$1);
|
|
58
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist);\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,gBAAAA;AAC7B,MAAM,EAAEC,gBAAgB,EAAE,GAAGD,iBAAME,MAAM;AAEzC,MAAMC,iBAAiB,CAACC,MAAAA,GAAAA;IACtB,MAAMC,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAAC,qBAAA,CAAA;AAE9B,IAAA,OAAOD,OAAOE,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACN,MAAAA,EAAQC,KAAAA,CAAAA;AACnD,CAAA;AAEA,MAAMM,UAAAA,GAA8B;AAClC,IAAA,MAAMC,aAAYC,GAAG,EAAA;AACnB,QAAA,MAAMC,iBAAiBC,gBAAAA,CAAW,SAAA,CAAA;QAElC,MAAMC,OAAAA,GAAU,MAAMF,cAAAA,CAAeG,IAAI,EAAA;QACzC,MAAMC,gBAAAA,GAAmB,MAAMf,cAAAA,CAAea,OAAAA,CAAAA;AAE9CH,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACF,gBAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMG,cAAaR,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAMJ,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGC,gBAAgB,GAAGP,IAAAA;AAEzC,QAAA,MAAMQ,iCAAAA,CAA0BR,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,gBAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,iBAAiB,MAAMd,cAAAA,CAAee,UAAU,CAACV,KAAKW,IAAI,CAAA;AAChE,QAAA,IAAIF,cAAAA,EAAgB;AAClB,YAAA,MAAM,IAAI3B,gBAAAA,CAAiB,4BAAA,CAAA;AAC7B,QAAA;AAEA,QAAA,MAAM8B,kBAAkBhC,gBAAAA,CAAiB;AAAEuB,YAAAA;AAAK,SAAA,CAAA,CAAGU,mBAAAA,CAAaN,cAAAA,CAAAA,CAAAA;AAEhE,QAAA,MAAMtB,QAAAA,GAAS,MAAMU,cAAAA,CAAemB,MAAM,CAACF,eAAAA,
|
|
1
|
+
{"version":3,"file":"locales.js","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist, { isDefault: Boolean(isDefault) });\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","Boolean","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":"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"}
|
|
@@ -30,7 +30,9 @@ const controller = {
|
|
|
30
30
|
const localeToPersist = setCreatorFields({
|
|
31
31
|
user
|
|
32
32
|
})(formatLocale(localeToCreate));
|
|
33
|
-
const locale = await localesService.create(localeToPersist
|
|
33
|
+
const locale = await localesService.create(localeToPersist, {
|
|
34
|
+
isDefault: Boolean(isDefault)
|
|
35
|
+
});
|
|
34
36
|
if (isDefault) {
|
|
35
37
|
await localesService.setDefaultLocale(locale);
|
|
36
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.mjs","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist);\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":";;;;;;AAOA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,KAAAA;AAC7B,MAAM,EAAEC,gBAAgB,EAAE,GAAGD,MAAME,MAAM;AAEzC,MAAMC,iBAAiB,CAACC,MAAAA,GAAAA;IACtB,MAAMC,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAAC,qBAAA,CAAA;AAE9B,IAAA,OAAOD,OAAOE,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACN,MAAAA,EAAQC,KAAAA,CAAAA;AACnD,CAAA;AAEA,MAAMM,UAAAA,GAA8B;AAClC,IAAA,MAAMC,aAAYC,GAAG,EAAA;AACnB,QAAA,MAAMC,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;QAElC,MAAMC,OAAAA,GAAU,MAAMF,cAAAA,CAAeG,IAAI,EAAA;QACzC,MAAMC,gBAAAA,GAAmB,MAAMf,cAAAA,CAAea,OAAAA,CAAAA;AAE9CH,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACF,gBAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMG,cAAaR,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAMJ,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGC,gBAAgB,GAAGP,IAAAA;AAEzC,QAAA,MAAMQ,yBAAAA,CAA0BR,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,iBAAiB,MAAMd,cAAAA,CAAee,UAAU,CAACV,KAAKW,IAAI,CAAA;AAChE,QAAA,IAAIF,cAAAA,EAAgB;AAClB,YAAA,MAAM,IAAI3B,gBAAAA,CAAiB,4BAAA,CAAA;AAC7B,QAAA;AAEA,QAAA,MAAM8B,kBAAkBhC,gBAAAA,CAAiB;AAAEuB,YAAAA;AAAK,SAAA,CAAA,CAAGU,YAAAA,CAAaN,cAAAA,CAAAA,CAAAA;AAEhE,QAAA,MAAMtB,MAAAA,GAAS,MAAMU,cAAAA,CAAemB,MAAM,CAACF,eAAAA,
|
|
1
|
+
{"version":3,"file":"locales.mjs","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist, { isDefault: Boolean(isDefault) });\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","Boolean","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":";;;;;;AAOA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,KAAAA;AAC7B,MAAM,EAAEC,gBAAgB,EAAE,GAAGD,MAAME,MAAM;AAEzC,MAAMC,iBAAiB,CAACC,MAAAA,GAAAA;IACtB,MAAMC,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAAC,qBAAA,CAAA;AAE9B,IAAA,OAAOD,OAAOE,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACN,MAAAA,EAAQC,KAAAA,CAAAA;AACnD,CAAA;AAEA,MAAMM,UAAAA,GAA8B;AAClC,IAAA,MAAMC,aAAYC,GAAG,EAAA;AACnB,QAAA,MAAMC,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;QAElC,MAAMC,OAAAA,GAAU,MAAMF,cAAAA,CAAeG,IAAI,EAAA;QACzC,MAAMC,gBAAAA,GAAmB,MAAMf,cAAAA,CAAea,OAAAA,CAAAA;AAE9CH,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACF,gBAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMG,cAAaR,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAMJ,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGC,gBAAgB,GAAGP,IAAAA;AAEzC,QAAA,MAAMQ,yBAAAA,CAA0BR,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,iBAAiB,MAAMd,cAAAA,CAAee,UAAU,CAACV,KAAKW,IAAI,CAAA;AAChE,QAAA,IAAIF,cAAAA,EAAgB;AAClB,YAAA,MAAM,IAAI3B,gBAAAA,CAAiB,4BAAA,CAAA;AAC7B,QAAA;AAEA,QAAA,MAAM8B,kBAAkBhC,gBAAAA,CAAiB;AAAEuB,YAAAA;AAAK,SAAA,CAAA,CAAGU,YAAAA,CAAaN,cAAAA,CAAAA,CAAAA;AAEhE,QAAA,MAAMtB,MAAAA,GAAS,MAAMU,cAAAA,CAAemB,MAAM,CAACF,eAAAA,EAAiB;AAAEN,YAAAA,SAAAA,EAAWS,OAAAA,CAAQT,SAAAA;AAAW,SAAA,CAAA;AAE5F,QAAA,IAAIA,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeqB,gBAAgB,CAAC/B,MAAAA,CAAAA;AACxC,QAAA;QAEA,MAAMgC,eAAAA,GAAkB,MAAMjC,cAAAA,CAAeC,MAAAA,CAAAA;AAE7CS,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACgB,eAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMC,cAAaxB,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAM,EAAEe,EAAE,EAAE,GAAGzB,IAAI0B,MAAM;AACzB,QAAA,MAAMpB,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGe,SAAS,GAAGrB,IAAAA;AAElC,QAAA,MAAMsB,yBAAAA,CAA0BtB,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,cAAAA,GAAiB,MAAMd,cAAAA,CAAe4B,QAAQ,CAACJ,EAAAA,CAAAA;AACrD,QAAA,IAAI,CAACV,cAAAA,EAAgB;YACnB,OAAOf,GAAAA,CAAI8B,QAAQ,CAAC,iBAAA,CAAA;AACtB,QAAA;AAEA,QAAA,MAAMC,aAAAA,GAAgB;AAAC,YAAA;AAAO,SAAA;AAC9B,QAAA,MAAMC,eAAe9C,gBAAAA,CAAiB;AAAEuB,YAAAA,IAAAA;YAAMwB,SAAAA,EAAW;AAAK,SAAA,CAAA,CAAGC,KAAKH,aAAAA,EAAeJ,OAAAA,CAAAA,CAAAA;AAErF,QAAA,MAAMQ,aAAAA,GAAgB,MAAMlC,cAAAA,CAAemC,MAAM,CAAC;AAAEX,YAAAA;SAAG,EAAGO,YAAAA,CAAAA;AAE1D,QAAA,IAAIpB,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeqB,gBAAgB,CAACa,aAAAA,CAAAA;AACxC,QAAA;QAEA,MAAMZ,eAAAA,GAAkB,MAAMjC,cAAAA,CAAe6C,aAAAA,CAAAA;AAE7CnC,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACgB,eAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMc,cAAarC,GAAG,EAAA;AACpB,QAAA,MAAM,EAAEyB,EAAE,EAAE,GAAGzB,IAAI0B,MAAM;AAEzB,QAAA,MAAMzB,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,cAAAA,GAAiB,MAAMd,cAAAA,CAAe4B,QAAQ,CAACJ,EAAAA,CAAAA;AACrD,QAAA,IAAI,CAACV,cAAAA,EAAgB;YACnB,OAAOf,GAAAA,CAAI8B,QAAQ,CAAC,iBAAA,CAAA;AACtB,QAAA;QAEA,MAAMQ,iBAAAA,GAAoB,MAAMrC,cAAAA,CAAesC,gBAAgB,EAAA;QAC/D,IAAIxB,cAAAA,CAAeE,IAAI,KAAKqB,iBAAAA,EAAmB;AAC7C,YAAA,MAAM,IAAIlD,gBAAAA,CAAiB,kCAAA,CAAA;AAC7B,QAAA;QAEA,MAAMa,cAAAA,CAAeuC,MAAM,CAAC;AAAEf,YAAAA;AAAG,SAAA,CAAA;QAEjC,MAAMF,eAAAA,GAAkB,MAAMjC,cAAAA,CAAeyB,cAAAA,CAAAA;AAE7Cf,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACgB,eAAAA,CAAAA;AAC/C,IAAA;AACF;;;;"}
|
|
@@ -13,9 +13,12 @@ var settings = {
|
|
|
13
13
|
};
|
|
14
14
|
},
|
|
15
15
|
async getSettings (ctx) {
|
|
16
|
-
const
|
|
16
|
+
const settings = await index.getService('settings').getSettings();
|
|
17
17
|
ctx.body = {
|
|
18
|
-
data
|
|
18
|
+
data: {
|
|
19
|
+
...settings,
|
|
20
|
+
aiLocalizationsAvailable: index.getService('ai-translations').hasProvider()
|
|
21
|
+
}
|
|
19
22
|
};
|
|
20
23
|
}
|
|
21
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sources":["../../../server/src/controllers/settings.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport validateSettings from '../validation/settings';\n\nexport default {\n async updateSettings(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n const data = await validateSettings(body);\n\n await getService('settings').setSettings(data);\n\n ctx.body = { data };\n },\n\n async getSettings(ctx: Context) {\n const
|
|
1
|
+
{"version":3,"file":"settings.js","sources":["../../../server/src/controllers/settings.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport validateSettings from '../validation/settings';\n\nexport default {\n async updateSettings(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n const data = await validateSettings(body);\n\n await getService('settings').setSettings(data);\n\n ctx.body = { data };\n },\n\n async getSettings(ctx: Context) {\n const settings = await getService('settings').getSettings();\n\n ctx.body = {\n data: {\n ...settings,\n aiLocalizationsAvailable: getService('ai-translations').hasProvider(),\n },\n };\n },\n};\n"],"names":["updateSettings","ctx","request","body","data","validateSettings","getService","setSettings","getSettings","settings","aiLocalizationsAvailable","hasProvider"],"mappings":";;;;;AAKA,eAAe;AACb,IAAA,MAAMA,gBAAeC,GAAY,EAAA;AAC/B,QAAA,MAAM,EACJC,OAAAA,EAAS,EAAEC,IAAI,EAAE,EAClB,GAAGF,GAAAA;QAEJ,MAAMG,IAAAA,GAAO,MAAMC,UAAAA,CAAiBF,IAAAA,CAAAA;QAEpC,MAAMG,gBAAAA,CAAW,UAAA,CAAA,CAAYC,WAAW,CAACH,IAAAA,CAAAA;AAEzCH,QAAAA,GAAAA,CAAIE,IAAI,GAAG;AAAEC,YAAAA;AAAK,SAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMI,aAAYP,GAAY,EAAA;AAC5B,QAAA,MAAMQ,QAAAA,GAAW,MAAMH,gBAAAA,CAAW,UAAA,CAAA,CAAYE,WAAW,EAAA;AAEzDP,QAAAA,GAAAA,CAAIE,IAAI,GAAG;YACTC,IAAAA,EAAM;AACJ,gBAAA,GAAGK,QAAQ;gBACXC,wBAAAA,EAA0BJ,gBAAAA,CAAW,mBAAmBK,WAAW;AACrE;AACF,SAAA;AACF,IAAA;AACF,CAAA;;;;"}
|
|
@@ -11,9 +11,12 @@ var settings = {
|
|
|
11
11
|
};
|
|
12
12
|
},
|
|
13
13
|
async getSettings (ctx) {
|
|
14
|
-
const
|
|
14
|
+
const settings = await getService('settings').getSettings();
|
|
15
15
|
ctx.body = {
|
|
16
|
-
data
|
|
16
|
+
data: {
|
|
17
|
+
...settings,
|
|
18
|
+
aiLocalizationsAvailable: getService('ai-translations').hasProvider()
|
|
19
|
+
}
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.mjs","sources":["../../../server/src/controllers/settings.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport validateSettings from '../validation/settings';\n\nexport default {\n async updateSettings(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n const data = await validateSettings(body);\n\n await getService('settings').setSettings(data);\n\n ctx.body = { data };\n },\n\n async getSettings(ctx: Context) {\n const
|
|
1
|
+
{"version":3,"file":"settings.mjs","sources":["../../../server/src/controllers/settings.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport validateSettings from '../validation/settings';\n\nexport default {\n async updateSettings(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n const data = await validateSettings(body);\n\n await getService('settings').setSettings(data);\n\n ctx.body = { data };\n },\n\n async getSettings(ctx: Context) {\n const settings = await getService('settings').getSettings();\n\n ctx.body = {\n data: {\n ...settings,\n aiLocalizationsAvailable: getService('ai-translations').hasProvider(),\n },\n };\n },\n};\n"],"names":["updateSettings","ctx","request","body","data","validateSettings","getService","setSettings","getSettings","settings","aiLocalizationsAvailable","hasProvider"],"mappings":";;;AAKA,eAAe;AACb,IAAA,MAAMA,gBAAeC,GAAY,EAAA;AAC/B,QAAA,MAAM,EACJC,OAAAA,EAAS,EAAEC,IAAI,EAAE,EAClB,GAAGF,GAAAA;QAEJ,MAAMG,IAAAA,GAAO,MAAMC,gBAAAA,CAAiBF,IAAAA,CAAAA;QAEpC,MAAMG,UAAAA,CAAW,UAAA,CAAA,CAAYC,WAAW,CAACH,IAAAA,CAAAA;AAEzCH,QAAAA,GAAAA,CAAIE,IAAI,GAAG;AAAEC,YAAAA;AAAK,SAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMI,aAAYP,GAAY,EAAA;AAC5B,QAAA,MAAMQ,QAAAA,GAAW,MAAMH,UAAAA,CAAW,UAAA,CAAA,CAAYE,WAAW,EAAA;AAEzDP,QAAAA,GAAAA,CAAIE,IAAI,GAAG;YACTC,IAAAA,EAAM;AACJ,gBAAA,GAAGK,QAAQ;gBACXC,wBAAAA,EAA0BJ,UAAAA,CAAW,mBAAmBK,WAAW;AACrE;AACF,SAAA;AACF,IAAA;AACF,CAAA;;;;"}
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../server/src/index.ts"],"sourcesContent":["import bootstrap from './bootstrap';\nimport register from './register';\nimport contentTypes from './content-types';\nimport services from './services';\nimport routes from './routes';\nimport controllers from './controllers';\n\nexport default () => ({\n register,\n bootstrap,\n routes,\n controllers,\n contentTypes,\n services,\n});\n"],"names":["register","bootstrap","routes","controllers","contentTypes","services"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../server/src/index.ts"],"sourcesContent":["import bootstrap from './bootstrap';\nimport register from './register';\nimport contentTypes from './content-types';\nimport services from './services';\nimport routes from './routes';\nimport controllers from './controllers';\n\nexport type {\n AiTranslationsProvider,\n AiTranslationsService,\n GenerateTranslationsParams,\n GenerateTranslationsResult,\n} from './services/ai-translations';\n\nexport default () => ({\n register,\n bootstrap,\n routes,\n controllers,\n contentTypes,\n services,\n});\n"],"names":["register","bootstrap","routes","controllers","contentTypes","services"],"mappings":";;;;;;;;;AAcA,YAAe,CAAA,KAAO;AACpBA,QAAAA,QAAAA;AACAC,QAAAA,SAAAA;AACAC,gBAAAA,OAAAA;AACAC,qBAAAA,OAAAA;AACAC,sBAAAA,OAAAA;AACAC,kBAAAA;AACF,KAAA,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../server/src/index.ts"],"sourcesContent":["import bootstrap from './bootstrap';\nimport register from './register';\nimport contentTypes from './content-types';\nimport services from './services';\nimport routes from './routes';\nimport controllers from './controllers';\n\nexport default () => ({\n register,\n bootstrap,\n routes,\n controllers,\n contentTypes,\n services,\n});\n"],"names":["register","bootstrap","routes","controllers","contentTypes","services"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../server/src/index.ts"],"sourcesContent":["import bootstrap from './bootstrap';\nimport register from './register';\nimport contentTypes from './content-types';\nimport services from './services';\nimport routes from './routes';\nimport controllers from './controllers';\n\nexport type {\n AiTranslationsProvider,\n AiTranslationsService,\n GenerateTranslationsParams,\n GenerateTranslationsResult,\n} from './services/ai-translations';\n\nexport default () => ({\n register,\n bootstrap,\n routes,\n controllers,\n contentTypes,\n services,\n});\n"],"names":["register","bootstrap","routes","controllers","contentTypes","services"],"mappings":";;;;;;;AAcA,YAAe,CAAA,KAAO;AACpBA,QAAAA,QAAAA;AACAC,QAAAA,SAAAA;AACAC,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;AACAC,QAAAA,YAAAA;AACAC,QAAAA;AACF,KAAA,CAAC;;;;"}
|
|
@@ -105,13 +105,11 @@ const IGNORED_FIELDS = [
|
|
|
105
105
|
return deepMerge(unsupportedFieldsOnly, targetData);
|
|
106
106
|
};
|
|
107
107
|
const createAILocalizationsService = ({ strapi })=>{
|
|
108
|
-
// TODO: add a helper function to get the AI server URL
|
|
109
|
-
const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';
|
|
110
108
|
const aiLocalizationJobsService = index.getService('ai-localization-jobs');
|
|
111
109
|
return {
|
|
112
110
|
// Async to avoid changing the signature later (there will be a db check in the future)
|
|
113
111
|
async isEnabled () {
|
|
114
|
-
if (
|
|
112
|
+
if (index.getService('ai-translations').hasProvider() === false) {
|
|
115
113
|
return false;
|
|
116
114
|
}
|
|
117
115
|
const settings = index.getService('settings');
|
|
@@ -200,22 +198,6 @@ const createAILocalizationsService = ({ strapi })=>{
|
|
|
200
198
|
targetLocales,
|
|
201
199
|
status: 'processing'
|
|
202
200
|
});
|
|
203
|
-
let token;
|
|
204
|
-
try {
|
|
205
|
-
const tokenData = await strapi.ai.admin.getAiToken();
|
|
206
|
-
token = tokenData.token;
|
|
207
|
-
} catch (error) {
|
|
208
|
-
await aiLocalizationJobsService.upsertJobForDocument({
|
|
209
|
-
documentId,
|
|
210
|
-
contentType: model,
|
|
211
|
-
sourceLocale: document.locale,
|
|
212
|
-
targetLocales,
|
|
213
|
-
status: 'failed'
|
|
214
|
-
});
|
|
215
|
-
throw new Error('Failed to retrieve AI token', {
|
|
216
|
-
cause: error instanceof Error ? error : undefined
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
201
|
/**
|
|
220
202
|
* Provide a schema to the LLM so that we can give it instructions about how to handle each
|
|
221
203
|
* type of attribute. Only keep essential schema data to avoid cluttering the context.
|
|
@@ -245,22 +227,15 @@ const createAILocalizationsService = ({ strapi })=>{
|
|
|
245
227
|
minimalAttribute
|
|
246
228
|
];
|
|
247
229
|
}));
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
headers: {
|
|
252
|
-
'Content-Type': 'application/json',
|
|
253
|
-
Authorization: `Bearer ${token}`
|
|
254
|
-
},
|
|
255
|
-
body: JSON.stringify({
|
|
256
|
-
content: translateableContent,
|
|
230
|
+
let aiResult;
|
|
231
|
+
try {
|
|
232
|
+
aiResult = await index.getService('ai-translations').generateTranslations({
|
|
257
233
|
sourceLocale: document.locale,
|
|
258
234
|
targetLocales,
|
|
235
|
+
content: translateableContent,
|
|
259
236
|
contentTypeSchema: minimalContentTypeSchema
|
|
260
|
-
})
|
|
261
|
-
})
|
|
262
|
-
if (!response.ok) {
|
|
263
|
-
strapi.log.error(`AI Localizations request failed: ${response.status} ${response.statusText}`);
|
|
237
|
+
});
|
|
238
|
+
} catch (error) {
|
|
264
239
|
await aiLocalizationJobsService.upsertJobForDocument({
|
|
265
240
|
documentId,
|
|
266
241
|
contentType: model,
|
|
@@ -268,9 +243,8 @@ const createAILocalizationsService = ({ strapi })=>{
|
|
|
268
243
|
targetLocales,
|
|
269
244
|
status: 'failed'
|
|
270
245
|
});
|
|
271
|
-
throw
|
|
246
|
+
throw error;
|
|
272
247
|
}
|
|
273
|
-
const aiResult = await response.json();
|
|
274
248
|
// Use populate-builder service for deep populate to fetch all nested fields
|
|
275
249
|
const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');
|
|
276
250
|
// @ts-expect-error - populate-builder service returns a callable function
|