@strapi/i18n 5.53.0 → 5.54.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.
Files changed (32) hide show
  1. package/dist/server/audit-logs.js +39 -0
  2. package/dist/server/audit-logs.js.map +1 -0
  3. package/dist/server/audit-logs.mjs +37 -0
  4. package/dist/server/audit-logs.mjs.map +1 -0
  5. package/dist/server/bootstrap.js +6 -0
  6. package/dist/server/bootstrap.js.map +1 -1
  7. package/dist/server/bootstrap.mjs +6 -0
  8. package/dist/server/bootstrap.mjs.map +1 -1
  9. package/dist/server/constants/index.js +7 -0
  10. package/dist/server/constants/index.js.map +1 -1
  11. package/dist/server/constants/index.mjs +7 -1
  12. package/dist/server/constants/index.mjs.map +1 -1
  13. package/dist/server/controllers/locales.js +3 -1
  14. package/dist/server/controllers/locales.js.map +1 -1
  15. package/dist/server/controllers/locales.mjs +3 -1
  16. package/dist/server/controllers/locales.mjs.map +1 -1
  17. package/dist/server/services/locales.js +76 -2
  18. package/dist/server/services/locales.js.map +1 -1
  19. package/dist/server/services/locales.mjs +77 -3
  20. package/dist/server/services/locales.mjs.map +1 -1
  21. package/dist/server/src/audit-logs.d.ts +24 -0
  22. package/dist/server/src/audit-logs.d.ts.map +1 -0
  23. package/dist/server/src/bootstrap.d.ts.map +1 -1
  24. package/dist/server/src/constants/index.d.ts +7 -1
  25. package/dist/server/src/constants/index.d.ts.map +1 -1
  26. package/dist/server/src/index.d.ts +3 -1
  27. package/dist/server/src/index.d.ts.map +1 -1
  28. package/dist/server/src/services/index.d.ts +3 -1
  29. package/dist/server/src/services/index.d.ts.map +1 -1
  30. package/dist/server/src/services/locales.d.ts +3 -1
  31. package/dist/server/src/services/locales.d.ts.map +1 -1
  32. 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;;;;"}
@@ -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,6 +87,11 @@ 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
96
  if (strapi.ai.admin.isEnabled() === true) {
91
97
  index.getService('ai-localizations').setupMiddleware();
@@ -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.isEnabled() === true) {\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","ai","admin","isEnabled","setupMiddleware"],"mappings":"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"}
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.isEnabled() === true) {\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","isEnabled","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,6 +85,11 @@ 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
94
  if (strapi.ai.admin.isEnabled() === true) {
89
95
  getService('ai-localizations').setupMiddleware();
@@ -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.isEnabled() === true) {\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","ai","admin","isEnabled","setupMiddleware"],"mappings":"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"}
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.isEnabled() === true) {\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","isEnabled","setupMiddleware"],"mappings":";;;;AAKA,MAAMA,mBAAAA,GAAsB,IAAA;AAC1BC,IAAAA,MAAAA,CAAOC,EAAE,CAACC,UAAU,CAACC,SAAS,CAAC;QAC7BC,MAAAA,EAAQ;AAAC,YAAA;AAAsB,SAAA;QAE/B,MAAMC,WAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,UAAAA,CAAW,aAAA,CAAA,CAAeC,OAAO,CAACC,oCAAoC,EAAA;AAC9E,QAAA,CAAA;QAEA,MAAMC,WAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMH,UAAAA,CAAW,aAAA,CAAA,CAAeC,OAAO,CAACC,oCAAoC,EAAA;AAC9E,QAAA;AACF,KAAA,CAAA;AAEAR,IAAAA,MAAAA,CAAOU,SAAS,CAACC,GAAG,CAAC,OAAOC,OAAAA,EAASC,IAAAA,GAAAA;QACnC,MAAMC,MAAAA,GAA6BF,QAAQG,WAAW;AAEtD,QAAA,IAAI,CAAC;AAAC,YAAA,QAAA;AAAU,YAAA,QAAA;AAAU,YAAA,cAAA;AAAgB,YAAA;AAAU,SAAA,CAACC,QAAQ,CAACJ,OAAAA,CAAQK,MAAM,CAAA,EAAG;YAC7E,OAAOJ,IAAAA,EAAAA;AACT,QAAA;AAEA,QAAA,IAAI,CAACP,UAAAA,CAAW,eAAA,CAAA,CAAiBY,sBAAsB,CAACJ,MAAAA,CAAAA,EAAS;YAC/D,OAAOD,IAAAA,EAAAA;AACT,QAAA;;AAGA,QAAA,MAAM,EAAEM,yCAAyC,EAAEC,0BAA0B,EAAE,GAC7Ed,UAAAA,CAAW,eAAA,CAAA;QACb,MAAMe,oBAAAA,GAAuBF,yCAAAA,CAA0CL,MAAAA,CAAOQ,GAAG,CAAA;;QAGjF,MAAMC,YAAAA,GACJ,gBAAgBX,OAAAA,CAAQY,MAAM,IAAIZ,OAAAA,CAAQY,MAAM,CAACC,UAAU,GACvD,MAAMzB,MAAAA,CAAOC,EAAE,CAACyB,KAAK,CAACZ,OAAOQ,GAAG,CAAA,CAAEK,OAAO,CAAC;YACxCC,KAAAA,EAAO;gBAAEH,UAAAA,EAAYb,OAAAA,CAAQY,MAAM,CAACC;AAAW,aAAA;YAC/CI,QAAAA,EAAUR;SACZ,CAAA,GACA,IAAA;;AAGN,QAAA,MAAMS,SAAU,MAAMjB,IAAAA,EAAAA;;;;QAKtB,IAAIkB,QAAAA;;QAEJ,IAAIC,KAAAA,CAAMC,OAAO,CAACH,MAAAA,EAAQI,OAAAA,CAAAA,IAAYJ,OAAOI,OAAO,CAAC,CAAA,CAAE,EAAEC,EAAAA,EAAI;AAC3DJ,YAAAA,QAAAA,GAAWD,MAAAA,CAAOI,OAAO,CAAC,CAAA,CAAE,CAACC,EAAE;QACjC,CAAA,MAAO,IAAIL,QAAQK,EAAAA,EAAI;AACrBJ,YAAAA,QAAAA,GAAWD,OAAOK,EAAE;QACtB,CAAA,MAAO;YACL,OAAOL,MAAAA;AACT,QAAA;QAEA,MAAMM,eAAAA,GAAkB,MAAMpC,MAAAA,CAAOC,EAAE,CAACyB,KAAK,CAACZ,MAAAA,CAAOQ,GAAG,CAAA,CAAEK,OAAO,CAAC;YAChEC,KAAAA,EAAO;gBAAEO,EAAAA,EAAIJ;AAAS,aAAA;YACtBF,QAAAA,EAAUR;AACZ,SAAA,CAAA;QAEA,MAAMgB,cAAAA,GAAiBjB,2BAA2BN,MAAAA,EAAQS,YAAAA,CAAAA;QAC1D,MAAMe,aAAAA,GAAgBlB,2BAA2BN,MAAAA,EAAQsB,eAAAA,CAAAA;;QAGzD,MAAMG,UAAAA,GACJ,CAAChB,YAAAA,IACDiB,MAAAA,CAAOC,IAAI,CAACH,aAAAA,CAAAA,CAAeI,IAAI,CAAC,CAACC,GAAAA,GAAAA;YAC/B,OAAO,CAACC,QAAQN,aAAa,CAACK,IAAI,EAAEN,cAAc,CAACM,GAAAA,CAAI,CAAA;AACzD,QAAA,CAAA,CAAA;AAEF,QAAA,IAAIJ,UAAAA,EAAY;AACd,YAAA,MAAMjC,UAAAA,CAAW,eAAA,CAAA,CAAiBuC,0BAA0B,CAACT,eAAAA,EAAiBtB,MAAAA,CAAAA;AAChF,QAAA;QAEA,OAAOgB,MAAAA;AACT,IAAA,CAAA,CAAA;AACF,CAAA;AAEA,gBAAe,CAAA,UAAA;AACb,IAAA,MAAM,EAAEgB,sBAAsB,EAAE,GAAGxC,UAAAA,CAAW,SAAA,CAAA;AAC9C,IAAA,MAAM,EAAEyC,iBAAiB,EAAE,GAAGzC,UAAAA,CAAW,SAAA,CAAA;IACzC,MAAM,EAAE0C,eAAe,EAAEzC,OAAO,EAAE0C,MAAM,EAAE,GAAG3C,UAAAA,CAAW,aAAA,CAAA;;IAGxD,MAAMyC,iBAAAA,EAAAA;;AAGNC,IAAAA,eAAAA,CAAgBE,8BAA8B,EAAA;;AAG9C,IAAA,MAAM3C,QAAQ4C,mBAAmB,EAAA;AACjC5C,IAAAA,OAAAA,CAAQ6C,wBAAwB,EAAA;AAChC7C,IAAAA,OAAAA,CAAQ8C,uBAAuB,EAAA;;AAG/BJ,IAAAA,MAAAA,CAAOK,+BAA+B,EAAA;;AAGtCvD,IAAAA,mBAAAA,EAAAA;;;IAIA,IAAIC,MAAAA,CAAOuD,GAAG,CAAC,sBAAA,CAAA,EAAyB;QACtCC,mBAAAA,CAAoBxD,MAAAA,CAAOyD,GAAG,CAAC,sBAAA,CAAA,CAAA;AACjC,IAAA;;AAGA,IAAA,IAAIzD,OAAO0D,EAAE,CAACC,KAAK,CAACC,SAAS,OAAO,IAAA,EAAM;AACxCtD,QAAAA,UAAAA,CAAW,oBAAoBuD,eAAe,EAAA;AAChD,IAAA;AAEAf,IAAAA,sBAAAA,EAAAA;AACF,CAAA;;;;"}
@@ -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":"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"}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;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,EAAiB;AAAEN,YAAAA,SAAAA,EAAWS,OAAAA,CAAQT,SAAAA;AAAW,SAAA,CAAA;AAE5F,QAAA,IAAIA,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeqB,gBAAgB,CAAC/B,QAAAA,CAAAA;AACxC,QAAA;QAEA,MAAMgC,eAAAA,GAAkB,MAAMjC,cAAAA,CAAeC,QAAAA,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,iCAAAA,CAA0BtB,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,gBAAAA,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,QAAKH,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,gBAAAA,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;;;;"}
@@ -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,CAAAA;AAE3C,QAAA,IAAIN,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeoB,gBAAgB,CAAC9B,MAAAA,CAAAA;AACxC,QAAA;QAEA,MAAM+B,eAAAA,GAAkB,MAAMhC,cAAAA,CAAeC,MAAAA,CAAAA;AAE7CS,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACe,eAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMC,cAAavB,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAM,EAAEc,EAAE,EAAE,GAAGxB,IAAIyB,MAAM;AACzB,QAAA,MAAMnB,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGc,SAAS,GAAGpB,IAAAA;AAElC,QAAA,MAAMqB,yBAAAA,CAA0BrB,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,cAAAA,GAAiB,MAAMd,cAAAA,CAAe2B,QAAQ,CAACJ,EAAAA,CAAAA;AACrD,QAAA,IAAI,CAACT,cAAAA,EAAgB;YACnB,OAAOf,GAAAA,CAAI6B,QAAQ,CAAC,iBAAA,CAAA;AACtB,QAAA;AAEA,QAAA,MAAMC,aAAAA,GAAgB;AAAC,YAAA;AAAO,SAAA;AAC9B,QAAA,MAAMC,eAAe7C,gBAAAA,CAAiB;AAAEuB,YAAAA,IAAAA;YAAMuB,SAAAA,EAAW;AAAK,SAAA,CAAA,CAAGC,KAAKH,aAAAA,EAAeJ,OAAAA,CAAAA,CAAAA;AAErF,QAAA,MAAMQ,aAAAA,GAAgB,MAAMjC,cAAAA,CAAekC,MAAM,CAAC;AAAEX,YAAAA;SAAG,EAAGO,YAAAA,CAAAA;AAE1D,QAAA,IAAInB,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeoB,gBAAgB,CAACa,aAAAA,CAAAA;AACxC,QAAA;QAEA,MAAMZ,eAAAA,GAAkB,MAAMhC,cAAAA,CAAe4C,aAAAA,CAAAA;AAE7ClC,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACe,eAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMc,cAAapC,GAAG,EAAA;AACpB,QAAA,MAAM,EAAEwB,EAAE,EAAE,GAAGxB,IAAIyB,MAAM;AAEzB,QAAA,MAAMxB,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,cAAAA,GAAiB,MAAMd,cAAAA,CAAe2B,QAAQ,CAACJ,EAAAA,CAAAA;AACrD,QAAA,IAAI,CAACT,cAAAA,EAAgB;YACnB,OAAOf,GAAAA,CAAI6B,QAAQ,CAAC,iBAAA,CAAA;AACtB,QAAA;QAEA,MAAMQ,iBAAAA,GAAoB,MAAMpC,cAAAA,CAAeqC,gBAAgB,EAAA;QAC/D,IAAIvB,cAAAA,CAAeE,IAAI,KAAKoB,iBAAAA,EAAmB;AAC7C,YAAA,MAAM,IAAIjD,gBAAAA,CAAiB,kCAAA,CAAA;AAC7B,QAAA;QAEA,MAAMa,cAAAA,CAAesC,MAAM,CAAC;AAAEf,YAAAA;AAAG,SAAA,CAAA;QAEjC,MAAMF,eAAAA,GAAkB,MAAMhC,cAAAA,CAAeyB,cAAAA,CAAAA;AAE7Cf,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACe,eAAAA,CAAAA;AAC/C,IAAA;AACF;;;;"}
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":"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"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var fp = require('lodash/fp');
4
+ var utils = require('@strapi/utils');
4
5
  var index = require('../constants/index.js');
5
6
  var index$1 = require('../utils/index.js');
6
7
 
@@ -20,19 +21,47 @@ const findByCode = (code)=>strapi.db.query('plugin::i18n.locale').findOne({
20
21
  const count = (params = {})=>strapi.db.query('plugin::i18n.locale').count({
21
22
  where: params
22
23
  });
23
- const create = async (locale)=>{
24
+ const create = async (locale, { isDefault = false } = {})=>{
24
25
  const result = await strapi.db.query('plugin::i18n.locale').create({
25
26
  data: locale
26
27
  });
27
28
  index$1.getService('metrics').sendDidUpdateI18nLocalesEvent();
29
+ if (result?.id) {
30
+ await utils.emitAudit({
31
+ strapi
32
+ }, index.AUDITED_EVENTS.LOCALE_CREATE, {
33
+ localeId: result.id,
34
+ name: result.name,
35
+ code: result.code,
36
+ isDefault
37
+ });
38
+ }
28
39
  return result;
29
40
  };
30
41
  const update = async (params, updates)=>{
42
+ const previous = await strapi.db.query('plugin::i18n.locale').findOne({
43
+ where: params
44
+ });
31
45
  const result = await strapi.db.query('plugin::i18n.locale').update({
32
46
  where: params,
33
47
  data: updates
34
48
  });
35
49
  index$1.getService('metrics').sendDidUpdateI18nLocalesEvent();
50
+ if (result && previous?.name !== result.name) {
51
+ await utils.emitAudit({
52
+ strapi
53
+ }, index.AUDITED_EVENTS.LOCALE_UPDATE, {
54
+ localeId: result.id,
55
+ name: result.name,
56
+ code: result.code,
57
+ changes: {
58
+ name: {
59
+ before: previous?.name ?? null,
60
+ after: result.name
61
+ }
62
+ }
63
+ });
64
+ }
36
65
  return result;
37
66
  };
38
67
  const deleteFn = async ({ id })=>{
@@ -47,14 +76,59 @@ const deleteFn = async ({ id })=>{
47
76
  }
48
77
  });
49
78
  index$1.getService('metrics').sendDidUpdateI18nLocalesEvent();
79
+ await utils.emitAudit({
80
+ strapi
81
+ }, index.AUDITED_EVENTS.LOCALE_DELETE, {
82
+ localeId: localeToDelete.id,
83
+ name: localeToDelete.name,
84
+ code: localeToDelete.code
85
+ });
50
86
  return result;
51
87
  }
52
88
  return localeToDelete;
53
89
  };
54
- const setDefaultLocale = ({ code })=>index$1.getCoreStore().set({
90
+ const setDefaultLocale = async ({ code })=>{
91
+ const previousCode = await getDefaultLocale();
92
+ const hasChanged = previousCode !== code;
93
+ // Look up the rows before the write: if this fails afterwards, the default is already
94
+ // switched and nothing recorded it.
95
+ const [previous, next] = hasChanged ? await Promise.all([
96
+ previousCode ? findByCode(previousCode) : null,
97
+ findByCode(code)
98
+ ]) : [
99
+ null,
100
+ null
101
+ ];
102
+ // set() is typed void but resolves to the store row. Returned so callers that used it
103
+ // keep working.
104
+ const result = await index$1.getCoreStore().set({
55
105
  key: 'default_locale',
56
106
  value: code
57
107
  });
108
+ if (hasChanged && next?.id) {
109
+ const before = previousCode ? {
110
+ id: previous?.id ?? null,
111
+ code: previousCode
112
+ } : null;
113
+ await utils.emitAudit({
114
+ strapi
115
+ }, index.AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, {
116
+ localeId: next.id,
117
+ name: next.name,
118
+ code: next.code,
119
+ changes: {
120
+ defaultLocale: {
121
+ before,
122
+ after: {
123
+ id: next.id,
124
+ code: next.code
125
+ }
126
+ }
127
+ }
128
+ });
129
+ }
130
+ return result;
131
+ };
58
132
  const getDefaultLocale = ()=>index$1.getCoreStore().get({
59
133
  key: 'default_locale'
60
134
  });
@@ -1 +1 @@
1
- {"version":3,"file":"locales.js","sources":["../../../server/src/services/locales.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { DEFAULT_LOCALE } from '../constants';\nimport { getService, getCoreStore } from '../utils';\n\nconst find = (params: any = {}) =>\n strapi.db.query('plugin::i18n.locale').findMany({ where: params });\n\nconst findById = (id: any) => strapi.db.query('plugin::i18n.locale').findOne({ where: { id } });\n\nconst findByCode = (code: any) =>\n strapi.db.query('plugin::i18n.locale').findOne({ where: { code } });\n\nconst count = (params: any = {}) => strapi.db.query('plugin::i18n.locale').count({ where: params });\n\nconst create = async (locale: any) => {\n const result = await strapi.db.query('plugin::i18n.locale').create({ data: locale });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst update = async (params: any, updates: any) => {\n const result = await strapi.db\n .query('plugin::i18n.locale')\n .update({ where: params, data: updates });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst deleteFn = async ({ id }: any) => {\n const localeToDelete = await findById(id);\n\n if (localeToDelete) {\n await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });\n const result = await strapi.db.query('plugin::i18n.locale').delete({ where: { id } });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n }\n\n return localeToDelete;\n};\n\nconst setDefaultLocale = ({ code }: any) =>\n getCoreStore().set({ key: 'default_locale', value: code });\n\nconst getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });\n\nconst setIsDefault = async (locales: any) => {\n if (isNil(locales)) {\n return locales;\n }\n\n const actualDefault = await getDefaultLocale();\n\n if (Array.isArray(locales)) {\n return locales.map((locale) => ({ ...locale, isDefault: actualDefault === locale.code }));\n }\n // single locale\n return { ...locales, isDefault: actualDefault === locales.code };\n};\n\nconst initDefaultLocale = async () => {\n const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();\n if (existingLocalesNb === 0) {\n await create(DEFAULT_LOCALE);\n await setDefaultLocale({ code: DEFAULT_LOCALE.code });\n }\n};\n\nconst deleteAllLocalizedEntriesFor = async ({ locale }: any) => {\n const { isLocalizedContentType } = getService('content-types');\n\n const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);\n\n for (const model of localizedModels) {\n // FIXME: delete many content & their associations\n await strapi.db.query(model.uid).deleteMany({ where: { locale } });\n }\n};\n\nconst locales = () => ({\n find,\n findById,\n findByCode,\n create,\n update,\n count,\n setDefaultLocale,\n getDefaultLocale,\n setIsDefault,\n delete: deleteFn,\n initDefaultLocale,\n});\n\ntype LocaleService = typeof locales;\n\nexport default locales;\nexport type { LocaleService };\n"],"names":["find","params","strapi","db","query","findMany","where","findById","id","findOne","findByCode","code","count","create","locale","result","data","getService","sendDidUpdateI18nLocalesEvent","update","updates","deleteFn","localeToDelete","deleteAllLocalizedEntriesFor","delete","setDefaultLocale","getCoreStore","set","key","value","getDefaultLocale","get","setIsDefault","locales","isNil","actualDefault","Array","isArray","map","isDefault","initDefaultLocale","existingLocalesNb","DEFAULT_LOCALE","isLocalizedContentType","localizedModels","Object","values","contentTypes","filter","model","uid","deleteMany"],"mappings":"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"}
1
+ {"version":3,"file":"locales.js","sources":["../../../server/src/services/locales.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { emitAudit } from '@strapi/utils';\nimport { AUDITED_EVENTS, DEFAULT_LOCALE } from '../constants';\nimport { getService, getCoreStore } from '../utils';\n\nconst find = (params: any = {}) =>\n strapi.db.query('plugin::i18n.locale').findMany({ where: params });\n\nconst findById = (id: any) => strapi.db.query('plugin::i18n.locale').findOne({ where: { id } });\n\nconst findByCode = (code: any) =>\n strapi.db.query('plugin::i18n.locale').findOne({ where: { code } });\n\nconst count = (params: any = {}) => strapi.db.query('plugin::i18n.locale').count({ where: params });\n\nconst create = async (locale: any, { isDefault = false }: { isDefault?: boolean } = {}) => {\n const result = await strapi.db.query('plugin::i18n.locale').create({ data: locale });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n if (result?.id) {\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_CREATE, {\n localeId: result.id,\n name: result.name,\n code: result.code,\n isDefault,\n });\n }\n\n return result;\n};\n\nconst update = async (params: any, updates: any) => {\n const previous = await strapi.db.query('plugin::i18n.locale').findOne({ where: params });\n\n const result = await strapi.db\n .query('plugin::i18n.locale')\n .update({ where: params, data: updates });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n if (result && previous?.name !== result.name) {\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_UPDATE, {\n localeId: result.id,\n name: result.name,\n code: result.code,\n changes: { name: { before: previous?.name ?? null, after: result.name } },\n });\n }\n\n return result;\n};\n\nconst deleteFn = async ({ id }: any) => {\n const localeToDelete = await findById(id);\n\n if (localeToDelete) {\n await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });\n const result = await strapi.db.query('plugin::i18n.locale').delete({ where: { id } });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_DELETE, {\n localeId: localeToDelete.id,\n name: localeToDelete.name,\n code: localeToDelete.code,\n });\n\n return result;\n }\n\n return localeToDelete;\n};\n\nconst setDefaultLocale = async ({ code }: any) => {\n const previousCode = await getDefaultLocale();\n const hasChanged = previousCode !== code;\n\n // Look up the rows before the write: if this fails afterwards, the default is already\n // switched and nothing recorded it.\n const [previous, next] = hasChanged\n ? await Promise.all([previousCode ? findByCode(previousCode) : null, findByCode(code)])\n : [null, null];\n\n // set() is typed void but resolves to the store row. Returned so callers that used it\n // keep working.\n const result = await getCoreStore().set({ key: 'default_locale', value: code });\n\n if (hasChanged && next?.id) {\n const before = previousCode ? { id: previous?.id ?? null, code: previousCode } : null;\n\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, {\n localeId: next.id,\n name: next.name,\n code: next.code,\n changes: { defaultLocale: { before, after: { id: next.id, code: next.code } } },\n });\n }\n\n return result;\n};\n\nconst getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });\n\nconst setIsDefault = async (locales: any) => {\n if (isNil(locales)) {\n return locales;\n }\n\n const actualDefault = await getDefaultLocale();\n\n if (Array.isArray(locales)) {\n return locales.map((locale) => ({ ...locale, isDefault: actualDefault === locale.code }));\n }\n // single locale\n return { ...locales, isDefault: actualDefault === locales.code };\n};\n\nconst initDefaultLocale = async () => {\n const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();\n if (existingLocalesNb === 0) {\n await create(DEFAULT_LOCALE);\n await setDefaultLocale({ code: DEFAULT_LOCALE.code });\n }\n};\n\nconst deleteAllLocalizedEntriesFor = async ({ locale }: any) => {\n const { isLocalizedContentType } = getService('content-types');\n\n const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);\n\n for (const model of localizedModels) {\n // FIXME: delete many content & their associations\n await strapi.db.query(model.uid).deleteMany({ where: { locale } });\n }\n};\n\nconst locales = () => ({\n find,\n findById,\n findByCode,\n create,\n update,\n count,\n setDefaultLocale,\n getDefaultLocale,\n setIsDefault,\n delete: deleteFn,\n initDefaultLocale,\n});\n\ntype LocaleService = typeof locales;\n\nexport default locales;\nexport type { LocaleService };\n"],"names":["find","params","strapi","db","query","findMany","where","findById","id","findOne","findByCode","code","count","create","locale","isDefault","result","data","getService","sendDidUpdateI18nLocalesEvent","emitAudit","AUDITED_EVENTS","LOCALE_CREATE","localeId","name","update","updates","previous","LOCALE_UPDATE","changes","before","after","deleteFn","localeToDelete","deleteAllLocalizedEntriesFor","delete","LOCALE_DELETE","setDefaultLocale","previousCode","getDefaultLocale","hasChanged","next","Promise","all","getCoreStore","set","key","value","LOCALE_DEFAULT_UPDATE","defaultLocale","get","setIsDefault","locales","isNil","actualDefault","Array","isArray","map","initDefaultLocale","existingLocalesNb","DEFAULT_LOCALE","isLocalizedContentType","localizedModels","Object","values","contentTypes","filter","model","uid","deleteMany"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { isNil } from 'lodash/fp';
2
- import { DEFAULT_LOCALE } from '../constants/index.mjs';
2
+ import { emitAudit } from '@strapi/utils';
3
+ import { DEFAULT_LOCALE, AUDITED_EVENTS } from '../constants/index.mjs';
3
4
  import { getService, getCoreStore } from '../utils/index.mjs';
4
5
 
5
6
  const find = (params = {})=>strapi.db.query('plugin::i18n.locale').findMany({
@@ -18,19 +19,47 @@ const findByCode = (code)=>strapi.db.query('plugin::i18n.locale').findOne({
18
19
  const count = (params = {})=>strapi.db.query('plugin::i18n.locale').count({
19
20
  where: params
20
21
  });
21
- const create = async (locale)=>{
22
+ const create = async (locale, { isDefault = false } = {})=>{
22
23
  const result = await strapi.db.query('plugin::i18n.locale').create({
23
24
  data: locale
24
25
  });
25
26
  getService('metrics').sendDidUpdateI18nLocalesEvent();
27
+ if (result?.id) {
28
+ await emitAudit({
29
+ strapi
30
+ }, AUDITED_EVENTS.LOCALE_CREATE, {
31
+ localeId: result.id,
32
+ name: result.name,
33
+ code: result.code,
34
+ isDefault
35
+ });
36
+ }
26
37
  return result;
27
38
  };
28
39
  const update = async (params, updates)=>{
40
+ const previous = await strapi.db.query('plugin::i18n.locale').findOne({
41
+ where: params
42
+ });
29
43
  const result = await strapi.db.query('plugin::i18n.locale').update({
30
44
  where: params,
31
45
  data: updates
32
46
  });
33
47
  getService('metrics').sendDidUpdateI18nLocalesEvent();
48
+ if (result && previous?.name !== result.name) {
49
+ await emitAudit({
50
+ strapi
51
+ }, AUDITED_EVENTS.LOCALE_UPDATE, {
52
+ localeId: result.id,
53
+ name: result.name,
54
+ code: result.code,
55
+ changes: {
56
+ name: {
57
+ before: previous?.name ?? null,
58
+ after: result.name
59
+ }
60
+ }
61
+ });
62
+ }
34
63
  return result;
35
64
  };
36
65
  const deleteFn = async ({ id })=>{
@@ -45,14 +74,59 @@ const deleteFn = async ({ id })=>{
45
74
  }
46
75
  });
47
76
  getService('metrics').sendDidUpdateI18nLocalesEvent();
77
+ await emitAudit({
78
+ strapi
79
+ }, AUDITED_EVENTS.LOCALE_DELETE, {
80
+ localeId: localeToDelete.id,
81
+ name: localeToDelete.name,
82
+ code: localeToDelete.code
83
+ });
48
84
  return result;
49
85
  }
50
86
  return localeToDelete;
51
87
  };
52
- const setDefaultLocale = ({ code })=>getCoreStore().set({
88
+ const setDefaultLocale = async ({ code })=>{
89
+ const previousCode = await getDefaultLocale();
90
+ const hasChanged = previousCode !== code;
91
+ // Look up the rows before the write: if this fails afterwards, the default is already
92
+ // switched and nothing recorded it.
93
+ const [previous, next] = hasChanged ? await Promise.all([
94
+ previousCode ? findByCode(previousCode) : null,
95
+ findByCode(code)
96
+ ]) : [
97
+ null,
98
+ null
99
+ ];
100
+ // set() is typed void but resolves to the store row. Returned so callers that used it
101
+ // keep working.
102
+ const result = await getCoreStore().set({
53
103
  key: 'default_locale',
54
104
  value: code
55
105
  });
106
+ if (hasChanged && next?.id) {
107
+ const before = previousCode ? {
108
+ id: previous?.id ?? null,
109
+ code: previousCode
110
+ } : null;
111
+ await emitAudit({
112
+ strapi
113
+ }, AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, {
114
+ localeId: next.id,
115
+ name: next.name,
116
+ code: next.code,
117
+ changes: {
118
+ defaultLocale: {
119
+ before,
120
+ after: {
121
+ id: next.id,
122
+ code: next.code
123
+ }
124
+ }
125
+ }
126
+ });
127
+ }
128
+ return result;
129
+ };
56
130
  const getDefaultLocale = ()=>getCoreStore().get({
57
131
  key: 'default_locale'
58
132
  });
@@ -1 +1 @@
1
- {"version":3,"file":"locales.mjs","sources":["../../../server/src/services/locales.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { DEFAULT_LOCALE } from '../constants';\nimport { getService, getCoreStore } from '../utils';\n\nconst find = (params: any = {}) =>\n strapi.db.query('plugin::i18n.locale').findMany({ where: params });\n\nconst findById = (id: any) => strapi.db.query('plugin::i18n.locale').findOne({ where: { id } });\n\nconst findByCode = (code: any) =>\n strapi.db.query('plugin::i18n.locale').findOne({ where: { code } });\n\nconst count = (params: any = {}) => strapi.db.query('plugin::i18n.locale').count({ where: params });\n\nconst create = async (locale: any) => {\n const result = await strapi.db.query('plugin::i18n.locale').create({ data: locale });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst update = async (params: any, updates: any) => {\n const result = await strapi.db\n .query('plugin::i18n.locale')\n .update({ where: params, data: updates });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n};\n\nconst deleteFn = async ({ id }: any) => {\n const localeToDelete = await findById(id);\n\n if (localeToDelete) {\n await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });\n const result = await strapi.db.query('plugin::i18n.locale').delete({ where: { id } });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n return result;\n }\n\n return localeToDelete;\n};\n\nconst setDefaultLocale = ({ code }: any) =>\n getCoreStore().set({ key: 'default_locale', value: code });\n\nconst getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });\n\nconst setIsDefault = async (locales: any) => {\n if (isNil(locales)) {\n return locales;\n }\n\n const actualDefault = await getDefaultLocale();\n\n if (Array.isArray(locales)) {\n return locales.map((locale) => ({ ...locale, isDefault: actualDefault === locale.code }));\n }\n // single locale\n return { ...locales, isDefault: actualDefault === locales.code };\n};\n\nconst initDefaultLocale = async () => {\n const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();\n if (existingLocalesNb === 0) {\n await create(DEFAULT_LOCALE);\n await setDefaultLocale({ code: DEFAULT_LOCALE.code });\n }\n};\n\nconst deleteAllLocalizedEntriesFor = async ({ locale }: any) => {\n const { isLocalizedContentType } = getService('content-types');\n\n const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);\n\n for (const model of localizedModels) {\n // FIXME: delete many content & their associations\n await strapi.db.query(model.uid).deleteMany({ where: { locale } });\n }\n};\n\nconst locales = () => ({\n find,\n findById,\n findByCode,\n create,\n update,\n count,\n setDefaultLocale,\n getDefaultLocale,\n setIsDefault,\n delete: deleteFn,\n initDefaultLocale,\n});\n\ntype LocaleService = typeof locales;\n\nexport default locales;\nexport type { LocaleService };\n"],"names":["find","params","strapi","db","query","findMany","where","findById","id","findOne","findByCode","code","count","create","locale","result","data","getService","sendDidUpdateI18nLocalesEvent","update","updates","deleteFn","localeToDelete","deleteAllLocalizedEntriesFor","delete","setDefaultLocale","getCoreStore","set","key","value","getDefaultLocale","get","setIsDefault","locales","isNil","actualDefault","Array","isArray","map","isDefault","initDefaultLocale","existingLocalesNb","DEFAULT_LOCALE","isLocalizedContentType","localizedModels","Object","values","contentTypes","filter","model","uid","deleteMany"],"mappings":"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"}
1
+ {"version":3,"file":"locales.mjs","sources":["../../../server/src/services/locales.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { emitAudit } from '@strapi/utils';\nimport { AUDITED_EVENTS, DEFAULT_LOCALE } from '../constants';\nimport { getService, getCoreStore } from '../utils';\n\nconst find = (params: any = {}) =>\n strapi.db.query('plugin::i18n.locale').findMany({ where: params });\n\nconst findById = (id: any) => strapi.db.query('plugin::i18n.locale').findOne({ where: { id } });\n\nconst findByCode = (code: any) =>\n strapi.db.query('plugin::i18n.locale').findOne({ where: { code } });\n\nconst count = (params: any = {}) => strapi.db.query('plugin::i18n.locale').count({ where: params });\n\nconst create = async (locale: any, { isDefault = false }: { isDefault?: boolean } = {}) => {\n const result = await strapi.db.query('plugin::i18n.locale').create({ data: locale });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n if (result?.id) {\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_CREATE, {\n localeId: result.id,\n name: result.name,\n code: result.code,\n isDefault,\n });\n }\n\n return result;\n};\n\nconst update = async (params: any, updates: any) => {\n const previous = await strapi.db.query('plugin::i18n.locale').findOne({ where: params });\n\n const result = await strapi.db\n .query('plugin::i18n.locale')\n .update({ where: params, data: updates });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n if (result && previous?.name !== result.name) {\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_UPDATE, {\n localeId: result.id,\n name: result.name,\n code: result.code,\n changes: { name: { before: previous?.name ?? null, after: result.name } },\n });\n }\n\n return result;\n};\n\nconst deleteFn = async ({ id }: any) => {\n const localeToDelete = await findById(id);\n\n if (localeToDelete) {\n await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });\n const result = await strapi.db.query('plugin::i18n.locale').delete({ where: { id } });\n\n getService('metrics').sendDidUpdateI18nLocalesEvent();\n\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_DELETE, {\n localeId: localeToDelete.id,\n name: localeToDelete.name,\n code: localeToDelete.code,\n });\n\n return result;\n }\n\n return localeToDelete;\n};\n\nconst setDefaultLocale = async ({ code }: any) => {\n const previousCode = await getDefaultLocale();\n const hasChanged = previousCode !== code;\n\n // Look up the rows before the write: if this fails afterwards, the default is already\n // switched and nothing recorded it.\n const [previous, next] = hasChanged\n ? await Promise.all([previousCode ? findByCode(previousCode) : null, findByCode(code)])\n : [null, null];\n\n // set() is typed void but resolves to the store row. Returned so callers that used it\n // keep working.\n const result = await getCoreStore().set({ key: 'default_locale', value: code });\n\n if (hasChanged && next?.id) {\n const before = previousCode ? { id: previous?.id ?? null, code: previousCode } : null;\n\n await emitAudit({ strapi }, AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, {\n localeId: next.id,\n name: next.name,\n code: next.code,\n changes: { defaultLocale: { before, after: { id: next.id, code: next.code } } },\n });\n }\n\n return result;\n};\n\nconst getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });\n\nconst setIsDefault = async (locales: any) => {\n if (isNil(locales)) {\n return locales;\n }\n\n const actualDefault = await getDefaultLocale();\n\n if (Array.isArray(locales)) {\n return locales.map((locale) => ({ ...locale, isDefault: actualDefault === locale.code }));\n }\n // single locale\n return { ...locales, isDefault: actualDefault === locales.code };\n};\n\nconst initDefaultLocale = async () => {\n const existingLocalesNb = await strapi.db.query('plugin::i18n.locale').count();\n if (existingLocalesNb === 0) {\n await create(DEFAULT_LOCALE);\n await setDefaultLocale({ code: DEFAULT_LOCALE.code });\n }\n};\n\nconst deleteAllLocalizedEntriesFor = async ({ locale }: any) => {\n const { isLocalizedContentType } = getService('content-types');\n\n const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType);\n\n for (const model of localizedModels) {\n // FIXME: delete many content & their associations\n await strapi.db.query(model.uid).deleteMany({ where: { locale } });\n }\n};\n\nconst locales = () => ({\n find,\n findById,\n findByCode,\n create,\n update,\n count,\n setDefaultLocale,\n getDefaultLocale,\n setIsDefault,\n delete: deleteFn,\n initDefaultLocale,\n});\n\ntype LocaleService = typeof locales;\n\nexport default locales;\nexport type { LocaleService };\n"],"names":["find","params","strapi","db","query","findMany","where","findById","id","findOne","findByCode","code","count","create","locale","isDefault","result","data","getService","sendDidUpdateI18nLocalesEvent","emitAudit","AUDITED_EVENTS","LOCALE_CREATE","localeId","name","update","updates","previous","LOCALE_UPDATE","changes","before","after","deleteFn","localeToDelete","deleteAllLocalizedEntriesFor","delete","LOCALE_DELETE","setDefaultLocale","previousCode","getDefaultLocale","hasChanged","next","Promise","all","getCoreStore","set","key","value","LOCALE_DEFAULT_UPDATE","defaultLocale","get","setIsDefault","locales","isNil","actualDefault","Array","isArray","map","initDefaultLocale","existingLocalesNb","DEFAULT_LOCALE","isLocalizedContentType","localizedModels","Object","values","contentTypes","filter","model","uid","deleteMany"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Modules } from '@strapi/types';
2
+ export interface CreateDetails {
3
+ isDefault: boolean;
4
+ }
5
+ export interface UpdateDetails {
6
+ changes: Partial<Record<'name', Modules.AuditLogs.FieldChange>>;
7
+ }
8
+ export interface LocaleRef {
9
+ id: number | null;
10
+ code: string;
11
+ }
12
+ export interface DefaultUpdateDetails {
13
+ changes: Record<'defaultLocale', Modules.AuditLogs.FieldChange<LocaleRef | null>>;
14
+ }
15
+ /**
16
+ * The part of the audit-logs lifecycle service used by this plugin.
17
+ * The full service type lives in the Admin EE package and cannot be imported here.
18
+ */
19
+ interface AuditLogsLifecycle {
20
+ registerEvent<TDetails, TResource extends Modules.AuditLogs.Resource>(name: string, transform: Modules.AuditLogs.EventTransformer<TDetails, TResource>): void;
21
+ }
22
+ export declare const registerAuditEvents: (auditLogsLifecycle: AuditLogsLifecycle) => void;
23
+ export {};
24
+ //# sourceMappingURL=audit-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logs.d.ts","sourceRoot":"","sources":["../../../server/src/audit-logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAmB7C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;CACnF;AAED;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,aAAa,CAAC,QAAQ,EAAE,SAAS,SAAS,OAAO,CAAC,SAAS,CAAC,QAAQ,EAClE,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACjE,IAAI,CAAC;CACT;AAED,eAAO,MAAM,mBAAmB,GAAI,oBAAoB,kBAAkB,SA0CzE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":";AAiFA,wBA4BE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":";AAkFA,wBAkCE"}
@@ -11,5 +11,11 @@ declare const DEFAULT_LOCALE: {
11
11
  code: string;
12
12
  name: string;
13
13
  };
14
- export { isoLocales, DEFAULT_LOCALE, getInitLocale };
14
+ declare const AUDITED_EVENTS: {
15
+ readonly LOCALE_CREATE: "locale.create";
16
+ readonly LOCALE_UPDATE: "locale.update";
17
+ readonly LOCALE_DELETE: "locale.delete";
18
+ readonly LOCALE_DEFAULT_UPDATE: "locale.default.update";
19
+ };
20
+ export { isoLocales, DEFAULT_LOCALE, getInitLocale, AUDITED_EVENTS };
15
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAE5C;;;GAGG;AACH,QAAA,MAAM,aAAa;;;CAmBlB,CAAC;AAEF,QAAA,MAAM,cAAc;;;CAAkB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAE5C;;;GAGG;AACH,QAAA,MAAM,aAAa;;;CAmBlB,CAAC;AAEF,QAAA,MAAM,cAAc;;;CAAkB,CAAC;AAEvC,QAAA,MAAM,cAAc;;;;;CAKV,CAAC;AAEX,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
@@ -131,7 +131,9 @@ declare const _default: () => {
131
131
  find: (params?: any) => Promise<any[]>;
132
132
  findById: (id: any) => Promise<any>;
133
133
  findByCode: (code: any) => Promise<any>;
134
- create: (locale: any) => Promise<any>;
134
+ create: (locale: any, { isDefault }?: {
135
+ isDefault?: boolean;
136
+ }) => Promise<any>;
135
137
  update: (params: any, updates: any) => Promise<any>;
136
138
  count: (params?: any) => Promise<number>;
137
139
  setDefaultLocale: ({ code }: any) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAemW,CAAC;;;;;;;;;;;;;;;;;;;;;AARpW,wBAOG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAe0V,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;AARpW,wBAOG"}
@@ -51,7 +51,9 @@ declare const _default: {
51
51
  find: (params?: any) => Promise<any[]>;
52
52
  findById: (id: any) => Promise<any>;
53
53
  findByCode: (code: any) => Promise<any>;
54
- create: (locale: any) => Promise<any>;
54
+ create: (locale: any, { isDefault }?: {
55
+ isDefault?: boolean;
56
+ }) => Promise<any>;
55
57
  update: (params: any, updates: any) => Promise<any>;
56
58
  count: (params?: any) => Promise<number>;
57
59
  setDefaultLocale: ({ code }: any) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoBS,CAAC;;;;;;;;;;;;;;;;;;;;AARV,wBAYE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoBE,CAAD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAQ,CAAC;;;;;;;;;;;;;;;;;;;;AARV,wBAYE"}
@@ -2,7 +2,9 @@ declare const locales: () => {
2
2
  find: (params?: any) => Promise<any[]>;
3
3
  findById: (id: any) => Promise<any>;
4
4
  findByCode: (code: any) => Promise<any>;
5
- create: (locale: any) => Promise<any>;
5
+ create: (locale: any, { isDefault }?: {
6
+ isDefault?: boolean;
7
+ }) => Promise<any>;
6
8
  update: (params: any, updates: any) => Promise<any>;
7
9
  count: (params?: any) => Promise<number>;
8
10
  setDefaultLocale: ({ code }: any) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../server/src/services/locales.ts"],"names":[],"mappings":"AAqFA,QAAA,MAAM,OAAO;oBAjFS,GAAG;mBAGH,GAAG;uBAEC,GAAG;qBAKC,GAAG;qBAQH,GAAG,WAAW,GAAG;qBAVxB,GAAG;iCAmCU,GAAG;;4BAKF,GAAG;qBApBR,GAAG;;CAiEjC,CAAC;AAEH,KAAK,aAAa,GAAG,OAAO,OAAO,CAAC;AAEpC,eAAe,OAAO,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../server/src/services/locales.ts"],"names":[],"mappings":"AAyIA,QAAA,MAAM,OAAO;oBApIS,GAAG;mBAGH,GAAG;uBAEC,GAAG;qBAKC,GAAG,kBAAyB;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;qBAiBnD,GAAG,WAAW,GAAG;qBAnBxB,GAAG;iCA6DgB,GAAG;;4BA8BR,GAAG;qBAnDR,GAAG;;CAgGjC,CAAC;AAEH,KAAK,aAAa,GAAG,OAAO,OAAO,CAAC;AAEpC,eAAe,OAAO,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/i18n",
3
- "version": "5.53.0",
3
+ "version": "5.54.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,7 +63,7 @@
63
63
  "@reduxjs/toolkit": "1.9.7",
64
64
  "@strapi/design-system": "2.2.4",
65
65
  "@strapi/icons": "2.2.4",
66
- "@strapi/utils": "5.53.0",
66
+ "@strapi/utils": "5.54.0",
67
67
  "lodash": "4.18.1",
68
68
  "qs": "6.15.3",
69
69
  "react-intl": "6.6.2",
@@ -72,11 +72,11 @@
72
72
  "zod": "4.4.3"
73
73
  },
74
74
  "devDependencies": {
75
- "@strapi/admin": "5.53.0",
76
- "@strapi/admin-test-utils": "5.53.0",
77
- "@strapi/content-manager": "5.53.0",
78
- "@strapi/database": "5.53.0",
79
- "@strapi/types": "5.53.0",
75
+ "@strapi/admin": "5.54.0",
76
+ "@strapi/admin-test-utils": "5.54.0",
77
+ "@strapi/content-manager": "5.54.0",
78
+ "@strapi/database": "5.54.0",
79
+ "@strapi/types": "5.54.0",
80
80
  "@testing-library/dom": "10.4.1",
81
81
  "@testing-library/jest-dom": "6.9.1",
82
82
  "@testing-library/react": "16.3.2",