ng-explorer 0.0.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.
Files changed (50) hide show
  1. package/.claude-plugin/plugin.json +14 -0
  2. package/LICENSE +674 -0
  3. package/README.md +140 -0
  4. package/bin/ng-explorer.js +6 -0
  5. package/dist/commands/api.d.ts +3 -0
  6. package/dist/commands/api.d.ts.map +1 -0
  7. package/dist/commands/api.js +60 -0
  8. package/dist/commands/api.js.map +1 -0
  9. package/dist/commands/list.d.ts +3 -0
  10. package/dist/commands/list.d.ts.map +1 -0
  11. package/dist/commands/list.js +58 -0
  12. package/dist/commands/list.js.map +1 -0
  13. package/dist/commands/search.d.ts +3 -0
  14. package/dist/commands/search.d.ts.map +1 -0
  15. package/dist/commands/search.js +97 -0
  16. package/dist/commands/search.js.map +1 -0
  17. package/dist/commands/stats.d.ts +3 -0
  18. package/dist/commands/stats.d.ts.map +1 -0
  19. package/dist/commands/stats.js +41 -0
  20. package/dist/commands/stats.js.map +1 -0
  21. package/dist/commands/usage.d.ts +3 -0
  22. package/dist/commands/usage.d.ts.map +1 -0
  23. package/dist/commands/usage.js +110 -0
  24. package/dist/commands/usage.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +125 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/services/formatter.d.ts +67 -0
  30. package/dist/services/formatter.d.ts.map +1 -0
  31. package/dist/services/formatter.js +302 -0
  32. package/dist/services/formatter.js.map +1 -0
  33. package/dist/services/loader.d.ts +24 -0
  34. package/dist/services/loader.d.ts.map +1 -0
  35. package/dist/services/loader.js +56 -0
  36. package/dist/services/loader.js.map +1 -0
  37. package/dist/services/searcher.d.ts +48 -0
  38. package/dist/services/searcher.d.ts.map +1 -0
  39. package/dist/services/searcher.js +162 -0
  40. package/dist/services/searcher.js.map +1 -0
  41. package/dist/services/usage-finder.d.ts +33 -0
  42. package/dist/services/usage-finder.d.ts.map +1 -0
  43. package/dist/services/usage-finder.js +156 -0
  44. package/dist/services/usage-finder.js.map +1 -0
  45. package/dist/types/compodoc.d.ts +292 -0
  46. package/dist/types/compodoc.d.ts.map +1 -0
  47. package/dist/types/compodoc.js +40 -0
  48. package/dist/types/compodoc.js.map +1 -0
  49. package/package.json +54 -0
  50. package/skills/ng-explorer/SKILL.md +141 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searcher.d.ts","sourceRoot":"","sources":["../../src/services/searcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,YAAY,GACZ,WAAW,GACX,MAAM,GACN,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;AAEV;;GAEG;AACH,qBAAa,QAAQ;IAIP,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,IAAI,CAAoE;gBAE5D,IAAI,EAAE,YAAY;IAItC;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAqB,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;IA8BhH;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAqB,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;IAuBrH;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,gBAAgB,GAAG,IAAI;IAcvE;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;IAc7F;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAajE;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAWnC"}
@@ -0,0 +1,162 @@
1
+ import Fuse from 'fuse.js';
2
+ import { minimatch } from 'minimatch';
3
+ /**
4
+ * Searcher service for finding Angular constructs in documentation
5
+ */
6
+ export class Searcher {
7
+ data;
8
+ allConstructs = [];
9
+ fuse = null;
10
+ constructor(data) {
11
+ this.data = data;
12
+ this.buildSearchIndex();
13
+ }
14
+ /**
15
+ * Strip common Angular suffixes from a name
16
+ */
17
+ stripSuffix(name) {
18
+ const suffixes = ['Component', 'Directive', 'Service', 'Pipe', 'Module'];
19
+ for (const suffix of suffixes) {
20
+ if (name.endsWith(suffix) && name.length > suffix.length) {
21
+ return name.slice(0, -suffix.length);
22
+ }
23
+ }
24
+ return name;
25
+ }
26
+ /**
27
+ * Build search index from all constructs
28
+ */
29
+ buildSearchIndex() {
30
+ // Collect all constructs
31
+ this.allConstructs = [
32
+ ...(this.data.components || []),
33
+ ...(this.data.injectables || []),
34
+ ...(this.data.directives || []),
35
+ ...(this.data.pipes || []),
36
+ ...(this.data.modules || []),
37
+ ...(this.data.classes || []),
38
+ ];
39
+ // Create enhanced constructs with normalized names for better fuzzy matching
40
+ const searchableConstructs = this.allConstructs.map(construct => ({
41
+ ...construct,
42
+ normalizedName: this.stripSuffix(construct.name),
43
+ }));
44
+ // Configure Fuse.js for fuzzy search
45
+ this.fuse = new Fuse(searchableConstructs, {
46
+ keys: [
47
+ { name: 'normalizedName', weight: 2 },
48
+ { name: 'selector', weight: 1.5 },
49
+ ],
50
+ threshold: 0.3,
51
+ includeScore: true,
52
+ minMatchCharLength: 2,
53
+ });
54
+ }
55
+ /**
56
+ * Search for constructs by query string
57
+ */
58
+ search(query, type = 'all', pathPattern, limit = 50) {
59
+ if (!this.fuse) {
60
+ return [];
61
+ }
62
+ // Strip suffix from query for better fuzzy matching
63
+ const normalizedQuery = this.stripSuffix(query);
64
+ // Perform fuzzy search with normalized query
65
+ const results = this.fuse.search(normalizedQuery);
66
+ // Extract items (remove normalizedName property) and filter by type
67
+ let constructs = results.map((result) => {
68
+ const { normalizedName, ...construct } = result.item;
69
+ return construct;
70
+ });
71
+ if (type !== 'all') {
72
+ constructs = constructs.filter((construct) => construct.type === type);
73
+ }
74
+ // Filter by path pattern if provided
75
+ if (pathPattern) {
76
+ constructs = this.filterByPath(constructs, pathPattern);
77
+ }
78
+ // Apply limit
79
+ return constructs.slice(0, limit);
80
+ }
81
+ /**
82
+ * Search for constructs by exact name matching
83
+ */
84
+ searchExact(query, type = 'all', pathPattern, limit = 50) {
85
+ let constructs = this.allConstructs;
86
+ // Filter by type
87
+ if (type !== 'all') {
88
+ constructs = constructs.filter((construct) => construct.type === type);
89
+ }
90
+ // Filter by exact name match (case-insensitive)
91
+ const lowerQuery = query.toLowerCase();
92
+ constructs = constructs.filter((construct) => construct.name.toLowerCase() === lowerQuery);
93
+ // Filter by path pattern if provided
94
+ if (pathPattern) {
95
+ constructs = this.filterByPath(constructs, pathPattern);
96
+ }
97
+ // Apply limit
98
+ return constructs.slice(0, limit);
99
+ }
100
+ /**
101
+ * Find a construct by exact name
102
+ */
103
+ findByName(name, type) {
104
+ let constructs = this.allConstructs;
105
+ if (type && type !== 'all') {
106
+ constructs = constructs.filter((construct) => construct.type === type);
107
+ }
108
+ return (constructs.find((construct) => construct.name.toLowerCase() === name.toLowerCase()) || null);
109
+ }
110
+ /**
111
+ * List all constructs of a specific type
112
+ */
113
+ listByType(type, pathPattern, limit = 50) {
114
+ let constructs = type === 'all'
115
+ ? this.allConstructs
116
+ : this.allConstructs.filter((construct) => construct.type === type);
117
+ // Filter by path pattern if provided
118
+ if (pathPattern) {
119
+ constructs = this.filterByPath(constructs, pathPattern);
120
+ }
121
+ // Apply limit
122
+ return constructs.slice(0, limit);
123
+ }
124
+ /**
125
+ * Get total count of constructs by type (before limit)
126
+ */
127
+ getCountByType(type, pathPattern) {
128
+ let constructs = type === 'all'
129
+ ? this.allConstructs
130
+ : this.allConstructs.filter((construct) => construct.type === type);
131
+ // Filter by path pattern if provided
132
+ if (pathPattern) {
133
+ constructs = this.filterByPath(constructs, pathPattern);
134
+ }
135
+ return constructs.length;
136
+ }
137
+ /**
138
+ * Filter constructs by path pattern
139
+ */
140
+ filterByPath(constructs, pathPattern) {
141
+ return constructs.filter((construct) => {
142
+ // Normalize path separators and remove leading ./
143
+ const filePath = construct.file.replace(/^\.\//, '');
144
+ return minimatch(filePath, pathPattern, { matchBase: true });
145
+ });
146
+ }
147
+ /**
148
+ * Get statistics about the documentation
149
+ */
150
+ getStats() {
151
+ return {
152
+ components: this.data.components?.length || 0,
153
+ injectables: this.data.injectables?.length || 0,
154
+ directives: this.data.directives?.length || 0,
155
+ pipes: this.data.pipes?.length || 0,
156
+ modules: this.data.modules?.length || 0,
157
+ classes: this.data.classes?.length || 0,
158
+ total: this.allConstructs.length,
159
+ };
160
+ }
161
+ }
162
+ //# sourceMappingURL=searcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searcher.js","sourceRoot":"","sources":["../../src/services/searcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { AngularConstruct } from '../types/compodoc.js';
2
+ export interface UsageMatch {
3
+ file: string;
4
+ line: number;
5
+ content: string;
6
+ context: string[];
7
+ }
8
+ /**
9
+ * Service for finding usages of Angular constructs in the codebase
10
+ */
11
+ export declare class UsageFinder {
12
+ /**
13
+ * Find usages of a construct in the codebase
14
+ */
15
+ findUsages(construct: AngularConstruct): UsageMatch[];
16
+ /**
17
+ * Determine what to search for based on construct type
18
+ */
19
+ private getSearchTerm;
20
+ /**
21
+ * Determine file pattern to search based on construct type
22
+ */
23
+ private getFilePattern;
24
+ /**
25
+ * Parse grep output into structured matches
26
+ */
27
+ private parseGrepOutput;
28
+ /**
29
+ * Group matches by file
30
+ */
31
+ groupByFile(matches: UsageMatch[]): Map<string, UsageMatch[]>;
32
+ }
33
+ //# sourceMappingURL=usage-finder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-finder.d.ts","sourceRoot":"","sources":["../../src/services/usage-finder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,UAAU,EAAE;IAmCrD;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmEvB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;CAW9D"}
@@ -0,0 +1,156 @@
1
+ import { execSync } from 'child_process';
2
+ import { isComponent, isDirective, isPipe } from '../types/compodoc.js';
3
+ /**
4
+ * Service for finding usages of Angular constructs in the codebase
5
+ */
6
+ export class UsageFinder {
7
+ /**
8
+ * Find usages of a construct in the codebase
9
+ */
10
+ findUsages(construct) {
11
+ const searchTerm = this.getSearchTerm(construct);
12
+ const filePattern = this.getFilePattern(construct);
13
+ if (!searchTerm) {
14
+ return [];
15
+ }
16
+ try {
17
+ // Use grep to find matches with line numbers and context
18
+ // -r: recursive
19
+ // -n: show line numbers
20
+ // -w: match whole words only (prevents bitButton from matching bitButtonGroup)
21
+ // -A 2: show 2 lines after match
22
+ // -B 1: show 1 line before match
23
+ // --include: filter by file pattern
24
+ const command = `grep -rnw -A 2 -B 1 --include="${filePattern}" "${searchTerm}" .`;
25
+ const output = execSync(command, {
26
+ cwd: process.cwd(),
27
+ encoding: 'utf-8',
28
+ maxBuffer: 10 * 1024 * 1024, // 10MB buffer
29
+ });
30
+ return this.parseGrepOutput(output);
31
+ }
32
+ catch (error) {
33
+ // grep returns exit code 1 when no matches found
34
+ if (error.status === 1) {
35
+ return [];
36
+ }
37
+ // Other errors (e.g., command not found)
38
+ throw error;
39
+ }
40
+ }
41
+ /**
42
+ * Determine what to search for based on construct type
43
+ */
44
+ getSearchTerm(construct) {
45
+ if (isComponent(construct) || isDirective(construct)) {
46
+ // Search for the selector in templates
47
+ const selector = construct.selector || '';
48
+ // If the selector contains brackets, extract the attribute name
49
+ // e.g., "button[bitButton], a[bitButton]" -> "bitButton"
50
+ // e.g., "[bitAction]" -> "bitAction"
51
+ const bracketMatch = selector.match(/\[([^\]]+)\]/);
52
+ if (bracketMatch) {
53
+ return bracketMatch[1];
54
+ }
55
+ // Otherwise use the selector as-is (for element selectors like "app-vault-items")
56
+ return selector;
57
+ }
58
+ else if (isPipe(construct)) {
59
+ // Search for pipe name in templates
60
+ return construct.pipeName || construct.name;
61
+ }
62
+ else {
63
+ // For services and classes, search for the class name
64
+ return construct.name;
65
+ }
66
+ }
67
+ /**
68
+ * Determine file pattern to search based on construct type
69
+ */
70
+ getFilePattern(construct) {
71
+ if (isComponent(construct) || isDirective(construct) || isPipe(construct)) {
72
+ // Search in HTML templates
73
+ return '*.html';
74
+ }
75
+ else {
76
+ // Search in TypeScript files for services/classes
77
+ return '*.ts';
78
+ }
79
+ }
80
+ /**
81
+ * Parse grep output into structured matches
82
+ */
83
+ parseGrepOutput(output) {
84
+ const matches = [];
85
+ const lines = output.split('\n');
86
+ let currentMatch = null;
87
+ let contextLines = [];
88
+ for (const line of lines) {
89
+ if (!line.trim())
90
+ continue;
91
+ // Check if this is a separator (grep uses -- to separate match groups)
92
+ if (line === '--') {
93
+ if (currentMatch && currentMatch.file && currentMatch.line !== undefined) {
94
+ matches.push({
95
+ file: currentMatch.file,
96
+ line: currentMatch.line,
97
+ content: currentMatch.content || '',
98
+ context: contextLines,
99
+ });
100
+ }
101
+ currentMatch = null;
102
+ contextLines = [];
103
+ continue;
104
+ }
105
+ // Parse grep output format: file:linenum:content or file:linenum-content
106
+ const match = line.match(/^([^:]+):(\d+)([-:])(.*)$/);
107
+ if (match) {
108
+ const [, file, lineNum, separator, content] = match;
109
+ if (separator === ':') {
110
+ // This is the actual match line
111
+ if (currentMatch && currentMatch.file && currentMatch.line !== undefined) {
112
+ matches.push({
113
+ file: currentMatch.file,
114
+ line: currentMatch.line,
115
+ content: currentMatch.content || '',
116
+ context: contextLines,
117
+ });
118
+ contextLines = [];
119
+ }
120
+ currentMatch = {
121
+ file,
122
+ line: parseInt(lineNum, 10),
123
+ content,
124
+ };
125
+ }
126
+ else {
127
+ // This is a context line
128
+ contextLines.push(content);
129
+ }
130
+ }
131
+ }
132
+ // Don't forget the last match
133
+ if (currentMatch && currentMatch.file && currentMatch.line !== undefined) {
134
+ matches.push({
135
+ file: currentMatch.file,
136
+ line: currentMatch.line,
137
+ content: currentMatch.content || '',
138
+ context: contextLines,
139
+ });
140
+ }
141
+ return matches;
142
+ }
143
+ /**
144
+ * Group matches by file
145
+ */
146
+ groupByFile(matches) {
147
+ const grouped = new Map();
148
+ for (const match of matches) {
149
+ const existing = grouped.get(match.file) || [];
150
+ existing.push(match);
151
+ grouped.set(match.file, existing);
152
+ }
153
+ return grouped;
154
+ }
155
+ }
156
+ //# sourceMappingURL=usage-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-finder.js","sourceRoot":"","sources":["../../src/services/usage-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASxE;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,UAAU,CAAC,SAA2B;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,yDAAyD;YACzD,gBAAgB;YAChB,wBAAwB;YACxB,+EAA+E;YAC/E,iCAAiC;YACjC,iCAAiC;YACjC,oCAAoC;YACpC,MAAM,OAAO,GAAG,kCAAkC,WAAW,MAAM,UAAU,KAAK,CAAC;YAEnF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;gBAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,cAAc;aAC5C,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,iDAAiD;YACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,yCAAyC;YACzC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,SAA2B;QAC/C,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,uCAAuC;YACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;YAE1C,gEAAgE;YAChE,yDAAyD;YACzD,qCAAqC;YACrC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,kFAAkF;YAClF,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,oCAAoC;YACpC,OAAQ,SAAiB,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,OAAO,SAAS,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,SAA2B;QAChD,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1E,2BAA2B;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAc;QACpC,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,YAAY,GAA+B,IAAI,CAAC;QACpD,IAAI,YAAY,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAE3B,uEAAuE;YACvE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACzE,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;wBACnC,OAAO,EAAE,YAAY;qBACtB,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC;gBACpB,YAAY,GAAG,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,yEAAyE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;gBAEpD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;oBACtB,gCAAgC;oBAChC,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACzE,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,YAAY,CAAC,IAAI;4BACvB,IAAI,EAAE,YAAY,CAAC,IAAI;4BACvB,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;4BACnC,OAAO,EAAE,YAAY;yBACtB,CAAC,CAAC;wBACH,YAAY,GAAG,EAAE,CAAC;oBACpB,CAAC;oBAED,YAAY,GAAG;wBACb,IAAI;wBACJ,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC3B,OAAO;qBACR,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,yBAAyB;oBACzB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;gBACnC,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAqB;QAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * TypeScript type definitions for Compodoc's documentation.json format
3
+ */
4
+ export interface JsDocTag {
5
+ name?: string;
6
+ type?: string;
7
+ tagName: {
8
+ text: string;
9
+ };
10
+ comment?: string;
11
+ }
12
+ export interface MethodArg {
13
+ name: string;
14
+ type: string;
15
+ deprecated: boolean;
16
+ }
17
+ export interface ConstructorArg {
18
+ name: string;
19
+ type: string;
20
+ deprecated: boolean;
21
+ }
22
+ export interface Constructor {
23
+ name: 'constructor';
24
+ args?: ConstructorArg[];
25
+ line?: number;
26
+ description?: string;
27
+ jsdoctags?: JsDocTag[];
28
+ }
29
+ export interface Method {
30
+ name: string;
31
+ args?: MethodArg[];
32
+ returnType?: string;
33
+ line: number;
34
+ deprecated: boolean;
35
+ deprecationMessage?: string;
36
+ description?: string;
37
+ rawdescription?: string;
38
+ jsdoctags?: JsDocTag[];
39
+ modifierKind?: number[];
40
+ }
41
+ export interface Property {
42
+ name: string;
43
+ type: string;
44
+ defaultValue?: string;
45
+ line: number;
46
+ deprecated: boolean;
47
+ deprecationMessage?: string;
48
+ description?: string;
49
+ rawdescription?: string;
50
+ modifierKind?: number[];
51
+ decorators?: Array<{
52
+ name: string;
53
+ }>;
54
+ }
55
+ export interface InputProperty {
56
+ name: string;
57
+ type: string;
58
+ line: number;
59
+ deprecated: boolean;
60
+ deprecationMessage?: string;
61
+ description?: string;
62
+ rawdescription?: string;
63
+ decorators?: Array<{
64
+ name: string;
65
+ }>;
66
+ }
67
+ export interface OutputProperty {
68
+ name: string;
69
+ type: string;
70
+ line: number;
71
+ deprecated: boolean;
72
+ deprecationMessage?: string;
73
+ description?: string;
74
+ rawdescription?: string;
75
+ decorators?: Array<{
76
+ name: string;
77
+ }>;
78
+ }
79
+ export interface Component {
80
+ name: string;
81
+ id: string;
82
+ file: string;
83
+ type: 'component';
84
+ selector?: string;
85
+ standalone: boolean;
86
+ deprecated: boolean;
87
+ deprecationMessage?: string;
88
+ description?: string;
89
+ rawdescription?: string;
90
+ sourceCode?: string;
91
+ templateUrl?: string[];
92
+ styleUrls?: string[];
93
+ template?: string;
94
+ encapsulation?: string[];
95
+ changeDetection?: string;
96
+ inputsClass?: InputProperty[];
97
+ outputsClass?: OutputProperty[];
98
+ methodsClass?: Method[];
99
+ propertiesClass?: Property[];
100
+ constructorObj?: Constructor;
101
+ implements?: string[];
102
+ extends?: string;
103
+ providers?: Array<{
104
+ name: string;
105
+ }>;
106
+ imports?: Array<{
107
+ name: string;
108
+ }>;
109
+ }
110
+ export interface Injectable {
111
+ name: string;
112
+ id: string;
113
+ file: string;
114
+ type: 'injectable';
115
+ deprecated: boolean;
116
+ deprecationMessage?: string;
117
+ description?: string;
118
+ rawdescription?: string;
119
+ sourceCode?: string;
120
+ properties?: Property[];
121
+ methods?: Method[];
122
+ constructorObj?: Constructor;
123
+ implements?: string[];
124
+ extends?: string;
125
+ }
126
+ export interface Directive {
127
+ name: string;
128
+ id: string;
129
+ file: string;
130
+ type: 'directive';
131
+ selector?: string;
132
+ standalone: boolean;
133
+ deprecated: boolean;
134
+ deprecationMessage?: string;
135
+ description?: string;
136
+ rawdescription?: string;
137
+ sourceCode?: string;
138
+ inputsClass?: InputProperty[];
139
+ outputsClass?: OutputProperty[];
140
+ methodsClass?: Method[];
141
+ propertiesClass?: Property[];
142
+ constructorObj?: Constructor;
143
+ implements?: string[];
144
+ extends?: string;
145
+ providers?: Array<{
146
+ name: string;
147
+ }>;
148
+ }
149
+ export interface Pipe {
150
+ name: string;
151
+ id: string;
152
+ file: string;
153
+ type: 'pipe';
154
+ standalone: boolean;
155
+ deprecated: boolean;
156
+ deprecationMessage?: string;
157
+ description?: string;
158
+ rawdescription?: string;
159
+ sourceCode?: string;
160
+ pipeName?: string;
161
+ pure?: boolean;
162
+ methods?: Method[];
163
+ properties?: Property[];
164
+ }
165
+ export interface Module {
166
+ name: string;
167
+ id: string;
168
+ file: string;
169
+ type: 'module';
170
+ deprecated: boolean;
171
+ deprecationMessage?: string;
172
+ description?: string;
173
+ rawdescription?: string;
174
+ sourceCode?: string;
175
+ declarations?: Array<{
176
+ name: string;
177
+ }>;
178
+ imports?: Array<{
179
+ name: string;
180
+ }>;
181
+ exports?: Array<{
182
+ name: string;
183
+ }>;
184
+ providers?: Array<{
185
+ name: string;
186
+ }>;
187
+ bootstrap?: Array<{
188
+ name: string;
189
+ }>;
190
+ }
191
+ export interface Class {
192
+ name: string;
193
+ id: string;
194
+ file: string;
195
+ type: 'class';
196
+ deprecated: boolean;
197
+ deprecationMessage?: string;
198
+ description?: string;
199
+ rawdescription?: string;
200
+ sourceCode?: string;
201
+ methods?: Method[];
202
+ properties?: Property[];
203
+ constructorObj?: Constructor;
204
+ implements?: string[];
205
+ extends?: string;
206
+ }
207
+ export interface Interface {
208
+ name: string;
209
+ id: string;
210
+ file: string;
211
+ type: 'interface';
212
+ deprecated: boolean;
213
+ deprecationMessage?: string;
214
+ description?: string;
215
+ sourceCode?: string;
216
+ properties?: Property[];
217
+ methods?: Method[];
218
+ }
219
+ export interface Miscellaneous {
220
+ variables?: Array<{
221
+ name: string;
222
+ type: string;
223
+ file: string;
224
+ }>;
225
+ functions?: Array<{
226
+ name: string;
227
+ file: string;
228
+ }>;
229
+ typealiases?: Array<{
230
+ name: string;
231
+ type: string;
232
+ file: string;
233
+ }>;
234
+ enumerations?: Array<{
235
+ name: string;
236
+ file: string;
237
+ }>;
238
+ }
239
+ export interface Coverage {
240
+ count: number;
241
+ status: string;
242
+ files: Array<{
243
+ filePath: string;
244
+ type: string;
245
+ linktype: string;
246
+ name: string;
247
+ coveragePercent: number;
248
+ coverageCount: string;
249
+ status: string;
250
+ }>;
251
+ }
252
+ export interface CompodocData {
253
+ pipes?: Pipe[];
254
+ interfaces?: Interface[];
255
+ injectables?: Injectable[];
256
+ classes?: Class[];
257
+ directives?: Directive[];
258
+ components?: Component[];
259
+ modules?: Module[];
260
+ miscellaneous?: Miscellaneous;
261
+ routes?: unknown[];
262
+ coverage?: Coverage;
263
+ }
264
+ /**
265
+ * Union type for all searchable Angular constructs
266
+ */
267
+ export type AngularConstruct = Component | Injectable | Directive | Pipe | Module | Class;
268
+ /**
269
+ * Type guard to check if a construct is a Component
270
+ */
271
+ export declare function isComponent(construct: AngularConstruct): construct is Component;
272
+ /**
273
+ * Type guard to check if a construct is an Injectable
274
+ */
275
+ export declare function isInjectable(construct: AngularConstruct): construct is Injectable;
276
+ /**
277
+ * Type guard to check if a construct is a Directive
278
+ */
279
+ export declare function isDirective(construct: AngularConstruct): construct is Directive;
280
+ /**
281
+ * Type guard to check if a construct is a Pipe
282
+ */
283
+ export declare function isPipe(construct: AngularConstruct): construct is Pipe;
284
+ /**
285
+ * Type guard to check if a construct is a Module
286
+ */
287
+ export declare function isModule(construct: AngularConstruct): construct is Module;
288
+ /**
289
+ * Type guard to check if a construct is a Class
290
+ */
291
+ export declare function isClass(construct: AngularConstruct): construct is Class;
292
+ //# sourceMappingURL=compodoc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compodoc.d.ts","sourceRoot":"","sources":["../../src/types/compodoc.ts"],"names":[],"mappings":"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"}