@goatlab/node-backend 0.2.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +146 -14
  2. package/dist/container/Container.d.ts +86 -2
  3. package/dist/container/Container.js +260 -10
  4. package/dist/container/Container.js.map +1 -1
  5. package/dist/container/examples/batch-operations.example.d.ts +1 -0
  6. package/dist/container/examples/batch-operations.example.js +165 -0
  7. package/dist/container/examples/batch-operations.example.js.map +1 -0
  8. package/dist/container/types.d.ts +50 -0
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/server/bootstraps/getExpressTrpcApp.js +69 -7
  12. package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -1
  13. package/dist/server/middleware/memoryMonitor.example.d.ts +1 -0
  14. package/dist/server/middleware/memoryMonitor.example.js +109 -0
  15. package/dist/server/middleware/memoryMonitor.example.js.map +1 -0
  16. package/dist/server/middleware/memoryMonitor.middleware.d.ts +42 -0
  17. package/dist/server/middleware/memoryMonitor.middleware.js +134 -0
  18. package/dist/server/middleware/memoryMonitor.middleware.js.map +1 -0
  19. package/dist/server/services/secrets/examples/container-preload.example.d.ts +1 -0
  20. package/dist/server/services/secrets/examples/container-preload.example.js +148 -0
  21. package/dist/server/services/secrets/examples/container-preload.example.js.map +1 -0
  22. package/dist/server/services/secrets/index.d.ts +1 -0
  23. package/dist/server/services/secrets/index.js +6 -0
  24. package/dist/server/services/secrets/index.js.map +1 -0
  25. package/dist/server/services/secrets/secret.service.d.ts +48 -6
  26. package/dist/server/services/secrets/secret.service.js +280 -28
  27. package/dist/server/services/secrets/secret.service.js.map +1 -1
  28. package/dist/server/services/translations/translation.model.js +2 -1
  29. package/dist/server/services/translations/translation.model.js.map +1 -1
  30. package/dist/server/services/translations/translation.service.d.ts +8 -1
  31. package/dist/server/services/translations/translation.service.js +123 -13
  32. package/dist/server/services/translations/translation.service.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +1 -1
@@ -4,14 +4,84 @@ exports.translationService = void 0;
4
4
  exports.tr = tr;
5
5
  exports.trIfExists = trIfExists;
6
6
  const pupa_1 = require("@goatlab/js-utils/dist/Strings/pupa");
7
+ const pupa_2 = require("@goatlab/js-utils/dist/Strings/pupa");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
7
10
  const consts_1 = require("../../consts");
8
- const template_util_1 = require("./template.util");
11
+ // import { templateUtil } from './template.util' // No longer needed with direct pupa usage
9
12
  const translation_model_1 = require("./translation.model");
13
+ // Cache for compiled templates - key format: "lang:key"
14
+ const templateCache = new Map();
15
+ // Cache for loaded locale files
16
+ const localeCache = new Map();
17
+ // Precompile template function
18
+ function compileTemplate(template) {
19
+ // Pre-parse the template to identify placeholders
20
+ const doubleBraceRegex = /{{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}}/gi;
21
+ const braceRegex = /{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}/gi;
22
+ const hasDoubleBraces = doubleBraceRegex.test(template);
23
+ const hasSingleBraces = braceRegex.test(template);
24
+ // If no placeholders, return a function that returns the template as-is
25
+ if (!hasDoubleBraces && !hasSingleBraces) {
26
+ return () => template;
27
+ }
28
+ // Return optimized template function
29
+ return (args) => {
30
+ if (!args || Object.keys(args).length === 0) {
31
+ return template;
32
+ }
33
+ return (0, pupa_2.pupa)(template, args);
34
+ };
35
+ }
10
36
  class TranslationService {
11
- // @Memo.syncMethod()
37
+ initialized = false;
38
+ // Initialize service by preloading all locale files
39
+ initialize() {
40
+ if (this.initialized)
41
+ return;
42
+ // Preload all supported language files
43
+ if (translation_model_1.SUPPORTED_LANGUAGES && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
44
+ for (const lang of translation_model_1.SUPPORTED_LANGUAGES) {
45
+ this.loadLocaleSync(lang);
46
+ }
47
+ }
48
+ this.initialized = true;
49
+ }
50
+ // Load locale file synchronously (used during initialization)
51
+ loadLocaleSync(lang) {
52
+ if (localeCache.has(lang)) {
53
+ return localeCache.get(lang);
54
+ }
55
+ try {
56
+ const filePath = (0, node_path_1.join)(consts_1.config.langDir, `${lang}.json`);
57
+ const content = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
58
+ const locale = JSON.parse(content);
59
+ localeCache.set(lang, locale);
60
+ return locale;
61
+ }
62
+ catch {
63
+ console.warn(`Failed to load locale: ${lang}`);
64
+ return undefined;
65
+ }
66
+ }
67
+ // Get locale from cache (backward compatible)
12
68
  getLocale(lang) {
69
+ if (!lang)
70
+ return undefined;
71
+ // Ensure initialization
72
+ if (!this.initialized) {
73
+ this.initialize();
74
+ }
75
+ const cached = localeCache.get(lang);
76
+ if (cached) {
77
+ // Return a copy to maintain backward compatibility
78
+ return { ...cached };
79
+ }
80
+ // Try to load dynamically if not in cache (backward compatibility)
13
81
  try {
14
- return { ...require(`${consts_1.config.langDir}/${lang}.json`) };
82
+ const locale = { ...require(`${consts_1.config.langDir}/${lang}.json`) };
83
+ localeCache.set(lang, locale);
84
+ return locale;
15
85
  }
16
86
  catch {
17
87
  console.warn(`Unsupported lang ${lang}`);
@@ -19,10 +89,21 @@ class TranslationService {
19
89
  }
20
90
  }
21
91
  getLocaleMap() {
22
- return translation_model_1.SUPPORTED_LANGUAGES.reduce((map, lang) => {
23
- map[lang] = this.getLocale(lang);
24
- return map;
25
- }, {});
92
+ // Ensure initialization
93
+ if (!this.initialized) {
94
+ this.initialize();
95
+ }
96
+ const map = {};
97
+ // Use cached locales if available
98
+ if (translation_model_1.SUPPORTED_LANGUAGES && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
99
+ for (const lang of translation_model_1.SUPPORTED_LANGUAGES) {
100
+ const locale = localeCache.get(lang) || this.getLocale(lang);
101
+ if (locale) {
102
+ map[lang] = locale;
103
+ }
104
+ }
105
+ }
106
+ return map;
26
107
  }
27
108
  missingKey(key) {
28
109
  return `[${key}]`;
@@ -41,9 +122,14 @@ class TranslationService {
41
122
  * Implementation based on static ./src/lang/*.json files
42
123
  */
43
124
  translateIfExists(key, user, args = {}) {
44
- const fallbackLocale = this.getLocale(translation_model_1.LANG_DEFAULT);
45
- const locale = this.getLocale(user.language);
46
- const value = locale[key] ?? fallbackLocale[key];
125
+ // Ensure initialization
126
+ if (!this.initialized) {
127
+ this.initialize();
128
+ }
129
+ // Get locale from cache directly for better performance
130
+ const locale = user.language ? localeCache.get(user.language) : undefined;
131
+ const fallbackLocale = localeCache.get(translation_model_1.LANG_DEFAULT) || this.getLocale(translation_model_1.LANG_DEFAULT);
132
+ const value = (locale && locale[key]) ?? (fallbackLocale && fallbackLocale[key]);
47
133
  return value && this.formatResult(key, value, args);
48
134
  }
49
135
  formatResult(key, text, args = {}) {
@@ -51,15 +137,23 @@ class TranslationService {
51
137
  return `** ${key} **`;
52
138
  }
53
139
  if (Object.keys(args).length) {
140
+ // Check template cache first
141
+ const cacheKey = `${key}:${text}`;
142
+ let compiledTemplate = templateCache.get(cacheKey);
143
+ if (!compiledTemplate) {
144
+ // Compile and cache the template
145
+ compiledTemplate = compileTemplate(text);
146
+ templateCache.set(cacheKey, compiledTemplate);
147
+ }
54
148
  try {
55
- return template_util_1.templateUtil.renderString(text, args);
149
+ return compiledTemplate(args);
56
150
  }
57
151
  catch (err) {
58
152
  if (err instanceof pupa_1.MissingValueError) {
59
153
  // sentryService.captureMessage(
60
154
  // `template value missing for key=${key}, param=${err.key}`,
61
155
  // )
62
- return template_util_1.templateUtil.renderString(text, args, { ignoreMissing: true });
156
+ return (0, pupa_2.pupa)(text, args, { ignoreMissing: true });
63
157
  }
64
158
  throw err;
65
159
  }
@@ -68,7 +162,7 @@ class TranslationService {
68
162
  return text;
69
163
  }
70
164
  }
71
- reportMissing(key, opt) {
165
+ reportMissing(_key, opt) {
72
166
  console.log(opt); // For Sentry
73
167
  //sentryService.captureMessage(`translation missing for key=${key}}`)
74
168
  }
@@ -85,8 +179,24 @@ class TranslationService {
85
179
  return false;
86
180
  }
87
181
  }
182
+ /**
183
+ * Clear cache and reinitialize - useful for testing
184
+ */
185
+ clearCacheAndReinitialize() {
186
+ // Clear all caches
187
+ localeCache.clear();
188
+ templateCache.clear();
189
+ // Reset initialization state
190
+ this.initialized = false;
191
+ // Reinitialize
192
+ this.initialize();
193
+ }
88
194
  }
89
195
  exports.translationService = new TranslationService();
196
+ // Initialize on module load to preload all locales
197
+ if (typeof translation_model_1.SUPPORTED_LANGUAGES !== 'undefined' && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
198
+ exports.translationService['initialize']();
199
+ }
90
200
  // Alias
91
201
  function tr(key, user, args = {}) {
92
202
  return exports.translationService.translate(key, user, args);
@@ -1 +1 @@
1
- {"version":3,"file":"translation.service.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translation.service.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.service.ts"],"names":[],"mappings":";;;AA6OA,gBAEC;AAED,gCAMC;AAtPD,8DAAuE;AACvE,8DAA0D;AAC1D,qCAAsC;AACtC,yCAAgC;AAChC,yCAAqC;AACrC,4FAA4F;AAC5F,2DAA6E;AAO7E,wDAAwD;AACxD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiC,CAAA;AAE9D,gCAAgC;AAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAA;AAE9C,+BAA+B;AAC/B,SAAS,eAAe,CAAC,QAAgB;IACvC,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,+CAA+C,CAAA;IACxE,MAAM,UAAU,GAAG,6CAA6C,CAAA;IAEhE,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEjD,wEAAwE;IACxE,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAA;IACvB,CAAC;IAED,qCAAqC;IACrC,OAAO,CAAC,IAAS,EAAE,EAAE;QACnB,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,OAAO,IAAA,WAAI,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC,CAAA;AACH,CAAC;AAED,MAAM,kBAAkB;IACd,WAAW,GAAG,KAAK,CAAA;IAE3B,oDAAoD;IAC5C,UAAU;QAChB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;QAE5B,uCAAuC;QACvC,IAAI,uCAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,uCAAmB,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,uCAAmB,EAAE,CAAC;gBACvC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,8DAA8D;IACtD,cAAc,CAAC,IAAU;QAC/B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,eAAM,CAAC,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,CAAA;YACrD,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAA;YAC/C,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC7B,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAA;YAC9C,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IACD,8CAA8C;IAC9C,SAAS,CAAC,IAAiB;QACzB,IAAI,CAAC,IAAI;YAAE,OAAO,SAAgB,CAAA;QAElC,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,EAAE,CAAA;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,MAAM,EAAE,CAAC;YACX,mDAAmD;YACnD,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;QACtB,CAAC;QAED,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,eAAM,CAAC,OAAO,IAAI,IAAI,OAAO,CAAC,EAAE,CAAA;YAC/D,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC7B,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;YACxC,OAAO,SAAgB,CAAA;QACzB,CAAC;IACH,CAAC;IAED,YAAY;QACV,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,EAAE,CAAA;QACnB,CAAC;QAED,MAAM,GAAG,GAA4B,EAA6B,CAAA;QAElE,kCAAkC;QAClC,IAAI,uCAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,uCAAmB,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,uCAAmB,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBAC5D,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,OAAO,IAAI,GAAG,GAAG,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,GAAwB,EAAE,OAAY,EAAE;QAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAEhD,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,GAAW,EACX,IAAyB,EACzB,IAAI,GAAG,EAAE;QAET,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,EAAE,CAAA;QACnB,CAAC;QAED,wDAAwD;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACzE,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,gCAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,gCAAY,CAAC,CAAA;QAEpF,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;QAChF,OAAO,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACrD,CAAC;IAED,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,IAAI,GAAG,EAAE;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,GAAG,KAAK,CAAA;QACvB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;YACjC,IAAI,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAElD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,iCAAiC;gBACjC,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;gBACxC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;YAC/C,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,GAAG,YAAY,wBAAiB,EAAE,CAAC;oBACrC,gCAAgC;oBAChC,+DAA+D;oBAC/D,IAAI;oBACJ,OAAO,IAAA,WAAI,EAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;gBAClD,CAAC;gBAED,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,GAAwB;QAClD,OAAO,CAAC,GAAG,CAAC,GAAU,CAAC,CAAA,CAAC,aAAa;QACrC,qEAAqE;IACvE,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAChE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,CAAA;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,mBAAmB;QACnB,WAAW,CAAC,KAAK,EAAE,CAAA;QACnB,aAAa,CAAC,KAAK,EAAE,CAAA;QAErB,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QAExB,eAAe;QACf,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;CACF;AAEY,QAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAA;AAE1D,mDAAmD;AACnD,IAAI,OAAO,uCAAmB,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,uCAAmB,CAAC,EAAE,CAAC;IACrF,0BAAkB,CAAC,YAAY,CAAC,EAAE,CAAA;AACpC,CAAC;AAED,QAAQ;AACR,SAAgB,EAAE,CAAC,GAAW,EAAE,IAAyB,EAAE,IAAI,GAAG,EAAE;IAClE,OAAO,0BAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC;AAED,SAAgB,UAAU,CACxB,GAAW,EACX,IAAyB,EACzB,IAAI,GAAG,EAAE;IAET,OAAO,0BAAkB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC"}