@angular-modernizer/api 0.1.3 → 0.2.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 (31) hide show
  1. package/dist/index.d.ts +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/investigation/call-graph-builder.d.ts +95 -8
  6. package/dist/investigation/call-graph-builder.d.ts.map +1 -1
  7. package/dist/investigation/call-graph-builder.js +424 -81
  8. package/dist/investigation/call-graph-builder.js.map +1 -1
  9. package/dist/investigation/codebase-searcher.d.ts +68 -0
  10. package/dist/investigation/codebase-searcher.d.ts.map +1 -1
  11. package/dist/investigation/codebase-searcher.js +154 -10
  12. package/dist/investigation/codebase-searcher.js.map +1 -1
  13. package/dist/investigation/template-usage-finder.d.ts +64 -0
  14. package/dist/investigation/template-usage-finder.d.ts.map +1 -0
  15. package/dist/investigation/template-usage-finder.js +279 -0
  16. package/dist/investigation/template-usage-finder.js.map +1 -0
  17. package/dist/investigation/template-usage-scanner.d.ts +69 -0
  18. package/dist/investigation/template-usage-scanner.d.ts.map +1 -0
  19. package/dist/investigation/template-usage-scanner.js +375 -0
  20. package/dist/investigation/template-usage-scanner.js.map +1 -0
  21. package/dist/investigation/usage-finder.d.ts +51 -5
  22. package/dist/investigation/usage-finder.d.ts.map +1 -1
  23. package/dist/investigation/usage-finder.js +129 -36
  24. package/dist/investigation/usage-finder.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/index.ts +16 -0
  27. package/src/investigation/call-graph-builder.ts +528 -103
  28. package/src/investigation/codebase-searcher.ts +240 -11
  29. package/src/investigation/template-usage-finder.ts +389 -0
  30. package/src/investigation/template-usage-scanner.ts +529 -0
  31. package/src/investigation/usage-finder.ts +194 -54
@@ -12,6 +12,13 @@
12
12
  * `search`. For `symbol` mode only top-level named declarations are indexed;
13
13
  * local variables and anonymous expressions are not returned.
14
14
  *
15
+ * When `rootDir` is given, `text` and `pattern` modes additionally scan files
16
+ * under that directory which are NOT part of the ts-morph program: Angular
17
+ * templates (`.html`) and `.ts` files outside the tsconfig (for example
18
+ * `src/i18n/*.ts`). `node_modules`, `dist`, `.angular`, `coverage`, `out-tsc`
19
+ * and hidden directories are skipped. Use `searchWithCoverage` to learn how
20
+ * many files were actually searched.
21
+ *
15
22
  * @example
16
23
  * ```typescript
17
24
  * const searcher = new CodebaseSearcher(project);
@@ -44,6 +51,29 @@ export interface SearchResult {
44
51
  * Absent in `text` and `pattern` modes.
45
52
  */
46
53
  symbolKind?: SymbolKind;
54
+ /**
55
+ * `program` when the file is part of the ts-morph program, `non-program`
56
+ * when it was found by the file-system scan (templates, non-program `.ts`).
57
+ */
58
+ source?: 'program' | 'non-program';
59
+ }
60
+ /** Describes which files a search actually covered. */
61
+ export interface SearchCoverage {
62
+ /** Number of program source files searched (after the `include` filter). */
63
+ programFileCount: number;
64
+ /** Number of non-program files searched (templates, non-program `.ts`). */
65
+ extraFileCount: number;
66
+ /** Whether `.html` templates under `rootDir` were scanned. */
67
+ templatesScanned: boolean;
68
+ /** Whether `.ts` files outside the program were scanned. */
69
+ nonProgramFilesScanned: boolean;
70
+ /** Directory names that are never scanned. */
71
+ excludedDirectories: string[];
72
+ }
73
+ /** Result of `CodebaseSearcher.searchWithCoverage()`. */
74
+ export interface SearchWithCoverageResult {
75
+ results: SearchResult[];
76
+ coverage: SearchCoverage;
47
77
  }
48
78
  /** Options for `CodebaseSearcher.search()`. */
49
79
  export interface SearchOptions {
@@ -64,7 +94,24 @@ export interface SearchOptions {
64
94
  * returned.
65
95
  */
66
96
  maxResults?: number;
97
+ /**
98
+ * Project root used to discover files that are not part of the ts-morph
99
+ * program. When omitted only program files are searched.
100
+ */
101
+ rootDir?: string;
102
+ /**
103
+ * Scan `.html` files under `rootDir` (text/pattern modes only).
104
+ * Defaults to `true` when `rootDir` is set.
105
+ */
106
+ includeTemplates?: boolean;
107
+ /**
108
+ * Scan `.ts` files under `rootDir` that are not part of the program
109
+ * (text/pattern modes only). Defaults to `true` when `rootDir` is set.
110
+ */
111
+ includeNonProgramFiles?: boolean;
67
112
  }
113
+ /** Directory names never descended into by the non-program file scan. */
114
+ export declare const EXCLUDED_SEARCH_DIRECTORIES: readonly ["node_modules", "dist", ".angular", "coverage", "out-tsc"];
68
115
  /**
69
116
  * Searches source files in a ts-morph `Project` by text, regex, or symbol
70
117
  * name.
@@ -86,6 +133,27 @@ export declare class CodebaseSearcher {
86
133
  * ```
87
134
  */
88
135
  search(query: string, options: SearchOptions): SearchResult[];
136
+ /**
137
+ * Like `search`, but also reports which files were covered. Callers should
138
+ * surface `coverage` whenever a search returns 0 hits: an empty result only
139
+ * proves absence within the covered files.
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const { results, coverage } = searcher.searchWithCoverage('i18n.key', {
144
+ * mode: 'text',
145
+ * rootDir: '/project',
146
+ * });
147
+ * // coverage.programFileCount, coverage.extraFileCount
148
+ * ```
149
+ */
150
+ searchWithCoverage(query: string, options: SearchOptions): SearchWithCoverageResult;
151
+ private toSearchable;
152
+ /**
153
+ * Walks `rootDir` via the project's file system host (works for real and
154
+ * in-memory file systems) and returns files outside the program.
155
+ */
156
+ private collectNonProgramFiles;
89
157
  /**
90
158
  * Text or pattern search: splits each file into lines and tests each line.
91
159
  */
@@ -1 +1 @@
1
- {"version":3,"file":"codebase-searcher.d.ts","sourceRoot":"","sources":["../../src/investigation/codebase-searcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,UAAU,GACV,WAAW,GACX,MAAM,GACN,WAAW,GACX,UAAU,CAAC;AAEf,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IAEZ,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAEpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD;;;GAGG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE;IAoB7D;;OAEG;IACH,OAAO,CAAC,UAAU;IAqClB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAwGtB"}
1
+ {"version":3,"file":"codebase-searcher.d.ts","sourceRoot":"","sources":["../../src/investigation/codebase-searcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,UAAU,CAAC;AAEpD,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,UAAU,GACV,WAAW,GACX,MAAM,GACN,WAAW,GACX,UAAU,CAAC;AAEf,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IAEZ,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACpC;AAED,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;IAEzB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IAEvB,8DAA8D;IAC9D,gBAAgB,EAAE,OAAO,CAAC;IAE1B,4DAA4D;IAC5D,sBAAsB,EAAE,OAAO,CAAC;IAEhC,8CAA8C;IAC9C,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,yDAAyD;AACzD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAEpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,yEAAyE;AACzE,eAAO,MAAM,2BAA2B,sEAM9B,CAAC;AA+CX;;;GAGG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE;IAI7D;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GACrB,wBAAwB;IAgD3B,OAAO,CAAC,YAAY;IAQpB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAuE9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAsClB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAwGtB"}
@@ -12,6 +12,13 @@
12
12
  * `search`. For `symbol` mode only top-level named declarations are indexed;
13
13
  * local variables and anonymous expressions are not returned.
14
14
  *
15
+ * When `rootDir` is given, `text` and `pattern` modes additionally scan files
16
+ * under that directory which are NOT part of the ts-morph program: Angular
17
+ * templates (`.html`) and `.ts` files outside the tsconfig (for example
18
+ * `src/i18n/*.ts`). `node_modules`, `dist`, `.angular`, `coverage`, `out-tsc`
19
+ * and hidden directories are skipped. Use `searchWithCoverage` to learn how
20
+ * many files were actually searched.
21
+ *
15
22
  * @example
16
23
  * ```typescript
17
24
  * const searcher = new CodebaseSearcher(project);
@@ -26,6 +33,33 @@
26
33
  * const classes = searcher.search('UserService', { mode: 'symbol' });
27
34
  * ```
28
35
  */
36
+ /** Directory names never descended into by the non-program file scan. */
37
+ export const EXCLUDED_SEARCH_DIRECTORIES = [
38
+ 'node_modules',
39
+ 'dist',
40
+ '.angular',
41
+ 'coverage',
42
+ 'out-tsc',
43
+ ];
44
+ function normalizePath(path) {
45
+ return path.replaceAll('\\', '/');
46
+ }
47
+ function joinPath(dir, name) {
48
+ const normalizedName = normalizePath(name);
49
+ if (normalizedName.startsWith('/') || /^[A-Za-z]:\//.test(normalizedName)) {
50
+ return normalizedName;
51
+ }
52
+ const base = normalizePath(dir).replace(/\/+$/, '');
53
+ return `${base}/${normalizedName}`;
54
+ }
55
+ function baseName(path) {
56
+ const parts = normalizePath(path).split('/');
57
+ return parts[parts.length - 1] ?? path;
58
+ }
59
+ function isExcludedDirectory(name) {
60
+ return (name.startsWith('.') ||
61
+ EXCLUDED_SEARCH_DIRECTORIES.includes(name));
62
+ }
29
63
  /**
30
64
  * Converts a glob pattern (`**\/*.service.ts`) to a RegExp and tests `filePath`.
31
65
  * Supports `**` (any path segments) and `*` (single segment wildcard).
@@ -61,27 +95,136 @@ export class CodebaseSearcher {
61
95
  * ```
62
96
  */
63
97
  search(query, options) {
64
- const sourceFiles = this.project
98
+ return this.searchWithCoverage(query, options).results;
99
+ }
100
+ /**
101
+ * Like `search`, but also reports which files were covered. Callers should
102
+ * surface `coverage` whenever a search returns 0 hits: an empty result only
103
+ * proves absence within the covered files.
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const { results, coverage } = searcher.searchWithCoverage('i18n.key', {
108
+ * mode: 'text',
109
+ * rootDir: '/project',
110
+ * });
111
+ * // coverage.programFileCount, coverage.extraFileCount
112
+ * ```
113
+ */
114
+ searchWithCoverage(query, options) {
115
+ const programFiles = this.project
65
116
  .getSourceFiles()
66
117
  .filter((sf) => options.include === undefined ||
67
118
  matchesGlob(sf.getFilePath(), options.include));
119
+ const scanExtras = options.mode !== 'symbol' && options.rootDir !== undefined;
120
+ const templatesScanned = scanExtras && options.includeTemplates !== false;
121
+ const nonProgramFilesScanned = scanExtras && options.includeNonProgramFiles !== false;
122
+ const extraFiles = options.rootDir === undefined
123
+ ? []
124
+ : this.collectNonProgramFiles(options.rootDir, {
125
+ html: templatesScanned,
126
+ ts: nonProgramFilesScanned,
127
+ include: options.include,
128
+ });
68
129
  const results = options.mode === 'symbol'
69
- ? this.searchSymbols(query, sourceFiles)
70
- : this.searchText(query, options.mode, sourceFiles);
71
- if (options.maxResults !== undefined) {
72
- return results.slice(0, options.maxResults);
130
+ ? this.searchSymbols(query, programFiles)
131
+ : this.searchText(query, options.mode, [
132
+ ...programFiles.map((sf) => this.toSearchable(sf)),
133
+ ...extraFiles,
134
+ ]);
135
+ const limited = options.maxResults === undefined
136
+ ? results
137
+ : results.slice(0, options.maxResults);
138
+ return {
139
+ results: limited,
140
+ coverage: {
141
+ programFileCount: programFiles.length,
142
+ extraFileCount: extraFiles.length,
143
+ templatesScanned,
144
+ nonProgramFilesScanned,
145
+ excludedDirectories: [...EXCLUDED_SEARCH_DIRECTORIES, '.*'],
146
+ },
147
+ };
148
+ }
149
+ toSearchable(sf) {
150
+ return {
151
+ path: sf.getFilePath(),
152
+ text: () => sf.getFullText(),
153
+ source: 'program',
154
+ };
155
+ }
156
+ /**
157
+ * Walks `rootDir` via the project's file system host (works for real and
158
+ * in-memory file systems) and returns files outside the program.
159
+ */
160
+ collectNonProgramFiles(rootDir, filter) {
161
+ if (!filter.html && !filter.ts) {
162
+ return [];
73
163
  }
74
- return results;
164
+ const fs = this.project.getFileSystem();
165
+ const programPaths = new Set(this.project.getSourceFiles().map((sf) => normalizePath(sf.getFilePath())));
166
+ const files = [];
167
+ const pending = [normalizePath(rootDir)];
168
+ const visited = new Set();
169
+ const wanted = (path) => {
170
+ if (filter.html && path.endsWith('.html')) {
171
+ return true;
172
+ }
173
+ return filter.ts && path.endsWith('.ts') && !programPaths.has(path);
174
+ };
175
+ while (pending.length > 0) {
176
+ const dir = pending.pop();
177
+ if (dir === undefined || visited.has(dir)) {
178
+ continue;
179
+ }
180
+ visited.add(dir);
181
+ let entries;
182
+ try {
183
+ entries = fs.readDirSync(dir);
184
+ }
185
+ catch {
186
+ continue;
187
+ }
188
+ for (const entry of entries) {
189
+ const fullPath = joinPath(dir, entry.name);
190
+ if (entry.isDirectory) {
191
+ if (!entry.isSymlink && !isExcludedDirectory(baseName(fullPath))) {
192
+ pending.push(fullPath);
193
+ }
194
+ continue;
195
+ }
196
+ if (!entry.isFile || !wanted(fullPath)) {
197
+ continue;
198
+ }
199
+ if (filter.include !== undefined &&
200
+ !matchesGlob(fullPath, filter.include)) {
201
+ continue;
202
+ }
203
+ files.push({
204
+ path: fullPath,
205
+ text: () => {
206
+ try {
207
+ return fs.readFileSync(fullPath);
208
+ }
209
+ catch {
210
+ return '';
211
+ }
212
+ },
213
+ source: 'non-program',
214
+ });
215
+ }
216
+ }
217
+ return files.sort((a, b) => a.path.localeCompare(b.path));
75
218
  }
76
219
  /**
77
220
  * Text or pattern search: splits each file into lines and tests each line.
78
221
  */
79
- searchText(query, mode, sourceFiles) {
222
+ searchText(query, mode, files) {
80
223
  const results = [];
81
224
  const regex = mode === 'pattern' ? new RegExp(query) : null;
82
- for (const sf of sourceFiles) {
83
- const filePath = sf.getFilePath();
84
- const lines = sf.getFullText().split('\n');
225
+ for (const file of files) {
226
+ const filePath = file.path;
227
+ const lines = file.text().split('\n');
85
228
  lines.forEach((lineText, index) => {
86
229
  const matched = regex === null ? lineText.includes(query) : regex.test(lineText);
87
230
  if (!matched) {
@@ -95,6 +238,7 @@ export class CodebaseSearcher {
95
238
  line: index + 1,
96
239
  col,
97
240
  snippet: lineText.trim(),
241
+ source: file.source,
98
242
  });
99
243
  });
100
244
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codebase-searcher.js","sourceRoot":"","sources":["../../src/investigation/codebase-searcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codebase-searcher.js","sourceRoot":"","sources":["../../src/investigation/codebase-searcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @angular-modernizer/api - Template Usage Finder
3
+ *
4
+ * Project-level companion to `scanTemplate`: resolves what a symbol means
5
+ * in Angular templates (component/directive selector, pipe name, class
6
+ * member, input/output binding) and scans every component template
7
+ * (external `templateUrl` files and inline `template:` literals).
8
+ *
9
+ * @remarks
10
+ * Member hits are `verified` when they read the member from the component
11
+ * context (`foo`, `this.foo`) inside the template of the declaring class or
12
+ * one of its subclasses. Same-name reads elsewhere (other components, or
13
+ * `x.foo`) are reported as `template-unverified`: they may or may not refer
14
+ * to the searched member.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const finder = new TemplateUsageFinder(project);
19
+ * const usages = finder.findTemplateUsages('UserCardComponent', declarations);
20
+ * // [{ file: '/src/app/list.component.html', usageType: 'template', templateKind: 'element', ... }]
21
+ * ```
22
+ */
23
+ import { Node, type Project } from 'ts-morph';
24
+ import { type TemplateUsageKind } from './template-usage-scanner.js';
25
+ /** Whether a template hit is known to refer to the searched symbol. */
26
+ export type TemplateMatch = 'verified' | 'template-unverified';
27
+ /** A template usage mapped back to a file position. */
28
+ export interface TemplateSymbolUsage {
29
+ /** Absolute path of the `.html` file, or of the `.ts` file for inline templates. */
30
+ file: string;
31
+ /** 1-based line. */
32
+ line: number;
33
+ /** 1-based column. */
34
+ col: number;
35
+ /** Trimmed source line. */
36
+ snippet: string;
37
+ /** Kind of template usage. */
38
+ templateKind: TemplateUsageKind;
39
+ /** Verification level (see class remarks). */
40
+ templateMatch: TemplateMatch;
41
+ /** Class name of the component that owns the template. */
42
+ component: string;
43
+ /** Explanation for unverified hits. */
44
+ note?: string;
45
+ }
46
+ /**
47
+ * Finds usages of a symbol inside Angular component templates.
48
+ */
49
+ export declare class TemplateUsageFinder {
50
+ private readonly project;
51
+ constructor(project: Project);
52
+ /**
53
+ * @param symbol - Searched name (class, member, or pipe class name).
54
+ * @param declarations - Declaration nodes named `symbol` (as found by `UsageFinder`).
55
+ * @returns Template usages, unsorted.
56
+ */
57
+ findTemplateUsages(symbol: string, declarations: Node[]): TemplateSymbolUsage[];
58
+ private buildQueries;
59
+ private toUsage;
60
+ /** All component templates in the project (inline and external). */
61
+ private collectTemplates;
62
+ private loadTemplate;
63
+ }
64
+ //# sourceMappingURL=template-usage-finder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-usage-finder.d.ts","sourceRoot":"","sources":["../../src/investigation/template-usage-finder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EACL,IAAI,EAGJ,KAAK,OAAO,EAEb,MAAM,UAAU,CAAC;AAElB,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,qBAAqB,CAAC;AAE/D,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IAEZ,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,YAAY,EAAE,iBAAiB,CAAC;IAEhC,8CAA8C;IAC9C,aAAa,EAAE,aAAa,CAAC;IAE7B,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoHD;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,mBAAmB,EAAE;IA8D/E,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,OAAO;IA+Bf,oEAAoE;IACpE,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,YAAY;CAgDrB"}