@rockster/core 0.1.0 → 0.1.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockster/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "main": "index",
5
5
  "types": "index.d.ts",
6
6
  "scripts": {
@@ -5,9 +5,11 @@ import { GetValuesRequest } from '../models/get-values.request';
5
5
  import { GetValuesResponse } from '../models/get-values.response';
6
6
  import { TranslationsService } from '../services/translations.service';
7
7
  import { ITranslationValues } from '../interfaces/translation-values';
8
+ import { TranslatorService } from '../services/translator.service';
8
9
  export declare class TranslationController {
9
10
  protected readonly translationsService: TranslationsService;
10
- constructor(translationsService: TranslationsService);
11
+ protected readonly translatorService: TranslatorService;
12
+ constructor(translationsService: TranslationsService, translatorService: TranslatorService);
11
13
  postConfig(content: IPostContent<TranslationConfig>): Promise<TranslationConfig>;
12
14
  postValues(content: IPostContent<ITranslationValues>): Promise<ITranslationValues>;
13
15
  queryConfig(content: IQueryContent<TranslationConfig>): Promise<import("../../query/interfaces").Query<TranslationConfig>>;
@@ -28,15 +28,28 @@ const post_action_decorator_1 = require("../../command/decorators/post-action.de
28
28
  const post_content_decorator_1 = require("../../command/decorators/post-content.decorator");
29
29
  const action_content_decorator_1 = require("../../controllers/decorators/actions/action-content.decorator");
30
30
  const action_decorator_1 = require("../../controllers/decorators/actions/action.decorator");
31
+ const translator_service_1 = require("../services/translator.service");
31
32
  let TranslationController = class TranslationController {
32
- constructor(translationsService) {
33
+ constructor(translationsService, translatorService) {
33
34
  this.translationsService = translationsService;
35
+ this.translatorService = translatorService;
34
36
  }
35
37
  async postConfig(content) {
36
38
  return (0, execute_post_1.executePost)(content);
37
39
  }
38
40
  async postValues(content) {
39
- return (0, execute_post_1.executePost)(content);
41
+ const result = await (0, execute_post_1.executePost)(content);
42
+ const configId = result?.translationConfigId
43
+ ?? content.data?.translationConfigId;
44
+ if (configId) {
45
+ const referenceId = await this
46
+ .translationsService
47
+ .getReferenceIdForConfig(configId);
48
+ if (referenceId) {
49
+ await this.translatorService.invalidateReference(referenceId);
50
+ }
51
+ }
52
+ return result;
40
53
  }
41
54
  async queryConfig(content) {
42
55
  return (0, execute_query_1.executeQuery)({ content: content });
@@ -98,6 +111,7 @@ __decorate([
98
111
  ], TranslationController.prototype, "getValues", null);
99
112
  exports.TranslationController = TranslationController = __decorate([
100
113
  (0, controller_decorator_1.Controller)(),
101
- __metadata("design:paramtypes", [translations_service_1.TranslationsService])
114
+ __metadata("design:paramtypes", [translations_service_1.TranslationsService,
115
+ translator_service_1.TranslatorService])
102
116
  ], TranslationController);
103
117
  //# sourceMappingURL=translation.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"translation.controller.js","sourceRoot":"./","sources":["translations/controllers/translation.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,qFAA0E;AAC1E,uEAAmE;AACnE,kFAA6E;AAE7E,uDAAsD;AACtD,kFAA6E;AAC7E,uEAAmE;AACnE,qEAAgE;AAChE,uEAAkE;AAClE,2EAAuE;AAEvE,qFAA0E;AAC1E,4FAA+E;AAC/E,0FAA4E;AAC5E,4FAA8E;AAC9E,4GAA8F;AAC9F,4FAA+E;AAGxE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAE/B,YACsB,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;IAC3D,CAAC;IAKE,AAAN,KAAK,CAAC,UAAU,CACE,OAAwC;QAEvD,OAAO,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAKK,AAAN,KAAK,CAAC,UAAU,CACE,OAAyC;QAExD,OAAO,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CACE,OAAyC;QAEzD,OAAO,IAAA,4BAAY,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CACE,OAAyC;QAEzD,OAAO,IAAA,4BAAY,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAMK,AAAN,KAAK,CAAC,SAAS,CACK,OAAyB;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,mBAAmB;aACnB,SAAS,CACP,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,MAAM,CAChB,CAAC;QAEL,OAAO;YACJ,MAAM,EAAE,MAAM;SACK,CAAC;IAC1B,CAAC;CACH,CAAA;AAxDY,sDAAqB;AASzB;IAHL,IAAA,kCAAU,EAAC;QACT,IAAI,EAAE,GAAG,EAAE,CAAC,6CAAiB;KAC/B,CAAC;IAEE,WAAA,IAAA,oCAAW,GAAE,CAAA;;;;uDAGhB;AAKK;IAHL,IAAA,kCAAU,EAAC;QACT,IAAI,EAAE,GAAG,EAAE,CAAC,6CAAiB;KAC/B,CAAC;IAEE,WAAA,IAAA,oCAAW,GAAE,CAAA;;;;uDAGhB;AAGK;IADL,IAAA,iDAAsB,GAAE;IAErB,WAAA,IAAA,yBAAY,GAAE,CAAA;;;;wDAGjB;AAGK;IADL,IAAA,iDAAsB,GAAE;IAErB,WAAA,IAAA,yBAAY,GAAE,CAAA;;;;wDAGjB;AAMK;IAJL,IAAA,yBAAM,EAAC;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,uCAAiB;QACjC,MAAM,EAAE,IAAI;KACd,CAAC;IAEE,WAAA,IAAA,wCAAa,GAAE,CAAA;;qCAAU,qCAAgB;;sDAY5C;gCAvDS,qBAAqB;IADjC,IAAA,iCAAU,GAAE;qCAIiC,0CAAmB;GAHpD,qBAAqB,CAwDjC"}
1
+ {"version":3,"file":"translation.controller.js","sourceRoot":"./","sources":["translations/controllers/translation.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,qFAA0E;AAC1E,uEAAmE;AACnE,kFAA6E;AAE7E,uDAAsD;AACtD,kFAA6E;AAC7E,uEAAmE;AACnE,qEAAgE;AAChE,uEAAkE;AAClE,2EAAuE;AAEvE,qFAA0E;AAC1E,4FAA+E;AAC/E,0FAA4E;AAC5E,4FAA8E;AAC9E,4GAA8F;AAC9F,4FAA+E;AAC/E,uEAAmE;AAG5D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAE/B,YACsB,mBAAwC,EACxC,iBAAoC;QADpC,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,sBAAiB,GAAjB,iBAAiB,CAAmB;IACvD,CAAC;IAKE,AAAN,KAAK,CAAC,UAAU,CACE,OAAwC;QAEvD,OAAO,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAKK,AAAN,KAAK,CAAC,UAAU,CACE,OAAyC;QAExD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAI,MAA4B,EAAE,mBAAmB;eAC7D,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,MAAM,IAAI;iBAC1B,mBAAmB;iBACnB,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACjE,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CACE,OAAyC;QAEzD,OAAO,IAAA,4BAAY,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CACE,OAAyC;QAEzD,OAAO,IAAA,4BAAY,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAMK,AAAN,KAAK,CAAC,SAAS,CACK,OAAyB;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,mBAAmB;aACnB,SAAS,CACP,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,MAAM,CAChB,CAAC;QAEL,OAAO;YACJ,MAAM,EAAE,MAAM;SACK,CAAC;IAC1B,CAAC;CACH,CAAA;AApEY,sDAAqB;AAUzB;IAHL,IAAA,kCAAU,EAAC;QACT,IAAI,EAAE,GAAG,EAAE,CAAC,6CAAiB;KAC/B,CAAC;IAEE,WAAA,IAAA,oCAAW,GAAE,CAAA;;;;uDAGhB;AAKK;IAHL,IAAA,kCAAU,EAAC;QACT,IAAI,EAAE,GAAG,EAAE,CAAC,6CAAiB;KAC/B,CAAC;IAEE,WAAA,IAAA,oCAAW,GAAE,CAAA;;;;uDAchB;AAGK;IADL,IAAA,iDAAsB,GAAE;IAErB,WAAA,IAAA,yBAAY,GAAE,CAAA;;;;wDAGjB;AAGK;IADL,IAAA,iDAAsB,GAAE;IAErB,WAAA,IAAA,yBAAY,GAAE,CAAA;;;;wDAGjB;AAMK;IAJL,IAAA,yBAAM,EAAC;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,uCAAiB;QACjC,MAAM,EAAE,IAAI;KACd,CAAC;IAEE,WAAA,IAAA,wCAAa,GAAE,CAAA;;qCAAU,qCAAgB;;sDAY5C;gCAnES,qBAAqB;IADjC,IAAA,iCAAU,GAAE;qCAIiC,0CAAmB;QACrB,sCAAiB;GAJhD,qBAAqB,CAoEjC"}
@@ -8,4 +8,5 @@ export declare class TranslationsService {
8
8
  getValues(referenceId: string, locale: Locale): Promise<{
9
9
  [x: string]: string;
10
10
  }>;
11
+ getReferenceIdForConfig(translationConfigId: string): Promise<string | null>;
11
12
  }
@@ -23,16 +23,24 @@ let TranslationsService = class TranslationsService {
23
23
  .createQueryBuilder('translationValues')
24
24
  .leftJoinAndMapOne('translationValues.translationConfig', translation_config_entity_1.TranslationConfig, 'translationConfig', `translationValues.translation_config_id = translationConfig.id`)
25
25
  .where(`
26
- (translationConfig.reference_id = '${referenceId}'
27
- AND translationValues.locale = '${locale}')
28
- OR translationValues.locale = translationConfig.default
29
- `)
26
+ translationConfig.reference_id = :referenceId
27
+ AND (
28
+ translationValues.locale = :locale
29
+ OR translationValues.locale = translationConfig.default
30
+ )
31
+ `, {
32
+ referenceId,
33
+ locale
34
+ })
30
35
  .getMany();
31
- const _default = values
36
+ const scoped = values.filter((value) => {
37
+ return value.translationConfig?.referenceId === referenceId;
38
+ });
39
+ const _default = scoped
32
40
  .find((value) => {
33
41
  return value.translationConfig?.default === value.locale;
34
42
  }) || { values: {} };
35
- const _requested = values
43
+ const _requested = scoped
36
44
  .find((value) => {
37
45
  return value.locale === locale;
38
46
  }) || { values: {} };
@@ -41,6 +49,17 @@ let TranslationsService = class TranslationsService {
41
49
  ..._requested.values
42
50
  };
43
51
  }
52
+ async getReferenceIdForConfig(translationConfigId) {
53
+ const config = await this
54
+ .repository
55
+ .manager
56
+ .getRepository(translation_config_entity_1.TranslationConfig)
57
+ .findOne({
58
+ where: { id: translationConfigId },
59
+ select: ['referenceId']
60
+ });
61
+ return config?.referenceId ?? null;
62
+ }
44
63
  };
45
64
  exports.TranslationsService = TranslationsService;
46
65
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"translations.service.js","sourceRoot":"./","sources":["translations/services/translations.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAAsD;AAEtD,qFAA0E;AAC1E,qFAA0E;AAC1E,6CAAkD;AAClD,qCAGiB;AACjB,uCAGqB;AAGd,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAS7B,KAAK,CAAC,SAAS,CACZ,WAAmB,EACnB,MAAc;QAEd,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,UAAU;aACV,kBAAkB,CAAC,mBAAmB,CAAC;aACvC,iBAAiB,CACf,qCAAqC,EACrC,6CAAiB,EACjB,mBAAmB,EACnB,gEAAgE,CAClE;aACA,KAAK,CAAC;iDACiC,WAAW;iDACX,MAAM;;UAE7C,CAAC;aACD,OAAO,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,MAAM;aACnB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,OAAO,KAAK,CAAC,iBAAiB,EAAE,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM;aACrB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;QAClC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,OAAO;YACJ,GAAG,QAAQ,CAAC,MAAM;YAClB,GAAG,UAAU,CAAC,MAAM;SACtB,CAAC;IACL,CAAC;CACH,CAAA;AAzCY,kDAAmB;AAGnB;IADT,IAAA,2BAAgB,EAAC,GAAG,EAAE,CAAC,6CAAiB,CAAC;8BACpB,oBAAU;uDAAoB;AAG1C;IADT,IAAA,mBAAW,GAAE;;kDACiB;8BANrB,mBAAmB;IAD/B,IAAA,2BAAU,GAAE;GACA,mBAAmB,CAyC/B"}
1
+ {"version":3,"file":"translations.service.js","sourceRoot":"./","sources":["translations/services/translations.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAAsD;AAEtD,qFAA0E;AAC1E,qFAA0E;AAC1E,6CAAkD;AAClD,qCAGiB;AACjB,uCAGqB;AAGd,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAS7B,KAAK,CAAC,SAAS,CACZ,WAAmB,EACnB,MAAc;QAEd,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,UAAU;aACV,kBAAkB,CAAC,mBAAmB,CAAC;aACvC,iBAAiB,CACf,qCAAqC,EACrC,6CAAiB,EACjB,mBAAmB,EACnB,gEAAgE,CAClE;aACA,KAAK,CAAC;;;;;;UAMN,EAAE;YACA,WAAW;YACX,MAAM;SACR,CAAC;aACD,OAAO,EAAE,CAAC;QAEd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,OAAO,KAAK,CAAC,iBAAiB,EAAE,WAAW,KAAK,WAAW,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM;aACnB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,OAAO,KAAK,CAAC,iBAAiB,EAAE,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM;aACrB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;QAClC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,OAAO;YACJ,GAAG,QAAQ,CAAC,MAAM;YAClB,GAAG,UAAU,CAAC,MAAM;SACtB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC1B,mBAA2B;QAE3B,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,UAAU;aACV,OAAO;aACP,aAAa,CAAC,6CAAiB,CAAC;aAChC,OAAO,CAAC;YACN,KAAK,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE;YAClC,MAAM,EAAE,CAAC,aAAa,CAAC;SACzB,CAAC,CAAC;QACN,OAAO,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;IACtC,CAAC;CACH,CAAA;AAjEY,kDAAmB;AAGnB;IADT,IAAA,2BAAgB,EAAC,GAAG,EAAE,CAAC,6CAAiB,CAAC;8BACpB,oBAAU;uDAAoB;AAG1C;IADT,IAAA,mBAAW,GAAE;;kDACiB;8BANrB,mBAAmB;IAD/B,IAAA,2BAAU,GAAE;GACA,mBAAmB,CAiE/B"}
@@ -7,5 +7,6 @@ export declare class TranslatorService {
7
7
  protected cache: CacheClient;
8
8
  constructor(translationsService: TranslationsService);
9
9
  useValues(referenceId: string, locale: Locale): Promise<TranslatorHandle>;
10
+ invalidateReference(referenceId: string): Promise<void>;
10
11
  protected getHandle(values: Dictionary<string>): TranslatorHandle;
11
12
  }
@@ -33,6 +33,12 @@ let TranslatorService = class TranslatorService {
33
33
  await this.cache.expire(key, env_1.env.cacheTTL);
34
34
  return this.getHandle(values);
35
35
  }
36
+ async invalidateReference(referenceId) {
37
+ const keys = await this.cache.keys(`translations:${referenceId}:*`);
38
+ for (const key of keys) {
39
+ await this.cache.del(key);
40
+ }
41
+ }
36
42
  getHandle(values) {
37
43
  return (key, replaces = {}) => {
38
44
  let value = values[key] || key;
@@ -1 +1 @@
1
- {"version":3,"file":"translator.service.js","sourceRoot":"./","sources":["translations/services/translator.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAAsD;AACtD,iEAA6D;AAC7D,uCAGqB;AAOrB,gCAA6B;AAGtB,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAK3B,YACa,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;IAClD,CAAC;IAEJ,KAAK,CAAC,SAAS,CACZ,WAAmB,EACnB,MAAc;QAGd,MAAM,GAAG,GAAG,gBAAgB,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,KAAK;aACL,GAAG,CAAC,GAAG,CAAC,CAAC;QAEb,IAAI,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,mBAAmB;aACnB,SAAS,CACP,WAAW,EACX,MAAM,CACR,CAAC;QAGL,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAG,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAES,SAAS,CAAC,MAA0B;QAC3C,OAAO,CAAC,GAAW,EAAE,WAA+B,EAAE,EAAE,EAAE;YACvD,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YAC/B,MAAM;iBACF,mBAAmB,CAAC,QAAQ,CAAC;iBAC7B,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YACN,OAAO,KAAK,CAAC;QAChB,CAAC,CAAA;IACJ,CAAC;CACH,CAAA;AAhDY,8CAAiB;AAGjB;IADT,IAAA,mBAAW,GAAE;;gDACe;4BAHnB,iBAAiB;IAD7B,IAAA,2BAAU,GAAE;qCAOwB,0CAAmB;GAN3C,iBAAiB,CAgD7B"}
1
+ {"version":3,"file":"translator.service.js","sourceRoot":"./","sources":["translations/services/translator.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAAsD;AACtD,iEAA6D;AAC7D,uCAGqB;AAOrB,gCAA6B;AAGtB,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAK3B,YACa,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;IAClD,CAAC;IAEJ,KAAK,CAAC,SAAS,CACZ,WAAmB,EACnB,MAAc;QAGd,MAAM,GAAG,GAAG,gBAAgB,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,KAAK;aACL,GAAG,CAAC,GAAG,CAAC,CAAC;QAEb,IAAI,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI;aACrB,mBAAmB;aACnB,SAAS,CACP,WAAW,EACX,MAAM,CACR,CAAC;QAGL,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAG,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAAmB;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,WAAW,IAAI,CAAC,CAAC;QACpE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,MAA0B;QAC3C,OAAO,CAAC,GAAW,EAAE,WAA+B,EAAE,EAAE,EAAE;YACvD,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YAC/B,MAAM;iBACF,mBAAmB,CAAC,QAAQ,CAAC;iBAC7B,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YACN,OAAO,KAAK,CAAC;QAChB,CAAC,CAAA;IACJ,CAAC;CACH,CAAA;AAvDY,8CAAiB;AAGjB;IADT,IAAA,mBAAW,GAAE;;gDACe;4BAHnB,iBAAiB;IAD7B,IAAA,2BAAU,GAAE;qCAOwB,0CAAmB;GAN3C,iBAAiB,CAuD7B"}