@strapi/i18n 5.52.3 → 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.
- package/dist/server/audit-logs.js +39 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +37 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +6 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +6 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/constants/index.js +7 -0
- package/dist/server/constants/index.js.map +1 -1
- package/dist/server/constants/index.mjs +7 -1
- package/dist/server/constants/index.mjs.map +1 -1
- package/dist/server/controllers/locales.js +3 -1
- package/dist/server/controllers/locales.js.map +1 -1
- package/dist/server/controllers/locales.mjs +3 -1
- package/dist/server/controllers/locales.mjs.map +1 -1
- package/dist/server/services/locales.js +76 -2
- package/dist/server/services/locales.js.map +1 -1
- package/dist/server/services/locales.mjs +77 -3
- package/dist/server/services/locales.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +24 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/constants/index.d.ts +7 -1
- package/dist/server/src/constants/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +3 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/locales.d.ts +3 -1
- package/dist/server/src/services/locales.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./constants/index.js');
|
|
4
|
+
|
|
5
|
+
const registerAuditEvents = (auditLogsLifecycle)=>{
|
|
6
|
+
const localeResource = (event)=>({
|
|
7
|
+
type: 'locale',
|
|
8
|
+
id: event.localeId,
|
|
9
|
+
name: event.name,
|
|
10
|
+
code: event.code
|
|
11
|
+
});
|
|
12
|
+
auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_CREATE, (event)=>({
|
|
13
|
+
resource: localeResource(event),
|
|
14
|
+
details: {
|
|
15
|
+
isDefault: event.isDefault
|
|
16
|
+
}
|
|
17
|
+
}));
|
|
18
|
+
auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_UPDATE, (event)=>({
|
|
19
|
+
resource: localeResource(event),
|
|
20
|
+
details: {
|
|
21
|
+
changes: event.changes
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_DELETE, (event)=>({
|
|
25
|
+
resource: localeResource(event)
|
|
26
|
+
}));
|
|
27
|
+
/**
|
|
28
|
+
* The resource is the locale that became the default. `before` is null when no
|
|
29
|
+
* default was set yet.
|
|
30
|
+
*/ auditLogsLifecycle.registerEvent(index.AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, (event)=>({
|
|
31
|
+
resource: localeResource(event),
|
|
32
|
+
details: {
|
|
33
|
+
changes: event.changes
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.registerAuditEvents = registerAuditEvents;
|
|
39
|
+
//# sourceMappingURL=audit-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.js","sources":["../../server/src/audit-logs.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\n\nimport { AUDITED_EVENTS } from './constants';\n\ninterface LocaleEvent {\n localeId: number;\n name?: string;\n code: string;\n}\n\n/**\n * The code is what the rest of the system refers to a locale by, and it outlives the\n * row: the name can be edited, and the id resolves to nothing once it is deleted.\n */\ninterface LocaleResource extends Modules.AuditLogs.Resource {\n type: 'locale';\n code: string;\n}\n\nexport interface CreateDetails {\n isDefault: boolean;\n}\n\nexport interface UpdateDetails {\n changes: Partial<Record<'name', Modules.AuditLogs.FieldChange>>;\n}\n\nexport interface LocaleRef {\n id: number | null;\n code: string;\n}\n\nexport interface DefaultUpdateDetails {\n changes: Record<'defaultLocale', Modules.AuditLogs.FieldChange<LocaleRef | null>>;\n}\n\n/**\n * The part of the audit-logs lifecycle service used by this plugin.\n * The full service type lives in the Admin EE package and cannot be imported here.\n */\ninterface AuditLogsLifecycle {\n registerEvent<TDetails, TResource extends Modules.AuditLogs.Resource>(\n name: string,\n transform: Modules.AuditLogs.EventTransformer<TDetails, TResource>\n ): void;\n}\n\nexport const registerAuditEvents = (auditLogsLifecycle: AuditLogsLifecycle) => {\n const localeResource = (event: LocaleEvent): LocaleResource => ({\n type: 'locale',\n id: event.localeId,\n name: event.name,\n code: event.code,\n });\n\n auditLogsLifecycle.registerEvent<CreateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_CREATE,\n (event: LocaleEvent & CreateDetails) => ({\n resource: localeResource(event),\n details: { isDefault: event.isDefault },\n })\n );\n\n auditLogsLifecycle.registerEvent<UpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_UPDATE,\n (event: LocaleEvent & UpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n\n auditLogsLifecycle.registerEvent<undefined, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DELETE,\n (event: LocaleEvent) => ({\n resource: localeResource(event),\n })\n );\n\n /**\n * The resource is the locale that became the default. `before` is null when no\n * default was set yet.\n */\n auditLogsLifecycle.registerEvent<DefaultUpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE,\n (event: LocaleEvent & DefaultUpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n};\n"],"names":["registerAuditEvents","auditLogsLifecycle","localeResource","event","type","id","localeId","name","code","registerEvent","AUDITED_EVENTS","LOCALE_CREATE","resource","details","isDefault","LOCALE_UPDATE","changes","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;;;AA+CO,MAAMA,sBAAsB,CAACC,kBAAAA,GAAAA;IAClC,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAwC;YAC9DC,IAAAA,EAAM,QAAA;AACNC,YAAAA,EAAAA,EAAIF,MAAMG,QAAQ;AAClBC,YAAAA,IAAAA,EAAMJ,MAAMI,IAAI;AAChBC,YAAAA,IAAAA,EAAML,MAAMK;SACd,CAAA;AAEAP,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeC,aAAa,EAC5B,CAACR,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEC,gBAAAA,SAAAA,EAAWX,MAAMW;AAAU;SACxC,CAAA,CAAA;AAGFb,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeK,aAAa,EAC5B,CAACZ,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAGFf,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeO,aAAa,EAC5B,CAACd,SAAwB;AACvBS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA;SAC3B,CAAA,CAAA;AAGF;;;MAIAF,kBAAAA,CAAmBQ,aAAa,CAC9BC,oBAAAA,CAAeQ,qBAAqB,EACpC,CAACf,SAA+C;AAC9CS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AUDITED_EVENTS } from './constants/index.mjs';
|
|
2
|
+
|
|
3
|
+
const registerAuditEvents = (auditLogsLifecycle)=>{
|
|
4
|
+
const localeResource = (event)=>({
|
|
5
|
+
type: 'locale',
|
|
6
|
+
id: event.localeId,
|
|
7
|
+
name: event.name,
|
|
8
|
+
code: event.code
|
|
9
|
+
});
|
|
10
|
+
auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_CREATE, (event)=>({
|
|
11
|
+
resource: localeResource(event),
|
|
12
|
+
details: {
|
|
13
|
+
isDefault: event.isDefault
|
|
14
|
+
}
|
|
15
|
+
}));
|
|
16
|
+
auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_UPDATE, (event)=>({
|
|
17
|
+
resource: localeResource(event),
|
|
18
|
+
details: {
|
|
19
|
+
changes: event.changes
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_DELETE, (event)=>({
|
|
23
|
+
resource: localeResource(event)
|
|
24
|
+
}));
|
|
25
|
+
/**
|
|
26
|
+
* The resource is the locale that became the default. `before` is null when no
|
|
27
|
+
* default was set yet.
|
|
28
|
+
*/ auditLogsLifecycle.registerEvent(AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE, (event)=>({
|
|
29
|
+
resource: localeResource(event),
|
|
30
|
+
details: {
|
|
31
|
+
changes: event.changes
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { registerAuditEvents };
|
|
37
|
+
//# sourceMappingURL=audit-logs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.mjs","sources":["../../server/src/audit-logs.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\n\nimport { AUDITED_EVENTS } from './constants';\n\ninterface LocaleEvent {\n localeId: number;\n name?: string;\n code: string;\n}\n\n/**\n * The code is what the rest of the system refers to a locale by, and it outlives the\n * row: the name can be edited, and the id resolves to nothing once it is deleted.\n */\ninterface LocaleResource extends Modules.AuditLogs.Resource {\n type: 'locale';\n code: string;\n}\n\nexport interface CreateDetails {\n isDefault: boolean;\n}\n\nexport interface UpdateDetails {\n changes: Partial<Record<'name', Modules.AuditLogs.FieldChange>>;\n}\n\nexport interface LocaleRef {\n id: number | null;\n code: string;\n}\n\nexport interface DefaultUpdateDetails {\n changes: Record<'defaultLocale', Modules.AuditLogs.FieldChange<LocaleRef | null>>;\n}\n\n/**\n * The part of the audit-logs lifecycle service used by this plugin.\n * The full service type lives in the Admin EE package and cannot be imported here.\n */\ninterface AuditLogsLifecycle {\n registerEvent<TDetails, TResource extends Modules.AuditLogs.Resource>(\n name: string,\n transform: Modules.AuditLogs.EventTransformer<TDetails, TResource>\n ): void;\n}\n\nexport const registerAuditEvents = (auditLogsLifecycle: AuditLogsLifecycle) => {\n const localeResource = (event: LocaleEvent): LocaleResource => ({\n type: 'locale',\n id: event.localeId,\n name: event.name,\n code: event.code,\n });\n\n auditLogsLifecycle.registerEvent<CreateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_CREATE,\n (event: LocaleEvent & CreateDetails) => ({\n resource: localeResource(event),\n details: { isDefault: event.isDefault },\n })\n );\n\n auditLogsLifecycle.registerEvent<UpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_UPDATE,\n (event: LocaleEvent & UpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n\n auditLogsLifecycle.registerEvent<undefined, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DELETE,\n (event: LocaleEvent) => ({\n resource: localeResource(event),\n })\n );\n\n /**\n * The resource is the locale that became the default. `before` is null when no\n * default was set yet.\n */\n auditLogsLifecycle.registerEvent<DefaultUpdateDetails, LocaleResource>(\n AUDITED_EVENTS.LOCALE_DEFAULT_UPDATE,\n (event: LocaleEvent & DefaultUpdateDetails) => ({\n resource: localeResource(event),\n details: { changes: event.changes },\n })\n );\n};\n"],"names":["registerAuditEvents","auditLogsLifecycle","localeResource","event","type","id","localeId","name","code","registerEvent","AUDITED_EVENTS","LOCALE_CREATE","resource","details","isDefault","LOCALE_UPDATE","changes","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;AA+CO,MAAMA,sBAAsB,CAACC,kBAAAA,GAAAA;IAClC,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAwC;YAC9DC,IAAAA,EAAM,QAAA;AACNC,YAAAA,EAAAA,EAAIF,MAAMG,QAAQ;AAClBC,YAAAA,IAAAA,EAAMJ,MAAMI,IAAI;AAChBC,YAAAA,IAAAA,EAAML,MAAMK;SACd,CAAA;AAEAP,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeC,aAAa,EAC5B,CAACR,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEC,gBAAAA,SAAAA,EAAWX,MAAMW;AAAU;SACxC,CAAA,CAAA;AAGFb,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeK,aAAa,EAC5B,CAACZ,SAAwC;AACvCS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAGFf,IAAAA,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeO,aAAa,EAC5B,CAACd,SAAwB;AACvBS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA;SAC3B,CAAA,CAAA;AAGF;;;MAIAF,kBAAAA,CAAmBQ,aAAa,CAC9BC,cAAAA,CAAeQ,qBAAqB,EACpC,CAACf,SAA+C;AAC9CS,YAAAA,QAAAA,EAAUV,cAAAA,CAAeC,KAAAA,CAAAA;YACzBU,OAAAA,EAAS;AAAEG,gBAAAA,OAAAA,EAASb,MAAMa;AAAQ;SACpC,CAAA,CAAA;AAEJ;;;;"}
|
package/dist/server/bootstrap.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var fp = require('lodash/fp');
|
|
4
|
+
var auditLogs = require('./audit-logs.js');
|
|
4
5
|
var index = require('./utils/index.js');
|
|
5
6
|
|
|
6
7
|
const registerModelsHooks = ()=>{
|
|
@@ -86,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":"
|
|
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":";;;;;;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,gBAAAA,CAAW,aAAA,CAAA,CAAeC,OAAO,CAACC,oCAAoC,EAAA;AAC9E,QAAA,CAAA;QAEA,MAAMC,WAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMH,gBAAAA,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,gBAAAA,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,gBAAAA,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,WAAQN,aAAa,CAACK,IAAI,EAAEN,cAAc,CAACM,GAAAA,CAAI,CAAA;AACzD,QAAA,CAAA,CAAA;AAEF,QAAA,IAAIJ,UAAAA,EAAY;AACd,YAAA,MAAMjC,gBAAAA,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,gBAAAA,CAAW,SAAA,CAAA;AAC9C,IAAA,MAAM,EAAEyC,iBAAiB,EAAE,GAAGzC,gBAAAA,CAAW,SAAA,CAAA;IACzC,MAAM,EAAE0C,eAAe,EAAEzC,OAAO,EAAE0C,MAAM,EAAE,GAAG3C,gBAAAA,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,6BAAAA,CAAoBxD,MAAAA,CAAOyD,GAAG,CAAC,sBAAA,CAAA,CAAA;AACjC,IAAA;;AAGA,IAAA,IAAIzD,OAAO0D,EAAE,CAACC,KAAK,CAACC,SAAS,OAAO,IAAA,EAAM;AACxCtD,QAAAA,gBAAAA,CAAW,oBAAoBuD,eAAe,EAAA;AAChD,IAAA;AAEAf,IAAAA,sBAAAA,EAAAA;AACF,CAAA;;;;"}
|
|
@@ -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":"
|
|
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":"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"}
|
|
@@ -22,8 +22,15 @@ var isoLocales = require('./iso-locales.json.js');
|
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
24
|
const DEFAULT_LOCALE = getInitLocale();
|
|
25
|
+
const AUDITED_EVENTS = {
|
|
26
|
+
LOCALE_CREATE: 'locale.create',
|
|
27
|
+
LOCALE_UPDATE: 'locale.update',
|
|
28
|
+
LOCALE_DELETE: 'locale.delete',
|
|
29
|
+
LOCALE_DEFAULT_UPDATE: 'locale.default.update'
|
|
30
|
+
};
|
|
25
31
|
|
|
26
32
|
exports.isoLocales = isoLocales;
|
|
33
|
+
exports.AUDITED_EVENTS = AUDITED_EVENTS;
|
|
27
34
|
exports.DEFAULT_LOCALE = DEFAULT_LOCALE;
|
|
28
35
|
exports.getInitLocale = getInitLocale;
|
|
29
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE"],"mappings":";;;;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nconst AUDITED_EVENTS = {\n LOCALE_CREATE: 'locale.create',\n LOCALE_UPDATE: 'locale.update',\n LOCALE_DELETE: 'locale.delete',\n LOCALE_DEFAULT_UPDATE: 'locale.default.update',\n} as const;\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale, AUDITED_EVENTS };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE","AUDITED_EVENTS","LOCALE_CREATE","LOCALE_UPDATE","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;;;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA;AAEvB,MAAMY,cAAAA,GAAiB;IACrBC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,qBAAAA,EAAuB;AACzB;;;;;;;"}
|
|
@@ -20,6 +20,12 @@ import isoLocales from './iso-locales.json.mjs';
|
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
22
|
const DEFAULT_LOCALE = getInitLocale();
|
|
23
|
+
const AUDITED_EVENTS = {
|
|
24
|
+
LOCALE_CREATE: 'locale.create',
|
|
25
|
+
LOCALE_UPDATE: 'locale.update',
|
|
26
|
+
LOCALE_DELETE: 'locale.delete',
|
|
27
|
+
LOCALE_DEFAULT_UPDATE: 'locale.default.update'
|
|
28
|
+
};
|
|
23
29
|
|
|
24
|
-
export { DEFAULT_LOCALE, getInitLocale, isoLocales };
|
|
30
|
+
export { AUDITED_EVENTS, DEFAULT_LOCALE, getInitLocale, isoLocales };
|
|
25
31
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE"],"mappings":";;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/constants/index.ts"],"sourcesContent":["import isoLocales from './iso-locales.json';\n\n/**\n * Returns the default locale based either on env var or english\n * @returns {string}\n */\nconst getInitLocale = () => {\n const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;\n\n if (envLocaleCode) {\n const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);\n\n if (!matchingLocale) {\n throw new Error(\n 'Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE'\n );\n }\n\n return { ...matchingLocale };\n }\n\n return {\n code: 'en',\n name: 'English (en)',\n };\n};\n\nconst DEFAULT_LOCALE = getInitLocale();\n\nconst AUDITED_EVENTS = {\n LOCALE_CREATE: 'locale.create',\n LOCALE_UPDATE: 'locale.update',\n LOCALE_DELETE: 'locale.delete',\n LOCALE_DEFAULT_UPDATE: 'locale.default.update',\n} as const;\n\nexport { isoLocales, DEFAULT_LOCALE, getInitLocale, AUDITED_EVENTS };\n"],"names":["getInitLocale","envLocaleCode","process","env","STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE","matchingLocale","isoLocales","find","code","Error","name","DEFAULT_LOCALE","AUDITED_EVENTS","LOCALE_CREATE","LOCALE_UPDATE","LOCALE_DELETE","LOCALE_DEFAULT_UPDATE"],"mappings":";;AAEA;;;AAGC,UACKA,aAAAA,GAAgB,IAAA;AACpB,IAAA,MAAMC,aAAAA,GAAgBC,OAAAA,CAAQC,GAAG,CAACC,mCAAmC;AAErE,IAAA,IAAIH,aAAAA,EAAe;QACjB,MAAMI,cAAAA,GAAiBC,WAAWC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAAA,KAASP,aAAAA,CAAAA;AAE9D,QAAA,IAAI,CAACI,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAII,KAAAA,CACR,8FAAA,CAAA;AAEJ,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGJ;AAAe,SAAA;AAC7B,IAAA;IAEA,OAAO;QACLG,IAAAA,EAAM,IAAA;QACNE,IAAAA,EAAM;AACR,KAAA;AACF;AAEA,MAAMC,cAAAA,GAAiBX,aAAAA;AAEvB,MAAMY,cAAAA,GAAiB;IACrBC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,aAAAA,EAAe,eAAA;IACfC,qBAAAA,EAAuB;AACzB;;;;"}
|
|
@@ -52,7 +52,9 @@ const controller = {
|
|
|
52
52
|
const localeToPersist = setCreatorFields({
|
|
53
53
|
user
|
|
54
54
|
})(locale.formatLocale(localeToCreate));
|
|
55
|
-
const locale$1 = await localesService.create(localeToPersist
|
|
55
|
+
const locale$1 = await localesService.create(localeToPersist, {
|
|
56
|
+
isDefault: Boolean(isDefault)
|
|
57
|
+
});
|
|
56
58
|
if (isDefault) {
|
|
57
59
|
await localesService.setDefaultLocale(locale$1);
|
|
58
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist);\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,gBAAAA;AAC7B,MAAM,EAAEC,gBAAgB,EAAE,GAAGD,iBAAME,MAAM;AAEzC,MAAMC,iBAAiB,CAACC,MAAAA,GAAAA;IACtB,MAAMC,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAAC,qBAAA,CAAA;AAE9B,IAAA,OAAOD,OAAOE,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACN,MAAAA,EAAQC,KAAAA,CAAAA;AACnD,CAAA;AAEA,MAAMM,UAAAA,GAA8B;AAClC,IAAA,MAAMC,aAAYC,GAAG,EAAA;AACnB,QAAA,MAAMC,iBAAiBC,gBAAAA,CAAW,SAAA,CAAA;QAElC,MAAMC,OAAAA,GAAU,MAAMF,cAAAA,CAAeG,IAAI,EAAA;QACzC,MAAMC,gBAAAA,GAAmB,MAAMf,cAAAA,CAAea,OAAAA,CAAAA;AAE9CH,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACF,gBAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMG,cAAaR,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAMJ,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGC,gBAAgB,GAAGP,IAAAA;AAEzC,QAAA,MAAMQ,iCAAAA,CAA0BR,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,gBAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,iBAAiB,MAAMd,cAAAA,CAAee,UAAU,CAACV,KAAKW,IAAI,CAAA;AAChE,QAAA,IAAIF,cAAAA,EAAgB;AAClB,YAAA,MAAM,IAAI3B,gBAAAA,CAAiB,4BAAA,CAAA;AAC7B,QAAA;AAEA,QAAA,MAAM8B,kBAAkBhC,gBAAAA,CAAiB;AAAEuB,YAAAA;AAAK,SAAA,CAAA,CAAGU,mBAAAA,CAAaN,cAAAA,CAAAA,CAAAA;AAEhE,QAAA,MAAMtB,QAAAA,GAAS,MAAMU,cAAAA,CAAemB,MAAM,CAACF,eAAAA,
|
|
1
|
+
{"version":3,"file":"locales.js","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist, { isDefault: Boolean(isDefault) });\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","Boolean","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":"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"}
|
|
@@ -30,7 +30,9 @@ const controller = {
|
|
|
30
30
|
const localeToPersist = setCreatorFields({
|
|
31
31
|
user
|
|
32
32
|
})(formatLocale(localeToCreate));
|
|
33
|
-
const locale = await localesService.create(localeToPersist
|
|
33
|
+
const locale = await localesService.create(localeToPersist, {
|
|
34
|
+
isDefault: Boolean(isDefault)
|
|
35
|
+
});
|
|
34
36
|
if (isDefault) {
|
|
35
37
|
await localesService.setDefaultLocale(locale);
|
|
36
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.mjs","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist);\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":";;;;;;AAOA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,KAAAA;AAC7B,MAAM,EAAEC,gBAAgB,EAAE,GAAGD,MAAME,MAAM;AAEzC,MAAMC,iBAAiB,CAACC,MAAAA,GAAAA;IACtB,MAAMC,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAAC,qBAAA,CAAA;AAE9B,IAAA,OAAOD,OAAOE,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACN,MAAAA,EAAQC,KAAAA,CAAAA;AACnD,CAAA;AAEA,MAAMM,UAAAA,GAA8B;AAClC,IAAA,MAAMC,aAAYC,GAAG,EAAA;AACnB,QAAA,MAAMC,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;QAElC,MAAMC,OAAAA,GAAU,MAAMF,cAAAA,CAAeG,IAAI,EAAA;QACzC,MAAMC,gBAAAA,GAAmB,MAAMf,cAAAA,CAAea,OAAAA,CAAAA;AAE9CH,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACF,gBAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMG,cAAaR,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAMJ,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGC,gBAAgB,GAAGP,IAAAA;AAEzC,QAAA,MAAMQ,yBAAAA,CAA0BR,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,iBAAiB,MAAMd,cAAAA,CAAee,UAAU,CAACV,KAAKW,IAAI,CAAA;AAChE,QAAA,IAAIF,cAAAA,EAAgB;AAClB,YAAA,MAAM,IAAI3B,gBAAAA,CAAiB,4BAAA,CAAA;AAC7B,QAAA;AAEA,QAAA,MAAM8B,kBAAkBhC,gBAAAA,CAAiB;AAAEuB,YAAAA;AAAK,SAAA,CAAA,CAAGU,YAAAA,CAAaN,cAAAA,CAAAA,CAAAA;AAEhE,QAAA,MAAMtB,MAAAA,GAAS,MAAMU,cAAAA,CAAemB,MAAM,CAACF,eAAAA,
|
|
1
|
+
{"version":3,"file":"locales.mjs","sources":["../../../server/src/controllers/locales.ts"],"sourcesContent":["import * as utils from '@strapi/utils';\nimport { pick } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateCreateLocaleInput, validateUpdateLocaleInput } from '../validation/locales';\nimport { formatLocale } from '../domain/locale';\n\nconst { setCreatorFields } = utils;\nconst { ApplicationError } = utils.errors;\n\nconst sanitizeLocale = (locale: any) => {\n const model = strapi.getModel('plugin::i18n.locale');\n\n return strapi.contentAPI.sanitize.output(locale, model);\n};\n\nconst controller: Core.Controller = {\n async listLocales(ctx) {\n const localesService = getService('locales');\n\n const locales = await localesService.find();\n const sanitizedLocales = await sanitizeLocale(locales);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocales);\n },\n\n async createLocale(ctx) {\n const { user } = ctx.state;\n const body = ctx.request.body as any;\n const { isDefault, ...localeToCreate } = body;\n\n await validateCreateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findByCode(body.code);\n if (existingLocale) {\n throw new ApplicationError('This locale already exists');\n }\n\n const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));\n\n const locale = await localesService.create(localeToPersist, { isDefault: Boolean(isDefault) });\n\n if (isDefault) {\n await localesService.setDefaultLocale(locale);\n }\n\n const sanitizedLocale = await sanitizeLocale(locale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async updateLocale(ctx) {\n const { user } = ctx.state;\n const { id } = ctx.params;\n const body = ctx.request.body as any;\n const { isDefault, ...updates } = body;\n\n await validateUpdateLocaleInput(body);\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const allowedParams = ['name'];\n const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));\n\n const updatedLocale = await localesService.update({ id }, cleanUpdates);\n\n if (isDefault) {\n await localesService.setDefaultLocale(updatedLocale);\n }\n\n const sanitizedLocale = await sanitizeLocale(updatedLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n\n async deleteLocale(ctx) {\n const { id } = ctx.params;\n\n const localesService = getService('locales');\n\n const existingLocale = await localesService.findById(id);\n if (!existingLocale) {\n return ctx.notFound('locale.notFound');\n }\n\n const defaultLocaleCode = await localesService.getDefaultLocale();\n if (existingLocale.code === defaultLocaleCode) {\n throw new ApplicationError('Cannot delete the default locale');\n }\n\n await localesService.delete({ id });\n\n const sanitizedLocale = await sanitizeLocale(existingLocale);\n\n ctx.body = await localesService.setIsDefault(sanitizedLocale);\n },\n};\n\nexport default controller;\n"],"names":["setCreatorFields","utils","ApplicationError","errors","sanitizeLocale","locale","model","strapi","getModel","contentAPI","sanitize","output","controller","listLocales","ctx","localesService","getService","locales","find","sanitizedLocales","body","setIsDefault","createLocale","user","state","request","isDefault","localeToCreate","validateCreateLocaleInput","existingLocale","findByCode","code","localeToPersist","formatLocale","create","Boolean","setDefaultLocale","sanitizedLocale","updateLocale","id","params","updates","validateUpdateLocaleInput","findById","notFound","allowedParams","cleanUpdates","isEdition","pick","updatedLocale","update","deleteLocale","defaultLocaleCode","getDefaultLocale","delete"],"mappings":";;;;;;AAOA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,KAAAA;AAC7B,MAAM,EAAEC,gBAAgB,EAAE,GAAGD,MAAME,MAAM;AAEzC,MAAMC,iBAAiB,CAACC,MAAAA,GAAAA;IACtB,MAAMC,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAAC,qBAAA,CAAA;AAE9B,IAAA,OAAOD,OAAOE,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACN,MAAAA,EAAQC,KAAAA,CAAAA;AACnD,CAAA;AAEA,MAAMM,UAAAA,GAA8B;AAClC,IAAA,MAAMC,aAAYC,GAAG,EAAA;AACnB,QAAA,MAAMC,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;QAElC,MAAMC,OAAAA,GAAU,MAAMF,cAAAA,CAAeG,IAAI,EAAA;QACzC,MAAMC,gBAAAA,GAAmB,MAAMf,cAAAA,CAAea,OAAAA,CAAAA;AAE9CH,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACF,gBAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMG,cAAaR,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAMJ,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGC,gBAAgB,GAAGP,IAAAA;AAEzC,QAAA,MAAMQ,yBAAAA,CAA0BR,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,iBAAiB,MAAMd,cAAAA,CAAee,UAAU,CAACV,KAAKW,IAAI,CAAA;AAChE,QAAA,IAAIF,cAAAA,EAAgB;AAClB,YAAA,MAAM,IAAI3B,gBAAAA,CAAiB,4BAAA,CAAA;AAC7B,QAAA;AAEA,QAAA,MAAM8B,kBAAkBhC,gBAAAA,CAAiB;AAAEuB,YAAAA;AAAK,SAAA,CAAA,CAAGU,YAAAA,CAAaN,cAAAA,CAAAA,CAAAA;AAEhE,QAAA,MAAMtB,MAAAA,GAAS,MAAMU,cAAAA,CAAemB,MAAM,CAACF,eAAAA,EAAiB;AAAEN,YAAAA,SAAAA,EAAWS,OAAAA,CAAQT,SAAAA;AAAW,SAAA,CAAA;AAE5F,QAAA,IAAIA,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeqB,gBAAgB,CAAC/B,MAAAA,CAAAA;AACxC,QAAA;QAEA,MAAMgC,eAAAA,GAAkB,MAAMjC,cAAAA,CAAeC,MAAAA,CAAAA;AAE7CS,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACgB,eAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMC,cAAaxB,GAAG,EAAA;AACpB,QAAA,MAAM,EAAES,IAAI,EAAE,GAAGT,IAAIU,KAAK;AAC1B,QAAA,MAAM,EAAEe,EAAE,EAAE,GAAGzB,IAAI0B,MAAM;AACzB,QAAA,MAAMpB,IAAAA,GAAON,GAAAA,CAAIW,OAAO,CAACL,IAAI;AAC7B,QAAA,MAAM,EAAEM,SAAS,EAAE,GAAGe,SAAS,GAAGrB,IAAAA;AAElC,QAAA,MAAMsB,yBAAAA,CAA0BtB,IAAAA,CAAAA;AAEhC,QAAA,MAAML,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,cAAAA,GAAiB,MAAMd,cAAAA,CAAe4B,QAAQ,CAACJ,EAAAA,CAAAA;AACrD,QAAA,IAAI,CAACV,cAAAA,EAAgB;YACnB,OAAOf,GAAAA,CAAI8B,QAAQ,CAAC,iBAAA,CAAA;AACtB,QAAA;AAEA,QAAA,MAAMC,aAAAA,GAAgB;AAAC,YAAA;AAAO,SAAA;AAC9B,QAAA,MAAMC,eAAe9C,gBAAAA,CAAiB;AAAEuB,YAAAA,IAAAA;YAAMwB,SAAAA,EAAW;AAAK,SAAA,CAAA,CAAGC,KAAKH,aAAAA,EAAeJ,OAAAA,CAAAA,CAAAA;AAErF,QAAA,MAAMQ,aAAAA,GAAgB,MAAMlC,cAAAA,CAAemC,MAAM,CAAC;AAAEX,YAAAA;SAAG,EAAGO,YAAAA,CAAAA;AAE1D,QAAA,IAAIpB,SAAAA,EAAW;YACb,MAAMX,cAAAA,CAAeqB,gBAAgB,CAACa,aAAAA,CAAAA;AACxC,QAAA;QAEA,MAAMZ,eAAAA,GAAkB,MAAMjC,cAAAA,CAAe6C,aAAAA,CAAAA;AAE7CnC,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACgB,eAAAA,CAAAA;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAMc,cAAarC,GAAG,EAAA;AACpB,QAAA,MAAM,EAAEyB,EAAE,EAAE,GAAGzB,IAAI0B,MAAM;AAEzB,QAAA,MAAMzB,iBAAiBC,UAAAA,CAAW,SAAA,CAAA;AAElC,QAAA,MAAMa,cAAAA,GAAiB,MAAMd,cAAAA,CAAe4B,QAAQ,CAACJ,EAAAA,CAAAA;AACrD,QAAA,IAAI,CAACV,cAAAA,EAAgB;YACnB,OAAOf,GAAAA,CAAI8B,QAAQ,CAAC,iBAAA,CAAA;AACtB,QAAA;QAEA,MAAMQ,iBAAAA,GAAoB,MAAMrC,cAAAA,CAAesC,gBAAgB,EAAA;QAC/D,IAAIxB,cAAAA,CAAeE,IAAI,KAAKqB,iBAAAA,EAAmB;AAC7C,YAAA,MAAM,IAAIlD,gBAAAA,CAAiB,kCAAA,CAAA;AAC7B,QAAA;QAEA,MAAMa,cAAAA,CAAeuC,MAAM,CAAC;AAAEf,YAAAA;AAAG,SAAA,CAAA;QAEjC,MAAMF,eAAAA,GAAkB,MAAMjC,cAAAA,CAAeyB,cAAAA,CAAAA;AAE7Cf,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAML,cAAAA,CAAeM,YAAY,CAACgB,eAAAA,CAAAA;AAC/C,IAAA;AACF;;;;"}
|
|
@@ -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 })=>
|
|
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 {
|
|
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 })=>
|
|
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":";
|
|
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
|
-
|
|
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
|
|
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":"
|
|
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
|
|
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":"
|
|
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
|
|
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":"
|
|
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.
|
|
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.
|
|
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.
|
|
76
|
-
"@strapi/admin-test-utils": "5.
|
|
77
|
-
"@strapi/content-manager": "5.
|
|
78
|
-
"@strapi/database": "5.
|
|
79
|
-
"@strapi/types": "5.
|
|
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",
|