@memberjunction/codegen-lib 4.4.0 → 5.0.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 (49) hide show
  1. package/README.md +163 -0
  2. package/dist/Angular/angular-codegen.d.ts.map +1 -1
  3. package/dist/Angular/angular-codegen.js +15 -12
  4. package/dist/Angular/angular-codegen.js.map +1 -1
  5. package/dist/Angular/related-entity-components.d.ts.map +1 -1
  6. package/dist/Angular/related-entity-components.js +10 -3
  7. package/dist/Angular/related-entity-components.js.map +1 -1
  8. package/dist/Angular/user-view-grid-related-entity-component.d.ts +43 -0
  9. package/dist/Angular/user-view-grid-related-entity-component.d.ts.map +1 -0
  10. package/dist/Angular/user-view-grid-related-entity-component.js +85 -0
  11. package/dist/Angular/user-view-grid-related-entity-component.js.map +1 -0
  12. package/dist/Database/manage-metadata.d.ts +40 -0
  13. package/dist/Database/manage-metadata.d.ts.map +1 -1
  14. package/dist/Database/manage-metadata.js +103 -13
  15. package/dist/Database/manage-metadata.js.map +1 -1
  16. package/dist/Database/sql_codegen.js +6 -6
  17. package/dist/Database/sql_codegen.js.map +1 -1
  18. package/dist/EntityNameScanner/EntityNameScanner.d.ts +166 -0
  19. package/dist/EntityNameScanner/EntityNameScanner.d.ts.map +1 -0
  20. package/dist/EntityNameScanner/EntityNameScanner.js +758 -0
  21. package/dist/EntityNameScanner/EntityNameScanner.js.map +1 -0
  22. package/dist/EntityNameScanner/HtmlEntityNameScanner.d.ts +86 -0
  23. package/dist/EntityNameScanner/HtmlEntityNameScanner.d.ts.map +1 -0
  24. package/dist/EntityNameScanner/HtmlEntityNameScanner.js +262 -0
  25. package/dist/EntityNameScanner/HtmlEntityNameScanner.js.map +1 -0
  26. package/dist/EntityNameScanner/MetadataNameScanner.d.ts +90 -0
  27. package/dist/EntityNameScanner/MetadataNameScanner.d.ts.map +1 -0
  28. package/dist/EntityNameScanner/MetadataNameScanner.js +426 -0
  29. package/dist/EntityNameScanner/MetadataNameScanner.js.map +1 -0
  30. package/dist/EntityNameScanner/entity-rename-map.d.ts +31 -0
  31. package/dist/EntityNameScanner/entity-rename-map.d.ts.map +1 -0
  32. package/dist/EntityNameScanner/entity-rename-map.js +3012 -0
  33. package/dist/EntityNameScanner/entity-rename-map.js.map +1 -0
  34. package/dist/Misc/action_subclasses_codegen.d.ts +2 -2
  35. package/dist/Misc/action_subclasses_codegen.d.ts.map +1 -1
  36. package/dist/Misc/action_subclasses_codegen.js.map +1 -1
  37. package/dist/Misc/createNewUser.js +6 -6
  38. package/dist/Misc/createNewUser.js.map +1 -1
  39. package/dist/Misc/entity_subclasses_codegen.js +2 -2
  40. package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
  41. package/dist/__tests__/metadataConfig.test.d.ts +12 -0
  42. package/dist/__tests__/metadataConfig.test.d.ts.map +1 -0
  43. package/dist/__tests__/metadataConfig.test.js +604 -0
  44. package/dist/__tests__/metadataConfig.test.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -0
  48. package/dist/index.js.map +1 -1
  49. package/package.json +15 -15
@@ -0,0 +1,426 @@
1
+ /**
2
+ * JSON-based scanner/fixer for entity names in MemberJunction metadata files.
3
+ *
4
+ * Scans metadata directories for entity name references that need the "MJ: "
5
+ * prefix, including:
6
+ * - `@lookup:` references (both the entity name and the lookup value)
7
+ * - `.mj-sync.json` / `.mj-folder.json` entity/entityName config fields
8
+ * - `relatedEntities` object keys
9
+ *
10
+ * Reuses the rename map from {@link buildEntityNameMap} (entity_subclasses.ts).
11
+ *
12
+ * Usage (via MJCLI):
13
+ * mj codegen fix-metadata-names --path metadata/
14
+ * mj codegen fix-metadata-names --path metadata/ --fix
15
+ *
16
+ * Or programmatically:
17
+ * import { scanMetadataNames } from '@memberjunction/codegen-lib';
18
+ * const result = await scanMetadataNames({ TargetPath: './metadata' });
19
+ */
20
+ import * as fs from 'fs';
21
+ import * as path from 'path';
22
+ import { glob } from 'glob';
23
+ import { resolveEntityNameMap } from './EntityNameScanner.js';
24
+ /**
25
+ * Parses a `@lookup:` reference string into its components.
26
+ *
27
+ * Format: `ENTITY.FIELD=VALUE` or `ENTITY.FIELD=VALUE?options`
28
+ *
29
+ * Examples:
30
+ * - `MJ: Entities.Name=Dashboards` → entity="MJ: Entities", field="Name", value="Dashboards"
31
+ * - `MJ: Dashboards.Name=ERD?allowDefer` → entity="MJ: Dashboards", field="Name", value="ERD"
32
+ */
33
+ function parseLookupReference(rawText) {
34
+ // Find the = sign separating ENTITY.FIELD from VALUE
35
+ const eqIdx = rawText.indexOf('=');
36
+ if (eqIdx === -1)
37
+ return null;
38
+ // Parse VALUE and optional ?suffix
39
+ let value = rawText.substring(eqIdx + 1);
40
+ let options = null;
41
+ const qIdx = value.indexOf('?');
42
+ if (qIdx !== -1) {
43
+ options = value.substring(qIdx + 1);
44
+ value = value.substring(0, qIdx);
45
+ }
46
+ // Parse ENTITY.FIELD — find the last dot before = to split
47
+ const leftSide = rawText.substring(0, eqIdx);
48
+ const dotIdx = leftSide.lastIndexOf('.');
49
+ if (dotIdx === -1)
50
+ return null;
51
+ const entityName = leftSide.substring(0, dotIdx);
52
+ const fieldName = leftSide.substring(dotIdx + 1);
53
+ if (!entityName || !fieldName || !value)
54
+ return null;
55
+ return { EntityName: entityName, FieldName: fieldName, Value: value, Options: options, RawText: rawText };
56
+ }
57
+ // ============================================================================
58
+ // Line Number Helper
59
+ // ============================================================================
60
+ /** Returns 1-based line number for a character position in source text. */
61
+ function getLineNumber(sourceText, position) {
62
+ let line = 1;
63
+ for (let i = 0; i < position && i < sourceText.length; i++) {
64
+ if (sourceText[i] === '\n')
65
+ line++;
66
+ }
67
+ return line;
68
+ }
69
+ // ============================================================================
70
+ // Metadata File Scanner
71
+ // ============================================================================
72
+ /**
73
+ * Scans a single metadata JSON file for entity name references that need
74
+ * the "MJ: " prefix.
75
+ *
76
+ * @param isEntitiesFolder - If true, the folder's .mj-sync.json entity is
77
+ * "Entities" or "MJ: Entities", so `fields.Name` values are entity names.
78
+ */
79
+ export function scanMetadataFile(filePath, sourceText, renameMap, isEntitiesFolder) {
80
+ const findings = [];
81
+ // Quick check: does this file contain any old entity name?
82
+ let hasRelevantContent = false;
83
+ for (const oldName of renameMap.keys()) {
84
+ if (sourceText.includes(oldName)) {
85
+ hasRelevantContent = true;
86
+ break;
87
+ }
88
+ }
89
+ if (!hasRelevantContent)
90
+ return findings;
91
+ // Validate JSON
92
+ let parsed;
93
+ try {
94
+ parsed = JSON.parse(sourceText);
95
+ }
96
+ catch {
97
+ return findings; // Invalid JSON, skip
98
+ }
99
+ // 1. Scan @lookup patterns
100
+ scanLookupPatterns(sourceText, filePath, renameMap, findings);
101
+ // 2. Scan folder config files for entity/entityName
102
+ const basename = path.basename(filePath);
103
+ if (basename === '.mj-sync.json' || basename === '.mj-folder.json') {
104
+ scanFolderConfig(parsed, sourceText, filePath, renameMap, findings);
105
+ }
106
+ // 3. Scan relatedEntities keys
107
+ scanRelatedEntityKeys(parsed, sourceText, filePath, renameMap, findings);
108
+ // 4. Scan fields.Name when this folder manages the "Entities" entity
109
+ if (isEntitiesFolder && basename !== '.mj-sync.json' && basename !== '.mj-folder.json') {
110
+ scanEntityNameFields(parsed, sourceText, filePath, renameMap, findings);
111
+ }
112
+ return findings;
113
+ }
114
+ /**
115
+ * Scans all @lookup: patterns in a file line-by-line.
116
+ * Checks both the entity name and the lookup value.
117
+ */
118
+ function scanLookupPatterns(sourceText, filePath, renameMap, findings) {
119
+ const lines = sourceText.split('\n');
120
+ for (let i = 0; i < lines.length; i++) {
121
+ const line = lines[i];
122
+ const lineNum = i + 1;
123
+ let searchStart = 0;
124
+ while (true) {
125
+ const lookupIdx = line.indexOf('@lookup:', searchStart);
126
+ if (lookupIdx === -1)
127
+ break;
128
+ // Extract the raw lookup text up to the closing quote
129
+ const afterPrefix = line.substring(lookupIdx + 8); // after "@lookup:"
130
+ const quoteIdx = afterPrefix.indexOf('"');
131
+ if (quoteIdx === -1) {
132
+ searchStart = lookupIdx + 8;
133
+ continue;
134
+ }
135
+ const rawText = afterPrefix.substring(0, quoteIdx);
136
+ const fullLookup = `@lookup:${rawText}`;
137
+ const parsed = parseLookupReference(rawText);
138
+ if (parsed) {
139
+ checkLookupEntityName(parsed, fullLookup, lineNum, filePath, renameMap, findings);
140
+ checkLookupValue(parsed, fullLookup, lineNum, filePath, renameMap, findings);
141
+ }
142
+ searchStart = lookupIdx + 8 + quoteIdx;
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Checks if the entity name in a @lookup reference needs the MJ: prefix.
148
+ * e.g., `@lookup:Entities.Name=...` → should be `@lookup:MJ: Entities.Name=...`
149
+ */
150
+ function checkLookupEntityName(parsed, fullLookup, lineNum, filePath, renameMap, findings) {
151
+ if (renameMap.has(parsed.EntityName)) {
152
+ findings.push({
153
+ FilePath: filePath,
154
+ Line: lineNum,
155
+ OldName: parsed.EntityName,
156
+ NewName: renameMap.get(parsed.EntityName),
157
+ PatternKind: 'lookupEntity',
158
+ Context: fullLookup,
159
+ });
160
+ }
161
+ }
162
+ /**
163
+ * Checks if the lookup value is an entity name that needs the MJ: prefix.
164
+ * Only applies when looking up `MJ: Entities` (or `Entities`) by `Name`.
165
+ */
166
+ function checkLookupValue(parsed, fullLookup, lineNum, filePath, renameMap, findings) {
167
+ // Only check values when the lookup is against the Entities entity by Name
168
+ const entity = parsed.EntityName.trim();
169
+ const isEntitiesLookup = entity === 'MJ: Entities' || entity === 'Entities';
170
+ const isNameField = parsed.FieldName.trim() === 'Name';
171
+ if (isEntitiesLookup && isNameField && renameMap.has(parsed.Value)) {
172
+ findings.push({
173
+ FilePath: filePath,
174
+ Line: lineNum,
175
+ OldName: parsed.Value,
176
+ NewName: renameMap.get(parsed.Value),
177
+ PatternKind: 'lookupValue',
178
+ Context: fullLookup,
179
+ });
180
+ }
181
+ }
182
+ /**
183
+ * Checks the entity/entityName field in .mj-sync.json or .mj-folder.json.
184
+ */
185
+ function scanFolderConfig(parsed, sourceText, filePath, renameMap, findings) {
186
+ if (!parsed || typeof parsed !== 'object')
187
+ return;
188
+ const data = parsed;
189
+ const entityName = (data.entity ?? data.entityName);
190
+ if (entityName && renameMap.has(entityName)) {
191
+ const searchStr = `"${entityName}"`;
192
+ const idx = sourceText.indexOf(searchStr);
193
+ const lineNum = idx !== -1 ? getLineNumber(sourceText, idx) : 1;
194
+ findings.push({
195
+ FilePath: filePath,
196
+ Line: lineNum,
197
+ OldName: entityName,
198
+ NewName: renameMap.get(entityName),
199
+ PatternKind: 'folderConfig',
200
+ Context: `Folder config entity: "${entityName}"`,
201
+ });
202
+ }
203
+ }
204
+ /**
205
+ * Checks all keys in relatedEntities objects against the rename map.
206
+ */
207
+ function scanRelatedEntityKeys(parsed, sourceText, filePath, renameMap, findings) {
208
+ const records = Array.isArray(parsed) ? parsed : [parsed];
209
+ for (const record of records) {
210
+ if (!record || typeof record !== 'object')
211
+ continue;
212
+ const rec = record;
213
+ if (!rec.relatedEntities || typeof rec.relatedEntities !== 'object')
214
+ continue;
215
+ const relatedEntities = rec.relatedEntities;
216
+ // Find where relatedEntities starts in the source for line-number search context
217
+ const relIdx = sourceText.indexOf('"relatedEntities"');
218
+ for (const key of Object.keys(relatedEntities)) {
219
+ if (renameMap.has(key)) {
220
+ const searchStr = `"${key}"`;
221
+ const keyIdx = relIdx !== -1
222
+ ? sourceText.indexOf(searchStr, relIdx)
223
+ : sourceText.indexOf(searchStr);
224
+ const lineNum = keyIdx !== -1 ? getLineNumber(sourceText, keyIdx) : 1;
225
+ findings.push({
226
+ FilePath: filePath,
227
+ Line: lineNum,
228
+ OldName: key,
229
+ NewName: renameMap.get(key),
230
+ PatternKind: 'relatedEntityKey',
231
+ Context: `relatedEntities["${key}"]`,
232
+ });
233
+ }
234
+ }
235
+ }
236
+ }
237
+ /**
238
+ * Checks `fields.Name` values in data files within folders that manage the
239
+ * "Entities" or "MJ: Entities" entity. In these folders, the Name field
240
+ * is the entity name itself and may need the "MJ: " prefix.
241
+ */
242
+ function scanEntityNameFields(parsed, sourceText, filePath, renameMap, findings) {
243
+ const records = Array.isArray(parsed) ? parsed : [parsed];
244
+ for (const record of records) {
245
+ if (!record || typeof record !== 'object')
246
+ continue;
247
+ const rec = record;
248
+ const fields = rec.fields;
249
+ if (!fields || typeof fields !== 'object')
250
+ continue;
251
+ const nameValue = fields.Name;
252
+ if (typeof nameValue !== 'string')
253
+ continue;
254
+ if (renameMap.has(nameValue)) {
255
+ // Find the line number by searching for "Name": "OldValue"
256
+ const searchStr = `"Name": "${nameValue}"`;
257
+ const idx = sourceText.indexOf(searchStr);
258
+ const lineNum = idx !== -1 ? getLineNumber(sourceText, idx) : 1;
259
+ findings.push({
260
+ FilePath: filePath,
261
+ Line: lineNum,
262
+ OldName: nameValue,
263
+ NewName: renameMap.get(nameValue),
264
+ PatternKind: 'entityNameField',
265
+ Context: `fields.Name: "${nameValue}"`,
266
+ });
267
+ }
268
+ }
269
+ }
270
+ // ============================================================================
271
+ // Metadata File Fixer
272
+ // ============================================================================
273
+ /**
274
+ * Applies entity name fixes to a metadata file using targeted string
275
+ * replacements that preserve original formatting.
276
+ */
277
+ export function fixMetadataFile(sourceText, findings) {
278
+ if (findings.length === 0)
279
+ return sourceText;
280
+ let result = sourceText;
281
+ for (const finding of findings) {
282
+ switch (finding.PatternKind) {
283
+ case 'lookupEntity':
284
+ // @lookup:OldName. → @lookup:NewName.
285
+ result = replaceAll(result, `@lookup:${finding.OldName}.`, `@lookup:${finding.NewName}.`);
286
+ break;
287
+ case 'lookupValue':
288
+ // Entities.Name=OldValue → Entities.Name=NewValue
289
+ // Safe because this only matches within @lookup: context strings
290
+ result = replaceAll(result, `Entities.Name=${finding.OldName}`, `Entities.Name=${finding.NewName}`);
291
+ break;
292
+ case 'folderConfig': {
293
+ // "entity": "OldName" → "entity": "NewName"
294
+ // Also handles "entityName": "..."
295
+ const entityPattern = new RegExp(`("entity(?:Name)?"\\s*:\\s*)"${escapeRegex(finding.OldName)}"`, 'g');
296
+ result = result.replace(entityPattern, `$1"${finding.NewName}"`);
297
+ break;
298
+ }
299
+ case 'relatedEntityKey':
300
+ // "OldName": → "NewName": (within relatedEntities context)
301
+ result = replaceAll(result, `"${finding.OldName}":`, `"${finding.NewName}":`);
302
+ break;
303
+ case 'entityNameField':
304
+ // "Name": "OldName" → "Name": "NewName"
305
+ result = replaceAll(result, `"Name": "${finding.OldName}"`, `"Name": "${finding.NewName}"`);
306
+ break;
307
+ }
308
+ }
309
+ return result;
310
+ }
311
+ /** Simple replaceAll using split/join for broad compatibility. */
312
+ function replaceAll(text, search, replacement) {
313
+ return text.split(search).join(replacement);
314
+ }
315
+ /** Escapes special regex characters in a string. */
316
+ function escapeRegex(str) {
317
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
318
+ }
319
+ // ============================================================================
320
+ // Main Entry Point
321
+ // ============================================================================
322
+ const DEFAULT_METADATA_EXCLUDE = [
323
+ '**/node_modules/**',
324
+ '**/.git/**',
325
+ ];
326
+ /**
327
+ * Scans metadata JSON files for entity name references that need the "MJ: "
328
+ * prefix, and optionally fixes them in place.
329
+ */
330
+ export async function scanMetadataNames(options) {
331
+ const errors = [];
332
+ const verbose = options.Verbose !== false;
333
+ // Resolve target path
334
+ const targetPath = path.resolve(options.TargetPath);
335
+ if (!fs.existsSync(targetPath)) {
336
+ return {
337
+ Success: false, Findings: [], FixedFiles: [],
338
+ FilesScanned: 0, RenameMapSize: 0,
339
+ Errors: [`Target path does not exist: ${targetPath}`],
340
+ };
341
+ }
342
+ // Build rename map (tries .ts file first, falls back to embedded rename map)
343
+ let renameMap;
344
+ try {
345
+ renameMap = resolveEntityNameMap(targetPath, options.EntitySubclassesPath, verbose);
346
+ }
347
+ catch (err) {
348
+ return {
349
+ Success: false, Findings: [], FixedFiles: [],
350
+ FilesScanned: 0, RenameMapSize: 0,
351
+ Errors: [err.message],
352
+ };
353
+ }
354
+ // Find JSON files (including dotfiles like .mj-sync.json)
355
+ const isFile = fs.statSync(targetPath).isFile();
356
+ let jsonFiles;
357
+ if (isFile) {
358
+ jsonFiles = [targetPath];
359
+ }
360
+ else {
361
+ jsonFiles = await glob('**/*.json', {
362
+ cwd: targetPath,
363
+ absolute: true,
364
+ dot: true, // Include dotfiles like .mj-sync.json
365
+ ignore: DEFAULT_METADATA_EXCLUDE,
366
+ });
367
+ }
368
+ if (verbose)
369
+ console.log(`Scanning ${jsonFiles.length} JSON files...`);
370
+ // Build a set of directories whose .mj-sync.json declares entity as "Entities" or "MJ: Entities"
371
+ const entityFolders = new Set();
372
+ for (const filePath of jsonFiles) {
373
+ if (path.basename(filePath) === '.mj-sync.json') {
374
+ try {
375
+ const configText = fs.readFileSync(filePath, 'utf-8');
376
+ const config = JSON.parse(configText);
377
+ const entityVal = (config.entity ?? config.entityName);
378
+ if (entityVal === 'Entities' || entityVal === 'MJ: Entities') {
379
+ entityFolders.add(path.dirname(filePath));
380
+ }
381
+ }
382
+ catch {
383
+ // skip unparseable config
384
+ }
385
+ }
386
+ }
387
+ // Scan files
388
+ const allFindings = [];
389
+ const fixedFiles = [];
390
+ for (const filePath of jsonFiles) {
391
+ try {
392
+ const sourceText = fs.readFileSync(filePath, 'utf-8');
393
+ const isEntitiesFolder = entityFolders.has(path.dirname(filePath));
394
+ const findings = scanMetadataFile(filePath, sourceText, renameMap, isEntitiesFolder);
395
+ if (findings.length > 0) {
396
+ allFindings.push(...findings);
397
+ if (options.Fix) {
398
+ const fixedText = fixMetadataFile(sourceText, findings);
399
+ fs.writeFileSync(filePath, fixedText, 'utf-8');
400
+ fixedFiles.push(filePath);
401
+ if (verbose) {
402
+ console.log(` Fixed ${findings.length} entity name(s) in ${filePath}`);
403
+ }
404
+ }
405
+ else if (verbose) {
406
+ console.log(` Found ${findings.length} entity name(s) in ${filePath}`);
407
+ }
408
+ }
409
+ }
410
+ catch (err) {
411
+ const message = `Error scanning ${filePath}: ${err.message}`;
412
+ errors.push(message);
413
+ if (verbose)
414
+ console.error(` ${message}`);
415
+ }
416
+ }
417
+ return {
418
+ Success: errors.length === 0,
419
+ Findings: allFindings,
420
+ FixedFiles: fixedFiles,
421
+ FilesScanned: jsonFiles.length,
422
+ RenameMapSize: renameMap.size,
423
+ Errors: errors,
424
+ };
425
+ }
426
+ //# sourceMappingURL=MetadataNameScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataNameScanner.js","sourceRoot":"","sources":["../../src/EntityNameScanner/MetadataNameScanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Full entity rename map for MemberJunction v5.0 migration.
3
+ *
4
+ * Contains old/new mappings for entity names, class names, and code names.
5
+ * This data was generated from the MJ core schema and is embedded directly
6
+ * in the package (compiled into JS) so it ships with npm distributions
7
+ * without needing a separate JSON copy step.
8
+ *
9
+ * Total entries: 272
10
+ */
11
+ /** A single entry in the entity rename map. */
12
+ export interface EntityRenameEntry {
13
+ oldName: string;
14
+ newName: string;
15
+ nameChanged: boolean;
16
+ oldClassName: string;
17
+ newClassName: string;
18
+ classNameChanged: boolean;
19
+ oldCodeName: string;
20
+ newCodeName: string;
21
+ codeNameChanged: boolean;
22
+ }
23
+ /**
24
+ * The complete rename map for all 272 MJ core entities.
25
+ * Each entry maps old names to new names across three dimensions:
26
+ * - Entity names (e.g., "Actions" -> "MJ: Actions")
27
+ * - Class names (e.g., "ActionEntity" -> "MJActionEntity")
28
+ * - Code names (e.g., "Actions" -> "MJActions")
29
+ */
30
+ export declare const ENTITY_RENAME_MAP: EntityRenameEntry[];
31
+ //# sourceMappingURL=entity-rename-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-rename-map.d.ts","sourceRoot":"","sources":["../../src/EntityNameScanner/entity-rename-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAi7FhD,CAAC"}