{"version":3,"file":"localazy-cdn-client.cjs","sources":["../../src/cdn/api/api.ts","../../src/cdn/cache/memory-cache-adapter.ts","../../src/cdn/utils.ts","../../src/cdn/cache/locales-cache.ts","../../src/cdn/response/response-factory.ts","../../src/cdn/context/context.ts","../../src/cdn/metafile/metafile-file.ts","../../src/cdn/metafile/metafile-locale.ts","../../src/cdn/metafile/metafile-data.ts","../../src/cdn/metafile/metafile-params.ts","../../src/cdn/context/metafile-context.ts","../../src/cdn/http/fetch-http-adapter.ts","../../src/cdn/methods/cdn-base.ts","../../src/cdn/methods/cdn-cache.ts","../../src/cdn/methods/cdn-metafile.ts","../../src/cdn/request/locales-map.ts","../../src/cdn/request/request.ts","../../src/cdn/request/request-builder.ts","../../src/cdn/cdn-client.ts"],"sourcesContent":["import { Context } from '@/cdn/context/context';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { ApiLocaleRequest } from '@/types/api-locale-request';\n\nexport class Api {\n  protected context: Context;\n\n  constructor(context: Context) {\n    this.context = context;\n  }\n\n  public async fetchLocale(options: ApiLocaleRequest): Promise<object | string> {\n    if (this.context.cache.has(options)) {\n      return new Promise((resolve): void => {\n        resolve(this.context.cache.get(options) as object | string);\n      });\n    }\n\n    return this.context.client.get(options.metafileLocale.uri);\n  }\n\n  public async fetchMetafile(): Promise<IMetafile> {\n    return (await this.context.client.get(this.context.metafile.params.jsonPath)) as IMetafile;\n  }\n}\n","import { ICacheAdapter } from '@/interfaces/i-cache-adapter';\n\nexport class MemoryCacheAdapter<K, V> implements ICacheAdapter<K, V> {\n  protected map: Map<K, V>;\n\n  constructor() {\n    this.map = new Map();\n  }\n\n  public get(key: K): V | undefined {\n    return this.map.get(key);\n  }\n\n  public has(key: K): boolean {\n    return this.map.has(key);\n  }\n\n  public set(key: K, value: V): void {\n    this.map.set(key, value);\n  }\n\n  public flush(): void {\n    this.map = new Map();\n  }\n}\n","export const isString = (value: unknown): value is string => typeof value === 'string';\n\nexport const isUndefined = (value: unknown): value is undefined => typeof value === 'undefined';\n\nexport const isArray = <T>(value: unknown): value is T[] => Array.isArray(value);\n\nexport const isPlainObject = (value: unknown): value is Record<string, unknown> =>\n  Object.prototype.toString.call(value) === '[object Object]';\n\nexport const uniq = <T>(array: T[]): T[] => [...new Set(array)];\n\nexport const uniqBy = <T>(array: T[], predicate: (item: T) => string): T[] => {\n  const seen: Record<string, boolean> = {};\n\n  return array.filter((item: T): boolean => {\n    const key: string = predicate(item);\n\n    if (!Object.hasOwn(seen, key)) {\n      seen[key] = true;\n\n      return true;\n    }\n\n    return false;\n  });\n};\n","import { MemoryCacheAdapter } from '@/cdn/cache/memory-cache-adapter';\nimport { Context } from '@/cdn/context/context';\nimport { uniq } from '@/cdn/utils';\nimport { ICacheAdapter } from '@/interfaces/i-cache-adapter';\nimport { CacheGetLocalesRequest } from '@/types/cache-get-locales-request';\nimport { CacheHasLocalesRequest } from '@/types/cache-has-locales-request';\nimport { CacheKeyMetafileOptions } from '@/types/cache-key-metafile-options';\nimport { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request';\n\nexport class LocalesCache {\n  protected context: Context;\n\n  protected cacheAdapter: ICacheAdapter<string, object | string>;\n\n  constructor(context: Context) {\n    this.context = context;\n    this.cacheAdapter = new MemoryCacheAdapter();\n  }\n\n  public setIfMissed(options: CacheStoreLocalesRequest): void {\n    const { metafileFile, metafileLocale, data }: CacheStoreLocalesRequest = options;\n\n    const key: string = this.keyFromMetafile({\n      metafileFile,\n      metafileLocale,\n    });\n\n    if (!this.cacheAdapter.has(key)) {\n      this.cacheAdapter.set(key, data);\n    }\n  }\n\n  public has(options: CacheHasLocalesRequest): boolean {\n    const key: string = this.keyFromMetafile(options);\n\n    return this.cacheAdapter.has(key);\n  }\n\n  public get(options: CacheGetLocalesRequest): object | string | undefined {\n    const key: string = this.keyFromMetafile(options);\n\n    return this.cacheAdapter.get(key);\n  }\n\n  public flush(): void {\n    this.cacheAdapter.flush();\n  }\n\n  protected keyFromMetafile(options: CacheKeyMetafileOptions): string {\n    const { metafileFile, metafileLocale }: CacheKeyMetafileOptions = options;\n    const productFlavors: string = [...uniq(metafileFile.productFlavors)].sort().join('-');\n\n    const indices: string[] = [\n      this.context.metafile.params.cdnId,\n      metafileFile.id,\n      metafileFile.file,\n      metafileFile.path,\n      metafileFile.library,\n      metafileFile.module,\n      metafileFile.buildType,\n      productFlavors,\n      metafileLocale.locale,\n      metafileLocale.timestamp.toString(),\n    ];\n\n    return indices.filter((key: string): boolean => key !== '').join('-');\n  }\n}\n","import { Context } from '@/cdn/context/context';\nimport { ApiLocaleRequest } from '@/types/api-locale-request';\nimport { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request';\nimport { CdnResponse } from '@/types/cdn-response';\nimport { ResponseFactoryOptions } from '@/types/response-factory-options';\n\nexport class ResponseFactory {\n  protected context: Context;\n\n  constructor(context: Context) {\n    this.context = context;\n  }\n\n  public createCdnResponse(options: ResponseFactoryOptions): CdnResponse {\n    const { requests, responses, hasSingleFileResponse, hasSingleLocaleResponse }: ResponseFactoryOptions = options;\n\n    if (responses.length === 0 || typeof responses[0] === 'undefined') {\n      return {};\n    }\n\n    this.cacheResponses(requests, responses);\n\n    return hasSingleFileResponse && hasSingleLocaleResponse\n      ? responses[0]\n      : ResponseFactory.transformResponses(options);\n  }\n\n  protected cacheResponses(requests: ApiLocaleRequest[], responses: (object | string)[]): void {\n    responses.forEach((response: object | string, index: number): void => {\n      if (typeof requests[index] !== 'undefined') {\n        const { metafileFile, metafileLocale }: Partial<CacheStoreLocalesRequest> = requests[index];\n\n        if (metafileFile && metafileLocale) {\n          this.context.cache.setIfMissed({ metafileFile, metafileLocale, data: response });\n        }\n      }\n    });\n  }\n\n  protected static transformResponses(options: ResponseFactoryOptions): CdnResponse {\n    const { requests, responses, hasSingleFileResponse }: ResponseFactoryOptions = options;\n\n    return responses.reduce((acc: CdnResponse, cur: object | string, index: number) => {\n      if (typeof requests[index] !== 'undefined') {\n        const { metafileFile, metafileLocale }: Partial<CacheStoreLocalesRequest> = requests[index];\n\n        if (metafileFile && metafileLocale) {\n          if (hasSingleFileResponse) {\n            // @ts-expect-error fix output type\n            acc[metafileLocale.locale] = cur;\n          } else {\n            // @ts-expect-error fix output type\n            if (!acc[metafileFile.id]) {\n              // @ts-expect-error fix output type\n              acc[metafileFile.id] = {};\n            }\n\n            // @ts-expect-error fix output type\n            acc[metafileFile.id][metafileLocale.locale] = cur;\n          }\n        }\n      }\n\n      return acc;\n    }, {});\n  }\n}\n","import { Api } from '@/cdn/api/api';\nimport { LocalesCache } from '@/cdn/cache/locales-cache';\nimport { CdnClient } from '@/cdn/cdn-client';\nimport { MetafileContext } from '@/cdn/context/metafile-context';\nimport { ResponseFactory } from '@/cdn/response/response-factory';\nimport { IHttpAdapter } from '@/interfaces/i-http-adapter';\nimport { ContextOptions } from '@/types/context-options';\n\nexport class Context {\n  public metafile: MetafileContext;\n\n  public cdn: CdnClient;\n\n  public client: IHttpAdapter;\n\n  public api: Api;\n\n  public cache: LocalesCache;\n\n  public responseFactory: ResponseFactory;\n\n  constructor(options: ContextOptions) {\n    this.metafile = options.metafileContext;\n    this.cdn = options.cdn;\n    this.client = options.client;\n    this.api = new Api(this);\n    this.cache = new LocalesCache(this);\n    this.responseFactory = new ResponseFactory(this);\n  }\n}\n","import { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { IMetafileFile } from '@/interfaces/i-metafile-file';\nimport { CdnFile } from '@/types/cdn-file';\nimport { CdnFileLocale } from '@/types/cdn-file-locale';\nimport { MetafileFileOptions } from '@/types/metafile-file-options';\n\nexport class MetafileFile implements Omit<IMetafileFile, 'locales'> {\n  public id: string;\n\n  public file: string;\n\n  public path: string;\n\n  public library: string;\n\n  public module: string;\n\n  public buildType: string;\n\n  public timestamp: number;\n\n  public productFlavors: string[];\n\n  public locales: MetafileLocale[];\n\n  protected baseUrl: string;\n\n  constructor(options: MetafileFileOptions) {\n    this.id = options.id;\n    this.file = options.file;\n    this.path = options.path;\n    this.library = options.library;\n    this.module = options.module;\n    this.buildType = options.buildType;\n    this.timestamp = options.timestamp;\n    this.productFlavors = options.productFlavors;\n    this.locales = options.locales;\n    this.baseUrl = options.baseUrl;\n  }\n\n  public toCdnFile(): CdnFile {\n    return {\n      id: this.id,\n      file: this.file,\n      path: this.path,\n      library: this.library,\n      module: this.module,\n      buildType: this.buildType,\n      productFlavors: this.productFlavors,\n      locales: this.locales.map(\n        (locale: MetafileLocale): CdnFileLocale => ({\n          locale: locale.locale,\n          isBaseLocale: locale.isBaseLocale,\n          uri: `${this.baseUrl}${locale.uri}`,\n        }),\n      ),\n    };\n  }\n}\n","import { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale';\nimport { CdnLocale } from '@/types/cdn-locale';\n\nexport class MetafileLocale implements IMetafileFileLocale {\n  public language: string;\n\n  public region: string;\n\n  public script: string;\n\n  public isRtl: boolean;\n\n  public name: string;\n\n  public localizedName: string;\n\n  public uri: string;\n\n  public timestamp: number;\n\n  protected baseLocale: string;\n\n  constructor(options: IMetafileFileLocale, baseLocale: string) {\n    this.language = options.language;\n    this.region = options.region;\n    this.script = options.script;\n    this.isRtl = options.isRtl;\n    this.name = options.name;\n    this.localizedName = options.localizedName;\n    this.uri = options.uri;\n    this.timestamp = options.timestamp;\n    this.baseLocale = baseLocale;\n  }\n\n  get locale(): string {\n    if (this.language && this.region && this.script) {\n      return `${this.language}_${this.region}#${this.script}`;\n    }\n\n    if (this.language && this.script) {\n      return `${this.language}#${this.script}`;\n    }\n\n    if (this.language && this.region) {\n      return `${this.language}_${this.region}`;\n    }\n\n    return this.language;\n  }\n\n  get isBaseLocale(): boolean {\n    return this.locale === this.baseLocale;\n  }\n\n  public toCdnLocale(): CdnLocale {\n    return {\n      locale: this.locale,\n      isBaseLocale: this.isBaseLocale,\n      language: this.language,\n      region: this.region,\n      script: this.script,\n      isRtl: this.isRtl,\n      name: this.name,\n      localizedName: this.localizedName,\n    };\n  }\n}\n","import { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { uniqBy } from '@/cdn/utils';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale';\nimport { IMetafileFiles } from '@/interfaces/i-metafile-files';\nimport { CdnLocale } from '@/types/cdn-locale';\nimport { FilesMap } from '@/types/files-map';\nimport { MetafileOptions } from '@/types/metafile-options';\n\nexport class MetafileData implements Omit<IMetafile, 'files' | 'baseLocale'> {\n  public projectUrl: string;\n\n  public baseLocale: CdnLocale;\n\n  public locales: CdnLocale[];\n\n  public timestamp: number;\n\n  public files: MetafileFile[];\n\n  public filesMap: FilesMap;\n\n  constructor(options: MetafileOptions, params: MetafileParams) {\n    this.projectUrl = options.projectUrl;\n    this.timestamp = options.timestamp;\n    this.files = MetafileData.filesFactory(options.files, options.baseLocale, params);\n    this.filesMap = MetafileData.filesMapFactory(this.files);\n    this.locales = MetafileData.localesFactory(this.files);\n    this.baseLocale = this.locales.find((locale: CdnLocale) => locale.isBaseLocale) as CdnLocale;\n  }\n\n  public static createEmpty(params: MetafileParams): MetafileData {\n    return new MetafileData(\n      {\n        projectUrl: '',\n        baseLocale: '',\n        timestamp: 0,\n        files: {},\n      },\n      params,\n    );\n  }\n\n  protected static filesFactory(files: IMetafileFiles, baseLocale: string, params: MetafileParams): MetafileFile[] {\n    return Object.keys(files).reduce((acc: MetafileFile[], cur: string) => {\n      if (typeof files[cur] !== 'undefined') {\n        const locales: MetafileLocale[] = files[cur].locales.map(\n          (locale: IMetafileFileLocale) => new MetafileLocale(locale, baseLocale),\n        );\n\n        acc.push(\n          new MetafileFile({\n            ...files[cur],\n            id: cur,\n            locales,\n            baseUrl: params.baseUrl,\n          }),\n        );\n      }\n\n      return acc;\n    }, []);\n  }\n\n  protected static filesMapFactory(files: MetafileFile[]): FilesMap {\n    return files.reduce((acc: FilesMap, cur: MetafileFile) => {\n      acc[cur.id] = cur;\n\n      return acc;\n    }, {});\n  }\n\n  protected static localesFactory(files: MetafileFile[]): CdnLocale[] {\n    const locales: CdnLocale[] = files.reduce((acc: CdnLocale[], cur: MetafileFile) => {\n      acc.push(...cur.locales.map((locale: MetafileLocale): CdnLocale => locale.toCdnLocale()));\n      return acc;\n    }, []);\n\n    return uniqBy(locales, (cdnLocale: CdnLocale): string => cdnLocale.locale);\n  }\n}\n","import { IMetafileParams } from '@/interfaces/i-metafile-params';\n\nexport class MetafileParams implements IMetafileParams {\n  protected options: IMetafileParams;\n\n  constructor(metafileUrl: string) {\n    this.options = MetafileParams.parseMetafileUrl(metafileUrl);\n  }\n\n  get url(): string {\n    return this.options.url;\n  }\n\n  get baseUrl(): string {\n    return this.options.baseUrl;\n  }\n\n  get cdnId(): string {\n    return this.options.cdnId;\n  }\n\n  get jsonPath(): string {\n    return this.options.jsonPath;\n  }\n\n  protected static parseMetafileUrl(metafileUrl: string): IMetafileParams {\n    let url: URL;\n\n    try {\n      url = new URL(metafileUrl);\n    } catch {\n      throw new Error('Invalid param: \"options.metafile\" cannot be parsed as url.');\n    }\n\n    const matches: string[] | null = /^\\/(.*?)\\/(.*?)\\.(v2.json|js|ts)$/.exec(url.pathname);\n\n    if (\n      matches === null ||\n      matches.length !== 4 ||\n      typeof matches[1] === 'undefined' ||\n      typeof matches[2] === 'undefined'\n    ) {\n      throw new Error('Invalid param: \"options.metafile\" contains invalid metafile url.');\n    }\n\n    const cdnId: string = matches[1];\n    const tagId: string = matches[2];\n\n    return {\n      url: metafileUrl,\n      baseUrl: url.origin,\n      cdnId,\n      jsonPath: `/${cdnId}/${tagId}.v2.json`,\n    };\n  }\n}\n","import { MetafileData } from '@/cdn/metafile/metafile-data';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\n\nexport class MetafileContext {\n  public params: MetafileParams;\n\n  public parsedData: IMetafile | null;\n\n  public data: MetafileData;\n\n  constructor(options: CdnClientOptions) {\n    this.params = new MetafileParams(options.metafile);\n    this.parsedData = null;\n    this.data = MetafileData.createEmpty(this.params);\n  }\n\n  public setMetafile(metafile: IMetafile): void {\n    this.parsedData = metafile;\n\n    this.data = new MetafileData(metafile, this.params);\n  }\n}\n","import { IHttpAdapter } from '@/interfaces/i-http-adapter';\n\nexport class FetchHttpAdapter implements IHttpAdapter {\n  protected baseUrl: string;\n\n  constructor(baseUrl: string) {\n    this.baseUrl = baseUrl;\n  }\n\n  async get(url: string): Promise<string | object> {\n    const response: Response = await fetch(`${this.baseUrl}${url}`);\n    const contentType: string | null = response.headers.get('content-type');\n    const isJson: boolean = contentType === 'application/json5' || contentType === 'application/json';\n\n    if (response.status >= 400) {\n      throw new Error(`Request failed with status code ${response.status.toString()}`);\n    }\n\n    let result: string | object;\n\n    if (isJson) {\n      result = (await response.json()) as object;\n    } else {\n      result = await response.text();\n    }\n\n    return result;\n  }\n}\n","import { Context } from '@/cdn/context/context';\n\nexport abstract class CdnBase {\n  protected context: Context;\n\n  constructor(context: Context) {\n    this.context = context;\n  }\n}\n","import { CdnBase } from '@/cdn/methods/cdn-base';\n\nexport class CdnCache extends CdnBase {\n  public flush = (): void => {\n    this.context.cache.flush();\n  };\n}\n","import { MetafileData } from '@/cdn/metafile/metafile-data';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { CdnBase } from '@/cdn/methods/cdn-base';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\nimport { CdnFile } from '@/types/cdn-file';\nimport { CdnLocale } from '@/types/cdn-locale';\nimport { CdnLocalesOptions } from '@/types/cdn-locales-options';\n\nexport class CdnMetafile extends CdnBase {\n  get projectUrl(): string {\n    return this.context.metafile.data.projectUrl;\n  }\n\n  get baseLocale(): CdnLocale {\n    return this.context.metafile.data.baseLocale;\n  }\n\n  get url(): string {\n    return this.context.metafile.params.url;\n  }\n\n  get files(): CdnFile[] {\n    return this.context.metafile.data.files.map((file: MetafileFile): CdnFile => file.toCdnFile());\n  }\n\n  public locales = (options?: CdnLocalesOptions): CdnLocale[] => {\n    const { excludeBaseLocale }: CdnLocalesOptions = options || {};\n    const { locales }: MetafileData = this.context.metafile.data;\n\n    return excludeBaseLocale ? locales.filter((cdnLocale: CdnLocale): boolean => !cdnLocale.isBaseLocale) : locales;\n  };\n\n  public refresh = async (): Promise<void> => {\n    const response: IMetafile = await this.context.api.fetchMetafile();\n\n    this.context.metafile.setMetafile(response);\n  };\n\n  public switch = async (options: CdnClientOptions): Promise<void> => {\n    this.context.metafile.params = new MetafileParams(options.metafile);\n\n    await this.refresh();\n  };\n}\n","import { Context } from '@/cdn/context/context';\nimport { LocalesMapData } from '@/types/locales-map-data';\nimport { LocalesMapOptions } from '@/types/locales-map-options';\n\nexport class LocalesMap {\n  public data: LocalesMapData;\n\n  protected context: Context;\n\n  constructor(options: LocalesMapOptions) {\n    this.context = options.context;\n    this.data = options.data || {};\n  }\n}\n","import { Context } from '@/cdn/context/context';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { LocalesMap } from '@/cdn/request/locales-map';\nimport { ApiLocaleRequest } from '@/types/api-locale-request';\nimport { CdnResponse } from '@/types/cdn-response';\n\nexport class Request {\n  public files: MetafileFile[];\n\n  public localesMap: LocalesMap;\n\n  public hasSingleFileResponse: boolean;\n\n  public hasSingleLocaleResponse: boolean;\n\n  protected context: Context;\n\n  constructor(context: Context) {\n    this.files = [];\n    this.localesMap = new LocalesMap({ context });\n    this.hasSingleFileResponse = false;\n    this.hasSingleLocaleResponse = false;\n    this.context = context;\n  }\n\n  public async execute(): Promise<CdnResponse> {\n    const payload: [Promise<string | object>, ApiLocaleRequest][] = this.getPromises();\n    const promises: Promise<string | object>[] = payload.map(\n      (item: [Promise<string | object>, ApiLocaleRequest]) => item[0],\n    );\n    const requests: ApiLocaleRequest[] = payload.map((item: [Promise<string | object>, ApiLocaleRequest]) => item[1]);\n    const responses: (string | object)[] = await Promise.all(promises);\n\n    return this.context.responseFactory.createCdnResponse({\n      requests,\n      responses,\n      localesMap: this.localesMap,\n      hasSingleFileResponse: this.hasSingleFileResponse,\n      hasSingleLocaleResponse: this.hasSingleLocaleResponse,\n    });\n  }\n\n  protected getPromises(): [Promise<string | object>, ApiLocaleRequest][] {\n    return this.files.reduce((acc: [Promise<string | object>, ApiLocaleRequest][], cur: MetafileFile) => {\n      if (typeof this.localesMap.data?.[cur.id] !== 'undefined') {\n        acc.push(\n          // @ts-expect-error TODO fix type\n          ...this.localesMap.data[cur.id].map(\n            (metafileLocale: MetafileLocale): [Promise<string | object>, ApiLocaleRequest] => {\n              const request: ApiLocaleRequest = {\n                metafileFile: cur,\n                metafileLocale,\n              };\n\n              return [this.context.api.fetchLocale(request), request];\n            },\n          ),\n        );\n      }\n      return acc;\n    }, []);\n  }\n}\n","import { Context } from '@/cdn/context/context';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { LocalesMap } from '@/cdn/request/locales-map';\nimport { Request } from '@/cdn/request/request';\nimport { isArray, isPlainObject, isString, isUndefined } from '@/cdn/utils';\nimport { IRequestBuilder } from '@/interfaces/i-request-builder';\nimport { CdnFile } from '@/types/cdn-file';\n\nexport class RequestBuilder implements IRequestBuilder {\n  protected context: Context;\n\n  protected request: Request;\n\n  constructor(context: Context) {\n    this.context = context;\n    this.request = new Request(this.context);\n  }\n\n  public addFiles(files?: (CdnFile | string)[] | CdnFile | string): this {\n    if (!(isPlainObject(files) || isString(files) || isUndefined(files) || isArray(files))) {\n      throw new Error('Invalid param: \"request.files\" must be object, array, string or undefined.');\n    }\n\n    if (isArray(files)) {\n      files.forEach((i: CdnFile | string): void => {\n        if (!(isPlainObject(i) || isString(i))) {\n          throw new Error('Invalid param: array \"request.files\" must contain objects or strings.');\n        }\n      });\n    }\n\n    if (isString(files)) {\n      this.request.hasSingleFileResponse = true;\n\n      const file: MetafileFile | undefined = this.context.metafile.data.files.find(\n        (i: MetafileFile): boolean => i.id === files,\n      );\n\n      if (!(file instanceof MetafileFile)) {\n        throw new Error(`File not found: \"${files}\".`);\n      }\n\n      this.request.files = [file];\n    } else if (isUndefined(files)) {\n      this.request.files = [...this.context.metafile.data.files];\n    } else if (isArray(files)) {\n      this.request.files = files.map((file: CdnFile | string): MetafileFile => {\n        let metafileFile: MetafileFile;\n\n        if (isString(file)) {\n          const foundFile: MetafileFile | undefined = this.context.metafile.data.files.find(\n            (i: MetafileFile): boolean => i.id === file,\n          );\n\n          if (isUndefined(foundFile)) {\n            throw new Error(`File not found: \"${file}\".`);\n          }\n\n          metafileFile = foundFile;\n        } else {\n          const foundFile: MetafileFile | undefined = this.context.metafile.data.files.find(\n            (i: MetafileFile): boolean => i.id === file.id,\n          );\n\n          if (isUndefined(foundFile)) {\n            throw new Error(`File not found: \"${file.id}\".`);\n          }\n\n          metafileFile = foundFile;\n        }\n\n        return metafileFile;\n      });\n    } else if (isPlainObject(files)) {\n      this.request.hasSingleFileResponse = true;\n\n      const foundFile: MetafileFile | undefined = this.context.metafile.data.files.find(\n        (i: MetafileFile): boolean => i.id === files.id,\n      );\n\n      if (isUndefined(foundFile)) {\n        throw new Error(`File not found: \"${files.id}\".`);\n      }\n\n      this.request.files = [foundFile];\n    }\n\n    return this;\n  }\n\n  public addLocales(locales?: string[] | string, excludeBaseLocale?: boolean): this {\n    if (!(isString(locales) || isUndefined(locales) || isArray(locales))) {\n      throw new Error('Invalid param: \"request.locales\" must be array, string or undefined.');\n    }\n\n    if (isArray(locales)) {\n      locales.forEach((i: MetafileFile | string): void => {\n        if (!isString(i)) {\n          throw new Error('Invalid param: array \"request.locales\" must contain strings.');\n        }\n      });\n    }\n\n    if (isString(locales)) {\n      this.request.hasSingleLocaleResponse = true;\n      this.request.files.reduce((acc: LocalesMap, cur: MetafileFile) => {\n        acc.data[cur.id] = cur.locales.filter(\n          (metafileLocale: MetafileLocale): boolean => metafileLocale.locale === locales,\n        );\n\n        return acc;\n      }, this.request.localesMap);\n    } else if (isUndefined(locales)) {\n      this.request.files.reduce((acc: LocalesMap, cur: MetafileFile) => {\n        acc.data[cur.id] = excludeBaseLocale\n          ? cur.locales.filter((metafileLocale: MetafileLocale): boolean => !metafileLocale.isBaseLocale)\n          : cur.locales;\n\n        return acc;\n      }, this.request.localesMap);\n    } else if (isArray(locales)) {\n      this.request.files.reduce((acc: LocalesMap, cur: MetafileFile) => {\n        acc.data[cur.id] = cur.locales.filter((metafileLocale: MetafileLocale) =>\n          locales.includes(metafileLocale.locale),\n        );\n\n        return acc;\n      }, this.request.localesMap);\n    }\n\n    return this;\n  }\n\n  public getCdnRequest(): Request {\n    const result: Request = this.request;\n    this.request = new Request(this.context);\n    return result;\n  }\n}\n","import { Context } from '@/cdn/context/context';\nimport { MetafileContext } from '@/cdn/context/metafile-context';\nimport { FetchHttpAdapter } from '@/cdn/http/fetch-http-adapter';\nimport { CdnCache } from '@/cdn/methods/cdn-cache';\nimport { CdnMetafile } from '@/cdn/methods/cdn-metafile';\nimport { RequestBuilder } from '@/cdn/request/request-builder';\nimport { isString } from '@/cdn/utils';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\nimport { CdnFetchOptions } from '@/types/cdn-fetch-options';\nimport { CdnResponse } from '@/types/cdn-response';\n\nexport class CdnClient {\n  public metafile: CdnMetafile;\n\n  public cache: CdnCache;\n\n  protected context: Context;\n\n  public static version = '__CLIENT_VERSION__';\n\n  protected constructor(options: CdnClientOptions) {\n    const metafileContext: MetafileContext = new MetafileContext(options);\n    const client: FetchHttpAdapter = new FetchHttpAdapter(metafileContext.params.baseUrl);\n\n    this.context = new Context({ metafileContext, cdn: this, client });\n    this.metafile = new CdnMetafile(this.context);\n    this.cache = new CdnCache(this.context);\n  }\n\n  public fetch = async (options?: CdnFetchOptions): Promise<CdnResponse> => {\n    const { files, locales, excludeBaseLocale }: CdnFetchOptions = options || {};\n    const requestBuilder: RequestBuilder = new RequestBuilder(this.context)\n      .addFiles(files)\n      .addLocales(locales, excludeBaseLocale);\n\n    return requestBuilder.getCdnRequest().execute();\n  };\n\n  public static async create(options: CdnClientOptions): Promise<CdnClient> {\n    if (!options) {\n      throw new Error('Invalid param: missing required \"options\" parameter.');\n    }\n\n    if (!isString(options.metafile)) {\n      throw new Error('Invalid param: \"options.metafile\" must be string.');\n    }\n\n    const cdn: CdnClient = new CdnClient(options);\n\n    await cdn.metafile.refresh();\n\n    return cdn;\n  }\n}\n"],"names":[],"mappings":"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"}