{"version":3,"sources":["../../../src/localization/localeMapper.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport { LocalesValues } from '@intlayer/config/client';\n\nexport type LocaleData = {\n  locale: LocalesValues;\n  defaultLocale: LocalesValues;\n  isDefault: boolean;\n  locales: LocalesValues[];\n  urlPrefix: string;\n};\n\n/**\n * Map the locale data to an array of objects\n *\n * @example\n * ```ts\n * const routes = localeMap((localizedData) =>\n * ({\n *    path: localizedData.urlPrefix,\n *    name: localizedData.locale,\n *    isDefault: localizedData.isDefault,\n *    locales: localizedData.locales,\n *    defaultLocale: localizedData.defaultLocale,\n *  }),\n * );\n *\n * // Result\n * [\n *   { path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' },\n *   { path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' },\n *   { path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' },\n * ]\n * ```\n *\n * @param mapper - The mapper function that returns an object\n * @returns An array of objects\n */\nexport const localeMap = <T extends object>(\n  mapper: (locale: LocaleData) => T,\n  locales: LocalesValues[] = configuration.internationalization.locales,\n  defaultLocale: LocalesValues = configuration.internationalization\n    .defaultLocale,\n  prefixDefault: boolean = configuration.middleware.prefixDefault\n): T[] =>\n  locales.map((locale) =>\n    mapper({\n      locale,\n      defaultLocale,\n      locales,\n      isDefault: locale === defaultLocale,\n      urlPrefix: locale === defaultLocale && !prefixDefault ? '' : `/${locale}`,\n    })\n  );\n\n/**\n * Flatten the locale map into a single array of objects\n *\n * @example\n * ```ts\n * const routes = localeMap((localizedData) =>\n * [{\n *    path: localizedData.urlPrefix,\n *    name: localizedData.locale,\n *    isDefault: localizedData.isDefault,\n *    locales: localizedData.locales,\n *    defaultLocale: localizedData.defaultLocale,\n *  }],\n * );\n *\n * // Result\n * [\n *   { path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' },\n *   { path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' },\n *   { path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' },\n * ]\n * ```\n *\n * @param mapper - The mapper function that returns an array of objects\n * @returns An array of objects\n */\nexport const localeFlatMap = <T>(\n  mapper: (locale: LocaleData) => T[],\n  locales: LocalesValues[] = configuration.internationalization.locales,\n  defaultLocale: LocalesValues = configuration.internationalization\n    .defaultLocale,\n  prefixDefault: boolean = configuration.middleware.prefixDefault\n): T[] =>\n  locales.flatMap((locale) =>\n    mapper({\n      locale,\n      defaultLocale,\n      locales,\n      isDefault: locale === defaultLocale,\n      urlPrefix: locale === defaultLocale && !prefixDefault ? '' : `/${locale}`,\n    })\n  );\n"],"mappings":"AAAA,OAAO,mBAAmB;AAqCnB,MAAM,YAAY,CACvB,QACA,UAA2B,cAAc,qBAAqB,SAC9D,gBAA+B,cAAc,qBAC1C,eACH,gBAAyB,cAAc,WAAW,kBAElD,QAAQ;AAAA,EAAI,CAAC,WACX,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,WAAW;AAAA,IACtB,WAAW,WAAW,iBAAiB,CAAC,gBAAgB,KAAK,IAAI,MAAM;AAAA,EACzE,CAAC;AACH;AA4BK,MAAM,gBAAgB,CAC3B,QACA,UAA2B,cAAc,qBAAqB,SAC9D,gBAA+B,cAAc,qBAC1C,eACH,gBAAyB,cAAc,WAAW,kBAElD,QAAQ;AAAA,EAAQ,CAAC,WACf,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,WAAW;AAAA,IACtB,WAAW,WAAW,iBAAiB,CAAC,gBAAgB,KAAK,IAAI,MAAM;AAAA,EACzE,CAAC;AACH;","names":[]}