@strapi/i18n 5.29.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/CMHeaderActions.js +85 -11
 - package/dist/admin/components/CMHeaderActions.js.map +1 -1
 - package/dist/admin/components/CMHeaderActions.mjs +88 -14
 - package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
 - package/dist/admin/hooks/useAILocalizationJobsPolling.js +110 -0
 - package/dist/admin/hooks/useAILocalizationJobsPolling.js.map +1 -0
 - package/dist/admin/hooks/useAILocalizationJobsPolling.mjs +89 -0
 - package/dist/admin/hooks/useAILocalizationJobsPolling.mjs.map +1 -0
 - package/dist/admin/hooks/useI18n.js +4 -4
 - package/dist/admin/hooks/useI18n.js.map +1 -1
 - package/dist/admin/hooks/useI18n.mjs +4 -4
 - package/dist/admin/hooks/useI18n.mjs.map +1 -1
 - package/dist/admin/pages/SettingsPage.js +1 -1
 - package/dist/admin/pages/SettingsPage.js.map +1 -1
 - package/dist/admin/pages/SettingsPage.mjs +1 -1
 - package/dist/admin/pages/SettingsPage.mjs.map +1 -1
 - package/dist/admin/services/aiLocalizationJobs.js +26 -0
 - package/dist/admin/services/aiLocalizationJobs.js.map +1 -0
 - package/dist/admin/services/aiLocalizationJobs.mjs +24 -0
 - package/dist/admin/services/aiLocalizationJobs.mjs.map +1 -0
 - package/dist/admin/services/api.js +2 -1
 - package/dist/admin/services/api.js.map +1 -1
 - package/dist/admin/services/api.mjs +2 -1
 - package/dist/admin/services/api.mjs.map +1 -1
 - package/dist/admin/src/components/CMHeaderActions.d.ts +12 -5
 - package/dist/admin/src/hooks/useAILocalizationJobsPolling.d.ts +9 -0
 - package/dist/admin/src/services/aiLocalizationJobs.d.ts +6 -0
 - package/dist/admin/src/services/api.d.ts +1 -1
 - package/dist/admin/src/services/locales.d.ts +1 -1
 - package/dist/admin/src/services/relations.d.ts +1 -1
 - package/dist/admin/src/services/settings.d.ts +2 -2
 - package/dist/admin/translations/en.json.js +4 -1
 - package/dist/admin/translations/en.json.js.map +1 -1
 - package/dist/admin/translations/en.json.mjs +4 -1
 - package/dist/admin/translations/en.json.mjs.map +1 -1
 - package/dist/server/bootstrap.js +2 -0
 - package/dist/server/bootstrap.js.map +1 -1
 - package/dist/server/bootstrap.mjs +2 -0
 - package/dist/server/bootstrap.mjs.map +1 -1
 - package/dist/server/controllers/ai-localization-jobs.js +47 -0
 - package/dist/server/controllers/ai-localization-jobs.js.map +1 -0
 - package/dist/server/controllers/ai-localization-jobs.mjs +45 -0
 - package/dist/server/controllers/ai-localization-jobs.mjs.map +1 -0
 - package/dist/server/controllers/index.js +3 -1
 - package/dist/server/controllers/index.js.map +1 -1
 - package/dist/server/controllers/index.mjs +3 -1
 - package/dist/server/controllers/index.mjs.map +1 -1
 - package/dist/server/models/ai-localization-job.js +60 -0
 - package/dist/server/models/ai-localization-job.js.map +1 -0
 - package/dist/server/models/ai-localization-job.mjs +57 -0
 - package/dist/server/models/ai-localization-job.mjs.map +1 -0
 - package/dist/server/register.js +3 -1
 - package/dist/server/register.js.map +1 -1
 - package/dist/server/register.mjs +3 -1
 - package/dist/server/register.mjs.map +1 -1
 - package/dist/server/routes/admin.js +20 -0
 - package/dist/server/routes/admin.js.map +1 -1
 - package/dist/server/routes/admin.mjs +20 -0
 - package/dist/server/routes/admin.mjs.map +1 -1
 - package/dist/server/services/ai-localization-jobs.js +64 -0
 - package/dist/server/services/ai-localization-jobs.js.map +1 -0
 - package/dist/server/services/ai-localization-jobs.mjs +62 -0
 - package/dist/server/services/ai-localization-jobs.mjs.map +1 -0
 - package/dist/server/services/ai-localizations.js +253 -5
 - package/dist/server/services/ai-localizations.js.map +1 -1
 - package/dist/server/services/ai-localizations.mjs +253 -5
 - package/dist/server/services/ai-localizations.mjs.map +1 -1
 - package/dist/server/services/index.js +3 -1
 - package/dist/server/services/index.js.map +1 -1
 - package/dist/server/services/index.mjs +3 -1
 - package/dist/server/services/index.mjs.map +1 -1
 - package/dist/server/services/metrics.js +12 -1
 - package/dist/server/services/metrics.js.map +1 -1
 - package/dist/server/services/metrics.mjs +12 -1
 - package/dist/server/services/metrics.mjs.map +1 -1
 - package/dist/server/src/bootstrap.d.ts.map +1 -1
 - package/dist/server/src/controllers/ai-localization-jobs.d.ts +17 -0
 - package/dist/server/src/controllers/ai-localization-jobs.d.ts.map +1 -0
 - package/dist/server/src/controllers/index.d.ts +6 -0
 - package/dist/server/src/controllers/index.d.ts.map +1 -1
 - package/dist/server/src/index.d.ts +27 -2
 - package/dist/server/src/index.d.ts.map +1 -1
 - package/dist/server/src/models/ai-localization-job.d.ts +5 -0
 - package/dist/server/src/models/ai-localization-job.d.ts.map +1 -0
 - package/dist/server/src/models/index.d.ts +5 -0
 - package/dist/server/src/models/index.d.ts.map +1 -0
 - package/dist/server/src/register.d.ts +1 -1
 - package/dist/server/src/register.d.ts.map +1 -1
 - package/dist/server/src/routes/admin.d.ts.map +1 -1
 - package/dist/server/src/services/ai-localization-jobs.d.ts +26 -0
 - package/dist/server/src/services/ai-localization-jobs.d.ts.map +1 -0
 - package/dist/server/src/services/ai-localizations.d.ts +11 -1
 - package/dist/server/src/services/ai-localizations.d.ts.map +1 -1
 - package/dist/server/src/services/index.d.ts +20 -1
 - package/dist/server/src/services/index.d.ts.map +1 -1
 - package/dist/server/src/services/metrics.d.ts +1 -0
 - package/dist/server/src/services/metrics.d.ts.map +1 -1
 - package/dist/server/src/utils/index.d.ts +4 -0
 - package/dist/server/src/utils/index.d.ts.map +1 -1
 - package/dist/server/utils/index.js.map +1 -1
 - package/dist/server/utils/index.mjs.map +1 -1
 - package/dist/shared/contracts/ai-localization-jobs.d.ts +27 -0
 - package/dist/shared/contracts/ai-localization-jobs.d.ts.map +1 -0
 - package/dist/shared/contracts/shared.d.ts.map +1 -0
 - package/package.json +7 -6
 
| 
         @@ -20,9 +20,12 @@ var en = { 
     | 
|
| 
       20 
20 
     | 
    
         
             
                "CMEditViewBulkLocale.continue-confirmation": "Are you sure you want to continue?",
         
     | 
| 
       21 
21 
     | 
    
         
             
                "CMEditViewAITranslation.status-aria-label": "AI Translation Status",
         
     | 
| 
       22 
22 
     | 
    
         
             
                "CMEditViewAITranslation.status-title": "{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}",
         
     | 
| 
       23 
     | 
    
         
            -
                "CMEditViewAITranslation.status-description": "Our AI translates content in all locales each time you save a modification.",
         
     | 
| 
      
 23 
     | 
    
         
            +
                "CMEditViewAITranslation.status-description": "Our AI translates content in all locales each time you save a modification in the default locale.",
         
     | 
| 
       24 
24 
     | 
    
         
             
                "CMEditViewAITranslation.settings-link": "{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}",
         
     | 
| 
      
 25 
     | 
    
         
            +
                "CMEditViewAITranslation.job-completed": "AI translation completed successfully!",
         
     | 
| 
      
 26 
     | 
    
         
            +
                "CMEditViewAITranslation.job-failed": "AI translation failed. Please try again.",
         
     | 
| 
       25 
27 
     | 
    
         
             
                "CMEditViewLocalePicker.locale.create": "Create <bold>{locale}</bold> locale",
         
     | 
| 
      
 28 
     | 
    
         
            +
                "CMEditViewLocalePicker.locale.ai-translations": "AI Translations:",
         
     | 
| 
       26 
29 
     | 
    
         
             
                "CMListView.popover.display-locales.label": "Display translated locales",
         
     | 
| 
       27 
30 
     | 
    
         
             
                "CMListView.popover.display-locales.more": "{locales} + {count} more",
         
     | 
| 
       28 
31 
     | 
    
         
             
                "CheckboxConfirmation.Modal.body": "Do you want to disable it?",
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
         
     | 
    
        package/dist/server/bootstrap.js
    CHANGED
    
    
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\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 } = getService('content-types');\n\n    const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\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    if (attributesToPopulate.length > 0) {\n      const populatedResult = await strapi.db\n        .query(schema.uid)\n        .findOne({ where: { id: resultID }, populate: attributesToPopulate });\n\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  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","attributesToPopulate","uid","result","resultID","Array","isArray","entries","id","length","populatedResult","query","findOne","where","populate","syncNonLocalizedAttributes","sendDidInitializeEvent","initDefaultLocale","sectionsBuilder","engine","registerLocalesPropertyHandler","registerI18nActions","registerI18nActionsHooks","updateActionsProperties","registerI18nPermissionsHandlers"],"mappings":"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 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\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 } = getService('content-types');\n\n    const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\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    if (attributesToPopulate.length > 0) {\n      const populatedResult = await strapi.db\n        .query(schema.uid)\n        .findOne({ where: { id: resultID }, populate: attributesToPopulate });\n\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  getService('ai-localizations').setupMiddleware();\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","attributesToPopulate","uid","result","resultID","Array","isArray","entries","id","length","populatedResult","query","findOne","where","populate","syncNonLocalizedAttributes","sendDidInitializeEvent","initDefaultLocale","sectionsBuilder","engine","registerLocalesPropertyHandler","registerI18nActions","registerI18nActionsHooks","updateActionsProperties","registerI18nPermissionsHandlers","setupMiddleware"],"mappings":"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"}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\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 } = getService('content-types');\n\n    const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\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    if (attributesToPopulate.length > 0) {\n      const populatedResult = await strapi.db\n        .query(schema.uid)\n        .findOne({ where: { id: resultID }, populate: attributesToPopulate });\n\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  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","attributesToPopulate","uid","result","resultID","Array","isArray","entries","id","length","populatedResult","query","findOne","where","populate","syncNonLocalizedAttributes","sendDidInitializeEvent","initDefaultLocale","sectionsBuilder","engine","registerLocalesPropertyHandler","registerI18nActions","registerI18nActionsHooks","updateActionsProperties","registerI18nPermissionsHandlers"],"mappings":"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 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\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 } = getService('content-types');\n\n    const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes(schema.uid);\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    if (attributesToPopulate.length > 0) {\n      const populatedResult = await strapi.db\n        .query(schema.uid)\n        .findOne({ where: { id: resultID }, populate: attributesToPopulate });\n\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  getService('ai-localizations').setupMiddleware();\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","attributesToPopulate","uid","result","resultID","Array","isArray","entries","id","length","populatedResult","query","findOne","where","populate","syncNonLocalizedAttributes","sendDidInitializeEvent","initDefaultLocale","sectionsBuilder","engine","registerLocalesPropertyHandler","registerI18nActions","registerI18nActionsHooks","updateActionsProperties","registerI18nPermissionsHandlers","setupMiddleware"],"mappings":"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"}
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            'use strict';
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            const createAILocalizationJobsController = ({ strapi })=>{
         
     | 
| 
      
 4 
     | 
    
         
            +
                const getService = (name)=>strapi.plugin('i18n').service(name);
         
     | 
| 
      
 5 
     | 
    
         
            +
                const aiLocalizationJobsService = getService('ai-localization-jobs');
         
     | 
| 
      
 6 
     | 
    
         
            +
                return {
         
     | 
| 
      
 7 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 8 
     | 
    
         
            +
                 * Get a job for a singleType using the contentType
         
     | 
| 
      
 9 
     | 
    
         
            +
                 * There is only 1 job per contentType
         
     | 
| 
      
 10 
     | 
    
         
            +
                 */ async getJobForSingleType (ctx) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                        const { contentType } = ctx.params;
         
     | 
| 
      
 12 
     | 
    
         
            +
                        if (!contentType) {
         
     | 
| 
      
 13 
     | 
    
         
            +
                            return ctx.badRequest('contentType is required');
         
     | 
| 
      
 14 
     | 
    
         
            +
                        }
         
     | 
| 
      
 15 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 16 
     | 
    
         
            +
                            const job = await aiLocalizationJobsService.getJobByContentType(contentType);
         
     | 
| 
      
 17 
     | 
    
         
            +
                            ctx.body = {
         
     | 
| 
      
 18 
     | 
    
         
            +
                                data: job
         
     | 
| 
      
 19 
     | 
    
         
            +
                            };
         
     | 
| 
      
 20 
     | 
    
         
            +
                        } catch (error) {
         
     | 
| 
      
 21 
     | 
    
         
            +
                            strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);
         
     | 
| 
      
 22 
     | 
    
         
            +
                            ctx.internalServerError('Failed to fetch AI localizations job');
         
     | 
| 
      
 23 
     | 
    
         
            +
                        }
         
     | 
| 
      
 24 
     | 
    
         
            +
                    },
         
     | 
| 
      
 25 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 26 
     | 
    
         
            +
                 * Get a job for a collectionType using the documentId
         
     | 
| 
      
 27 
     | 
    
         
            +
                 * There is only 1 job per documentId
         
     | 
| 
      
 28 
     | 
    
         
            +
                 */ async getJobForCollectionType (ctx) {
         
     | 
| 
      
 29 
     | 
    
         
            +
                        const { documentId, contentType } = ctx.params;
         
     | 
| 
      
 30 
     | 
    
         
            +
                        if (!documentId || !contentType) {
         
     | 
| 
      
 31 
     | 
    
         
            +
                            return ctx.badRequest('Document ID and contentType are required');
         
     | 
| 
      
 32 
     | 
    
         
            +
                        }
         
     | 
| 
      
 33 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 34 
     | 
    
         
            +
                            const job = await aiLocalizationJobsService.getJobByDocument(contentType, documentId);
         
     | 
| 
      
 35 
     | 
    
         
            +
                            ctx.body = {
         
     | 
| 
      
 36 
     | 
    
         
            +
                                data: job
         
     | 
| 
      
 37 
     | 
    
         
            +
                            };
         
     | 
| 
      
 38 
     | 
    
         
            +
                        } catch (error) {
         
     | 
| 
      
 39 
     | 
    
         
            +
                            strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);
         
     | 
| 
      
 40 
     | 
    
         
            +
                            ctx.internalServerError('Failed to fetch AI localizations job');
         
     | 
| 
      
 41 
     | 
    
         
            +
                        }
         
     | 
| 
      
 42 
     | 
    
         
            +
                    }
         
     | 
| 
      
 43 
     | 
    
         
            +
                };
         
     | 
| 
      
 44 
     | 
    
         
            +
            };
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            module.exports = createAILocalizationJobsController;
         
     | 
| 
      
 47 
     | 
    
         
            +
            //# sourceMappingURL=ai-localization-jobs.js.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ai-localization-jobs.js","sources":["../../../server/src/controllers/ai-localization-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst createAILocalizationJobsController = ({ strapi }: { strapi: Core.Strapi }) => {\n  const getService = (name: string) => strapi.plugin('i18n').service(name);\n  const aiLocalizationJobsService = getService('ai-localization-jobs');\n\n  return {\n    /**\n     * Get a job for a singleType using the contentType\n     * There is only 1 job per contentType\n     */\n    async getJobForSingleType(ctx: any) {\n      const { contentType } = ctx.params;\n\n      if (!contentType) {\n        return ctx.badRequest('contentType is required');\n      }\n\n      try {\n        const job = await aiLocalizationJobsService.getJobByContentType(contentType);\n\n        ctx.body = {\n          data: job,\n        };\n      } catch (error) {\n        strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);\n        ctx.internalServerError('Failed to fetch AI localizations job');\n      }\n    },\n    /**\n     * Get a job for a collectionType using the documentId\n     * There is only 1 job per documentId\n     */\n    async getJobForCollectionType(ctx: any) {\n      const { documentId, contentType } = ctx.params;\n\n      if (!documentId || !contentType) {\n        return ctx.badRequest('Document ID and contentType are required');\n      }\n\n      try {\n        const job = await aiLocalizationJobsService.getJobByDocument(contentType, documentId);\n\n        ctx.body = {\n          data: job,\n        };\n      } catch (error) {\n        strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);\n        ctx.internalServerError('Failed to fetch AI localizations job');\n      }\n    },\n  };\n};\n\nexport default createAILocalizationJobsController;\n"],"names":["createAILocalizationJobsController","strapi","getService","name","plugin","service","aiLocalizationJobsService","getJobForSingleType","ctx","contentType","params","badRequest","job","getJobByContentType","body","data","error","log","internalServerError","getJobForCollectionType","documentId","getJobByDocument"],"mappings":";;AAEA,MAAMA,kCAAqC,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IAC7E,MAAMC,UAAAA,GAAa,CAACC,IAAiBF,GAAAA,MAAAA,CAAOG,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAACF,IAAAA,CAAAA;AACnE,IAAA,MAAMG,4BAA4BJ,UAAW,CAAA,sBAAA,CAAA;IAE7C,OAAO;AACL;;;QAIA,MAAMK,qBAAoBC,GAAQ,EAAA;AAChC,YAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIE,MAAM;AAElC,YAAA,IAAI,CAACD,WAAa,EAAA;gBAChB,OAAOD,GAAAA,CAAIG,UAAU,CAAC,yBAAA,CAAA;AACxB;YAEA,IAAI;AACF,gBAAA,MAAMC,GAAM,GAAA,MAAMN,yBAA0BO,CAAAA,mBAAmB,CAACJ,WAAAA,CAAAA;AAEhED,gBAAAA,GAAAA,CAAIM,IAAI,GAAG;oBACTC,IAAMH,EAAAA;AACR,iBAAA;AACF,aAAA,CAAE,OAAOI,KAAO,EAAA;AACdf,gBAAAA,MAAAA,CAAOgB,GAAG,CAACD,KAAK,CAAC,6CAA+CA,EAAAA,KAAAA,CAAAA;AAChER,gBAAAA,GAAAA,CAAIU,mBAAmB,CAAC,sCAAA,CAAA;AAC1B;AACF,SAAA;AACA;;;QAIA,MAAMC,yBAAwBX,GAAQ,EAAA;AACpC,YAAA,MAAM,EAAEY,UAAU,EAAEX,WAAW,EAAE,GAAGD,IAAIE,MAAM;YAE9C,IAAI,CAACU,UAAc,IAAA,CAACX,WAAa,EAAA;gBAC/B,OAAOD,GAAAA,CAAIG,UAAU,CAAC,0CAAA,CAAA;AACxB;YAEA,IAAI;AACF,gBAAA,MAAMC,GAAM,GAAA,MAAMN,yBAA0Be,CAAAA,gBAAgB,CAACZ,WAAaW,EAAAA,UAAAA,CAAAA;AAE1EZ,gBAAAA,GAAAA,CAAIM,IAAI,GAAG;oBACTC,IAAMH,EAAAA;AACR,iBAAA;AACF,aAAA,CAAE,OAAOI,KAAO,EAAA;AACdf,gBAAAA,MAAAA,CAAOgB,GAAG,CAACD,KAAK,CAAC,6CAA+CA,EAAAA,KAAAA,CAAAA;AAChER,gBAAAA,GAAAA,CAAIU,mBAAmB,CAAC,sCAAA,CAAA;AAC1B;AACF;AACF,KAAA;AACF;;;;"}
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            const createAILocalizationJobsController = ({ strapi })=>{
         
     | 
| 
      
 2 
     | 
    
         
            +
                const getService = (name)=>strapi.plugin('i18n').service(name);
         
     | 
| 
      
 3 
     | 
    
         
            +
                const aiLocalizationJobsService = getService('ai-localization-jobs');
         
     | 
| 
      
 4 
     | 
    
         
            +
                return {
         
     | 
| 
      
 5 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 6 
     | 
    
         
            +
                 * Get a job for a singleType using the contentType
         
     | 
| 
      
 7 
     | 
    
         
            +
                 * There is only 1 job per contentType
         
     | 
| 
      
 8 
     | 
    
         
            +
                 */ async getJobForSingleType (ctx) {
         
     | 
| 
      
 9 
     | 
    
         
            +
                        const { contentType } = ctx.params;
         
     | 
| 
      
 10 
     | 
    
         
            +
                        if (!contentType) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                            return ctx.badRequest('contentType is required');
         
     | 
| 
      
 12 
     | 
    
         
            +
                        }
         
     | 
| 
      
 13 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 14 
     | 
    
         
            +
                            const job = await aiLocalizationJobsService.getJobByContentType(contentType);
         
     | 
| 
      
 15 
     | 
    
         
            +
                            ctx.body = {
         
     | 
| 
      
 16 
     | 
    
         
            +
                                data: job
         
     | 
| 
      
 17 
     | 
    
         
            +
                            };
         
     | 
| 
      
 18 
     | 
    
         
            +
                        } catch (error) {
         
     | 
| 
      
 19 
     | 
    
         
            +
                            strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);
         
     | 
| 
      
 20 
     | 
    
         
            +
                            ctx.internalServerError('Failed to fetch AI localizations job');
         
     | 
| 
      
 21 
     | 
    
         
            +
                        }
         
     | 
| 
      
 22 
     | 
    
         
            +
                    },
         
     | 
| 
      
 23 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 24 
     | 
    
         
            +
                 * Get a job for a collectionType using the documentId
         
     | 
| 
      
 25 
     | 
    
         
            +
                 * There is only 1 job per documentId
         
     | 
| 
      
 26 
     | 
    
         
            +
                 */ async getJobForCollectionType (ctx) {
         
     | 
| 
      
 27 
     | 
    
         
            +
                        const { documentId, contentType } = ctx.params;
         
     | 
| 
      
 28 
     | 
    
         
            +
                        if (!documentId || !contentType) {
         
     | 
| 
      
 29 
     | 
    
         
            +
                            return ctx.badRequest('Document ID and contentType are required');
         
     | 
| 
      
 30 
     | 
    
         
            +
                        }
         
     | 
| 
      
 31 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 32 
     | 
    
         
            +
                            const job = await aiLocalizationJobsService.getJobByDocument(contentType, documentId);
         
     | 
| 
      
 33 
     | 
    
         
            +
                            ctx.body = {
         
     | 
| 
      
 34 
     | 
    
         
            +
                                data: job
         
     | 
| 
      
 35 
     | 
    
         
            +
                            };
         
     | 
| 
      
 36 
     | 
    
         
            +
                        } catch (error) {
         
     | 
| 
      
 37 
     | 
    
         
            +
                            strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);
         
     | 
| 
      
 38 
     | 
    
         
            +
                            ctx.internalServerError('Failed to fetch AI localizations job');
         
     | 
| 
      
 39 
     | 
    
         
            +
                        }
         
     | 
| 
      
 40 
     | 
    
         
            +
                    }
         
     | 
| 
      
 41 
     | 
    
         
            +
                };
         
     | 
| 
      
 42 
     | 
    
         
            +
            };
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            export { createAILocalizationJobsController as default };
         
     | 
| 
      
 45 
     | 
    
         
            +
            //# sourceMappingURL=ai-localization-jobs.mjs.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ai-localization-jobs.mjs","sources":["../../../server/src/controllers/ai-localization-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst createAILocalizationJobsController = ({ strapi }: { strapi: Core.Strapi }) => {\n  const getService = (name: string) => strapi.plugin('i18n').service(name);\n  const aiLocalizationJobsService = getService('ai-localization-jobs');\n\n  return {\n    /**\n     * Get a job for a singleType using the contentType\n     * There is only 1 job per contentType\n     */\n    async getJobForSingleType(ctx: any) {\n      const { contentType } = ctx.params;\n\n      if (!contentType) {\n        return ctx.badRequest('contentType is required');\n      }\n\n      try {\n        const job = await aiLocalizationJobsService.getJobByContentType(contentType);\n\n        ctx.body = {\n          data: job,\n        };\n      } catch (error) {\n        strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);\n        ctx.internalServerError('Failed to fetch AI localizations job');\n      }\n    },\n    /**\n     * Get a job for a collectionType using the documentId\n     * There is only 1 job per documentId\n     */\n    async getJobForCollectionType(ctx: any) {\n      const { documentId, contentType } = ctx.params;\n\n      if (!documentId || !contentType) {\n        return ctx.badRequest('Document ID and contentType are required');\n      }\n\n      try {\n        const job = await aiLocalizationJobsService.getJobByDocument(contentType, documentId);\n\n        ctx.body = {\n          data: job,\n        };\n      } catch (error) {\n        strapi.log.error('[AI Localizations Jobs] Error fetching job:', error);\n        ctx.internalServerError('Failed to fetch AI localizations job');\n      }\n    },\n  };\n};\n\nexport default createAILocalizationJobsController;\n"],"names":["createAILocalizationJobsController","strapi","getService","name","plugin","service","aiLocalizationJobsService","getJobForSingleType","ctx","contentType","params","badRequest","job","getJobByContentType","body","data","error","log","internalServerError","getJobForCollectionType","documentId","getJobByDocument"],"mappings":"AAEA,MAAMA,kCAAqC,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IAC7E,MAAMC,UAAAA,GAAa,CAACC,IAAiBF,GAAAA,MAAAA,CAAOG,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAACF,IAAAA,CAAAA;AACnE,IAAA,MAAMG,4BAA4BJ,UAAW,CAAA,sBAAA,CAAA;IAE7C,OAAO;AACL;;;QAIA,MAAMK,qBAAoBC,GAAQ,EAAA;AAChC,YAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIE,MAAM;AAElC,YAAA,IAAI,CAACD,WAAa,EAAA;gBAChB,OAAOD,GAAAA,CAAIG,UAAU,CAAC,yBAAA,CAAA;AACxB;YAEA,IAAI;AACF,gBAAA,MAAMC,GAAM,GAAA,MAAMN,yBAA0BO,CAAAA,mBAAmB,CAACJ,WAAAA,CAAAA;AAEhED,gBAAAA,GAAAA,CAAIM,IAAI,GAAG;oBACTC,IAAMH,EAAAA;AACR,iBAAA;AACF,aAAA,CAAE,OAAOI,KAAO,EAAA;AACdf,gBAAAA,MAAAA,CAAOgB,GAAG,CAACD,KAAK,CAAC,6CAA+CA,EAAAA,KAAAA,CAAAA;AAChER,gBAAAA,GAAAA,CAAIU,mBAAmB,CAAC,sCAAA,CAAA;AAC1B;AACF,SAAA;AACA;;;QAIA,MAAMC,yBAAwBX,GAAQ,EAAA;AACpC,YAAA,MAAM,EAAEY,UAAU,EAAEX,WAAW,EAAE,GAAGD,IAAIE,MAAM;YAE9C,IAAI,CAACU,UAAc,IAAA,CAACX,WAAa,EAAA;gBAC/B,OAAOD,GAAAA,CAAIG,UAAU,CAAC,0CAAA,CAAA;AACxB;YAEA,IAAI;AACF,gBAAA,MAAMC,GAAM,GAAA,MAAMN,yBAA0Be,CAAAA,gBAAgB,CAACZ,WAAaW,EAAAA,UAAAA,CAAAA;AAE1EZ,gBAAAA,GAAAA,CAAIM,IAAI,GAAG;oBACTC,IAAMH,EAAAA;AACR,iBAAA;AACF,aAAA,CAAE,OAAOI,KAAO,EAAA;AACdf,gBAAAA,MAAAA,CAAOgB,GAAG,CAACD,KAAK,CAAC,6CAA+CA,EAAAA,KAAAA,CAAAA;AAChER,gBAAAA,GAAAA,CAAIU,mBAAmB,CAAC,sCAAA,CAAA;AAC1B;AACF;AACF,KAAA;AACF;;;;"}
         
     | 
| 
         @@ -4,12 +4,14 @@ var locales = require('./locales.js'); 
     | 
|
| 
       4 
4 
     | 
    
         
             
            var contentTypes = require('./content-types.js');
         
     | 
| 
       5 
5 
     | 
    
         
             
            var isoLocales = require('./iso-locales.js');
         
     | 
| 
       6 
6 
     | 
    
         
             
            var settings = require('./settings.js');
         
     | 
| 
      
 7 
     | 
    
         
            +
            var aiLocalizationJobs = require('./ai-localization-jobs.js');
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
            var controllers = {
         
     | 
| 
       9 
10 
     | 
    
         
             
                locales,
         
     | 
| 
       10 
11 
     | 
    
         
             
                'iso-locales': isoLocales,
         
     | 
| 
       11 
12 
     | 
    
         
             
                'content-types': contentTypes,
         
     | 
| 
       12 
     | 
    
         
            -
                settings
         
     | 
| 
      
 13 
     | 
    
         
            +
                settings,
         
     | 
| 
      
 14 
     | 
    
         
            +
                'ai-localization-jobs': aiLocalizationJobs
         
     | 
| 
       13 
15 
     | 
    
         
             
            };
         
     | 
| 
       14 
16 
     | 
    
         | 
| 
       15 
17 
     | 
    
         
             
            module.exports = controllers;
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import locales from './locales';\nimport contentTypes from './content-types';\nimport isoLocales from './iso-locales';\nimport settings from './settings';\n\nexport default {\n  locales,\n  'iso-locales': isoLocales,\n  'content-types': contentTypes,\n  settings,\n};\n"],"names":["locales","isoLocales","contentTypes","settings"],"mappings":" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import locales from './locales';\nimport contentTypes from './content-types';\nimport isoLocales from './iso-locales';\nimport settings from './settings';\nimport aiLocalizationJobs from './ai-localization-jobs';\n\nexport default {\n  locales,\n  'iso-locales': isoLocales,\n  'content-types': contentTypes,\n  settings,\n  'ai-localization-jobs': aiLocalizationJobs,\n};\n"],"names":["locales","isoLocales","contentTypes","settings","aiLocalizationJobs"],"mappings":";;;;;;;;AAMA,kBAAe;AACbA,IAAAA,OAAAA;IACA,aAAeC,EAAAA,UAAAA;IACf,eAAiBC,EAAAA,YAAAA;AACjBC,IAAAA,QAAAA;IACA,sBAAwBC,EAAAA;AAC1B,CAAE;;;;"}
         
     | 
| 
         @@ -2,12 +2,14 @@ import controller from './locales.mjs'; 
     | 
|
| 
       2 
2 
     | 
    
         
             
            import controller$2 from './content-types.mjs';
         
     | 
| 
       3 
3 
     | 
    
         
             
            import controller$1 from './iso-locales.mjs';
         
     | 
| 
       4 
4 
     | 
    
         
             
            import settings from './settings.mjs';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import createAILocalizationJobsController from './ai-localization-jobs.mjs';
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            var controllers = {
         
     | 
| 
       7 
8 
     | 
    
         
             
                locales: controller,
         
     | 
| 
       8 
9 
     | 
    
         
             
                'iso-locales': controller$1,
         
     | 
| 
       9 
10 
     | 
    
         
             
                'content-types': controller$2,
         
     | 
| 
       10 
     | 
    
         
            -
                settings
         
     | 
| 
      
 11 
     | 
    
         
            +
                settings,
         
     | 
| 
      
 12 
     | 
    
         
            +
                'ai-localization-jobs': createAILocalizationJobsController
         
     | 
| 
       11 
13 
     | 
    
         
             
            };
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
15 
     | 
    
         
             
            export { controllers as default };
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import locales from './locales';\nimport contentTypes from './content-types';\nimport isoLocales from './iso-locales';\nimport settings from './settings';\n\nexport default {\n  locales,\n  'iso-locales': isoLocales,\n  'content-types': contentTypes,\n  settings,\n};\n"],"names":["locales","isoLocales","contentTypes","settings"],"mappings":" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import locales from './locales';\nimport contentTypes from './content-types';\nimport isoLocales from './iso-locales';\nimport settings from './settings';\nimport aiLocalizationJobs from './ai-localization-jobs';\n\nexport default {\n  locales,\n  'iso-locales': isoLocales,\n  'content-types': contentTypes,\n  settings,\n  'ai-localization-jobs': aiLocalizationJobs,\n};\n"],"names":["locales","isoLocales","contentTypes","settings","aiLocalizationJobs"],"mappings":";;;;;;AAMA,kBAAe;AACbA,aAAAA,UAAAA;IACA,aAAeC,EAAAA,YAAAA;IACf,eAAiBC,EAAAA,YAAAA;AACjBC,IAAAA,QAAAA;IACA,sBAAwBC,EAAAA;AAC1B,CAAE;;;;"}
         
     | 
| 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            'use strict';
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            const AI_LOCALIZATION_JOB_UID = 'plugin::i18n.ai-localization-job';
         
     | 
| 
      
 4 
     | 
    
         
            +
            const aiLocalizationJob = {
         
     | 
| 
      
 5 
     | 
    
         
            +
                uid: AI_LOCALIZATION_JOB_UID,
         
     | 
| 
      
 6 
     | 
    
         
            +
                tableName: 'strapi_ai_localization_jobs',
         
     | 
| 
      
 7 
     | 
    
         
            +
                singularName: 'ai-localization-job',
         
     | 
| 
      
 8 
     | 
    
         
            +
                attributes: {
         
     | 
| 
      
 9 
     | 
    
         
            +
                    id: {
         
     | 
| 
      
 10 
     | 
    
         
            +
                        type: 'increments'
         
     | 
| 
      
 11 
     | 
    
         
            +
                    },
         
     | 
| 
      
 12 
     | 
    
         
            +
                    contentType: {
         
     | 
| 
      
 13 
     | 
    
         
            +
                        type: 'string',
         
     | 
| 
      
 14 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 15 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 16 
     | 
    
         
            +
                        }
         
     | 
| 
      
 17 
     | 
    
         
            +
                    },
         
     | 
| 
      
 18 
     | 
    
         
            +
                    relatedDocumentId: {
         
     | 
| 
      
 19 
     | 
    
         
            +
                        type: 'string',
         
     | 
| 
      
 20 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 21 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 22 
     | 
    
         
            +
                        }
         
     | 
| 
      
 23 
     | 
    
         
            +
                    },
         
     | 
| 
      
 24 
     | 
    
         
            +
                    sourceLocale: {
         
     | 
| 
      
 25 
     | 
    
         
            +
                        type: 'string',
         
     | 
| 
      
 26 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 27 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 28 
     | 
    
         
            +
                        }
         
     | 
| 
      
 29 
     | 
    
         
            +
                    },
         
     | 
| 
      
 30 
     | 
    
         
            +
                    targetLocales: {
         
     | 
| 
      
 31 
     | 
    
         
            +
                        type: 'json',
         
     | 
| 
      
 32 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 33 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 34 
     | 
    
         
            +
                        }
         
     | 
| 
      
 35 
     | 
    
         
            +
                    },
         
     | 
| 
      
 36 
     | 
    
         
            +
                    status: {
         
     | 
| 
      
 37 
     | 
    
         
            +
                        type: 'enumeration',
         
     | 
| 
      
 38 
     | 
    
         
            +
                        enum: [
         
     | 
| 
      
 39 
     | 
    
         
            +
                            'processing',
         
     | 
| 
      
 40 
     | 
    
         
            +
                            'completed',
         
     | 
| 
      
 41 
     | 
    
         
            +
                            'failed'
         
     | 
| 
      
 42 
     | 
    
         
            +
                        ],
         
     | 
| 
      
 43 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 44 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 45 
     | 
    
         
            +
                        }
         
     | 
| 
      
 46 
     | 
    
         
            +
                    },
         
     | 
| 
      
 47 
     | 
    
         
            +
                    createdAt: {
         
     | 
| 
      
 48 
     | 
    
         
            +
                        type: 'datetime',
         
     | 
| 
      
 49 
     | 
    
         
            +
                        default: ()=>new Date()
         
     | 
| 
      
 50 
     | 
    
         
            +
                    },
         
     | 
| 
      
 51 
     | 
    
         
            +
                    updatedAt: {
         
     | 
| 
      
 52 
     | 
    
         
            +
                        type: 'datetime',
         
     | 
| 
      
 53 
     | 
    
         
            +
                        default: ()=>new Date()
         
     | 
| 
      
 54 
     | 
    
         
            +
                    }
         
     | 
| 
      
 55 
     | 
    
         
            +
                }
         
     | 
| 
      
 56 
     | 
    
         
            +
            };
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            exports.AI_LOCALIZATION_JOB_UID = AI_LOCALIZATION_JOB_UID;
         
     | 
| 
      
 59 
     | 
    
         
            +
            exports.aiLocalizationJob = aiLocalizationJob;
         
     | 
| 
      
 60 
     | 
    
         
            +
            //# sourceMappingURL=ai-localization-job.js.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ai-localization-job.js","sources":["../../../server/src/models/ai-localization-job.ts"],"sourcesContent":["import type { Model } from '@strapi/database';\n\nconst AI_LOCALIZATION_JOB_UID = 'plugin::i18n.ai-localization-job';\n\nconst aiLocalizationJob: Model = {\n  uid: AI_LOCALIZATION_JOB_UID,\n  tableName: 'strapi_ai_localization_jobs',\n  singularName: 'ai-localization-job',\n  attributes: {\n    id: {\n      type: 'increments',\n    },\n    contentType: {\n      type: 'string',\n      column: { notNullable: true },\n    },\n    relatedDocumentId: {\n      type: 'string',\n      column: { notNullable: true },\n    },\n    sourceLocale: {\n      type: 'string',\n      column: { notNullable: true },\n    },\n    targetLocales: {\n      type: 'json',\n      column: { notNullable: true },\n    },\n    status: {\n      type: 'enumeration',\n      enum: ['processing', 'completed', 'failed'],\n      column: { notNullable: true },\n    },\n    createdAt: {\n      type: 'datetime',\n      default: () => new Date(),\n    },\n    updatedAt: {\n      type: 'datetime',\n      default: () => new Date(),\n    },\n  },\n};\n\nexport { aiLocalizationJob, AI_LOCALIZATION_JOB_UID };\n"],"names":["AI_LOCALIZATION_JOB_UID","aiLocalizationJob","uid","tableName","singularName","attributes","id","type","contentType","column","notNullable","relatedDocumentId","sourceLocale","targetLocales","status","enum","createdAt","default","Date","updatedAt"],"mappings":";;AAEA,MAAMA,uBAA0B,GAAA;AAEhC,MAAMC,iBAA2B,GAAA;IAC/BC,GAAKF,EAAAA,uBAAAA;IACLG,SAAW,EAAA,6BAAA;IACXC,YAAc,EAAA,qBAAA;IACdC,UAAY,EAAA;QACVC,EAAI,EAAA;YACFC,IAAM,EAAA;AACR,SAAA;QACAC,WAAa,EAAA;YACXD,IAAM,EAAA,QAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAC,iBAAmB,EAAA;YACjBJ,IAAM,EAAA,QAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAE,YAAc,EAAA;YACZL,IAAM,EAAA,QAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAG,aAAe,EAAA;YACbN,IAAM,EAAA,MAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAI,MAAQ,EAAA;YACNP,IAAM,EAAA,aAAA;YACNQ,IAAM,EAAA;AAAC,gBAAA,YAAA;AAAc,gBAAA,WAAA;AAAa,gBAAA;AAAS,aAAA;YAC3CN,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAM,SAAW,EAAA;YACTT,IAAM,EAAA,UAAA;AACNU,YAAAA,OAAAA,EAAS,IAAM,IAAIC,IAAAA;AACrB,SAAA;QACAC,SAAW,EAAA;YACTZ,IAAM,EAAA,UAAA;AACNU,YAAAA,OAAAA,EAAS,IAAM,IAAIC,IAAAA;AACrB;AACF;AACF;;;;;"}
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            const AI_LOCALIZATION_JOB_UID = 'plugin::i18n.ai-localization-job';
         
     | 
| 
      
 2 
     | 
    
         
            +
            const aiLocalizationJob = {
         
     | 
| 
      
 3 
     | 
    
         
            +
                uid: AI_LOCALIZATION_JOB_UID,
         
     | 
| 
      
 4 
     | 
    
         
            +
                tableName: 'strapi_ai_localization_jobs',
         
     | 
| 
      
 5 
     | 
    
         
            +
                singularName: 'ai-localization-job',
         
     | 
| 
      
 6 
     | 
    
         
            +
                attributes: {
         
     | 
| 
      
 7 
     | 
    
         
            +
                    id: {
         
     | 
| 
      
 8 
     | 
    
         
            +
                        type: 'increments'
         
     | 
| 
      
 9 
     | 
    
         
            +
                    },
         
     | 
| 
      
 10 
     | 
    
         
            +
                    contentType: {
         
     | 
| 
      
 11 
     | 
    
         
            +
                        type: 'string',
         
     | 
| 
      
 12 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 13 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 14 
     | 
    
         
            +
                        }
         
     | 
| 
      
 15 
     | 
    
         
            +
                    },
         
     | 
| 
      
 16 
     | 
    
         
            +
                    relatedDocumentId: {
         
     | 
| 
      
 17 
     | 
    
         
            +
                        type: 'string',
         
     | 
| 
      
 18 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 19 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 20 
     | 
    
         
            +
                        }
         
     | 
| 
      
 21 
     | 
    
         
            +
                    },
         
     | 
| 
      
 22 
     | 
    
         
            +
                    sourceLocale: {
         
     | 
| 
      
 23 
     | 
    
         
            +
                        type: 'string',
         
     | 
| 
      
 24 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 25 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 26 
     | 
    
         
            +
                        }
         
     | 
| 
      
 27 
     | 
    
         
            +
                    },
         
     | 
| 
      
 28 
     | 
    
         
            +
                    targetLocales: {
         
     | 
| 
      
 29 
     | 
    
         
            +
                        type: 'json',
         
     | 
| 
      
 30 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 31 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 32 
     | 
    
         
            +
                        }
         
     | 
| 
      
 33 
     | 
    
         
            +
                    },
         
     | 
| 
      
 34 
     | 
    
         
            +
                    status: {
         
     | 
| 
      
 35 
     | 
    
         
            +
                        type: 'enumeration',
         
     | 
| 
      
 36 
     | 
    
         
            +
                        enum: [
         
     | 
| 
      
 37 
     | 
    
         
            +
                            'processing',
         
     | 
| 
      
 38 
     | 
    
         
            +
                            'completed',
         
     | 
| 
      
 39 
     | 
    
         
            +
                            'failed'
         
     | 
| 
      
 40 
     | 
    
         
            +
                        ],
         
     | 
| 
      
 41 
     | 
    
         
            +
                        column: {
         
     | 
| 
      
 42 
     | 
    
         
            +
                            notNullable: true
         
     | 
| 
      
 43 
     | 
    
         
            +
                        }
         
     | 
| 
      
 44 
     | 
    
         
            +
                    },
         
     | 
| 
      
 45 
     | 
    
         
            +
                    createdAt: {
         
     | 
| 
      
 46 
     | 
    
         
            +
                        type: 'datetime',
         
     | 
| 
      
 47 
     | 
    
         
            +
                        default: ()=>new Date()
         
     | 
| 
      
 48 
     | 
    
         
            +
                    },
         
     | 
| 
      
 49 
     | 
    
         
            +
                    updatedAt: {
         
     | 
| 
      
 50 
     | 
    
         
            +
                        type: 'datetime',
         
     | 
| 
      
 51 
     | 
    
         
            +
                        default: ()=>new Date()
         
     | 
| 
      
 52 
     | 
    
         
            +
                    }
         
     | 
| 
      
 53 
     | 
    
         
            +
                }
         
     | 
| 
      
 54 
     | 
    
         
            +
            };
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            export { AI_LOCALIZATION_JOB_UID, aiLocalizationJob };
         
     | 
| 
      
 57 
     | 
    
         
            +
            //# sourceMappingURL=ai-localization-job.mjs.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ai-localization-job.mjs","sources":["../../../server/src/models/ai-localization-job.ts"],"sourcesContent":["import type { Model } from '@strapi/database';\n\nconst AI_LOCALIZATION_JOB_UID = 'plugin::i18n.ai-localization-job';\n\nconst aiLocalizationJob: Model = {\n  uid: AI_LOCALIZATION_JOB_UID,\n  tableName: 'strapi_ai_localization_jobs',\n  singularName: 'ai-localization-job',\n  attributes: {\n    id: {\n      type: 'increments',\n    },\n    contentType: {\n      type: 'string',\n      column: { notNullable: true },\n    },\n    relatedDocumentId: {\n      type: 'string',\n      column: { notNullable: true },\n    },\n    sourceLocale: {\n      type: 'string',\n      column: { notNullable: true },\n    },\n    targetLocales: {\n      type: 'json',\n      column: { notNullable: true },\n    },\n    status: {\n      type: 'enumeration',\n      enum: ['processing', 'completed', 'failed'],\n      column: { notNullable: true },\n    },\n    createdAt: {\n      type: 'datetime',\n      default: () => new Date(),\n    },\n    updatedAt: {\n      type: 'datetime',\n      default: () => new Date(),\n    },\n  },\n};\n\nexport { aiLocalizationJob, AI_LOCALIZATION_JOB_UID };\n"],"names":["AI_LOCALIZATION_JOB_UID","aiLocalizationJob","uid","tableName","singularName","attributes","id","type","contentType","column","notNullable","relatedDocumentId","sourceLocale","targetLocales","status","enum","createdAt","default","Date","updatedAt"],"mappings":"AAEA,MAAMA,uBAA0B,GAAA;AAEhC,MAAMC,iBAA2B,GAAA;IAC/BC,GAAKF,EAAAA,uBAAAA;IACLG,SAAW,EAAA,6BAAA;IACXC,YAAc,EAAA,qBAAA;IACdC,UAAY,EAAA;QACVC,EAAI,EAAA;YACFC,IAAM,EAAA;AACR,SAAA;QACAC,WAAa,EAAA;YACXD,IAAM,EAAA,QAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAC,iBAAmB,EAAA;YACjBJ,IAAM,EAAA,QAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAE,YAAc,EAAA;YACZL,IAAM,EAAA,QAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAG,aAAe,EAAA;YACbN,IAAM,EAAA,MAAA;YACNE,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAI,MAAQ,EAAA;YACNP,IAAM,EAAA,aAAA;YACNQ,IAAM,EAAA;AAAC,gBAAA,YAAA;AAAc,gBAAA,WAAA;AAAa,gBAAA;AAAS,aAAA;YAC3CN,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAM,SAAW,EAAA;YACTT,IAAM,EAAA,UAAA;AACNU,YAAAA,OAAAA,EAAS,IAAM,IAAIC,IAAAA;AACrB,SAAA;QACAC,SAAW,EAAA;YACTZ,IAAM,EAAA,UAAA;AACNU,YAAAA,OAAAA,EAAS,IAAM,IAAIC,IAAAA;AACrB;AACF;AACF;;;;"}
         
     | 
    
        package/dist/server/register.js
    CHANGED
    
    | 
         @@ -4,8 +4,10 @@ var _ = require('lodash'); 
     | 
|
| 
       4 
4 
     | 
    
         
             
            var validateLocaleCreation = require('./controllers/validate-locale-creation.js');
         
     | 
| 
       5 
5 
     | 
    
         
             
            var graphql = require('./graphql.js');
         
     | 
| 
       6 
6 
     | 
    
         
             
            var index = require('./utils/index.js');
         
     | 
| 
      
 7 
     | 
    
         
            +
            var aiLocalizationJob = require('./models/ai-localization-job.js');
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            var register = (({ strapi })=>{
         
     | 
| 
      
 9 
     | 
    
         
            +
            var register = (async ({ strapi })=>{
         
     | 
| 
      
 10 
     | 
    
         
            +
                strapi.get('models').add(aiLocalizationJob.aiLocalizationJob);
         
     | 
| 
       9 
11 
     | 
    
         
             
                extendContentTypes(strapi);
         
     | 
| 
       10 
12 
     | 
    
         
             
                addContentManagerLocaleMiddleware(strapi);
         
     | 
| 
       11 
13 
     | 
    
         
             
            });
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nimport validateLocaleCreation from './controllers/validate-locale-creation';\nimport graphqlProvider from './graphql';\nimport { getService } from './utils';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n  extendContentTypes(strapi);\n  addContentManagerLocaleMiddleware(strapi);\n};\n\n// TODO: v5 if implemented in the CM => delete this middleware\n/**\n * Adds middleware on CM creation routes to use i18n locale passed in a specific param\n * @param {Strapi} strapi\n */\nconst addContentManagerLocaleMiddleware = (strapi: Core.Strapi) => {\n  strapi.server.router.use('/content-manager/collection-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n\n  strapi.server.router.use('/content-manager/single-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n};\n\n/**\n * Adds locale and localization fields to all content types\n * Even if content type is not localized, it will have these fields\n * @param {Strapi} strapi\n */\nconst extendContentTypes = (strapi: Core.Strapi) => {\n  const { isLocalizedContentType } = getService('content-types');\n\n  Object.values(strapi.contentTypes).forEach((contentType) => {\n    const { attributes } = contentType;\n\n    const isLocalized = isLocalizedContentType(contentType);\n\n    _.set(attributes, 'locale', {\n      writable: true,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      type: 'string',\n    });\n\n    _.set(attributes, 'localizations', {\n      type: 'relation',\n      relation: 'oneToMany',\n      target: contentType.uid,\n      writable: false,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      unstable_virtual: true,\n      joinColumn: {\n        name: 'document_id',\n        referencedColumn: 'document_id',\n        referencedTable: strapi.db.metadata.identifiers.getTableName(contentType.collectionName!),\n        // ensure the population will not include the results we already loaded\n        on({ results }: { results: any[] }) {\n          return {\n            id: {\n              $notIn: results.map((r) => r.id),\n            },\n          };\n        },\n      },\n    });\n  });\n\n  if (strapi.plugin('graphql')) {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    graphqlProvider({ strapi }).register();\n  }\n};\n"],"names":["strapi","extendContentTypes","addContentManagerLocaleMiddleware","server","router","use","ctx","next","method","validateLocaleCreation","isLocalizedContentType","getService","Object","values","contentTypes","forEach","contentType","attributes","isLocalized","_","set","writable","private","configurable","visible","type","relation","target","uid","unstable_virtual","joinColumn","name","referencedColumn","referencedTable","db","metadata","identifiers","getTableName","collectionName","on","results","id","$notIn","map","r","plugin","graphqlProvider","register"],"mappings":" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nimport validateLocaleCreation from './controllers/validate-locale-creation';\nimport graphqlProvider from './graphql';\nimport { getService } from './utils';\nimport { aiLocalizationJob } from './models/ai-localization-job';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n  strapi.get('models').add(aiLocalizationJob);\n\n  extendContentTypes(strapi);\n  addContentManagerLocaleMiddleware(strapi);\n};\n\n// TODO: v5 if implemented in the CM => delete this middleware\n/**\n * Adds middleware on CM creation routes to use i18n locale passed in a specific param\n * @param {Strapi} strapi\n */\nconst addContentManagerLocaleMiddleware = (strapi: Core.Strapi) => {\n  strapi.server.router.use('/content-manager/collection-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n\n  strapi.server.router.use('/content-manager/single-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n};\n\n/**\n * Adds locale and localization fields to all content types\n * Even if content type is not localized, it will have these fields\n * @param {Strapi} strapi\n */\nconst extendContentTypes = (strapi: Core.Strapi) => {\n  const { isLocalizedContentType } = getService('content-types');\n\n  Object.values(strapi.contentTypes).forEach((contentType) => {\n    const { attributes } = contentType;\n\n    const isLocalized = isLocalizedContentType(contentType);\n\n    _.set(attributes, 'locale', {\n      writable: true,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      type: 'string',\n    });\n\n    _.set(attributes, 'localizations', {\n      type: 'relation',\n      relation: 'oneToMany',\n      target: contentType.uid,\n      writable: false,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      unstable_virtual: true,\n      joinColumn: {\n        name: 'document_id',\n        referencedColumn: 'document_id',\n        referencedTable: strapi.db.metadata.identifiers.getTableName(contentType.collectionName!),\n        // ensure the population will not include the results we already loaded\n        on({ results }: { results: any[] }) {\n          return {\n            id: {\n              $notIn: results.map((r) => r.id),\n            },\n          };\n        },\n      },\n    });\n  });\n\n  if (strapi.plugin('graphql')) {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    graphqlProvider({ strapi }).register();\n  }\n};\n"],"names":["strapi","get","add","aiLocalizationJob","extendContentTypes","addContentManagerLocaleMiddleware","server","router","use","ctx","next","method","validateLocaleCreation","isLocalizedContentType","getService","Object","values","contentTypes","forEach","contentType","attributes","isLocalized","_","set","writable","private","configurable","visible","type","relation","target","uid","unstable_virtual","joinColumn","name","referencedColumn","referencedTable","db","metadata","identifiers","getTableName","collectionName","on","results","id","$notIn","map","r","plugin","graphqlProvider","register"],"mappings":";;;;;;;;AAQA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvDA,IAAAA,MAAAA,CAAOC,GAAG,CAAC,QAAUC,CAAAA,CAAAA,GAAG,CAACC,mCAAAA,CAAAA;IAEzBC,kBAAmBJ,CAAAA,MAAAA,CAAAA;IACnBK,iCAAkCL,CAAAA,MAAAA,CAAAA;AACpC,CAAA;AAEA;AACA;;;IAIA,MAAMK,oCAAoC,CAACL,MAAAA,GAAAA;IACzCA,MAAOM,CAAAA,MAAM,CAACC,MAAM,CAACC,GAAG,CAAC,0CAAA,EAA4C,CAACC,GAAKC,EAAAA,IAAAA,GAAAA;AACzE,QAAA,IAAID,IAAIE,MAAM,KAAK,UAAUF,GAAIE,CAAAA,MAAM,KAAK,KAAO,EAAA;AACjD,YAAA,OAAOC,uBAAuBH,GAAKC,EAAAA,IAAAA,CAAAA;AACrC;QAEA,OAAOA,IAAAA,EAAAA;AACT,KAAA,CAAA;IAEAV,MAAOM,CAAAA,MAAM,CAACC,MAAM,CAACC,GAAG,CAAC,sCAAA,EAAwC,CAACC,GAAKC,EAAAA,IAAAA,GAAAA;AACrE,QAAA,IAAID,IAAIE,MAAM,KAAK,UAAUF,GAAIE,CAAAA,MAAM,KAAK,KAAO,EAAA;AACjD,YAAA,OAAOC,uBAAuBH,GAAKC,EAAAA,IAAAA,CAAAA;AACrC;QAEA,OAAOA,IAAAA,EAAAA;AACT,KAAA,CAAA;AACF,CAAA;AAEA;;;;IAKA,MAAMN,qBAAqB,CAACJ,MAAAA,GAAAA;AAC1B,IAAA,MAAM,EAAEa,sBAAsB,EAAE,GAAGC,gBAAW,CAAA,eAAA,CAAA;AAE9CC,IAAAA,MAAAA,CAAOC,MAAM,CAAChB,MAAAA,CAAOiB,YAAY,CAAEC,CAAAA,OAAO,CAAC,CAACC,WAAAA,GAAAA;QAC1C,MAAM,EAAEC,UAAU,EAAE,GAAGD,WAAAA;AAEvB,QAAA,MAAME,cAAcR,sBAAuBM,CAAAA,WAAAA,CAAAA;QAE3CG,CAAEC,CAAAA,GAAG,CAACH,UAAAA,EAAY,QAAU,EAAA;YAC1BI,QAAU,EAAA,IAAA;AACVC,YAAAA,OAAAA,EAAS,CAACJ,WAAAA;YACVK,YAAc,EAAA,KAAA;YACdC,OAAS,EAAA,KAAA;YACTC,IAAM,EAAA;AACR,SAAA,CAAA;QAEAN,CAAEC,CAAAA,GAAG,CAACH,UAAAA,EAAY,eAAiB,EAAA;YACjCQ,IAAM,EAAA,UAAA;YACNC,QAAU,EAAA,WAAA;AACVC,YAAAA,MAAAA,EAAQX,YAAYY,GAAG;YACvBP,QAAU,EAAA,KAAA;AACVC,YAAAA,OAAAA,EAAS,CAACJ,WAAAA;YACVK,YAAc,EAAA,KAAA;YACdC,OAAS,EAAA,KAAA;YACTK,gBAAkB,EAAA,IAAA;YAClBC,UAAY,EAAA;gBACVC,IAAM,EAAA,aAAA;gBACNC,gBAAkB,EAAA,aAAA;gBAClBC,eAAiBpC,EAAAA,MAAAA,CAAOqC,EAAE,CAACC,QAAQ,CAACC,WAAW,CAACC,YAAY,CAACrB,WAAAA,CAAYsB,cAAc,CAAA;;gBAEvFC,EAAG,CAAA,CAAA,EAAEC,OAAO,EAAsB,EAAA;oBAChC,OAAO;wBACLC,EAAI,EAAA;AACFC,4BAAAA,MAAAA,EAAQF,QAAQG,GAAG,CAAC,CAACC,CAAAA,GAAMA,EAAEH,EAAE;AACjC;AACF,qBAAA;AACF;AACF;AACF,SAAA,CAAA;AACF,KAAA,CAAA;IAEA,IAAI5C,MAAAA,CAAOgD,MAAM,CAAC,SAAY,CAAA,EAAA;;QAE5BC,OAAgB,CAAA;AAAEjD,YAAAA;AAAO,SAAA,CAAA,CAAGkD,QAAQ,EAAA;AACtC;AACF,CAAA;;;;"}
         
     | 
    
        package/dist/server/register.mjs
    CHANGED
    
    | 
         @@ -2,8 +2,10 @@ import _ from 'lodash'; 
     | 
|
| 
       2 
2 
     | 
    
         
             
            import validateLocaleCreation from './controllers/validate-locale-creation.mjs';
         
     | 
| 
       3 
3 
     | 
    
         
             
            import graphqlProvider from './graphql.mjs';
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { getService } from './utils/index.mjs';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import { aiLocalizationJob } from './models/ai-localization-job.mjs';
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            var register = (({ strapi })=>{
         
     | 
| 
      
 7 
     | 
    
         
            +
            var register = (async ({ strapi })=>{
         
     | 
| 
      
 8 
     | 
    
         
            +
                strapi.get('models').add(aiLocalizationJob);
         
     | 
| 
       7 
9 
     | 
    
         
             
                extendContentTypes(strapi);
         
     | 
| 
       8 
10 
     | 
    
         
             
                addContentManagerLocaleMiddleware(strapi);
         
     | 
| 
       9 
11 
     | 
    
         
             
            });
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nimport validateLocaleCreation from './controllers/validate-locale-creation';\nimport graphqlProvider from './graphql';\nimport { getService } from './utils';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n  extendContentTypes(strapi);\n  addContentManagerLocaleMiddleware(strapi);\n};\n\n// TODO: v5 if implemented in the CM => delete this middleware\n/**\n * Adds middleware on CM creation routes to use i18n locale passed in a specific param\n * @param {Strapi} strapi\n */\nconst addContentManagerLocaleMiddleware = (strapi: Core.Strapi) => {\n  strapi.server.router.use('/content-manager/collection-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n\n  strapi.server.router.use('/content-manager/single-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n};\n\n/**\n * Adds locale and localization fields to all content types\n * Even if content type is not localized, it will have these fields\n * @param {Strapi} strapi\n */\nconst extendContentTypes = (strapi: Core.Strapi) => {\n  const { isLocalizedContentType } = getService('content-types');\n\n  Object.values(strapi.contentTypes).forEach((contentType) => {\n    const { attributes } = contentType;\n\n    const isLocalized = isLocalizedContentType(contentType);\n\n    _.set(attributes, 'locale', {\n      writable: true,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      type: 'string',\n    });\n\n    _.set(attributes, 'localizations', {\n      type: 'relation',\n      relation: 'oneToMany',\n      target: contentType.uid,\n      writable: false,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      unstable_virtual: true,\n      joinColumn: {\n        name: 'document_id',\n        referencedColumn: 'document_id',\n        referencedTable: strapi.db.metadata.identifiers.getTableName(contentType.collectionName!),\n        // ensure the population will not include the results we already loaded\n        on({ results }: { results: any[] }) {\n          return {\n            id: {\n              $notIn: results.map((r) => r.id),\n            },\n          };\n        },\n      },\n    });\n  });\n\n  if (strapi.plugin('graphql')) {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    graphqlProvider({ strapi }).register();\n  }\n};\n"],"names":["strapi","extendContentTypes","addContentManagerLocaleMiddleware","server","router","use","ctx","next","method","validateLocaleCreation","isLocalizedContentType","getService","Object","values","contentTypes","forEach","contentType","attributes","isLocalized","_","set","writable","private","configurable","visible","type","relation","target","uid","unstable_virtual","joinColumn","name","referencedColumn","referencedTable","db","metadata","identifiers","getTableName","collectionName","on","results","id","$notIn","map","r","plugin","graphqlProvider","register"],"mappings":" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nimport validateLocaleCreation from './controllers/validate-locale-creation';\nimport graphqlProvider from './graphql';\nimport { getService } from './utils';\nimport { aiLocalizationJob } from './models/ai-localization-job';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n  strapi.get('models').add(aiLocalizationJob);\n\n  extendContentTypes(strapi);\n  addContentManagerLocaleMiddleware(strapi);\n};\n\n// TODO: v5 if implemented in the CM => delete this middleware\n/**\n * Adds middleware on CM creation routes to use i18n locale passed in a specific param\n * @param {Strapi} strapi\n */\nconst addContentManagerLocaleMiddleware = (strapi: Core.Strapi) => {\n  strapi.server.router.use('/content-manager/collection-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n\n  strapi.server.router.use('/content-manager/single-types/:model', (ctx, next) => {\n    if (ctx.method === 'POST' || ctx.method === 'PUT') {\n      return validateLocaleCreation(ctx, next);\n    }\n\n    return next();\n  });\n};\n\n/**\n * Adds locale and localization fields to all content types\n * Even if content type is not localized, it will have these fields\n * @param {Strapi} strapi\n */\nconst extendContentTypes = (strapi: Core.Strapi) => {\n  const { isLocalizedContentType } = getService('content-types');\n\n  Object.values(strapi.contentTypes).forEach((contentType) => {\n    const { attributes } = contentType;\n\n    const isLocalized = isLocalizedContentType(contentType);\n\n    _.set(attributes, 'locale', {\n      writable: true,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      type: 'string',\n    });\n\n    _.set(attributes, 'localizations', {\n      type: 'relation',\n      relation: 'oneToMany',\n      target: contentType.uid,\n      writable: false,\n      private: !isLocalized,\n      configurable: false,\n      visible: false,\n      unstable_virtual: true,\n      joinColumn: {\n        name: 'document_id',\n        referencedColumn: 'document_id',\n        referencedTable: strapi.db.metadata.identifiers.getTableName(contentType.collectionName!),\n        // ensure the population will not include the results we already loaded\n        on({ results }: { results: any[] }) {\n          return {\n            id: {\n              $notIn: results.map((r) => r.id),\n            },\n          };\n        },\n      },\n    });\n  });\n\n  if (strapi.plugin('graphql')) {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    graphqlProvider({ strapi }).register();\n  }\n};\n"],"names":["strapi","get","add","aiLocalizationJob","extendContentTypes","addContentManagerLocaleMiddleware","server","router","use","ctx","next","method","validateLocaleCreation","isLocalizedContentType","getService","Object","values","contentTypes","forEach","contentType","attributes","isLocalized","_","set","writable","private","configurable","visible","type","relation","target","uid","unstable_virtual","joinColumn","name","referencedColumn","referencedTable","db","metadata","identifiers","getTableName","collectionName","on","results","id","$notIn","map","r","plugin","graphqlProvider","register"],"mappings":";;;;;;AAQA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvDA,IAAAA,MAAAA,CAAOC,GAAG,CAAC,QAAUC,CAAAA,CAAAA,GAAG,CAACC,iBAAAA,CAAAA;IAEzBC,kBAAmBJ,CAAAA,MAAAA,CAAAA;IACnBK,iCAAkCL,CAAAA,MAAAA,CAAAA;AACpC,CAAA;AAEA;AACA;;;IAIA,MAAMK,oCAAoC,CAACL,MAAAA,GAAAA;IACzCA,MAAOM,CAAAA,MAAM,CAACC,MAAM,CAACC,GAAG,CAAC,0CAAA,EAA4C,CAACC,GAAKC,EAAAA,IAAAA,GAAAA;AACzE,QAAA,IAAID,IAAIE,MAAM,KAAK,UAAUF,GAAIE,CAAAA,MAAM,KAAK,KAAO,EAAA;AACjD,YAAA,OAAOC,uBAAuBH,GAAKC,EAAAA,IAAAA,CAAAA;AACrC;QAEA,OAAOA,IAAAA,EAAAA;AACT,KAAA,CAAA;IAEAV,MAAOM,CAAAA,MAAM,CAACC,MAAM,CAACC,GAAG,CAAC,sCAAA,EAAwC,CAACC,GAAKC,EAAAA,IAAAA,GAAAA;AACrE,QAAA,IAAID,IAAIE,MAAM,KAAK,UAAUF,GAAIE,CAAAA,MAAM,KAAK,KAAO,EAAA;AACjD,YAAA,OAAOC,uBAAuBH,GAAKC,EAAAA,IAAAA,CAAAA;AACrC;QAEA,OAAOA,IAAAA,EAAAA;AACT,KAAA,CAAA;AACF,CAAA;AAEA;;;;IAKA,MAAMN,qBAAqB,CAACJ,MAAAA,GAAAA;AAC1B,IAAA,MAAM,EAAEa,sBAAsB,EAAE,GAAGC,UAAW,CAAA,eAAA,CAAA;AAE9CC,IAAAA,MAAAA,CAAOC,MAAM,CAAChB,MAAAA,CAAOiB,YAAY,CAAEC,CAAAA,OAAO,CAAC,CAACC,WAAAA,GAAAA;QAC1C,MAAM,EAAEC,UAAU,EAAE,GAAGD,WAAAA;AAEvB,QAAA,MAAME,cAAcR,sBAAuBM,CAAAA,WAAAA,CAAAA;QAE3CG,CAAEC,CAAAA,GAAG,CAACH,UAAAA,EAAY,QAAU,EAAA;YAC1BI,QAAU,EAAA,IAAA;AACVC,YAAAA,OAAAA,EAAS,CAACJ,WAAAA;YACVK,YAAc,EAAA,KAAA;YACdC,OAAS,EAAA,KAAA;YACTC,IAAM,EAAA;AACR,SAAA,CAAA;QAEAN,CAAEC,CAAAA,GAAG,CAACH,UAAAA,EAAY,eAAiB,EAAA;YACjCQ,IAAM,EAAA,UAAA;YACNC,QAAU,EAAA,WAAA;AACVC,YAAAA,MAAAA,EAAQX,YAAYY,GAAG;YACvBP,QAAU,EAAA,KAAA;AACVC,YAAAA,OAAAA,EAAS,CAACJ,WAAAA;YACVK,YAAc,EAAA,KAAA;YACdC,OAAS,EAAA,KAAA;YACTK,gBAAkB,EAAA,IAAA;YAClBC,UAAY,EAAA;gBACVC,IAAM,EAAA,aAAA;gBACNC,gBAAkB,EAAA,aAAA;gBAClBC,eAAiBpC,EAAAA,MAAAA,CAAOqC,EAAE,CAACC,QAAQ,CAACC,WAAW,CAACC,YAAY,CAACrB,WAAAA,CAAYsB,cAAc,CAAA;;gBAEvFC,EAAG,CAAA,CAAA,EAAEC,OAAO,EAAsB,EAAA;oBAChC,OAAO;wBACLC,EAAI,EAAA;AACFC,4BAAAA,MAAAA,EAAQF,QAAQG,GAAG,CAAC,CAACC,CAAAA,GAAMA,EAAEH,EAAE;AACjC;AACF,qBAAA;AACF;AACF;AACF,SAAA,CAAA;AACF,KAAA,CAAA;IAEA,IAAI5C,MAAAA,CAAOgD,MAAM,CAAC,SAAY,CAAA,EAAA;;QAE5BC,eAAgB,CAAA;AAAEjD,YAAAA;AAAO,SAAA,CAAA,CAAGkD,QAAQ,EAAA;AACtC;AACF,CAAA;;;;"}
         
     | 
| 
         @@ -114,6 +114,26 @@ var admin = { 
     | 
|
| 
       114 
114 
     | 
    
         
             
                                'admin::isAuthenticatedAdmin'
         
     | 
| 
       115 
115 
     | 
    
         
             
                            ]
         
     | 
| 
       116 
116 
     | 
    
         
             
                        }
         
     | 
| 
      
 117 
     | 
    
         
            +
                    },
         
     | 
| 
      
 118 
     | 
    
         
            +
                    {
         
     | 
| 
      
 119 
     | 
    
         
            +
                        method: 'GET',
         
     | 
| 
      
 120 
     | 
    
         
            +
                        path: '/ai-localization-jobs/collection-types/:contentType/:documentId',
         
     | 
| 
      
 121 
     | 
    
         
            +
                        handler: 'ai-localization-jobs.getJobForCollectionType',
         
     | 
| 
      
 122 
     | 
    
         
            +
                        config: {
         
     | 
| 
      
 123 
     | 
    
         
            +
                            policies: [
         
     | 
| 
      
 124 
     | 
    
         
            +
                                'admin::isAuthenticatedAdmin'
         
     | 
| 
      
 125 
     | 
    
         
            +
                            ]
         
     | 
| 
      
 126 
     | 
    
         
            +
                        }
         
     | 
| 
      
 127 
     | 
    
         
            +
                    },
         
     | 
| 
      
 128 
     | 
    
         
            +
                    {
         
     | 
| 
      
 129 
     | 
    
         
            +
                        method: 'GET',
         
     | 
| 
      
 130 
     | 
    
         
            +
                        path: '/ai-localization-jobs/single-types/:contentType',
         
     | 
| 
      
 131 
     | 
    
         
            +
                        handler: 'ai-localization-jobs.getJobForSingleType',
         
     | 
| 
      
 132 
     | 
    
         
            +
                        config: {
         
     | 
| 
      
 133 
     | 
    
         
            +
                            policies: [
         
     | 
| 
      
 134 
     | 
    
         
            +
                                'admin::isAuthenticatedAdmin'
         
     | 
| 
      
 135 
     | 
    
         
            +
                            ]
         
     | 
| 
      
 136 
     | 
    
         
            +
                        }
         
     | 
| 
       117 
137 
     | 
    
         
             
                    }
         
     | 
| 
       118 
138 
     | 
    
         
             
                ]
         
     | 
| 
       119 
139 
     | 
    
         
             
            };
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n  type: 'admin',\n  routes: [\n    {\n      method: 'GET',\n      path: '/iso-locales',\n      handler: 'iso-locales.listIsoLocales',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.read'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/locales',\n      handler: 'locales.listLocales',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/locales',\n      handler: 'locales.createLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.create'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/locales/:id',\n      handler: 'locales.updateLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.update'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'DELETE',\n      path: '/locales/:id',\n      handler: 'locales.deleteLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.delete'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/content-manager/actions/get-non-localized-fields',\n      handler: 'content-types.getNonLocalizedAttributes',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/settings',\n      handler: 'settings.getSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/settings',\n      handler: 'settings.updateSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n  ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":";;AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,yBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n  type: 'admin',\n  routes: [\n    {\n      method: 'GET',\n      path: '/iso-locales',\n      handler: 'iso-locales.listIsoLocales',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.read'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/locales',\n      handler: 'locales.listLocales',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/locales',\n      handler: 'locales.createLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.create'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/locales/:id',\n      handler: 'locales.updateLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.update'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'DELETE',\n      path: '/locales/:id',\n      handler: 'locales.deleteLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.delete'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/content-manager/actions/get-non-localized-fields',\n      handler: 'content-types.getNonLocalizedAttributes',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/settings',\n      handler: 'settings.getSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/settings',\n      handler: 'settings.updateSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/ai-localization-jobs/collection-types/:contentType/:documentId',\n      handler: 'ai-localization-jobs.getJobForCollectionType',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/ai-localization-jobs/single-types/:contentType',\n      handler: 'ai-localization-jobs.getJobForSingleType',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n  ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":";;AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,yBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iEAAA;YACNC,OAAS,EAAA,8CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iDAAA;YACNC,OAAS,EAAA,0CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
         
     | 
| 
         @@ -112,6 +112,26 @@ var admin = { 
     | 
|
| 
       112 
112 
     | 
    
         
             
                                'admin::isAuthenticatedAdmin'
         
     | 
| 
       113 
113 
     | 
    
         
             
                            ]
         
     | 
| 
       114 
114 
     | 
    
         
             
                        }
         
     | 
| 
      
 115 
     | 
    
         
            +
                    },
         
     | 
| 
      
 116 
     | 
    
         
            +
                    {
         
     | 
| 
      
 117 
     | 
    
         
            +
                        method: 'GET',
         
     | 
| 
      
 118 
     | 
    
         
            +
                        path: '/ai-localization-jobs/collection-types/:contentType/:documentId',
         
     | 
| 
      
 119 
     | 
    
         
            +
                        handler: 'ai-localization-jobs.getJobForCollectionType',
         
     | 
| 
      
 120 
     | 
    
         
            +
                        config: {
         
     | 
| 
      
 121 
     | 
    
         
            +
                            policies: [
         
     | 
| 
      
 122 
     | 
    
         
            +
                                'admin::isAuthenticatedAdmin'
         
     | 
| 
      
 123 
     | 
    
         
            +
                            ]
         
     | 
| 
      
 124 
     | 
    
         
            +
                        }
         
     | 
| 
      
 125 
     | 
    
         
            +
                    },
         
     | 
| 
      
 126 
     | 
    
         
            +
                    {
         
     | 
| 
      
 127 
     | 
    
         
            +
                        method: 'GET',
         
     | 
| 
      
 128 
     | 
    
         
            +
                        path: '/ai-localization-jobs/single-types/:contentType',
         
     | 
| 
      
 129 
     | 
    
         
            +
                        handler: 'ai-localization-jobs.getJobForSingleType',
         
     | 
| 
      
 130 
     | 
    
         
            +
                        config: {
         
     | 
| 
      
 131 
     | 
    
         
            +
                            policies: [
         
     | 
| 
      
 132 
     | 
    
         
            +
                                'admin::isAuthenticatedAdmin'
         
     | 
| 
      
 133 
     | 
    
         
            +
                            ]
         
     | 
| 
      
 134 
     | 
    
         
            +
                        }
         
     | 
| 
       115 
135 
     | 
    
         
             
                    }
         
     | 
| 
       116 
136 
     | 
    
         
             
                ]
         
     | 
| 
       117 
137 
     | 
    
         
             
            };
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n  type: 'admin',\n  routes: [\n    {\n      method: 'GET',\n      path: '/iso-locales',\n      handler: 'iso-locales.listIsoLocales',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.read'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/locales',\n      handler: 'locales.listLocales',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/locales',\n      handler: 'locales.createLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.create'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/locales/:id',\n      handler: 'locales.updateLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.update'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'DELETE',\n      path: '/locales/:id',\n      handler: 'locales.deleteLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.delete'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/content-manager/actions/get-non-localized-fields',\n      handler: 'content-types.getNonLocalizedAttributes',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/settings',\n      handler: 'settings.getSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/settings',\n      handler: 'settings.updateSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n  ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,yBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n  type: 'admin',\n  routes: [\n    {\n      method: 'GET',\n      path: '/iso-locales',\n      handler: 'iso-locales.listIsoLocales',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.read'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/locales',\n      handler: 'locales.listLocales',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/locales',\n      handler: 'locales.createLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.create'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/locales/:id',\n      handler: 'locales.updateLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.update'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'DELETE',\n      path: '/locales/:id',\n      handler: 'locales.deleteLocale',\n      config: {\n        policies: [\n          'admin::isAuthenticatedAdmin',\n          {\n            name: 'plugin::content-manager.hasPermissions',\n            config: { actions: ['plugin::i18n.locale.delete'] },\n          },\n        ],\n      },\n    },\n    {\n      method: 'POST',\n      path: '/content-manager/actions/get-non-localized-fields',\n      handler: 'content-types.getNonLocalizedAttributes',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/settings',\n      handler: 'settings.getSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'PUT',\n      path: '/settings',\n      handler: 'settings.updateSettings',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/ai-localization-jobs/collection-types/:contentType/:documentId',\n      handler: 'ai-localization-jobs.getJobForCollectionType',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n    {\n      method: 'GET',\n      path: '/ai-localization-jobs/single-types/:contentType',\n      handler: 'ai-localization-jobs.getJobForSingleType',\n      config: {\n        policies: ['admin::isAuthenticatedAdmin'],\n      },\n    },\n  ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,yBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iEAAA;YACNC,OAAS,EAAA,8CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iDAAA;YACNC,OAAS,EAAA,0CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
         
     |