@localazy/cdn-client 1.4.1 → 1.5.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/README.md +55 -15
- package/dist/browser/localazy-cdn-client.umd.min.js +3 -3
- package/dist/browser/localazy-cdn-client.umd.min.js.map +1 -1
- package/dist/index.d.ts +1 -22
- package/dist/localazy-cdn-client.js +84 -128
- package/dist/localazy-cdn-client.js.map +1 -1
- package/dist/localazy-cdn-client.min.js +3 -3
- package/dist/localazy-cdn-client.min.js.map +1 -1
- package/dist/node/localazy-cdn-client.cjs +84 -128
- package/dist/node/localazy-cdn-client.cjs.map +1 -1
- package/package.json +19 -12
- package/dist/browser/localazy-cdn-client.umd.js +0 -695
- package/dist/browser/localazy-cdn-client.umd.js.map +0 -1
- package/dist/node/localazy-cdn-client.min.cjs +0 -6
- package/dist/node/localazy-cdn-client.min.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localazy-cdn-client.min.js","sources":["../src/cdn/api/api.ts","../src/cdn/utils.ts","../src/cdn/cache/memory-cache-adapter.ts","../src/cdn/cache/locales-cache.ts","../src/cdn/methods/cdn-base.ts","../src/cdn/methods/cdn-cache.ts","../src/cdn/metafile/metafile-locale.ts","../src/cdn/metafile/metafile-file.ts","../src/cdn/metafile/metafile-data.ts","../src/cdn/metafile/metafile-params.ts","../src/cdn/context/metafile-context.ts","../src/cdn/response/response-factory.ts","../src/cdn/context/context.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/http/fetch-http-adapter.ts","../src/cdn/cdn-client.ts"],"sourcesContent":["import { IMetafile } from '@/interfaces/i-metafile';\nimport { ApiLocaleRequest } from '@/types/api-locale-request';\nimport { Context } from '@/cdn/context/context';\n\nexport type ApiRequestConfig = object & {\n reference: ApiLocaleRequest;\n};\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","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> => Object\n .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 { 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","import { uniq } from '@/cdn/utils';\nimport { ICacheAdapter } from '@/interfaces/i-cache-adapter';\nimport { CacheKeyMetafileOptions } from '@/types/cache-key-metafile-options';\nimport { CacheGetLocalesRequest } from '@/types/cache-get-locales-request';\nimport { CacheHasLocalesRequest } from '@/types/cache-has-locales-request';\nimport { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request';\nimport { MemoryCacheAdapter } from '@/cdn/cache/memory-cache-adapter';\nimport { Context } from '@/cdn/context/context';\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';\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 { CdnLocale } from '@/types/cdn-locale';\nimport { IMetafileFileLocale } from '@/interfaces/i-metafile-file-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 { CdnFile } from '@/types/cdn-file';\nimport { CdnFileLocale } from '@/types/cdn-file-locale';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { IMetafileFile } from '@/interfaces/i-metafile-file';\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((locale: MetafileLocale): CdnFileLocale => ({\n locale: locale.locale,\n isBaseLocale: locale.isBaseLocale,\n uri: `${this.baseUrl}${locale.uri}`,\n })),\n };\n }\n}\n","import { uniqBy } from '@/cdn/utils';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { CdnLocale } from '@/types/cdn-locale';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale';\nimport { IMetafileFiles } from '@/interfaces/i-metafile-files';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileOptions } from '@/types/metafile-options';\nimport { FilesMap } from '@/types/files-map';\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(\n (acc: MetafileFile[], cur: string) => {\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 return acc;\n },\n [],\n );\n }\n\n protected static filesMapFactory(files: MetafileFile[]): FilesMap {\n return files.reduce(\n (acc: FilesMap, cur: MetafileFile) => {\n acc[cur.id] = cur;\n\n return acc;\n },\n {},\n );\n }\n\n protected static localesFactory(files: MetafileFile[]): CdnLocale[] {\n const locales: CdnLocale[] = files.reduce(\n (acc: CdnLocale[], cur: MetafileFile) => {\n acc.push(\n ...cur.locales.map(\n (locale: MetafileLocale): CdnLocale => locale.toCdnLocale(),\n ),\n );\n return acc;\n },\n [],\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 (e) {\n throw new Error('Invalid param: \"options.metafile\" cannot be parsed as url.');\n }\n\n const matches: string[] | null = url.pathname.match(/^\\/(.*?)\\/(.*?)\\.(v2.json|js|ts)$/);\n\n if (matches === null || matches.length !== 4) {\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 { IMetafile } from '@/interfaces/i-metafile';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\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 { ApiLocaleRequest } from '@/types/api-locale-request';\nimport { Context } from '@/cdn/context/context';\nimport { ResponseFactoryOptions } from '@/types/response-factory-options';\nimport { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request';\nimport { CdnResponse } from '@/types/cdn-response';\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 {\n requests, responses, hasSingleFileResponse, hasSingleLocaleResponse,\n }: ResponseFactoryOptions = options;\n\n if (responses.length === 0) {\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 const {\n metafileFile,\n metafileLocale,\n }: Partial<CacheStoreLocalesRequest> = requests[index];\n\n if (metafileFile && metafileLocale) {\n this.context.cache.setIfMissed({ metafileFile, metafileLocale, data: response });\n }\n });\n }\n\n protected static transformResponses(options: ResponseFactoryOptions): CdnResponse {\n const { requests, responses, hasSingleFileResponse }: ResponseFactoryOptions = options;\n\n return responses.reduce(\n (acc: CdnResponse, cur: object | string, index: number) => {\n const {\n metafileFile,\n metafileLocale,\n }: 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n acc[metafileFile.id][metafileLocale.locale] = cur;\n }\n }\n\n return acc;\n },\n {},\n );\n }\n}\n","import { Api } from '@/cdn/api/api';\nimport { LocalesCache } from '@/cdn/cache/locales-cache';\nimport { CdnClient } from '@/cdn/cdn-client';\nimport { ResponseFactory } from '@/cdn/response/response-factory';\nimport { ContextOptions } from '@/types/context-options';\nimport { MetafileContext } from '@/cdn/context/metafile-context';\nimport { IHttpAdapter } from '@/interfaces/i-http-adapter';\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 { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\nimport { MetafileData } from '@/cdn/metafile/metafile-data';\nimport { CdnBase } from '@/cdn/methods/cdn-base';\nimport { CdnFile } from '@/types/cdn-file';\nimport { CdnLocalesOptions } from '@/types/cdn-locales-options';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { CdnLocale } from '@/types/cdn-locale';\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\n ? locales.filter((cdnLocale: CdnLocale): boolean => !cdnLocale.isBaseLocale)\n : 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(\n (item: [Promise<string | object>, ApiLocaleRequest]) => item[1],\n );\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(\n (acc: [Promise<string | object>, ApiLocaleRequest][], cur: MetafileFile) => {\n if (this.localesMap.data[cur.id]) {\n acc.push(\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 [\n this.context.api.fetchLocale(request),\n request,\n ];\n },\n ),\n );\n }\n return acc;\n },\n [],\n );\n }\n}\n","import {\n isPlainObject, isArray, isString, isUndefined,\n} from '@/cdn/utils';\nimport { CdnFile } from '@/types/cdn-file';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { LocalesMap } from '@/cdn/request/locales-map';\nimport { Context } from '@/cdn/context/context';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { IRequestBuilder } from '@/interfaces/i-request-builder';\nimport { Request } from '@/cdn/request/request';\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): RequestBuilder {\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): RequestBuilder {\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(\n (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 },\n this.request.localesMap,\n );\n } else if (isUndefined(locales)) {\n this.request.files.reduce(\n (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 },\n this.request.localesMap,\n );\n } else if (isArray(locales)) {\n this.request.files.reduce(\n (acc: LocalesMap, cur: MetafileFile) => {\n acc.data[cur.id] = cur.locales.filter(\n (metafileLocale: MetafileLocale) => locales.includes(metafileLocale.locale),\n );\n\n return acc;\n },\n this.request.localesMap,\n );\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 { 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 = response.headers.get('content-type') || '';\n const isJson: boolean = [\n 'application/json5',\n 'application/json',\n ].includes(contentType);\n\n if (response.status >= 400) {\n throw new Error(`Request failed with status code ${response.status}`);\n }\n\n let result: string | object = '';\n\n if (isJson) {\n try {\n result = await response.json() as object;\n } catch (error) {\n result = {};\n }\n } else {\n try {\n result = await response.text();\n } catch (error) {\n result = '';\n }\n }\n\n return result;\n }\n}\n","import 'isomorphic-fetch';\nimport { isString } from '@/cdn/utils';\nimport { CdnFetchOptions } from '@/types/cdn-fetch-options';\nimport { CdnResponse } from '@/types/cdn-response';\nimport { CdnCache } from '@/cdn/methods/cdn-cache';\nimport { MetafileContext } from '@/cdn/context/metafile-context';\nimport { Context } from '@/cdn/context/context';\nimport { CdnMetafile } from '@/cdn/methods/cdn-metafile';\nimport { RequestBuilder } from '@/cdn/request/request-builder';\nimport { FetchHttpAdapter } from '@/cdn/http/fetch-http-adapter';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\n\nexport class CdnClient {\n public metafile: CdnMetafile;\n\n public cache: CdnCache;\n\n protected context: Context;\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":["Api","constructor","context","__publicField","this","fetchLocale","options","cache","has","Promise","resolve","get","client","metafileLocale","uri","fetchMetafile","metafile","params","jsonPath","isString","value","isUndefined","isArray","Array","isPlainObject","Object","prototype","toString","call","uniq","array","Set","uniqBy","predicate","seen","filter","item","key","hasOwn","MemoryCacheAdapter","map","Map","set","flush","LocalesCache","cacheAdapter","setIfMissed","metafileFile","data","keyFromMetafile","productFlavors","sort","join","cdnId","id","file","path","library","module","buildType","locale","timestamp","CdnBase","CdnCache","super","arguments","MetafileLocale","baseLocale","language","region","script","isRtl","name","localizedName","isBaseLocale","toCdnLocale","MetafileFile","locales","baseUrl","toCdnFile","MetafileData","projectUrl","files","filesFactory","filesMap","filesMapFactory","localesFactory","find","createEmpty","keys","reduce","acc","cur","push","cdnLocale","MetafileParams","metafileUrl","parseMetafileUrl","url","URL","e","Error","matches","pathname","match","length","tagId","origin","MetafileContext","parsedData","setMetafile","ResponseFactory","createCdnResponse","requests","responses","hasSingleFileResponse","hasSingleLocaleResponse","cacheResponses","transformResponses","forEach","response","index","Context","metafileContext","cdn","api","responseFactory","CdnMetafile","excludeBaseLocale","async","refresh","LocalesMap","Request","localesMap","execute","payload","getPromises","promises","all","request","RequestBuilder","addFiles","i","foundFile","addLocales","includes","getCdnRequest","result","FetchHttpAdapter","fetch","contentType","headers","isJson","status","json","error","text","CdnClient","create"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"localazy-cdn-client.min.js","sources":["../src/cdn/api/api.ts","../src/cdn/utils.ts","../src/cdn/cache/memory-cache-adapter.ts","../src/cdn/cache/locales-cache.ts","../src/cdn/methods/cdn-base.ts","../src/cdn/methods/cdn-cache.ts","../src/cdn/metafile/metafile-locale.ts","../src/cdn/metafile/metafile-file.ts","../src/cdn/metafile/metafile-data.ts","../src/cdn/metafile/metafile-params.ts","../src/cdn/context/metafile-context.ts","../src/cdn/response/response-factory.ts","../src/cdn/context/context.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/http/fetch-http-adapter.ts","../src/cdn/cdn-client.ts"],"sourcesContent":["import { IMetafile } from '@/interfaces/i-metafile';\nimport { ApiLocaleRequest } from '@/types/api-locale-request';\nimport { Context } from '@/cdn/context/context';\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","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 { 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","import { uniq } from '@/cdn/utils';\nimport { ICacheAdapter } from '@/interfaces/i-cache-adapter';\nimport { CacheKeyMetafileOptions } from '@/types/cache-key-metafile-options';\nimport { CacheGetLocalesRequest } from '@/types/cache-get-locales-request';\nimport { CacheHasLocalesRequest } from '@/types/cache-has-locales-request';\nimport { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request';\nimport { MemoryCacheAdapter } from '@/cdn/cache/memory-cache-adapter';\nimport { Context } from '@/cdn/context/context';\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';\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 { CdnLocale } from '@/types/cdn-locale';\nimport { IMetafileFileLocale } from '@/interfaces/i-metafile-file-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 { CdnFile } from '@/types/cdn-file';\nimport { CdnFileLocale } from '@/types/cdn-file-locale';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { IMetafileFile } from '@/interfaces/i-metafile-file';\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 { uniqBy } from '@/cdn/utils';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { CdnLocale } from '@/types/cdn-locale';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale';\nimport { IMetafileFiles } from '@/interfaces/i-metafile-files';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileOptions } from '@/types/metafile-options';\nimport { FilesMap } from '@/types/files-map';\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 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 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 (e) {\n throw new Error('Invalid param: \"options.metafile\" cannot be parsed as url.');\n }\n\n const matches: string[] | null = url.pathname.match(/^\\/(.*?)\\/(.*?)\\.(v2.json|js|ts)$/);\n\n if (matches === null || matches.length !== 4) {\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 { IMetafile } from '@/interfaces/i-metafile';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\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 { ApiLocaleRequest } from '@/types/api-locale-request';\nimport { Context } from '@/cdn/context/context';\nimport { ResponseFactoryOptions } from '@/types/response-factory-options';\nimport { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request';\nimport { CdnResponse } from '@/types/cdn-response';\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) {\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 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 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 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n acc[metafileFile.id][metafileLocale.locale] = cur;\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 { ResponseFactory } from '@/cdn/response/response-factory';\nimport { ContextOptions } from '@/types/context-options';\nimport { MetafileContext } from '@/cdn/context/metafile-context';\nimport { IHttpAdapter } from '@/interfaces/i-http-adapter';\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 { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\nimport { MetafileData } from '@/cdn/metafile/metafile-data';\nimport { CdnBase } from '@/cdn/methods/cdn-base';\nimport { CdnFile } from '@/types/cdn-file';\nimport { CdnLocalesOptions } from '@/types/cdn-locales-options';\nimport { IMetafile } from '@/interfaces/i-metafile';\nimport { CdnLocale } from '@/types/cdn-locale';\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 (this.localesMap.data[cur.id]) {\n acc.push(\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 { isPlainObject, isArray, isString, isUndefined } from '@/cdn/utils';\nimport { CdnFile } from '@/types/cdn-file';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale';\nimport { LocalesMap } from '@/cdn/request/locales-map';\nimport { Context } from '@/cdn/context/context';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file';\nimport { IRequestBuilder } from '@/interfaces/i-request-builder';\nimport { Request } from '@/cdn/request/request';\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): RequestBuilder {\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): RequestBuilder {\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 { 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 = response.headers.get('content-type') || '';\n const isJson: boolean = ['application/json5', 'application/json'].includes(contentType);\n\n if (response.status >= 400) {\n throw new Error(`Request failed with status code ${response.status}`);\n }\n\n let result: string | object;\n\n if (isJson) {\n try {\n result = (await response.json()) as object;\n } catch (error) {\n result = {};\n }\n } else {\n try {\n result = await response.text();\n } catch (error) {\n result = '';\n }\n }\n\n return result;\n }\n}\n","import { isString } from '@/cdn/utils';\nimport { CdnFetchOptions } from '@/types/cdn-fetch-options';\nimport { CdnResponse } from '@/types/cdn-response';\nimport { CdnCache } from '@/cdn/methods/cdn-cache';\nimport { MetafileContext } from '@/cdn/context/metafile-context';\nimport { Context } from '@/cdn/context/context';\nimport { CdnMetafile } from '@/cdn/methods/cdn-metafile';\nimport { RequestBuilder } from '@/cdn/request/request-builder';\nimport { FetchHttpAdapter } from '@/cdn/http/fetch-http-adapter';\nimport { CdnClientOptions } from '@/types/cdn-client-options';\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":["Api","constructor","context","__publicField","this","fetchLocale","options","cache","has","Promise","resolve","get","client","metafileLocale","uri","fetchMetafile","metafile","params","jsonPath","isString","value","isUndefined","isArray","Array","isPlainObject","Object","prototype","toString","call","uniq","array","Set","uniqBy","predicate","seen","filter","item","key","hasOwn","MemoryCacheAdapter","map","Map","set","flush","LocalesCache","cacheAdapter","setIfMissed","metafileFile","data","keyFromMetafile","productFlavors","sort","join","cdnId","id","file","path","library","module","buildType","locale","timestamp","CdnBase","CdnCache","super","arguments","MetafileLocale","baseLocale","language","region","script","isRtl","name","localizedName","isBaseLocale","toCdnLocale","MetafileFile","locales","baseUrl","toCdnFile","MetafileData","projectUrl","files","filesFactory","filesMap","filesMapFactory","localesFactory","find","createEmpty","keys","reduce","acc","cur","push","cdnLocale","MetafileParams","metafileUrl","parseMetafileUrl","url","URL","e","Error","matches","pathname","match","length","tagId","origin","MetafileContext","parsedData","setMetafile","ResponseFactory","createCdnResponse","requests","responses","hasSingleFileResponse","hasSingleLocaleResponse","cacheResponses","transformResponses","forEach","response","index","Context","metafileContext","cdn","api","responseFactory","CdnMetafile","excludeBaseLocale","async","refresh","LocalesMap","Request","localesMap","execute","payload","getPromises","promises","all","request","RequestBuilder","addFiles","i","foundFile","addLocales","includes","getCdnRequest","result","FetchHttpAdapter","fetch","contentType","headers","isJson","status","json","error","text","_CdnClient","create","CdnClient"],"mappings":";;;;AAIO,MAAMA,EAGX,WAAAC,CAAYC,GAFFC,EAAAC,KAAA,WAGRA,KAAKF,QAAUA,CACjB,CAEA,iBAAaG,CAAYC,GACvB,OAAIF,KAAKF,QAAQK,MAAMC,IAAIF,GAClB,IAAIG,SAASC,IAClBA,EAAQN,KAAKF,QAAQK,MAAMI,IAAIL,GAA2B,IAIvDF,KAAKF,QAAQU,OAAOD,IAAIL,EAAQO,eAAeC,IACxD,CAEA,mBAAaC,GACH,aAAMX,KAAKF,QAAQU,OAAOD,IAAIP,KAAKF,QAAQc,SAASC,OAAOC,SACrE,ECvBK,MAAMC,EAAYC,GAAqD,iBAAVA,EAEvDC,EAAeD,QAAwD,IAAVA,EAE7DE,EAAcF,GAAiCG,MAAMD,QAAQF,GAE7DI,EAAiBJ,GACc,oBAA1CK,OAAOC,UAAUC,SAASC,KAAKR,GAEpBS,EAAWC,GAAoB,IAAI,IAAIC,IAAID,IAE3CE,EAAS,CAAIF,EAAYG,KACpC,MAAMC,EAAgC,CAAA,EAE/B,OAAAJ,EAAMK,QAAQC,IACb,MAAAC,EAAcJ,EAAUG,GAE9B,OAAKX,OAAOa,OAAOJ,EAAMG,KACvBH,EAAKG,IAAO,GAEL,EAGF,GACR,ECtBI,MAAME,EAGX,WAAAtC,GAFUE,EAAAC,KAAA,OAGHA,KAAAoC,QAAUC,GACjB,CAEO,GAAA9B,CAAI0B,GACF,OAAAjC,KAAKoC,IAAI7B,IAAI0B,EACtB,CAEO,GAAA7B,CAAI6B,GACF,OAAAjC,KAAKoC,IAAIhC,IAAI6B,EACtB,CAEO,GAAAK,CAAIL,EAAQjB,GACZhB,KAAAoC,IAAIE,IAAIL,EAAKjB,EACpB,CAEO,KAAAuB,GACAvC,KAAAoC,QAAUC,GACjB,ECdK,MAAMG,EAKX,WAAA3C,CAAYC,GAJFC,EAAAC,KAAA,WAEAD,EAAAC,KAAA,gBAGRA,KAAKF,QAAUA,EACVE,KAAAyC,aAAe,IAAIN,CAC1B,CAEO,WAAAO,CAAYxC,GACjB,MAAMyC,aAAEA,EAAAlC,eAAcA,EAAgBmC,KAAAA,GAAmC1C,EAEnE+B,EAAcjC,KAAK6C,gBAAgB,CACvCF,eACAlC,mBAGGT,KAAKyC,aAAarC,IAAI6B,IACpBjC,KAAAyC,aAAaH,IAAIL,EAAKW,EAE/B,CAEO,GAAAxC,CAAIF,GACH,MAAA+B,EAAcjC,KAAK6C,gBAAgB3C,GAElC,OAAAF,KAAKyC,aAAarC,IAAI6B,EAC/B,CAEO,GAAA1B,CAAIL,GACH,MAAA+B,EAAcjC,KAAK6C,gBAAgB3C,GAElC,OAAAF,KAAKyC,aAAalC,IAAI0B,EAC/B,CAEO,KAAAM,GACLvC,KAAKyC,aAAaF,OACpB,CAEU,eAAAM,CAAgB3C,GAClB,MAAAyC,aAAEA,EAAclC,eAAAA,GAA4CP,EAC5D4C,EAAyB,IAAIrB,EAAKkB,EAAaG,iBAAiBC,OAAOC,KAAK,KAe3E,MAbmB,CACxBhD,KAAKF,QAAQc,SAASC,OAAOoC,MAC7BN,EAAaO,GACbP,EAAaQ,KACbR,EAAaS,KACbT,EAAaU,QACbV,EAAaW,OACbX,EAAaY,UACbT,EACArC,EAAe+C,OACf/C,EAAegD,UAAUlC,YAGZQ,QAAQE,GAAiC,KAARA,IAAYe,KAAK,IACnE,EChEK,MAAeU,EAGpB,WAAA7D,CAAYC,GAFFC,EAAAC,KAAA,WAGRA,KAAKF,QAAUA,CACjB,ECLK,MAAM6D,UAAiBD,EAAvB,WAAA7D,GAAA+D,SAAAC,WACE9D,EAAAC,KAAA,SAAQ,KACRA,KAAAF,QAAQK,MAAMoC,UAAM,ECDtB,MAAMuB,EAmBX,WAAAjE,CAAYK,EAA8B6D,GAlBnChE,EAAAC,KAAA,YAEAD,EAAAC,KAAA,UAEAD,EAAAC,KAAA,UAEAD,EAAAC,KAAA,SAEAD,EAAAC,KAAA,QAEAD,EAAAC,KAAA,iBAEAD,EAAAC,KAAA,OAEAD,EAAAC,KAAA,aAEGD,EAAAC,KAAA,cAGRA,KAAKgE,SAAW9D,EAAQ8D,SACxBhE,KAAKiE,OAAS/D,EAAQ+D,OACtBjE,KAAKkE,OAAShE,EAAQgE,OACtBlE,KAAKmE,MAAQjE,EAAQiE,MACrBnE,KAAKoE,KAAOlE,EAAQkE,KACpBpE,KAAKqE,cAAgBnE,EAAQmE,cAC7BrE,KAAKU,IAAMR,EAAQQ,IACnBV,KAAKyD,UAAYvD,EAAQuD,UACzBzD,KAAK+D,WAAaA,CACpB,CAEA,UAAIP,GACF,OAAIxD,KAAKgE,UAAYhE,KAAKiE,QAAUjE,KAAKkE,OAChC,GAAGlE,KAAKgE,YAAYhE,KAAKiE,UAAUjE,KAAKkE,SAG7ClE,KAAKgE,UAAYhE,KAAKkE,OACjB,GAAGlE,KAAKgE,YAAYhE,KAAKkE,SAG9BlE,KAAKgE,UAAYhE,KAAKiE,OACjB,GAAGjE,KAAKgE,YAAYhE,KAAKiE,SAG3BjE,KAAKgE,QACd,CAEA,gBAAIM,GACK,OAAAtE,KAAKwD,SAAWxD,KAAK+D,UAC9B,CAEO,WAAAQ,GACE,MAAA,CACLf,OAAQxD,KAAKwD,OACbc,aAActE,KAAKsE,aACnBN,SAAUhE,KAAKgE,SACfC,OAAQjE,KAAKiE,OACbC,OAAQlE,KAAKkE,OACbC,MAAOnE,KAAKmE,MACZC,KAAMpE,KAAKoE,KACXC,cAAerE,KAAKqE,cAExB,EC3DK,MAAMG,EAqBX,WAAA3E,CAAYK,GApBLH,EAAAC,KAAA,MAEAD,EAAAC,KAAA,QAEAD,EAAAC,KAAA,QAEAD,EAAAC,KAAA,WAEAD,EAAAC,KAAA,UAEAD,EAAAC,KAAA,aAEAD,EAAAC,KAAA,aAEAD,EAAAC,KAAA,kBAEAD,EAAAC,KAAA,WAEGD,EAAAC,KAAA,WAGRA,KAAKkD,GAAKhD,EAAQgD,GAClBlD,KAAKmD,KAAOjD,EAAQiD,KACpBnD,KAAKoD,KAAOlD,EAAQkD,KACpBpD,KAAKqD,QAAUnD,EAAQmD,QACvBrD,KAAKsD,OAASpD,EAAQoD,OACtBtD,KAAKuD,UAAYrD,EAAQqD,UACzBvD,KAAKyD,UAAYvD,EAAQuD,UACzBzD,KAAK8C,eAAiB5C,EAAQ4C,eAC9B9C,KAAKyE,QAAUvE,EAAQuE,QACvBzE,KAAK0E,QAAUxE,EAAQwE,OACzB,CAEO,SAAAC,GACE,MAAA,CACLzB,GAAIlD,KAAKkD,GACTC,KAAMnD,KAAKmD,KACXC,KAAMpD,KAAKoD,KACXC,QAASrD,KAAKqD,QACdC,OAAQtD,KAAKsD,OACbC,UAAWvD,KAAKuD,UAChBT,eAAgB9C,KAAK8C,eACrB2B,QAASzE,KAAKyE,QAAQrC,KACnBoB,IAA2C,CAC1CA,OAAQA,EAAOA,OACfc,aAAcd,EAAOc,aACrB5D,IAAK,GAAGV,KAAK0E,UAAUlB,EAAO9C,UAItC,EC9CK,MAAMkE,EAaX,WAAA/E,CAAYK,EAA0BW,GAZ/Bd,EAAAC,KAAA,cAEAD,EAAAC,KAAA,cAEAD,EAAAC,KAAA,WAEAD,EAAAC,KAAA,aAEAD,EAAAC,KAAA,SAEAD,EAAAC,KAAA,YAGLA,KAAK6E,WAAa3E,EAAQ2E,WAC1B7E,KAAKyD,UAAYvD,EAAQuD,UACzBzD,KAAK8E,MAAQF,EAAaG,aAAa7E,EAAQ4E,MAAO5E,EAAQ6D,WAAYlD,GAC1Eb,KAAKgF,SAAWJ,EAAaK,gBAAgBjF,KAAK8E,OAClD9E,KAAKyE,QAAUG,EAAaM,eAAelF,KAAK8E,OAChD9E,KAAK+D,WAAa/D,KAAKyE,QAAQU,MAAM3B,GAAsBA,EAAOc,cACpE,CAEA,kBAAcc,CAAYvE,GACxB,OAAO,IAAI+D,EACT,CACEC,WAAY,GACZd,WAAY,GACZN,UAAW,EACXqB,MAAO,CAAC,GAEVjE,EAEJ,CAEA,mBAAiBkE,CAAaD,EAAuBf,EAAoBlD,GACvE,OAAOQ,OAAOgE,KAAKP,GAAOQ,QAAO,CAACC,EAAqBC,KACrD,MAAMf,EAA4BK,EAAMU,GAAKf,QAAQrC,KAClDoB,GAAgC,IAAIM,EAAeN,EAAQO,KAYvD,OATHwB,EAAAE,KACF,IAAIjB,EAAa,IACZM,EAAMU,GACTtC,GAAIsC,EACJf,UACAC,QAAS7D,EAAO6D,WAIba,CAAA,GACN,GACL,CAEA,sBAAiBN,CAAgBH,GAC/B,OAAOA,EAAMQ,QAAO,CAACC,EAAeC,KAC9BD,EAAAC,EAAItC,IAAMsC,EAEPD,IACN,CAAE,EACP,CAEA,qBAAiBL,CAAeJ,GAC9B,MAAML,EAAuBK,EAAMQ,QAAO,CAACC,EAAkBC,KACvDD,EAAAE,QAAQD,EAAIf,QAAQrC,KAAKoB,GAAsCA,EAAOe,iBACnEgB,IACN,IAEH,OAAO3D,EAAO6C,GAAUiB,GAAiCA,EAAUlC,QACrE,EC7EK,MAAMmC,EAGX,WAAA9F,CAAY+F,GAFF7F,EAAAC,KAAA,WAGHA,KAAAE,QAAUyF,EAAeE,iBAAiBD,EACjD,CAEA,OAAIE,GACF,OAAO9F,KAAKE,QAAQ4F,GACtB,CAEA,WAAIpB,GACF,OAAO1E,KAAKE,QAAQwE,OACtB,CAEA,SAAIzB,GACF,OAAOjD,KAAKE,QAAQ+C,KACtB,CAEA,YAAInC,GACF,OAAOd,KAAKE,QAAQY,QACtB,CAEA,uBAAiB+E,CAAiBD,GAC5B,IAAAE,EAEA,IACIA,EAAA,IAAIC,IAAIH,SACPI,GACD,MAAA,IAAIC,MAAM,6DAClB,CAEA,MAAMC,EAA2BJ,EAAIK,SAASC,MAAM,qCAEpD,GAAgB,OAAZF,GAAuC,IAAnBA,EAAQG,OACxB,MAAA,IAAIJ,MAAM,oEAGZ,MAAAhD,EAAgBiD,EAAQ,GACxBI,EAAgBJ,EAAQ,GAEvB,MAAA,CACLJ,IAAKF,EACLlB,QAASoB,EAAIS,OACbtD,QACAnC,SAAU,IAAImC,KAASqD,YAE3B,EC5CK,MAAME,EAOX,WAAA3G,CAAYK,GANLH,EAAAC,KAAA,UAEAD,EAAAC,KAAA,cAEAD,EAAAC,KAAA,QAGLA,KAAKa,OAAS,IAAI8E,EAAezF,EAAQU,UACzCZ,KAAKyG,WAAa,KAClBzG,KAAK4C,KAAOgC,EAAaQ,YAAYpF,KAAKa,OAC5C,CAEO,WAAA6F,CAAY9F,GACjBZ,KAAKyG,WAAa7F,EAElBZ,KAAK4C,KAAO,IAAIgC,EAAahE,EAAUZ,KAAKa,OAC9C,EChBK,MAAM8F,EAGX,WAAA9G,CAAYC,GAFFC,EAAAC,KAAA,WAGRA,KAAKF,QAAUA,CACjB,CAEO,iBAAA8G,CAAkB1G,GACvB,MAAM2G,SAAEA,EAAAC,UAAUA,EAAWC,sBAAAA,EAAAC,wBAAuBA,GAAoD9G,EAEpG,OAAqB,IAArB4G,EAAUT,OACL,IAGJrG,KAAAiH,eAAeJ,EAAUC,GAEvBC,GAAyBC,EAC5BF,EAAU,GACVH,EAAgBO,mBAAmBhH,GACzC,CAEU,cAAA+G,CAAeJ,EAA8BC,GAC3CA,EAAAK,SAAQ,CAACC,EAA2BC,KAC5C,MAAM1E,aAAEA,EAAAlC,eAAcA,GAAsDoG,EAASQ,GAEjF1E,GAAgBlC,GACbT,KAAAF,QAAQK,MAAMuC,YAAY,CAAEC,eAAclC,iBAAgBmC,KAAMwE,GACvE,GAEJ,CAEA,yBAAiBF,CAAmBhH,GAClC,MAAM2G,SAAEA,EAAAC,UAAUA,EAAWC,sBAAAA,GAAkD7G,EAE/E,OAAO4G,EAAUxB,QAAO,CAACC,EAAkBC,EAAsB6B,KAC/D,MAAM1E,aAAEA,EAAAlC,eAAcA,GAAsDoG,EAASQ,GAmB9E,OAjBH1E,GAAgBlC,IACdsG,EAEExB,EAAA9E,EAAe+C,QAAUgC,GAGxBD,EAAI5C,EAAaO,MAEhBqC,EAAA5C,EAAaO,IAAM,IAKzBqC,EAAI5C,EAAaO,IAAIzC,EAAe+C,QAAUgC,IAI3CD,CAAA,GACN,CAAE,EACP,ECtDK,MAAM+B,EAaX,WAAAzH,CAAYK,GAZLH,EAAAC,KAAA,YAEAD,EAAAC,KAAA,OAEAD,EAAAC,KAAA,UAEAD,EAAAC,KAAA,OAEAD,EAAAC,KAAA,SAEAD,EAAAC,KAAA,mBAGLA,KAAKY,SAAWV,EAAQqH,gBACxBvH,KAAKwH,IAAMtH,EAAQsH,IACnBxH,KAAKQ,OAASN,EAAQM,OACjBR,KAAAyH,IAAM,IAAI7H,EAAII,MACdA,KAAAG,MAAQ,IAAIqC,EAAaxC,MACzBA,KAAA0H,gBAAkB,IAAIf,EAAgB3G,KAC7C,EClBK,MAAM2H,UAAoBjE,EAA1B,WAAA7D,GAAA+D,SAAAC,WAiBE9D,EAAAC,KAAA,WAAWE,IAChB,MAAM0H,kBAAEA,GAAyC1H,GAAW,IACtDuE,QAAEA,GAA0BzE,KAAKF,QAAQc,SAASgC,KAEjD,OAAAgF,EAAoBnD,EAAQ1C,QAAQ2D,IAAmCA,EAAUpB,eAAgBG,CAAA,IAGnG1E,EAAAC,KAAA,WAAU6H,UACf,MAAMT,QAA4BpH,KAAKF,QAAQ2H,IAAI9G,gBAE9CX,KAAAF,QAAQc,SAAS8F,YAAYU,EAAQ,IAGrCrH,EAAAC,KAAA,UAAS6H,MAAO3H,IACrBF,KAAKF,QAAQc,SAASC,OAAS,IAAI8E,EAAezF,EAAQU,gBAEpDZ,KAAK8H,YAAQ,CAhCrB,cAAIjD,GACK,OAAA7E,KAAKF,QAAQc,SAASgC,KAAKiC,UACpC,CAEA,cAAId,GACK,OAAA/D,KAAKF,QAAQc,SAASgC,KAAKmB,UACpC,CAEA,OAAI+B,GACK,OAAA9F,KAAKF,QAAQc,SAASC,OAAOiF,GACtC,CAEA,SAAIhB,GACK,OAAA9E,KAAKF,QAAQc,SAASgC,KAAKkC,MAAM1C,KAAKe,GAAgCA,EAAKwB,aACpF,ECrBK,MAAMoD,EAKX,WAAAlI,CAAYK,GAJLH,EAAAC,KAAA,QAEGD,EAAAC,KAAA,WAGRA,KAAKF,QAAUI,EAAQJ,QAClBE,KAAA4C,KAAO1C,EAAQ0C,MAAQ,CAAA,CAC9B,ECLK,MAAMoF,EAWX,WAAAnI,CAAYC,GAVLC,EAAAC,KAAA,SAEAD,EAAAC,KAAA,cAEAD,EAAAC,KAAA,yBAEAD,EAAAC,KAAA,2BAEGD,EAAAC,KAAA,WAGRA,KAAK8E,MAAQ,GACb9E,KAAKiI,WAAa,IAAIF,EAAW,CAAEjI,YACnCE,KAAK+G,uBAAwB,EAC7B/G,KAAKgH,yBAA0B,EAC/BhH,KAAKF,QAAUA,CACjB,CAEA,aAAaoI,GACL,MAAAC,EAA0DnI,KAAKoI,cAC/DC,EAAuCF,EAAQ/F,KAClDJ,GAAuDA,EAAK,KAEzD6E,EAA+BsB,EAAQ/F,KAAKJ,GAAuDA,EAAK,KACxG8E,QAAuCzG,QAAQiI,IAAID,GAElD,OAAArI,KAAKF,QAAQ4H,gBAAgBd,kBAAkB,CACpDC,WACAC,YACAmB,WAAYjI,KAAKiI,WACjBlB,sBAAuB/G,KAAK+G,sBAC5BC,wBAAyBhH,KAAKgH,yBAElC,CAEU,WAAAoB,GACR,OAAOpI,KAAK8E,MAAMQ,QAAO,CAACC,EAAqDC,KACzExF,KAAKiI,WAAWrF,KAAK4C,EAAItC,KACvBqC,EAAAE,QACCzF,KAAKiI,WAAWrF,KAAK4C,EAAItC,IAAId,KAC7B3B,IACC,MAAM8H,EAA4B,CAChC5F,aAAc6C,EACd/E,kBAGF,MAAO,CAACT,KAAKF,QAAQ2H,IAAIxH,YAAYsI,GAAUA,EAAO,KAKvDhD,IACN,GACL,ECpDK,MAAMiD,EAKX,WAAA3I,CAAYC,GAJFC,EAAAC,KAAA,WAEAD,EAAAC,KAAA,WAGRA,KAAKF,QAAUA,EACfE,KAAKuI,QAAU,IAAIP,EAAQhI,KAAKF,QAClC,CAEO,QAAA2I,CAAS3D,GACd,KAAM1D,EAAc0D,IAAU/D,EAAS+D,IAAU7D,EAAY6D,IAAU5D,EAAQ4D,IACvE,MAAA,IAAImB,MAAM,8EAWd,GARA/E,EAAQ4D,IACJA,EAAAqC,SAASuB,IACb,IAAMtH,EAAcsH,KAAM3H,EAAS2H,GAC3B,MAAA,IAAIzC,MAAM,wEAClB,IAIAlF,EAAS+D,GAAQ,CACnB9E,KAAKuI,QAAQxB,uBAAwB,EAErC,MAAM5D,EAAiCnD,KAAKF,QAAQc,SAASgC,KAAKkC,MAAMK,MACrEuD,GAA6BA,EAAExF,KAAO4B,IAGrC,KAAE3B,aAAgBqB,GACpB,MAAM,IAAIyB,MAAM,oBAAoBnB,OAGjC9E,KAAAuI,QAAQzD,MAAQ,CAAC3B,EAAI,MAAA,GACjBlC,EAAY6D,GAChB9E,KAAAuI,QAAQzD,MAAQ,IAAI9E,KAAKF,QAAQc,SAASgC,KAAKkC,YAAK,GAChD5D,EAAQ4D,GACjB9E,KAAKuI,QAAQzD,MAAQA,EAAM1C,KAAKe,IAC1B,IAAAR,EAEA,GAAA5B,EAASoC,GAAO,CAClB,MAAMwF,EAAsC3I,KAAKF,QAAQc,SAASgC,KAAKkC,MAAMK,MAC1EuD,GAA6BA,EAAExF,KAAOC,IAGrC,GAAAlC,EAAY0H,GACd,MAAM,IAAI1C,MAAM,oBAAoB9C,OAGvBR,EAAAgG,CAAA,KACV,CACL,MAAMA,EAAsC3I,KAAKF,QAAQc,SAASgC,KAAKkC,MAAMK,MAC1EuD,GAA6BA,EAAExF,KAAOC,EAAKD,KAG1C,GAAAjC,EAAY0H,GACd,MAAM,IAAI1C,MAAM,oBAAoB9C,EAAKD,QAG5BP,EAAAgG,CACjB,CAEO,OAAAhG,CAAA,SACR,GACQvB,EAAc0D,GAAQ,CAC/B9E,KAAKuI,QAAQxB,uBAAwB,EAErC,MAAM4B,EAAsC3I,KAAKF,QAAQc,SAASgC,KAAKkC,MAAMK,MAC1EuD,GAA6BA,EAAExF,KAAO4B,EAAM5B,KAG3C,GAAAjC,EAAY0H,GACd,MAAM,IAAI1C,MAAM,oBAAoBnB,EAAM5B,QAGvClD,KAAAuI,QAAQzD,MAAQ,CAAC6D,EACxB,CAEO,OAAA3I,IACT,CAEO,UAAA4I,CAAWnE,EAA6BmD,GACzC,KAAE7G,EAAS0D,IAAYxD,EAAYwD,IAAYvD,EAAQuD,IACnD,MAAA,IAAIwB,MAAM,wEAsCX,OAnCH/E,EAAQuD,IACFA,EAAA0C,SAASuB,IACX,IAAC3H,EAAS2H,GACN,MAAA,IAAIzC,MAAM,+DAClB,IAIAlF,EAAS0D,IACXzE,KAAKuI,QAAQvB,yBAA0B,EACvChH,KAAKuI,QAAQzD,MAAMQ,QAAO,CAACC,EAAiBC,KAC1CD,EAAI3C,KAAK4C,EAAItC,IAAMsC,EAAIf,QAAQ1C,QAC5BtB,GAA4CA,EAAe+C,SAAWiB,IAGlEc,IACNvF,KAAKuI,QAAQN,aACPhH,EAAYwD,GACrBzE,KAAKuI,QAAQzD,MAAMQ,QAAO,CAACC,EAAiBC,KAC1CD,EAAI3C,KAAK4C,EAAItC,IAAM0E,EACfpC,EAAIf,QAAQ1C,QAAQtB,IAA6CA,EAAe6D,eAChFkB,EAAIf,QAEDc,IACNvF,KAAKuI,QAAQN,YACP/G,EAAQuD,IACjBzE,KAAKuI,QAAQzD,MAAMQ,QAAO,CAACC,EAAiBC,KAC1CD,EAAI3C,KAAK4C,EAAItC,IAAMsC,EAAIf,QAAQ1C,QAAQtB,GACrCgE,EAAQoE,SAASpI,EAAe+C,UAG3B+B,IACNvF,KAAKuI,QAAQN,YAGXjI,IACT,CAEO,aAAA8I,GACL,MAAMC,EAAkB/I,KAAKuI,QAEtB,OADPvI,KAAKuI,QAAU,IAAIP,EAAQhI,KAAKF,SACzBiJ,CACT,ECxIK,MAAMC,EAGX,WAAAnJ,CAAY6E,GAFF3E,EAAAC,KAAA,WAGRA,KAAK0E,QAAUA,CACjB,CAEA,SAAMnE,CAAIuF,GACF,MAAAsB,QAA2B6B,MAAM,GAAGjJ,KAAK0E,UAAUoB,KACnDoD,EAAsB9B,EAAS+B,QAAQ5I,IAAI,iBAAmB,GAC9D6I,EAAkB,CAAC,oBAAqB,oBAAoBP,SAASK,GAEvE,GAAA9B,EAASiC,QAAU,IACrB,MAAM,IAAIpD,MAAM,mCAAmCmB,EAASiC,UAG1D,IAAAN,EAEJ,GAAIK,EACE,IACQL,QAAM3B,EAASkC,aAClBC,GACPR,EAAS,CAAA,CACX,MAEI,IACOA,QAAM3B,EAASoC,aACjBD,GACER,EAAA,EACX,CAGK,OAAAA,CACT,ECxBK,MAAMU,EAAN,MAAMA,EASD,WAAA5J,CAAYK,GARfH,EAAAC,KAAA,YAEAD,EAAAC,KAAA,SAEGD,EAAAC,KAAA,WAaHD,EAAAC,KAAA,SAAQ6H,MAAO3H,IACpB,MAAM4E,MAAEA,EAAOL,QAAAA,EAAAmD,kBAASA,GAAuC1H,GAAW,CAAA,EAKnE,OAJgC,IAAIsI,EAAexI,KAAKF,SAC5D2I,SAAS3D,GACT8D,WAAWnE,EAASmD,GAEDkB,gBAAgBZ,aAdhC,MAAAX,EAAmC,IAAIf,EAAgBtG,GACvDM,EAA2B,IAAIwI,EAAiBzB,EAAgB1G,OAAO6D,SAExE1E,KAAAF,QAAU,IAAIwH,EAAQ,CAAEC,kBAAiBC,IAAKxH,KAAMQ,WACzDR,KAAKY,SAAW,IAAI+G,EAAY3H,KAAKF,SACrCE,KAAKG,MAAQ,IAAIwD,EAAS3D,KAAKF,QACjC,CAWA,mBAAoB4J,CAAOxJ,GACzB,IAAKA,EACG,MAAA,IAAI+F,MAAM,wDAGlB,IAAKlF,EAASb,EAAQU,UACd,MAAA,IAAIqF,MAAM,qDAGZ,MAAAuB,EAAiB,IAAIiC,EAAUvJ,GAI9B,aAFDsH,EAAI5G,SAASkH,UAEZN,CACT,GAlCAzH,EAPW0J,EAOG,UAAU,SAPnB,IAAME,EAANF"}
|
|
@@ -5,11 +5,10 @@ var __publicField = (obj, key, value) => {
|
|
|
5
5
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
6
|
return value;
|
|
7
7
|
};
|
|
8
|
-
/* @localazy/cdn-client@1.
|
|
8
|
+
/* @localazy/cdn-client@1.5.0
|
|
9
9
|
* (c) 2024 Localazy <team@localazy.com>
|
|
10
10
|
* @license MIT */
|
|
11
11
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
12
|
-
require("isomorphic-fetch");
|
|
13
12
|
class Api {
|
|
14
13
|
constructor(context) {
|
|
15
14
|
__publicField(this, "context");
|
|
@@ -202,11 +201,13 @@ class MetafileFile {
|
|
|
202
201
|
module: this.module,
|
|
203
202
|
buildType: this.buildType,
|
|
204
203
|
productFlavors: this.productFlavors,
|
|
205
|
-
locales: this.locales.map(
|
|
206
|
-
locale
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
204
|
+
locales: this.locales.map(
|
|
205
|
+
(locale) => ({
|
|
206
|
+
locale: locale.locale,
|
|
207
|
+
isBaseLocale: locale.isBaseLocale,
|
|
208
|
+
uri: `${this.baseUrl}${locale.uri}`
|
|
209
|
+
})
|
|
210
|
+
)
|
|
210
211
|
};
|
|
211
212
|
}
|
|
212
213
|
}
|
|
@@ -237,45 +238,32 @@ class MetafileData {
|
|
|
237
238
|
);
|
|
238
239
|
}
|
|
239
240
|
static filesFactory(files, baseLocale, params) {
|
|
240
|
-
return Object.keys(files).reduce(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
},
|
|
255
|
-
[]
|
|
256
|
-
);
|
|
241
|
+
return Object.keys(files).reduce((acc, cur) => {
|
|
242
|
+
const locales = files[cur].locales.map(
|
|
243
|
+
(locale) => new MetafileLocale(locale, baseLocale)
|
|
244
|
+
);
|
|
245
|
+
acc.push(
|
|
246
|
+
new MetafileFile({
|
|
247
|
+
...files[cur],
|
|
248
|
+
id: cur,
|
|
249
|
+
locales,
|
|
250
|
+
baseUrl: params.baseUrl
|
|
251
|
+
})
|
|
252
|
+
);
|
|
253
|
+
return acc;
|
|
254
|
+
}, []);
|
|
257
255
|
}
|
|
258
256
|
static filesMapFactory(files) {
|
|
259
|
-
return files.reduce(
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
},
|
|
264
|
-
{}
|
|
265
|
-
);
|
|
257
|
+
return files.reduce((acc, cur) => {
|
|
258
|
+
acc[cur.id] = cur;
|
|
259
|
+
return acc;
|
|
260
|
+
}, {});
|
|
266
261
|
}
|
|
267
262
|
static localesFactory(files) {
|
|
268
|
-
const locales = files.reduce(
|
|
269
|
-
(
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
(locale) => locale.toCdnLocale()
|
|
273
|
-
)
|
|
274
|
-
);
|
|
275
|
-
return acc;
|
|
276
|
-
},
|
|
277
|
-
[]
|
|
278
|
-
);
|
|
263
|
+
const locales = files.reduce((acc, cur) => {
|
|
264
|
+
acc.push(...cur.locales.map((locale) => locale.toCdnLocale()));
|
|
265
|
+
return acc;
|
|
266
|
+
}, []);
|
|
279
267
|
return uniqBy(locales, (cdnLocale) => cdnLocale.locale);
|
|
280
268
|
}
|
|
281
269
|
}
|
|
@@ -337,12 +325,7 @@ class ResponseFactory {
|
|
|
337
325
|
this.context = context;
|
|
338
326
|
}
|
|
339
327
|
createCdnResponse(options) {
|
|
340
|
-
const {
|
|
341
|
-
requests,
|
|
342
|
-
responses,
|
|
343
|
-
hasSingleFileResponse,
|
|
344
|
-
hasSingleLocaleResponse
|
|
345
|
-
} = options;
|
|
328
|
+
const { requests, responses, hasSingleFileResponse, hasSingleLocaleResponse } = options;
|
|
346
329
|
if (responses.length === 0) {
|
|
347
330
|
return {};
|
|
348
331
|
}
|
|
@@ -351,10 +334,7 @@ class ResponseFactory {
|
|
|
351
334
|
}
|
|
352
335
|
cacheResponses(requests, responses) {
|
|
353
336
|
responses.forEach((response, index) => {
|
|
354
|
-
const {
|
|
355
|
-
metafileFile,
|
|
356
|
-
metafileLocale
|
|
357
|
-
} = requests[index];
|
|
337
|
+
const { metafileFile, metafileLocale } = requests[index];
|
|
358
338
|
if (metafileFile && metafileLocale) {
|
|
359
339
|
this.context.cache.setIfMissed({ metafileFile, metafileLocale, data: response });
|
|
360
340
|
}
|
|
@@ -362,26 +342,20 @@ class ResponseFactory {
|
|
|
362
342
|
}
|
|
363
343
|
static transformResponses(options) {
|
|
364
344
|
const { requests, responses, hasSingleFileResponse } = options;
|
|
365
|
-
return responses.reduce(
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
metafileLocale
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
acc[metafileLocale.locale] = cur;
|
|
374
|
-
} else {
|
|
375
|
-
if (!acc[metafileFile.id]) {
|
|
376
|
-
acc[metafileFile.id] = {};
|
|
377
|
-
}
|
|
378
|
-
acc[metafileFile.id][metafileLocale.locale] = cur;
|
|
345
|
+
return responses.reduce((acc, cur, index) => {
|
|
346
|
+
const { metafileFile, metafileLocale } = requests[index];
|
|
347
|
+
if (metafileFile && metafileLocale) {
|
|
348
|
+
if (hasSingleFileResponse) {
|
|
349
|
+
acc[metafileLocale.locale] = cur;
|
|
350
|
+
} else {
|
|
351
|
+
if (!acc[metafileFile.id]) {
|
|
352
|
+
acc[metafileFile.id] = {};
|
|
379
353
|
}
|
|
354
|
+
acc[metafileFile.id][metafileLocale.locale] = cur;
|
|
380
355
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
);
|
|
356
|
+
}
|
|
357
|
+
return acc;
|
|
358
|
+
}, {});
|
|
385
359
|
}
|
|
386
360
|
}
|
|
387
361
|
class Context {
|
|
@@ -456,9 +430,7 @@ class Request {
|
|
|
456
430
|
const promises = payload.map(
|
|
457
431
|
(item) => item[0]
|
|
458
432
|
);
|
|
459
|
-
const requests = payload.map(
|
|
460
|
-
(item) => item[1]
|
|
461
|
-
);
|
|
433
|
+
const requests = payload.map((item) => item[1]);
|
|
462
434
|
const responses = await Promise.all(promises);
|
|
463
435
|
return this.context.responseFactory.createCdnResponse({
|
|
464
436
|
requests,
|
|
@@ -469,28 +441,22 @@ class Request {
|
|
|
469
441
|
});
|
|
470
442
|
}
|
|
471
443
|
getPromises() {
|
|
472
|
-
return this.files.reduce(
|
|
473
|
-
(
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
);
|
|
489
|
-
}
|
|
490
|
-
return acc;
|
|
491
|
-
},
|
|
492
|
-
[]
|
|
493
|
-
);
|
|
444
|
+
return this.files.reduce((acc, cur) => {
|
|
445
|
+
if (this.localesMap.data[cur.id]) {
|
|
446
|
+
acc.push(
|
|
447
|
+
...this.localesMap.data[cur.id].map(
|
|
448
|
+
(metafileLocale) => {
|
|
449
|
+
const request = {
|
|
450
|
+
metafileFile: cur,
|
|
451
|
+
metafileLocale
|
|
452
|
+
};
|
|
453
|
+
return [this.context.api.fetchLocale(request), request];
|
|
454
|
+
}
|
|
455
|
+
)
|
|
456
|
+
);
|
|
457
|
+
}
|
|
458
|
+
return acc;
|
|
459
|
+
}, []);
|
|
494
460
|
}
|
|
495
461
|
}
|
|
496
462
|
class RequestBuilder {
|
|
@@ -569,33 +535,24 @@ class RequestBuilder {
|
|
|
569
535
|
}
|
|
570
536
|
if (isString(locales)) {
|
|
571
537
|
this.request.hasSingleLocaleResponse = true;
|
|
572
|
-
this.request.files.reduce(
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
},
|
|
579
|
-
this.request.localesMap
|
|
580
|
-
);
|
|
538
|
+
this.request.files.reduce((acc, cur) => {
|
|
539
|
+
acc.data[cur.id] = cur.locales.filter(
|
|
540
|
+
(metafileLocale) => metafileLocale.locale === locales
|
|
541
|
+
);
|
|
542
|
+
return acc;
|
|
543
|
+
}, this.request.localesMap);
|
|
581
544
|
} else if (isUndefined(locales)) {
|
|
582
|
-
this.request.files.reduce(
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
},
|
|
587
|
-
this.request.localesMap
|
|
588
|
-
);
|
|
545
|
+
this.request.files.reduce((acc, cur) => {
|
|
546
|
+
acc.data[cur.id] = excludeBaseLocale ? cur.locales.filter((metafileLocale) => !metafileLocale.isBaseLocale) : cur.locales;
|
|
547
|
+
return acc;
|
|
548
|
+
}, this.request.localesMap);
|
|
589
549
|
} else if (isArray(locales)) {
|
|
590
|
-
this.request.files.reduce(
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
},
|
|
597
|
-
this.request.localesMap
|
|
598
|
-
);
|
|
550
|
+
this.request.files.reduce((acc, cur) => {
|
|
551
|
+
acc.data[cur.id] = cur.locales.filter(
|
|
552
|
+
(metafileLocale) => locales.includes(metafileLocale.locale)
|
|
553
|
+
);
|
|
554
|
+
return acc;
|
|
555
|
+
}, this.request.localesMap);
|
|
599
556
|
}
|
|
600
557
|
return this;
|
|
601
558
|
}
|
|
@@ -613,14 +570,11 @@ class FetchHttpAdapter {
|
|
|
613
570
|
async get(url) {
|
|
614
571
|
const response = await fetch(`${this.baseUrl}${url}`);
|
|
615
572
|
const contentType = response.headers.get("content-type") || "";
|
|
616
|
-
const isJson = [
|
|
617
|
-
"application/json5",
|
|
618
|
-
"application/json"
|
|
619
|
-
].includes(contentType);
|
|
573
|
+
const isJson = ["application/json5", "application/json"].includes(contentType);
|
|
620
574
|
if (response.status >= 400) {
|
|
621
575
|
throw new Error(`Request failed with status code ${response.status}`);
|
|
622
576
|
}
|
|
623
|
-
let result
|
|
577
|
+
let result;
|
|
624
578
|
if (isJson) {
|
|
625
579
|
try {
|
|
626
580
|
result = await response.json();
|
|
@@ -637,7 +591,7 @@ class FetchHttpAdapter {
|
|
|
637
591
|
return result;
|
|
638
592
|
}
|
|
639
593
|
}
|
|
640
|
-
class
|
|
594
|
+
const _CdnClient = class _CdnClient {
|
|
641
595
|
constructor(options) {
|
|
642
596
|
__publicField(this, "metafile");
|
|
643
597
|
__publicField(this, "cache");
|
|
@@ -660,11 +614,13 @@ class CdnClient {
|
|
|
660
614
|
if (!isString(options.metafile)) {
|
|
661
615
|
throw new Error('Invalid param: "options.metafile" must be string.');
|
|
662
616
|
}
|
|
663
|
-
const cdn = new
|
|
617
|
+
const cdn = new _CdnClient(options);
|
|
664
618
|
await cdn.metafile.refresh();
|
|
665
619
|
return cdn;
|
|
666
620
|
}
|
|
667
|
-
}
|
|
621
|
+
};
|
|
622
|
+
__publicField(_CdnClient, "version", "1.5.0");
|
|
623
|
+
let CdnClient = _CdnClient;
|
|
668
624
|
exports.Api = Api;
|
|
669
625
|
exports.CdnBase = CdnBase;
|
|
670
626
|
exports.CdnCache = CdnCache;
|