@justmpm/deps-consult 1.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 (57) hide show
  1. package/README.md +227 -0
  2. package/build/cache/package-cache.d.ts +39 -0
  3. package/build/cache/package-cache.d.ts.map +1 -0
  4. package/build/cache/package-cache.js +90 -0
  5. package/build/cache/package-cache.js.map +1 -0
  6. package/build/extractors/api-extractor.d.ts +6 -0
  7. package/build/extractors/api-extractor.d.ts.map +1 -0
  8. package/build/extractors/api-extractor.js +191 -0
  9. package/build/extractors/api-extractor.js.map +1 -0
  10. package/build/extractors/examples-extractor.d.ts +16 -0
  11. package/build/extractors/examples-extractor.d.ts.map +1 -0
  12. package/build/extractors/examples-extractor.js +224 -0
  13. package/build/extractors/examples-extractor.js.map +1 -0
  14. package/build/extractors/jsdoc-extractor.d.ts +11 -0
  15. package/build/extractors/jsdoc-extractor.d.ts.map +1 -0
  16. package/build/extractors/jsdoc-extractor.js +115 -0
  17. package/build/extractors/jsdoc-extractor.js.map +1 -0
  18. package/build/extractors/readme-extractor.d.ts +6 -0
  19. package/build/extractors/readme-extractor.d.ts.map +1 -0
  20. package/build/extractors/readme-extractor.js +138 -0
  21. package/build/extractors/readme-extractor.js.map +1 -0
  22. package/build/formatters/markdown-formatter.d.ts +12 -0
  23. package/build/formatters/markdown-formatter.d.ts.map +1 -0
  24. package/build/formatters/markdown-formatter.js +251 -0
  25. package/build/formatters/markdown-formatter.js.map +1 -0
  26. package/build/index.d.ts +12 -0
  27. package/build/index.d.ts.map +1 -0
  28. package/build/index.js +226 -0
  29. package/build/index.js.map +1 -0
  30. package/build/pipeline.d.ts +31 -0
  31. package/build/pipeline.d.ts.map +1 -0
  32. package/build/pipeline.js +203 -0
  33. package/build/pipeline.js.map +1 -0
  34. package/build/resolvers/exports-resolver.d.ts +12 -0
  35. package/build/resolvers/exports-resolver.d.ts.map +1 -0
  36. package/build/resolvers/exports-resolver.js +235 -0
  37. package/build/resolvers/exports-resolver.js.map +1 -0
  38. package/build/resolvers/package-resolver.d.ts +25 -0
  39. package/build/resolvers/package-resolver.d.ts.map +1 -0
  40. package/build/resolvers/package-resolver.js +189 -0
  41. package/build/resolvers/package-resolver.js.map +1 -0
  42. package/build/resolvers/types-resolver.d.ts +19 -0
  43. package/build/resolvers/types-resolver.d.ts.map +1 -0
  44. package/build/resolvers/types-resolver.js +155 -0
  45. package/build/resolvers/types-resolver.js.map +1 -0
  46. package/build/schemas/package-json.schema.d.ts +81 -0
  47. package/build/schemas/package-json.schema.d.ts.map +1 -0
  48. package/build/schemas/package-json.schema.js +91 -0
  49. package/build/schemas/package-json.schema.js.map +1 -0
  50. package/build/test.d.ts +6 -0
  51. package/build/test.d.ts.map +1 -0
  52. package/build/test.js.map +1 -0
  53. package/build/types/index.d.ts +117 -0
  54. package/build/types/index.d.ts.map +1 -0
  55. package/build/types/index.js +14 -0
  56. package/build/types/index.js.map +1 -0
  57. package/package.json +48 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Extrai exemplos de código de múltiplas fontes:
3
+ * 1. JSDoc @example tags
4
+ * 2. Arquivos em /examples ou /docs/examples
5
+ * 3. Seções do README
6
+ */
7
+ import { readFile, readdir } from 'node:fs/promises';
8
+ import { join, extname } from 'node:path';
9
+ import { existsSync } from 'node:fs';
10
+ import { uniqBy } from 'es-toolkit';
11
+ /**
12
+ * Coleta exemplos de todas as fontes disponíveis.
13
+ */
14
+ export async function extractExamples(packageDir, symbols, readme, targetSymbol) {
15
+ const allExamples = [];
16
+ // 1. JSDoc @example tags
17
+ const jsdocExamples = extractFromJSDoc(symbols, targetSymbol);
18
+ allExamples.push(...jsdocExamples);
19
+ // 2. Arquivos em /examples
20
+ const fileExamples = await extractFromExamplesDir(packageDir);
21
+ allExamples.push(...fileExamples);
22
+ // 3. README
23
+ if (readme) {
24
+ const readmeExamples = extractFromReadme(readme, targetSymbol);
25
+ allExamples.push(...readmeExamples);
26
+ }
27
+ // 4. Arquivos em /docs
28
+ const docsExamples = await extractFromDocsDir(packageDir);
29
+ allExamples.push(...docsExamples);
30
+ return uniqBy(allExamples, e => e.code.substring(0, 200));
31
+ }
32
+ /**
33
+ * Extrai exemplos de @example tags no JSDoc.
34
+ */
35
+ function extractFromJSDoc(symbols, targetSymbol) {
36
+ const filtered = targetSymbol
37
+ ? symbols.filter(s => s.name === targetSymbol)
38
+ : symbols;
39
+ const examples = [];
40
+ for (const symbol of filtered) {
41
+ if (!symbol.jsdoc?.examples)
42
+ continue;
43
+ for (const example of symbol.jsdoc.examples) {
44
+ examples.push({
45
+ code: example,
46
+ language: detectLanguage(example),
47
+ context: symbol.name,
48
+ source: 'jsdoc',
49
+ });
50
+ }
51
+ }
52
+ return examples;
53
+ }
54
+ /**
55
+ * Extrai exemplos do diretório /examples do pacote.
56
+ */
57
+ async function extractFromExamplesDir(packageDir) {
58
+ const examples = [];
59
+ const exampleDirs = [
60
+ join(packageDir, 'examples'),
61
+ join(packageDir, 'example'),
62
+ join(packageDir, 'docs', 'examples'),
63
+ ];
64
+ for (const dir of exampleDirs) {
65
+ if (!existsSync(dir))
66
+ continue;
67
+ try {
68
+ const files = await collectSourceFiles(dir);
69
+ for (const file of files) {
70
+ try {
71
+ const content = await readFile(file, 'utf-8');
72
+ if (content.trim().length > 0 && content.length < 10000) {
73
+ examples.push({
74
+ code: content.trim(),
75
+ language: detectLanguageFromExt(extname(file)),
76
+ context: file,
77
+ source: 'examples-dir',
78
+ });
79
+ }
80
+ }
81
+ catch {
82
+ // Arquivo inacessível, ignorar
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ // Diretório inacessível, ignorar
88
+ }
89
+ }
90
+ return examples.slice(0, 20);
91
+ }
92
+ /**
93
+ * Extrai exemplos de blocos de código do README.
94
+ */
95
+ function extractFromReadme(readme, targetSymbol) {
96
+ const examples = [];
97
+ for (const block of readme.codeBlocks) {
98
+ if (targetSymbol && block.context && !block.context.toLowerCase().includes(targetSymbol.toLowerCase())) {
99
+ if (!block.code.includes(targetSymbol))
100
+ continue;
101
+ }
102
+ examples.push({
103
+ code: block.code,
104
+ language: block.language,
105
+ context: block.context,
106
+ source: 'readme',
107
+ });
108
+ }
109
+ return examples;
110
+ }
111
+ /**
112
+ * Extrai exemplos de /docs do pacote.
113
+ */
114
+ async function extractFromDocsDir(packageDir) {
115
+ const docsDir = join(packageDir, 'docs');
116
+ if (!existsSync(docsDir))
117
+ return [];
118
+ const examples = [];
119
+ try {
120
+ const files = await collectSourceFiles(docsDir, ['.md', '.mdx']);
121
+ for (const file of files) {
122
+ try {
123
+ const content = await readFile(file, 'utf-8');
124
+ const codeBlocks = extractCodeBlocksFromMarkdown(content);
125
+ for (const block of codeBlocks) {
126
+ examples.push({
127
+ ...block,
128
+ context: block.context ?? '',
129
+ source: 'docs',
130
+ });
131
+ }
132
+ }
133
+ catch {
134
+ // Ignorar
135
+ }
136
+ }
137
+ }
138
+ catch {
139
+ // Ignorar
140
+ }
141
+ return examples.slice(0, 20);
142
+ }
143
+ // ─────────────────────────────────────────
144
+ // Helpers
145
+ // ─────────────────────────────────────────
146
+ /**
147
+ * Coleta arquivos de source recursivamente.
148
+ */
149
+ async function collectSourceFiles(dir, extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs']) {
150
+ const results = [];
151
+ async function walk(currentDir) {
152
+ try {
153
+ const entries = await readdir(currentDir, { withFileTypes: true });
154
+ for (const entry of entries) {
155
+ const fullPath = join(currentDir, entry.name);
156
+ if (entry.isDirectory()) {
157
+ await walk(fullPath);
158
+ }
159
+ else if (entry.isFile() && extensions.includes(extname(entry.name).toLowerCase())) {
160
+ results.push(fullPath);
161
+ }
162
+ }
163
+ }
164
+ catch {
165
+ // Diretório inacessível
166
+ }
167
+ }
168
+ await walk(dir);
169
+ return results;
170
+ }
171
+ function detectLanguage(code) {
172
+ if (code.includes('import ') || code.includes('export ') || (code.includes(': ') && code.includes('=>'))) {
173
+ return 'typescript';
174
+ }
175
+ return 'javascript';
176
+ }
177
+ function detectLanguageFromExt(ext) {
178
+ const lower = ext.toLowerCase();
179
+ if (lower === '.ts' || lower === '.tsx')
180
+ return 'typescript';
181
+ if (lower === '.jsx')
182
+ return 'javascript';
183
+ if (lower === '.mjs')
184
+ return 'javascript';
185
+ return 'javascript';
186
+ }
187
+ function extractCodeBlocksFromMarkdown(content) {
188
+ const blocks = [];
189
+ const lines = content.split('\n');
190
+ let inBlock = false;
191
+ let buffer = [];
192
+ let lang;
193
+ let lastHeading;
194
+ for (const line of lines) {
195
+ const headingMatch = line.match(/^#{1,3}\s+(.+)/);
196
+ if (headingMatch) {
197
+ lastHeading = headingMatch[1]?.trim();
198
+ }
199
+ if (line.trimStart().startsWith('```')) {
200
+ if (inBlock) {
201
+ if (buffer.length > 0) {
202
+ blocks.push({
203
+ code: buffer.join('\n'),
204
+ language: lang,
205
+ context: lastHeading,
206
+ });
207
+ }
208
+ buffer = [];
209
+ lang = undefined;
210
+ inBlock = false;
211
+ }
212
+ else {
213
+ inBlock = true;
214
+ lang = line.trim().replace('```', '').trim() || undefined;
215
+ }
216
+ continue;
217
+ }
218
+ if (inBlock) {
219
+ buffer.push(line);
220
+ }
221
+ }
222
+ return blocks;
223
+ }
224
+ //# sourceMappingURL=examples-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples-extractor.js","sourceRoot":"","sources":["../../src/extractors/examples-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Extrai JSDoc de declarações TypeScript via ts-morph.
3
+ * Captura @param, @returns, @example, @deprecated, @since, @see, @throws.
4
+ */
5
+ import type { Node } from 'ts-morph';
6
+ import type { JSDocData } from '../types/index.js';
7
+ /**
8
+ * Extrai JSDoc de uma declaração.
9
+ */
10
+ export declare function extractJSDoc(decl: Node): JSDocData | undefined;
11
+ //# sourceMappingURL=jsdoc-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsdoc-extractor.d.ts","sourceRoot":"","sources":["../../src/extractors/jsdoc-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,CAqC9D"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Extrai JSDoc de uma declaração.
3
+ */
4
+ export function extractJSDoc(decl) {
5
+ try {
6
+ const docs = getJsDocs(decl);
7
+ if (!docs || docs.length === 0)
8
+ return undefined;
9
+ const firstDoc = docs[0];
10
+ if (!firstDoc)
11
+ return undefined;
12
+ const description = getDescription(firstDoc);
13
+ const params = getParams(firstDoc);
14
+ const returns = getReturnTag(firstDoc);
15
+ const examples = getExamples(firstDoc);
16
+ const since = getTagValue(firstDoc, 'since');
17
+ const deprecated = getDeprecated(firstDoc);
18
+ const sees = getMultiTagValues(firstDoc, 'see');
19
+ const throws = getMultiTagValues(firstDoc, 'throws');
20
+ const defaultValue = getTagValue(firstDoc, 'default');
21
+ if (!description && params.length === 0 && !returns && examples.length === 0
22
+ && !since && !deprecated && sees.length === 0 && throws.length === 0 && !defaultValue) {
23
+ return undefined;
24
+ }
25
+ return {
26
+ description,
27
+ params: params.length > 0 ? params : undefined,
28
+ returns: returns ?? undefined,
29
+ examples: examples.length > 0 ? examples : undefined,
30
+ since: since ?? undefined,
31
+ deprecated,
32
+ sees: sees.length > 0 ? sees : undefined,
33
+ throws: throws.length > 0 ? throws : undefined,
34
+ defaultValue: defaultValue ?? undefined,
35
+ };
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ function getJsDocs(decl) {
42
+ try {
43
+ const docs = decl.getJsDocs?.();
44
+ return docs ?? [];
45
+ }
46
+ catch {
47
+ return [];
48
+ }
49
+ }
50
+ function getDescription(doc) {
51
+ const text = doc.getCommentText()?.trim();
52
+ return text && text.length > 0 ? text : undefined;
53
+ }
54
+ function getParams(doc) {
55
+ const params = [];
56
+ for (const tag of doc.getTags()) {
57
+ if (tag.getTagName() === 'param') {
58
+ const name = tag.getName()?.trim() ?? '';
59
+ const description = tag.getDescriptionText()?.trim() ?? '';
60
+ if (name) {
61
+ params.push({ name, description });
62
+ }
63
+ }
64
+ }
65
+ return params;
66
+ }
67
+ function getReturnTag(doc) {
68
+ for (const tag of doc.getTags()) {
69
+ if (tag.getTagName() === 'returns' || tag.getTagName() === 'return') {
70
+ return tag.getDescriptionText()?.trim() || undefined;
71
+ }
72
+ }
73
+ return undefined;
74
+ }
75
+ function getExamples(doc) {
76
+ const examples = [];
77
+ for (const tag of doc.getTags()) {
78
+ if (tag.getTagName() === 'example') {
79
+ const text = tag.getCommentText() ?? tag.getDescriptionText() ?? '';
80
+ if (text.trim()) {
81
+ examples.push(text.trim());
82
+ }
83
+ }
84
+ }
85
+ return examples;
86
+ }
87
+ function getDeprecated(doc) {
88
+ for (const tag of doc.getTags()) {
89
+ if (tag.getTagName() === 'deprecated') {
90
+ const text = tag.getDescriptionText()?.trim();
91
+ return text && text.length > 0 ? text : true;
92
+ }
93
+ }
94
+ return undefined;
95
+ }
96
+ function getTagValue(doc, tagName) {
97
+ for (const tag of doc.getTags()) {
98
+ if (tag.getTagName() === tagName) {
99
+ return tag.getDescriptionText()?.trim() || undefined;
100
+ }
101
+ }
102
+ return undefined;
103
+ }
104
+ function getMultiTagValues(doc, tagName) {
105
+ const values = [];
106
+ for (const tag of doc.getTags()) {
107
+ if (tag.getTagName() === tagName) {
108
+ const text = tag.getDescriptionText()?.trim();
109
+ if (text)
110
+ values.push(text);
111
+ }
112
+ }
113
+ return values;
114
+ }
115
+ //# sourceMappingURL=jsdoc-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsdoc-extractor.js","sourceRoot":"","sources":["../../src/extractors/jsdoc-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ReadmeData } from '../types/index.js';
2
+ /**
3
+ * Extrai dados do README do pacote.
4
+ */
5
+ export declare function extractReadme(packageDir: string): Promise<ReadmeData | null>;
6
+ //# sourceMappingURL=readme-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme-extractor.d.ts","sourceRoot":"","sources":["../../src/extractors/readme-extractor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAGnE;;GAEG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAUlF"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Extrai seções relevantes do README.md de um pacote.
3
+ * Parse manual de markdown sem dependência externa.
4
+ */
5
+ import { readFile, readdir } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ import { existsSync } from 'node:fs';
8
+ import { uniqBy } from 'es-toolkit';
9
+ /**
10
+ * Extrai dados do README do pacote.
11
+ */
12
+ export async function extractReadme(packageDir) {
13
+ const readmePath = await findReadme(packageDir);
14
+ if (!readmePath)
15
+ return null;
16
+ try {
17
+ const content = await readFile(readmePath, 'utf-8');
18
+ return parseReadme(content);
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ /**
25
+ * Encontra o arquivo README no diretório do pacote.
26
+ */
27
+ async function findReadme(packageDir) {
28
+ const candidates = [
29
+ join(packageDir, 'README.md'),
30
+ join(packageDir, 'readme.md'),
31
+ join(packageDir, 'Readme.md'),
32
+ join(packageDir, 'README.MD'),
33
+ join(packageDir, 'README'),
34
+ ];
35
+ for (const candidate of candidates) {
36
+ if (existsSync(candidate))
37
+ return candidate;
38
+ }
39
+ // Fallback: buscar com readdir
40
+ try {
41
+ const entries = await readdir(packageDir);
42
+ const readme = entries.find(e => e.toUpperCase() === 'README.MD' || e.toUpperCase() === 'README');
43
+ if (readme)
44
+ return join(packageDir, readme);
45
+ }
46
+ catch {
47
+ // Ignorar
48
+ }
49
+ return null;
50
+ }
51
+ /**
52
+ * Faz parse manual do README extraindo seções e blocos de código.
53
+ */
54
+ function parseReadme(content) {
55
+ const lines = content.split('\n');
56
+ const sections = [];
57
+ const codeBlocks = [];
58
+ let currentSection = null;
59
+ let inCodeBlock = false;
60
+ let codeBuffer = [];
61
+ let codeLanguage;
62
+ let codeContext;
63
+ for (const line of lines) {
64
+ // Detectar blocos de código
65
+ if (line.trimStart().startsWith('```')) {
66
+ if (inCodeBlock) {
67
+ // Fechar bloco
68
+ if (codeBuffer.length > 0) {
69
+ codeBlocks.push({
70
+ code: codeBuffer.join('\n'),
71
+ language: codeLanguage,
72
+ context: codeContext,
73
+ });
74
+ }
75
+ codeBuffer = [];
76
+ codeLanguage = undefined;
77
+ codeContext = undefined;
78
+ inCodeBlock = false;
79
+ }
80
+ else {
81
+ // Abrir bloco
82
+ inCodeBlock = true;
83
+ codeLanguage = line.trim().replace('```', '').trim() || undefined;
84
+ codeContext = currentSection?.title;
85
+ }
86
+ continue;
87
+ }
88
+ if (inCodeBlock) {
89
+ codeBuffer.push(line);
90
+ continue;
91
+ }
92
+ // Detectar seções (headings)
93
+ const headingMatch = line.match(/^(#{1,4})\s+(.+)/);
94
+ if (headingMatch) {
95
+ // Salvar seção anterior
96
+ if (currentSection && currentSection.content.trim()) {
97
+ sections.push(currentSection);
98
+ }
99
+ currentSection = {
100
+ title: headingMatch[2]?.trim() ?? '',
101
+ content: '',
102
+ };
103
+ continue;
104
+ }
105
+ // Adicionar conteúdo à seção atual
106
+ if (currentSection) {
107
+ currentSection.content += line + '\n';
108
+ }
109
+ }
110
+ // Salvar última seção
111
+ if (currentSection && currentSection.content.trim()) {
112
+ sections.push(currentSection);
113
+ }
114
+ // Identificar seções de uso
115
+ const usageSections = sections.filter(s => /usage|example|quick.?start|getting.?started|how.?to|api|guide/i.test(s.title));
116
+ // Identificar descrição (primeira seção ou conteúdo antes do primeiro heading)
117
+ const description = extractDescription(content, sections);
118
+ return {
119
+ description: description ?? undefined,
120
+ usageSections,
121
+ codeBlocks: uniqBy(codeBlocks, c => c.code.substring(0, 100)),
122
+ };
123
+ }
124
+ /**
125
+ * Extrai a descrição do README (texto antes do primeiro heading ou primeira seção).
126
+ */
127
+ function extractDescription(content, sections) {
128
+ if (sections.length > 0 && !sections[0]?.title) {
129
+ return sections[0]?.content.trim();
130
+ }
131
+ const firstHeading = content.indexOf('\n#');
132
+ if (firstHeading > 0) {
133
+ const desc = content.substring(0, firstHeading).trim();
134
+ return desc.length > 0 ? desc : undefined;
135
+ }
136
+ return undefined;
137
+ }
138
+ //# sourceMappingURL=readme-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme-extractor.js","sourceRoot":"","sources":["../../src/extractors/readme-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Formata dados extraídos em markdown otimizado para contexto de LLM.
3
+ * Compacto mas informativo -- cada token conta.
4
+ */
5
+ import type { PackageMeta, ExtractedSymbol, SearchResult } from '../types/index.js';
6
+ import type { CodeExample } from '../extractors/examples-extractor.js';
7
+ export declare function formatPackageInfo(meta: PackageMeta): string;
8
+ export declare function formatApiSurface(symbols: ReadonlyArray<ExtractedSymbol>, kind: string, limit: number): string;
9
+ export declare function formatSearchResults(results: ReadonlyArray<SearchResult>): string;
10
+ export declare function formatSymbolUsage(symbol: ExtractedSymbol, importPaths: string[]): string;
11
+ export declare function formatExamples(examples: ReadonlyArray<CodeExample>): string;
12
+ //# sourceMappingURL=markdown-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-formatter.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAMvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAiD3D;AAMD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,EACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CAiCR;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,MAAM,CAwBhF;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CA6ExF;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAuB3E"}