@localazy/cdn-client 1.5.5 → 1.5.7

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.
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- /* @localazy/cdn-client@1.5.5
2
+ /* @localazy/cdn-client@1.5.7
6
3
  * (c) 2025 Localazy <team@localazy.com>
7
4
  * @license MIT */
8
5
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
6
  class Api {
7
+ context;
10
8
  constructor(context) {
11
- __publicField(this, "context");
12
9
  this.context = context;
13
10
  }
14
11
  async fetchLocale(options) {
@@ -24,8 +21,8 @@ class Api {
24
21
  }
25
22
  }
26
23
  class MemoryCacheAdapter {
24
+ map;
27
25
  constructor() {
28
- __publicField(this, "map");
29
26
  this.map = /* @__PURE__ */ new Map();
30
27
  }
31
28
  get(key) {
@@ -58,9 +55,9 @@ const uniqBy = (array, predicate) => {
58
55
  });
59
56
  };
60
57
  class LocalesCache {
58
+ context;
59
+ cacheAdapter;
61
60
  constructor(context) {
62
- __publicField(this, "context");
63
- __publicField(this, "cacheAdapter");
64
61
  this.context = context;
65
62
  this.cacheAdapter = new MemoryCacheAdapter();
66
63
  }
@@ -104,12 +101,17 @@ class LocalesCache {
104
101
  }
105
102
  }
106
103
  class ResponseFactory {
104
+ context;
107
105
  constructor(context) {
108
- __publicField(this, "context");
109
106
  this.context = context;
110
107
  }
111
108
  createCdnResponse(options) {
112
- const { requests, responses, hasSingleFileResponse, hasSingleLocaleResponse } = options;
109
+ const {
110
+ requests,
111
+ responses,
112
+ hasSingleFileResponse,
113
+ hasSingleLocaleResponse
114
+ } = options;
113
115
  if (responses.length === 0 || typeof responses[0] === "undefined") {
114
116
  return {};
115
117
  }
@@ -147,13 +149,13 @@ class ResponseFactory {
147
149
  }
148
150
  }
149
151
  class Context {
152
+ metafile;
153
+ cdn;
154
+ client;
155
+ api;
156
+ cache;
157
+ responseFactory;
150
158
  constructor(options) {
151
- __publicField(this, "metafile");
152
- __publicField(this, "cdn");
153
- __publicField(this, "client");
154
- __publicField(this, "api");
155
- __publicField(this, "cache");
156
- __publicField(this, "responseFactory");
157
159
  this.metafile = options.metafileContext;
158
160
  this.cdn = options.cdn;
159
161
  this.client = options.client;
@@ -163,17 +165,17 @@ class Context {
163
165
  }
164
166
  }
165
167
  class MetafileFile {
168
+ id;
169
+ file;
170
+ path;
171
+ library;
172
+ module;
173
+ buildType;
174
+ timestamp;
175
+ productFlavors;
176
+ locales;
177
+ baseUrl;
166
178
  constructor(options) {
167
- __publicField(this, "id");
168
- __publicField(this, "file");
169
- __publicField(this, "path");
170
- __publicField(this, "library");
171
- __publicField(this, "module");
172
- __publicField(this, "buildType");
173
- __publicField(this, "timestamp");
174
- __publicField(this, "productFlavors");
175
- __publicField(this, "locales");
176
- __publicField(this, "baseUrl");
177
179
  this.id = options.id;
178
180
  this.file = options.file;
179
181
  this.path = options.path;
@@ -205,16 +207,16 @@ class MetafileFile {
205
207
  }
206
208
  }
207
209
  class MetafileLocale {
210
+ language;
211
+ region;
212
+ script;
213
+ isRtl;
214
+ name;
215
+ localizedName;
216
+ uri;
217
+ timestamp;
218
+ baseLocale;
208
219
  constructor(options, baseLocale) {
209
- __publicField(this, "language");
210
- __publicField(this, "region");
211
- __publicField(this, "script");
212
- __publicField(this, "isRtl");
213
- __publicField(this, "name");
214
- __publicField(this, "localizedName");
215
- __publicField(this, "uri");
216
- __publicField(this, "timestamp");
217
- __publicField(this, "baseLocale");
218
220
  this.language = options.language;
219
221
  this.region = options.region;
220
222
  this.script = options.script;
@@ -254,13 +256,13 @@ class MetafileLocale {
254
256
  }
255
257
  }
256
258
  class MetafileData {
259
+ projectUrl;
260
+ baseLocale;
261
+ locales;
262
+ timestamp;
263
+ files;
264
+ filesMap;
257
265
  constructor(options, params) {
258
- __publicField(this, "projectUrl");
259
- __publicField(this, "baseLocale");
260
- __publicField(this, "locales");
261
- __publicField(this, "timestamp");
262
- __publicField(this, "files");
263
- __publicField(this, "filesMap");
264
266
  this.projectUrl = options.projectUrl;
265
267
  this.timestamp = options.timestamp;
266
268
  this.files = MetafileData.filesFactory(options.files, options.baseLocale, params);
@@ -312,8 +314,8 @@ class MetafileData {
312
314
  }
313
315
  }
314
316
  class MetafileParams {
317
+ options;
315
318
  constructor(metafileUrl) {
316
- __publicField(this, "options");
317
319
  this.options = MetafileParams.parseMetafileUrl(metafileUrl);
318
320
  }
319
321
  get url() {
@@ -350,10 +352,10 @@ class MetafileParams {
350
352
  }
351
353
  }
352
354
  class MetafileContext {
355
+ params;
356
+ parsedData;
357
+ data;
353
358
  constructor(options) {
354
- __publicField(this, "params");
355
- __publicField(this, "parsedData");
356
- __publicField(this, "data");
357
359
  this.params = new MetafileParams(options.metafile);
358
360
  this.parsedData = null;
359
361
  this.data = MetafileData.createEmpty(this.params);
@@ -364,8 +366,8 @@ class MetafileContext {
364
366
  }
365
367
  }
366
368
  class FetchHttpAdapter {
369
+ baseUrl;
367
370
  constructor(baseUrl) {
368
- __publicField(this, "baseUrl");
369
371
  this.baseUrl = baseUrl;
370
372
  }
371
373
  async get(url) {
@@ -385,36 +387,17 @@ class FetchHttpAdapter {
385
387
  }
386
388
  }
387
389
  class CdnBase {
390
+ context;
388
391
  constructor(context) {
389
- __publicField(this, "context");
390
392
  this.context = context;
391
393
  }
392
394
  }
393
395
  class CdnCache extends CdnBase {
394
- constructor() {
395
- super(...arguments);
396
- __publicField(this, "flush", () => {
397
- this.context.cache.flush();
398
- });
399
- }
396
+ flush = () => {
397
+ this.context.cache.flush();
398
+ };
400
399
  }
401
400
  class CdnMetafile extends CdnBase {
402
- constructor() {
403
- super(...arguments);
404
- __publicField(this, "locales", (options) => {
405
- const { excludeBaseLocale } = options || {};
406
- const { locales } = this.context.metafile.data;
407
- return excludeBaseLocale ? locales.filter((cdnLocale) => !cdnLocale.isBaseLocale) : locales;
408
- });
409
- __publicField(this, "refresh", async () => {
410
- const response = await this.context.api.fetchMetafile();
411
- this.context.metafile.setMetafile(response);
412
- });
413
- __publicField(this, "switch", async (options) => {
414
- this.context.metafile.params = new MetafileParams(options.metafile);
415
- await this.refresh();
416
- });
417
- }
418
401
  get projectUrl() {
419
402
  return this.context.metafile.data.projectUrl;
420
403
  }
@@ -427,22 +410,35 @@ class CdnMetafile extends CdnBase {
427
410
  get files() {
428
411
  return this.context.metafile.data.files.map((file) => file.toCdnFile());
429
412
  }
413
+ locales = (options) => {
414
+ const { excludeBaseLocale } = options || {};
415
+ const { locales } = this.context.metafile.data;
416
+ return excludeBaseLocale ? locales.filter((cdnLocale) => !cdnLocale.isBaseLocale) : locales;
417
+ };
418
+ refresh = async () => {
419
+ const response = await this.context.api.fetchMetafile();
420
+ this.context.metafile.setMetafile(response);
421
+ };
422
+ switch = async (options) => {
423
+ this.context.metafile.params = new MetafileParams(options.metafile);
424
+ await this.refresh();
425
+ };
430
426
  }
431
427
  class LocalesMap {
428
+ data;
429
+ context;
432
430
  constructor(options) {
433
- __publicField(this, "data");
434
- __publicField(this, "context");
435
431
  this.context = options.context;
436
432
  this.data = options.data || {};
437
433
  }
438
434
  }
439
435
  class Request {
436
+ files;
437
+ localesMap;
438
+ hasSingleFileResponse;
439
+ hasSingleLocaleResponse;
440
+ context;
440
441
  constructor(context) {
441
- __publicField(this, "files");
442
- __publicField(this, "localesMap");
443
- __publicField(this, "hasSingleFileResponse");
444
- __publicField(this, "hasSingleLocaleResponse");
445
- __publicField(this, "context");
446
442
  this.files = [];
447
443
  this.localesMap = new LocalesMap({ context });
448
444
  this.hasSingleFileResponse = false;
@@ -454,7 +450,9 @@ class Request {
454
450
  const promises = payload.map(
455
451
  (item) => item[0]
456
452
  );
457
- const requests = payload.map((item) => item[1]);
453
+ const requests = payload.map(
454
+ (item) => item[1]
455
+ );
458
456
  const responses = await Promise.all(promises);
459
457
  return this.context.responseFactory.createCdnResponse({
460
458
  requests,
@@ -465,29 +463,31 @@ class Request {
465
463
  });
466
464
  }
467
465
  getPromises() {
468
- return this.files.reduce((acc, cur) => {
469
- var _a;
470
- if (typeof ((_a = this.localesMap.data) == null ? void 0 : _a[cur.id]) !== "undefined") {
471
- acc.push(
472
- ...this.localesMap.data[cur.id].map(
473
- (metafileLocale) => {
474
- const request = {
475
- metafileFile: cur,
476
- metafileLocale
477
- };
478
- return [this.context.api.fetchLocale(request), request];
479
- }
480
- )
481
- );
482
- }
483
- return acc;
484
- }, []);
466
+ return this.files.reduce(
467
+ (acc, cur) => {
468
+ if (typeof this.localesMap.data?.[cur.id] !== "undefined") {
469
+ acc.push(
470
+ ...this.localesMap.data[cur.id].map(
471
+ (metafileLocale) => {
472
+ const request = {
473
+ metafileFile: cur,
474
+ metafileLocale
475
+ };
476
+ return [this.context.api.fetchLocale(request), request];
477
+ }
478
+ )
479
+ );
480
+ }
481
+ return acc;
482
+ },
483
+ []
484
+ );
485
485
  }
486
486
  }
487
487
  class RequestBuilder {
488
+ context;
489
+ request;
488
490
  constructor(context) {
489
- __publicField(this, "context");
490
- __publicField(this, "request");
491
491
  this.context = context;
492
492
  this.request = new Request(this.context);
493
493
  }
@@ -568,7 +568,9 @@ class RequestBuilder {
568
568
  }, this.request.localesMap);
569
569
  } else if (isUndefined(locales)) {
570
570
  this.request.files.reduce((acc, cur) => {
571
- acc.data[cur.id] = excludeBaseLocale ? cur.locales.filter((metafileLocale) => !metafileLocale.isBaseLocale) : cur.locales;
571
+ acc.data[cur.id] = excludeBaseLocale ? cur.locales.filter(
572
+ (metafileLocale) => !metafileLocale.isBaseLocale
573
+ ) : cur.locales;
572
574
  return acc;
573
575
  }, this.request.localesMap);
574
576
  } else if (isArray(locales)) {
@@ -587,22 +589,23 @@ class RequestBuilder {
587
589
  return result;
588
590
  }
589
591
  }
590
- const _CdnClient = class _CdnClient {
592
+ class CdnClient {
593
+ metafile;
594
+ cache;
595
+ context;
596
+ static version = "1.5.7";
591
597
  constructor(options) {
592
- __publicField(this, "metafile");
593
- __publicField(this, "cache");
594
- __publicField(this, "context");
595
- __publicField(this, "fetch", async (options) => {
596
- const { files, locales, excludeBaseLocale } = options || {};
597
- const requestBuilder = new RequestBuilder(this.context).addFiles(files).addLocales(locales, excludeBaseLocale);
598
- return requestBuilder.getCdnRequest().execute();
599
- });
600
598
  const metafileContext = new MetafileContext(options);
601
599
  const client = new FetchHttpAdapter(metafileContext.params.baseUrl);
602
600
  this.context = new Context({ metafileContext, cdn: this, client });
603
601
  this.metafile = new CdnMetafile(this.context);
604
602
  this.cache = new CdnCache(this.context);
605
603
  }
604
+ fetch = async (options) => {
605
+ const { files, locales, excludeBaseLocale } = options || {};
606
+ const requestBuilder = new RequestBuilder(this.context).addFiles(files).addLocales(locales, excludeBaseLocale);
607
+ return requestBuilder.getCdnRequest().execute();
608
+ };
606
609
  static async create(options) {
607
610
  if (!options) {
608
611
  throw new Error('Invalid param: missing required "options" parameter.');
@@ -610,13 +613,11 @@ const _CdnClient = class _CdnClient {
610
613
  if (!isString(options.metafile)) {
611
614
  throw new Error('Invalid param: "options.metafile" must be string.');
612
615
  }
613
- const cdn = new _CdnClient(options);
616
+ const cdn = new CdnClient(options);
614
617
  await cdn.metafile.refresh();
615
618
  return cdn;
616
619
  }
617
- };
618
- __publicField(_CdnClient, "version", "1.5.5");
619
- let CdnClient = _CdnClient;
620
+ }
620
621
  exports.Api = Api;
621
622
  exports.CdnBase = CdnBase;
622
623
  exports.CdnCache = CdnCache;
@@ -1 +1 @@
1
- {"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":";;;;;;;;AAIO,MAAM,IAAI;AAAA,EAGf,YAAY,SAAkB;AAFpB;AAGR,SAAK,UAAU;AAAA,EAAA;AAAA,EAGjB,MAAa,YAAY,SAAqD;AAC5E,QAAI,KAAK,QAAQ,MAAM,IAAI,OAAO,GAAG;AAC5B,aAAA,IAAI,QAAQ,CAAC,YAAkB;AACpC,gBAAQ,KAAK,QAAQ,MAAM,IAAI,OAAO,CAAoB;AAAA,MAAA,CAC3D;AAAA,IAAA;AAGH,WAAO,KAAK,QAAQ,OAAO,IAAI,QAAQ,eAAe,GAAG;AAAA,EAAA;AAAA,EAG3D,MAAa,gBAAoC;AACvC,WAAA,MAAM,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ,SAAS,OAAO,QAAQ;AAAA,EAAA;AAE/E;ACtBO,MAAM,mBAAwD;AAAA,EAGnE,cAAc;AAFJ;AAGH,SAAA,0BAAU,IAAI;AAAA,EAAA;AAAA,EAGd,IAAI,KAAuB;AACzB,WAAA,KAAK,IAAI,IAAI,GAAG;AAAA,EAAA;AAAA,EAGlB,IAAI,KAAiB;AACnB,WAAA,KAAK,IAAI,IAAI,GAAG;AAAA,EAAA;AAAA,EAGlB,IAAI,KAAQ,OAAgB;AAC5B,SAAA,IAAI,IAAI,KAAK,KAAK;AAAA,EAAA;AAAA,EAGlB,QAAc;AACd,SAAA,0BAAU,IAAI;AAAA,EAAA;AAEvB;ACxBO,MAAM,WAAW,CAAC,UAAoC,OAAO,UAAU;AAEvE,MAAM,cAAc,CAAC,UAAuC,OAAO,UAAU;AAE7E,MAAM,UAAU,CAAI,UAAiC,MAAM,QAAQ,KAAK;AAElE,MAAA,gBAAgB,CAAC,UAC5B,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAE/B,MAAA,OAAO,CAAI,UAAoB,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAEjD,MAAA,SAAS,CAAI,OAAY,cAAwC;AAC5E,QAAM,OAAgC,CAAC;AAEhC,SAAA,MAAM,OAAO,CAAC,SAAqB;AAClC,UAAA,MAAc,UAAU,IAAI;AAElC,QAAI,CAAC,OAAO,OAAO,MAAM,GAAG,GAAG;AAC7B,WAAK,GAAG,IAAI;AAEL,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,EAAA,CACR;AACH;AChBO,MAAM,aAAa;AAAA,EAKxB,YAAY,SAAkB;AAJpB;AAEA;AAGR,SAAK,UAAU;AACV,SAAA,eAAe,IAAI,mBAAmB;AAAA,EAAA;AAAA,EAGtC,YAAY,SAAyC;AAC1D,UAAM,EAAE,cAAc,gBAAgB,KAAmC,IAAA;AAEnE,UAAA,MAAc,KAAK,gBAAgB;AAAA,MACvC;AAAA,MACA;AAAA,IAAA,CACD;AAED,QAAI,CAAC,KAAK,aAAa,IAAI,GAAG,GAAG;AAC1B,WAAA,aAAa,IAAI,KAAK,IAAI;AAAA,IAAA;AAAA,EACjC;AAAA,EAGK,IAAI,SAA0C;AAC7C,UAAA,MAAc,KAAK,gBAAgB,OAAO;AAEzC,WAAA,KAAK,aAAa,IAAI,GAAG;AAAA,EAAA;AAAA,EAG3B,IAAI,SAA8D;AACjE,UAAA,MAAc,KAAK,gBAAgB,OAAO;AAEzC,WAAA,KAAK,aAAa,IAAI,GAAG;AAAA,EAAA;AAAA,EAG3B,QAAc;AACnB,SAAK,aAAa,MAAM;AAAA,EAAA;AAAA,EAGhB,gBAAgB,SAA0C;AAC5D,UAAA,EAAE,cAAc,eAAA,IAA4C;AAC5D,UAAA,iBAAyB,CAAC,GAAG,KAAK,aAAa,cAAc,CAAC,EAAE,KAAA,EAAO,KAAK,GAAG;AAErF,UAAM,UAAoB;AAAA,MACxB,KAAK,QAAQ,SAAS,OAAO;AAAA,MAC7B,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb;AAAA,MACA,eAAe;AAAA,MACf,eAAe,UAAU,SAAS;AAAA,IACpC;AAEO,WAAA,QAAQ,OAAO,CAAC,QAAyB,QAAQ,EAAE,EAAE,KAAK,GAAG;AAAA,EAAA;AAExE;AC7DO,MAAM,gBAAgB;AAAA,EAG3B,YAAY,SAAkB;AAFpB;AAGR,SAAK,UAAU;AAAA,EAAA;AAAA,EAGV,kBAAkB,SAA8C;AACrE,UAAM,EAAE,UAAU,WAAW,uBAAuB,wBAAoD,IAAA;AAExG,QAAI,UAAU,WAAW,KAAK,OAAO,UAAU,CAAC,MAAM,aAAa;AACjE,aAAO,CAAC;AAAA,IAAA;AAGL,SAAA,eAAe,UAAU,SAAS;AAEvC,WAAO,yBAAyB,0BAC5B,UAAU,CAAC,IACX,gBAAgB,mBAAmB,OAAO;AAAA,EAAA;AAAA,EAGtC,eAAe,UAA8B,WAAsC;AACjF,cAAA,QAAQ,CAAC,UAA2B,UAAwB;AACpE,UAAI,OAAO,SAAS,KAAK,MAAM,aAAa;AAC1C,cAAM,EAAE,cAAc,mBAAsD,SAAS,KAAK;AAE1F,YAAI,gBAAgB,gBAAgB;AAC7B,eAAA,QAAQ,MAAM,YAAY,EAAE,cAAc,gBAAgB,MAAM,UAAU;AAAA,QAAA;AAAA,MACjF;AAAA,IACF,CACD;AAAA,EAAA;AAAA,EAGH,OAAiB,mBAAmB,SAA8C;AAChF,UAAM,EAAE,UAAU,WAAW,sBAAkD,IAAA;AAE/E,WAAO,UAAU,OAAO,CAAC,KAAkB,KAAsB,UAAkB;AACjF,UAAI,OAAO,SAAS,KAAK,MAAM,aAAa;AAC1C,cAAM,EAAE,cAAc,mBAAsD,SAAS,KAAK;AAE1F,YAAI,gBAAgB,gBAAgB;AAClC,cAAI,uBAAuB;AAErB,gBAAA,eAAe,MAAM,IAAI;AAAA,UAAA,OACxB;AAEL,gBAAI,CAAC,IAAI,aAAa,EAAE,GAAG;AAErB,kBAAA,aAAa,EAAE,IAAI,CAAC;AAAA,YAAA;AAI1B,gBAAI,aAAa,EAAE,EAAE,eAAe,MAAM,IAAI;AAAA,UAAA;AAAA,QAChD;AAAA,MACF;AAGK,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAET;AC1DO,MAAM,QAAQ;AAAA,EAanB,YAAY,SAAyB;AAZ9B;AAEA;AAEA;AAEA;AAEA;AAEA;AAGL,SAAK,WAAW,QAAQ;AACxB,SAAK,MAAM,QAAQ;AACnB,SAAK,SAAS,QAAQ;AACjB,SAAA,MAAM,IAAI,IAAI,IAAI;AAClB,SAAA,QAAQ,IAAI,aAAa,IAAI;AAC7B,SAAA,kBAAkB,IAAI,gBAAgB,IAAI;AAAA,EAAA;AAEnD;ACvBO,MAAM,aAAuD;AAAA,EAqBlE,YAAY,SAA8B;AApBnC;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEG;AAGR,SAAK,KAAK,QAAQ;AAClB,SAAK,OAAO,QAAQ;AACpB,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ;AACvB,SAAK,SAAS,QAAQ;AACtB,SAAK,YAAY,QAAQ;AACzB,SAAK,YAAY,QAAQ;AACzB,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,UAAU,QAAQ;AACvB,SAAK,UAAU,QAAQ;AAAA,EAAA;AAAA,EAGlB,YAAqB;AACnB,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,gBAAgB,KAAK;AAAA,MACrB,SAAS,KAAK,QAAQ;AAAA,QACpB,CAAC,YAA2C;AAAA,UAC1C,QAAQ,OAAO;AAAA,UACf,cAAc,OAAO;AAAA,UACrB,KAAK,GAAG,KAAK,OAAO,GAAG,OAAO,GAAG;AAAA,QACnC;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ;ACvDO,MAAM,eAA8C;AAAA,EAmBzD,YAAY,SAA8B,YAAoB;AAlBvD;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEG;AAGR,SAAK,WAAW,QAAQ;AACxB,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS,QAAQ;AACtB,SAAK,QAAQ,QAAQ;AACrB,SAAK,OAAO,QAAQ;AACpB,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,MAAM,QAAQ;AACnB,SAAK,YAAY,QAAQ;AACzB,SAAK,aAAa;AAAA,EAAA;AAAA,EAGpB,IAAI,SAAiB;AACnB,QAAI,KAAK,YAAY,KAAK,UAAU,KAAK,QAAQ;AACxC,aAAA,GAAG,KAAK,QAAQ,IAAI,KAAK,MAAM,IAAI,KAAK,MAAM;AAAA,IAAA;AAGnD,QAAA,KAAK,YAAY,KAAK,QAAQ;AAChC,aAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,MAAM;AAAA,IAAA;AAGpC,QAAA,KAAK,YAAY,KAAK,QAAQ;AAChC,aAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,MAAM;AAAA,IAAA;AAGxC,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,IAAI,eAAwB;AACnB,WAAA,KAAK,WAAW,KAAK;AAAA,EAAA;AAAA,EAGvB,cAAyB;AACvB,WAAA;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,cAAc,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,eAAe,KAAK;AAAA,IACtB;AAAA,EAAA;AAEJ;ACvDO,MAAM,aAAgE;AAAA,EAa3E,YAAY,SAA0B,QAAwB;AAZvD;AAEA;AAEA;AAEA;AAEA;AAEA;AAGL,SAAK,aAAa,QAAQ;AAC1B,SAAK,YAAY,QAAQ;AACzB,SAAK,QAAQ,aAAa,aAAa,QAAQ,OAAO,QAAQ,YAAY,MAAM;AAChF,SAAK,WAAW,aAAa,gBAAgB,KAAK,KAAK;AACvD,SAAK,UAAU,aAAa,eAAe,KAAK,KAAK;AACrD,SAAK,aAAa,KAAK,QAAQ,KAAK,CAAC,WAAsB,OAAO,YAAY;AAAA,EAAA;AAAA,EAGhF,OAAc,YAAY,QAAsC;AAC9D,WAAO,IAAI;AAAA,MACT;AAAA,QACE,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,OAAO,CAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAGF,OAAiB,aAAa,OAAuB,YAAoB,QAAwC;AAC/G,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,KAAqB,QAAgB;AACrE,UAAI,OAAO,MAAM,GAAG,MAAM,aAAa;AACrC,cAAM,UAA4B,MAAM,GAAG,EAAE,QAAQ;AAAA,UACnD,CAAC,WAAgC,IAAI,eAAe,QAAQ,UAAU;AAAA,QACxE;AAEI,YAAA;AAAA,UACF,IAAI,aAAa;AAAA,YACf,GAAG,MAAM,GAAG;AAAA,YACZ,IAAI;AAAA,YACJ;AAAA,YACA,SAAS,OAAO;AAAA,UACjB,CAAA;AAAA,QACH;AAAA,MAAA;AAGK,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAAA,EAGP,OAAiB,gBAAgB,OAAiC;AAChE,WAAO,MAAM,OAAO,CAAC,KAAe,QAAsB;AACpD,UAAA,IAAI,EAAE,IAAI;AAEP,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAAA,EAGP,OAAiB,eAAe,OAAoC;AAClE,UAAM,UAAuB,MAAM,OAAO,CAAC,KAAkB,QAAsB;AAC7E,UAAA,KAAK,GAAG,IAAI,QAAQ,IAAI,CAAC,WAAsC,OAAO,YAAY,CAAC,CAAC;AACjF,aAAA;AAAA,IACT,GAAG,EAAE;AAEL,WAAO,OAAO,SAAS,CAAC,cAAiC,UAAU,MAAM;AAAA,EAAA;AAE7E;AChFO,MAAM,eAA0C;AAAA,EAGrD,YAAY,aAAqB;AAFvB;AAGH,SAAA,UAAU,eAAe,iBAAiB,WAAW;AAAA,EAAA;AAAA,EAG5D,IAAI,MAAc;AAChB,WAAO,KAAK,QAAQ;AAAA,EAAA;AAAA,EAGtB,IAAI,UAAkB;AACpB,WAAO,KAAK,QAAQ;AAAA,EAAA;AAAA,EAGtB,IAAI,QAAgB;AAClB,WAAO,KAAK,QAAQ;AAAA,EAAA;AAAA,EAGtB,IAAI,WAAmB;AACrB,WAAO,KAAK,QAAQ;AAAA,EAAA;AAAA,EAGtB,OAAiB,iBAAiB,aAAsC;AAClE,QAAA;AAEA,QAAA;AACI,YAAA,IAAI,IAAI,WAAW;AAAA,IAAA,QACnB;AACA,YAAA,IAAI,MAAM,4DAA4D;AAAA,IAAA;AAG9E,UAAM,UAA2B,oCAAoC,KAAK,IAAI,QAAQ;AAEtF,QACE,YAAY,QACZ,QAAQ,WAAW,KACnB,OAAO,QAAQ,CAAC,MAAM,eACtB,OAAO,QAAQ,CAAC,MAAM,aACtB;AACM,YAAA,IAAI,MAAM,kEAAkE;AAAA,IAAA;AAG9E,UAAA,QAAgB,QAAQ,CAAC;AACzB,UAAA,QAAgB,QAAQ,CAAC;AAExB,WAAA;AAAA,MACL,KAAK;AAAA,MACL,SAAS,IAAI;AAAA,MACb;AAAA,MACA,UAAU,IAAI,KAAK,IAAI,KAAK;AAAA,IAC9B;AAAA,EAAA;AAEJ;AClDO,MAAM,gBAAgB;AAAA,EAO3B,YAAY,SAA2B;AANhC;AAEA;AAEA;AAGL,SAAK,SAAS,IAAI,eAAe,QAAQ,QAAQ;AACjD,SAAK,aAAa;AAClB,SAAK,OAAO,aAAa,YAAY,KAAK,MAAM;AAAA,EAAA;AAAA,EAG3C,YAAY,UAA2B;AAC5C,SAAK,aAAa;AAElB,SAAK,OAAO,IAAI,aAAa,UAAU,KAAK,MAAM;AAAA,EAAA;AAEtD;ACrBO,MAAM,iBAAyC;AAAA,EAGpD,YAAY,SAAiB;AAFnB;AAGR,SAAK,UAAU;AAAA,EAAA;AAAA,EAGjB,MAAM,IAAI,KAAuC;AACzC,UAAA,WAAqB,MAAM,MAAM,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE;AAC9D,UAAM,cAA6B,SAAS,QAAQ,IAAI,cAAc;AAChE,UAAA,SAAkB,gBAAgB,uBAAuB,gBAAgB;AAE3E,QAAA,SAAS,UAAU,KAAK;AAC1B,YAAM,IAAI,MAAM,mCAAmC,SAAS,OAAO,SAAU,CAAA,EAAE;AAAA,IAAA;AAG7E,QAAA;AAEJ,QAAI,QAAQ;AACA,eAAA,MAAM,SAAS,KAAK;AAAA,IAAA,OACzB;AACI,eAAA,MAAM,SAAS,KAAK;AAAA,IAAA;AAGxB,WAAA;AAAA,EAAA;AAEX;AC1BO,MAAe,QAAQ;AAAA,EAG5B,YAAY,SAAkB;AAFpB;AAGR,SAAK,UAAU;AAAA,EAAA;AAEnB;ACNO,MAAM,iBAAiB,QAAQ;AAAA,EAA/B;AAAA;AACE,iCAAQ,MAAY;AACpB,WAAA,QAAQ,MAAM,MAAM;AAAA,IAC3B;AAAA;AACF;ACIO,MAAM,oBAAoB,QAAQ;AAAA,EAAlC;AAAA;AAiBE,mCAAU,CAAC,YAA6C;AAC7D,YAAM,EAAE,sBAAyC,WAAW,CAAC;AAC7D,YAAM,EAAE,QAA0B,IAAA,KAAK,QAAQ,SAAS;AAEjD,aAAA,oBAAoB,QAAQ,OAAO,CAAC,cAAkC,CAAC,UAAU,YAAY,IAAI;AAAA,IAC1G;AAEO,mCAAU,YAA2B;AAC1C,YAAM,WAAsB,MAAM,KAAK,QAAQ,IAAI,cAAc;AAE5D,WAAA,QAAQ,SAAS,YAAY,QAAQ;AAAA,IAC5C;AAEO,kCAAS,OAAO,YAA6C;AAClE,WAAK,QAAQ,SAAS,SAAS,IAAI,eAAe,QAAQ,QAAQ;AAElE,YAAM,KAAK,QAAQ;AAAA,IACrB;AAAA;AAAA,EAjCA,IAAI,aAAqB;AAChB,WAAA,KAAK,QAAQ,SAAS,KAAK;AAAA,EAAA;AAAA,EAGpC,IAAI,aAAwB;AACnB,WAAA,KAAK,QAAQ,SAAS,KAAK;AAAA,EAAA;AAAA,EAGpC,IAAI,MAAc;AACT,WAAA,KAAK,QAAQ,SAAS,OAAO;AAAA,EAAA;AAAA,EAGtC,IAAI,QAAmB;AACd,WAAA,KAAK,QAAQ,SAAS,KAAK,MAAM,IAAI,CAAC,SAAgC,KAAK,WAAW;AAAA,EAAA;AAqBjG;ACzCO,MAAM,WAAW;AAAA,EAKtB,YAAY,SAA4B;AAJjC;AAEG;AAGR,SAAK,UAAU,QAAQ;AAClB,SAAA,OAAO,QAAQ,QAAQ,CAAC;AAAA,EAAA;AAEjC;ACNO,MAAM,QAAQ;AAAA,EAWnB,YAAY,SAAkB;AAVvB;AAEA;AAEA;AAEA;AAEG;AAGR,SAAK,QAAQ,CAAC;AACd,SAAK,aAAa,IAAI,WAAW,EAAE,SAAS;AAC5C,SAAK,wBAAwB;AAC7B,SAAK,0BAA0B;AAC/B,SAAK,UAAU;AAAA,EAAA;AAAA,EAGjB,MAAa,UAAgC;AACrC,UAAA,UAA0D,KAAK,YAAY;AACjF,UAAM,WAAuC,QAAQ;AAAA,MACnD,CAAC,SAAuD,KAAK,CAAC;AAAA,IAChE;AACA,UAAM,WAA+B,QAAQ,IAAI,CAAC,SAAuD,KAAK,CAAC,CAAC;AAChH,UAAM,YAAiC,MAAM,QAAQ,IAAI,QAAQ;AAE1D,WAAA,KAAK,QAAQ,gBAAgB,kBAAkB;AAAA,MACpD;AAAA,MACA;AAAA,MACA,YAAY,KAAK;AAAA,MACjB,uBAAuB,KAAK;AAAA,MAC5B,yBAAyB,KAAK;AAAA,IAAA,CAC/B;AAAA,EAAA;AAAA,EAGO,cAA8D;AACtE,WAAO,KAAK,MAAM,OAAO,CAAC,KAAqD,QAAsB;;AACnG,UAAI,SAAO,UAAK,WAAW,SAAhB,mBAAuB,IAAI,SAAQ,aAAa;AACrD,YAAA;AAAA,UAEF,GAAG,KAAK,WAAW,KAAK,IAAI,EAAE,EAAE;AAAA,YAC9B,CAAC,mBAAiF;AAChF,oBAAM,UAA4B;AAAA,gBAChC,cAAc;AAAA,gBACd;AAAA,cACF;AAEA,qBAAO,CAAC,KAAK,QAAQ,IAAI,YAAY,OAAO,GAAG,OAAO;AAAA,YAAA;AAAA,UACxD;AAAA,QAEJ;AAAA,MAAA;AAEK,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAET;ACtDO,MAAM,eAA0C;AAAA,EAKrD,YAAY,SAAkB;AAJpB;AAEA;AAGR,SAAK,UAAU;AACf,SAAK,UAAU,IAAI,QAAQ,KAAK,OAAO;AAAA,EAAA;AAAA,EAGlC,SAAS,OAAuD;AACrE,QAAI,EAAE,cAAc,KAAK,KAAK,SAAS,KAAK,KAAK,YAAY,KAAK,KAAK,QAAQ,KAAK,IAAI;AAChF,YAAA,IAAI,MAAM,4EAA4E;AAAA,IAAA;AAG1F,QAAA,QAAQ,KAAK,GAAG;AACZ,YAAA,QAAQ,CAAC,MAA8B;AAC3C,YAAI,EAAE,cAAc,CAAC,KAAK,SAAS,CAAC,IAAI;AAChC,gBAAA,IAAI,MAAM,uEAAuE;AAAA,QAAA;AAAA,MACzF,CACD;AAAA,IAAA;AAGC,QAAA,SAAS,KAAK,GAAG;AACnB,WAAK,QAAQ,wBAAwB;AAErC,YAAM,OAAiC,KAAK,QAAQ,SAAS,KAAK,MAAM;AAAA,QACtE,CAAC,MAA6B,EAAE,OAAO;AAAA,MACzC;AAEI,UAAA,EAAE,gBAAgB,eAAe;AACnC,cAAM,IAAI,MAAM,oBAAoB,KAAK,IAAI;AAAA,MAAA;AAG1C,WAAA,QAAQ,QAAQ,CAAC,IAAI;AAAA,IAAA,WACjB,YAAY,KAAK,GAAG;AACxB,WAAA,QAAQ,QAAQ,CAAC,GAAG,KAAK,QAAQ,SAAS,KAAK,KAAK;AAAA,IAAA,WAChD,QAAQ,KAAK,GAAG;AACzB,WAAK,QAAQ,QAAQ,MAAM,IAAI,CAAC,SAAyC;AACnE,YAAA;AAEA,YAAA,SAAS,IAAI,GAAG;AAClB,gBAAM,YAAsC,KAAK,QAAQ,SAAS,KAAK,MAAM;AAAA,YAC3E,CAAC,MAA6B,EAAE,OAAO;AAAA,UACzC;AAEI,cAAA,YAAY,SAAS,GAAG;AAC1B,kBAAM,IAAI,MAAM,oBAAoB,IAAI,IAAI;AAAA,UAAA;AAG/B,yBAAA;AAAA,QAAA,OACV;AACL,gBAAM,YAAsC,KAAK,QAAQ,SAAS,KAAK,MAAM;AAAA,YAC3E,CAAC,MAA6B,EAAE,OAAO,KAAK;AAAA,UAC9C;AAEI,cAAA,YAAY,SAAS,GAAG;AAC1B,kBAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE,IAAI;AAAA,UAAA;AAGlC,yBAAA;AAAA,QAAA;AAGV,eAAA;AAAA,MAAA,CACR;AAAA,IAAA,WACQ,cAAc,KAAK,GAAG;AAC/B,WAAK,QAAQ,wBAAwB;AAErC,YAAM,YAAsC,KAAK,QAAQ,SAAS,KAAK,MAAM;AAAA,QAC3E,CAAC,MAA6B,EAAE,OAAO,MAAM;AAAA,MAC/C;AAEI,UAAA,YAAY,SAAS,GAAG;AAC1B,cAAM,IAAI,MAAM,oBAAoB,MAAM,EAAE,IAAI;AAAA,MAAA;AAG7C,WAAA,QAAQ,QAAQ,CAAC,SAAS;AAAA,IAAA;AAG1B,WAAA;AAAA,EAAA;AAAA,EAGF,WAAW,SAA6B,mBAAmC;AAC5E,QAAA,EAAE,SAAS,OAAO,KAAK,YAAY,OAAO,KAAK,QAAQ,OAAO,IAAI;AAC9D,YAAA,IAAI,MAAM,sEAAsE;AAAA,IAAA;AAGpF,QAAA,QAAQ,OAAO,GAAG;AACZ,cAAA,QAAQ,CAAC,MAAmC;AAC9C,YAAA,CAAC,SAAS,CAAC,GAAG;AACV,gBAAA,IAAI,MAAM,8DAA8D;AAAA,QAAA;AAAA,MAChF,CACD;AAAA,IAAA;AAGC,QAAA,SAAS,OAAO,GAAG;AACrB,WAAK,QAAQ,0BAA0B;AACvC,WAAK,QAAQ,MAAM,OAAO,CAAC,KAAiB,QAAsB;AAChE,YAAI,KAAK,IAAI,EAAE,IAAI,IAAI,QAAQ;AAAA,UAC7B,CAAC,mBAA4C,eAAe,WAAW;AAAA,QACzE;AAEO,eAAA;AAAA,MAAA,GACN,KAAK,QAAQ,UAAU;AAAA,IAAA,WACjB,YAAY,OAAO,GAAG;AAC/B,WAAK,QAAQ,MAAM,OAAO,CAAC,KAAiB,QAAsB;AAChE,YAAI,KAAK,IAAI,EAAE,IAAI,oBACf,IAAI,QAAQ,OAAO,CAAC,mBAA4C,CAAC,eAAe,YAAY,IAC5F,IAAI;AAED,eAAA;AAAA,MAAA,GACN,KAAK,QAAQ,UAAU;AAAA,IAAA,WACjB,QAAQ,OAAO,GAAG;AAC3B,WAAK,QAAQ,MAAM,OAAO,CAAC,KAAiB,QAAsB;AAChE,YAAI,KAAK,IAAI,EAAE,IAAI,IAAI,QAAQ;AAAA,UAAO,CAAC,mBACrC,QAAQ,SAAS,eAAe,MAAM;AAAA,QACxC;AAEO,eAAA;AAAA,MAAA,GACN,KAAK,QAAQ,UAAU;AAAA,IAAA;AAGrB,WAAA;AAAA,EAAA;AAAA,EAGF,gBAAyB;AAC9B,UAAM,SAAkB,KAAK;AAC7B,SAAK,UAAU,IAAI,QAAQ,KAAK,OAAO;AAChC,WAAA;AAAA,EAAA;AAEX;AChIO,MAAM,aAAN,MAAM,WAAU;AAAA,EASX,YAAY,SAA2B;AAR1C;AAEA;AAEG;AAaH,iCAAQ,OAAO,YAAoD;AACxE,YAAM,EAAE,OAAO,SAAS,kBAAkB,IAAqB,WAAW,CAAC;AACrE,YAAA,iBAAiC,IAAI,eAAe,KAAK,OAAO,EACnE,SAAS,KAAK,EACd,WAAW,SAAS,iBAAiB;AAEjC,aAAA,eAAe,cAAc,EAAE,QAAQ;AAAA,IAChD;AAfQ,UAAA,kBAAmC,IAAI,gBAAgB,OAAO;AACpE,UAAM,SAA2B,IAAI,iBAAiB,gBAAgB,OAAO,OAAO;AAE/E,SAAA,UAAU,IAAI,QAAQ,EAAE,iBAAiB,KAAK,MAAM,QAAQ;AACjE,SAAK,WAAW,IAAI,YAAY,KAAK,OAAO;AAC5C,SAAK,QAAQ,IAAI,SAAS,KAAK,OAAO;AAAA,EAAA;AAAA,EAYxC,aAAoB,OAAO,SAA+C;AACxE,QAAI,CAAC,SAAS;AACN,YAAA,IAAI,MAAM,sDAAsD;AAAA,IAAA;AAGxE,QAAI,CAAC,SAAS,QAAQ,QAAQ,GAAG;AACzB,YAAA,IAAI,MAAM,mDAAmD;AAAA,IAAA;AAG/D,UAAA,MAAiB,IAAI,WAAU,OAAO;AAEtC,UAAA,IAAI,SAAS,QAAQ;AAEpB,WAAA;AAAA,EAAA;AAEX;AAnCE,cAPW,YAOG,WAAU;AAPnB,IAAM,YAAN;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"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 type { Context } from '@/cdn/context/context.js';\nimport type { IMetafile } from '@/interfaces/i-metafile.js';\nimport type { ApiLocaleRequest } from '@/types/api-locale-request.js';\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 type { ICacheAdapter } from '@/interfaces/i-cache-adapter.js';\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.js';\nimport type { Context } from '@/cdn/context/context.js';\nimport { uniq } from '@/cdn/utils.js';\nimport type { ICacheAdapter } from '@/interfaces/i-cache-adapter.js';\nimport type { CacheGetLocalesRequest } from '@/types/cache-get-locales-request.js';\nimport type { CacheHasLocalesRequest } from '@/types/cache-has-locales-request.js';\nimport type { CacheKeyMetafileOptions } from '@/types/cache-key-metafile-options.js';\nimport type { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request.js';\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 type { Context } from '@/cdn/context/context.js';\nimport type { ApiLocaleRequest } from '@/types/api-locale-request.js';\nimport type { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request.js';\nimport type { CdnResponse } from '@/types/cdn-response.js';\nimport type { ResponseFactoryOptions } from '@/types/response-factory-options.js';\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,\n responses,\n hasSingleFileResponse,\n hasSingleLocaleResponse,\n }: 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.js';\nimport { LocalesCache } from '@/cdn/cache/locales-cache.js';\nimport type { CdnClient } from '@/cdn/cdn-client.js';\nimport type { MetafileContext } from '@/cdn/context/metafile-context.js';\nimport { ResponseFactory } from '@/cdn/response/response-factory.js';\nimport type { IHttpAdapter } from '@/interfaces/i-http-adapter.js';\nimport type { ContextOptions } from '@/types/context-options.js';\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 type { MetafileLocale } from '@/cdn/metafile/metafile-locale.js';\nimport type { IMetafileFile } from '@/interfaces/i-metafile-file.js';\nimport type { CdnFileLocale } from '@/types/cdn-file-locale.js';\nimport type { CdnFile } from '@/types/cdn-file.js';\nimport type { MetafileFileOptions } from '@/types/metafile-file-options.js';\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 type { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale.js';\nimport type { CdnLocale } from '@/types/cdn-locale.js';\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.js';\nimport { MetafileLocale } from '@/cdn/metafile/metafile-locale.js';\nimport type { MetafileParams } from '@/cdn/metafile/metafile-params.js';\nimport { uniqBy } from '@/cdn/utils.js';\nimport type { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale.js';\nimport type { IMetafileFiles } from '@/interfaces/i-metafile-files.js';\nimport type { IMetafile } from '@/interfaces/i-metafile.js';\nimport type { CdnLocale } from '@/types/cdn-locale.js';\nimport type { FilesMap } from '@/types/files-map.js';\nimport type { MetafileOptions } from '@/types/metafile-options.js';\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(\n files: IMetafileFiles,\n baseLocale: string,\n params: MetafileParams,\n ): 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 type { IMetafileParams } from '@/interfaces/i-metafile-params.js';\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.js';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params.js';\nimport type { IMetafile } from '@/interfaces/i-metafile.js';\nimport type { CdnClientOptions } from '@/types/cdn-client-options.js';\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 type { IHttpAdapter } from '@/interfaces/i-http-adapter.js';\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 =\n 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 type { Context } from '@/cdn/context/context.js';\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.js';\n\nexport class CdnCache extends CdnBase {\n public flush = (): void => {\n this.context.cache.flush();\n };\n}\n","import type { MetafileData } from '@/cdn/metafile/metafile-data.js';\nimport type { MetafileFile } from '@/cdn/metafile/metafile-file.js';\nimport { MetafileParams } from '@/cdn/metafile/metafile-params.js';\nimport { CdnBase } from '@/cdn/methods/cdn-base.js';\nimport type { IMetafile } from '@/interfaces/i-metafile.js';\nimport type { CdnClientOptions } from '@/types/cdn-client-options.js';\nimport type { CdnFile } from '@/types/cdn-file.js';\nimport type { CdnLocale } from '@/types/cdn-locale.js';\nimport type { CdnLocalesOptions } from '@/types/cdn-locales-options.js';\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 type { Context } from '@/cdn/context/context.js';\nimport type { LocalesMapData } from '@/types/locales-map-data.js';\nimport type { LocalesMapOptions } from '@/types/locales-map-options.js';\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 type { Context } from '@/cdn/context/context.js';\nimport type { MetafileFile } from '@/cdn/metafile/metafile-file.js';\nimport type { MetafileLocale } from '@/cdn/metafile/metafile-locale.js';\nimport { LocalesMap } from '@/cdn/request/locales-map.js';\nimport type { ApiLocaleRequest } from '@/types/api-locale-request.js';\nimport type { CdnResponse } from '@/types/cdn-response.js';\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 (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 }\n}\n","import type { Context } from '@/cdn/context/context.js';\nimport { MetafileFile } from '@/cdn/metafile/metafile-file.js';\nimport type { MetafileLocale } from '@/cdn/metafile/metafile-locale.js';\nimport type { LocalesMap } from '@/cdn/request/locales-map.js';\nimport { Request } from '@/cdn/request/request.js';\nimport { isArray, isPlainObject, isString, isUndefined } from '@/cdn/utils.js';\nimport type { IRequestBuilder } from '@/interfaces/i-request-builder.js';\nimport type { CdnFile } from '@/types/cdn-file.js';\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(\n (metafileLocale: MetafileLocale): boolean => !metafileLocale.isBaseLocale,\n )\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.js';\nimport { MetafileContext } from '@/cdn/context/metafile-context.js';\nimport { FetchHttpAdapter } from '@/cdn/http/fetch-http-adapter.js';\nimport { CdnCache } from '@/cdn/methods/cdn-cache.js';\nimport { CdnMetafile } from '@/cdn/methods/cdn-metafile.js';\nimport { RequestBuilder } from '@/cdn/request/request-builder.js';\nimport { isString } from '@/cdn/utils.js';\nimport type { CdnClientOptions } from '@/types/cdn-client-options.js';\nimport type { CdnFetchOptions } from '@/types/cdn-fetch-options.js';\nimport type { CdnResponse } from '@/types/cdn-response.js';\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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"}