@wtdlee/repomap 0.1.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +527 -0
  3. package/dist/analyzers/base-analyzer.d.ts +46 -0
  4. package/dist/analyzers/base-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/base-analyzer.js +48 -0
  6. package/dist/analyzers/base-analyzer.js.map +1 -0
  7. package/dist/analyzers/dataflow-analyzer.d.ts +30 -0
  8. package/dist/analyzers/dataflow-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/dataflow-analyzer.js +426 -0
  10. package/dist/analyzers/dataflow-analyzer.js.map +1 -0
  11. package/dist/analyzers/graphql-analyzer.d.ts +23 -0
  12. package/dist/analyzers/graphql-analyzer.d.ts.map +1 -0
  13. package/dist/analyzers/graphql-analyzer.js +387 -0
  14. package/dist/analyzers/graphql-analyzer.js.map +1 -0
  15. package/dist/analyzers/index.d.ts +6 -0
  16. package/dist/analyzers/index.d.ts.map +1 -0
  17. package/dist/analyzers/index.js +6 -0
  18. package/dist/analyzers/index.js.map +1 -0
  19. package/dist/analyzers/pages-analyzer.d.ts +85 -0
  20. package/dist/analyzers/pages-analyzer.d.ts.map +1 -0
  21. package/dist/analyzers/pages-analyzer.js +1696 -0
  22. package/dist/analyzers/pages-analyzer.js.map +1 -0
  23. package/dist/analyzers/rails/index.d.ts +47 -0
  24. package/dist/analyzers/rails/index.d.ts.map +1 -0
  25. package/dist/analyzers/rails/index.js +146 -0
  26. package/dist/analyzers/rails/index.js.map +1 -0
  27. package/dist/analyzers/rails/rails-controller-analyzer.d.ts +83 -0
  28. package/dist/analyzers/rails/rails-controller-analyzer.d.ts.map +1 -0
  29. package/dist/analyzers/rails/rails-controller-analyzer.js +479 -0
  30. package/dist/analyzers/rails/rails-controller-analyzer.js.map +1 -0
  31. package/dist/analyzers/rails/rails-grpc-analyzer.d.ts +45 -0
  32. package/dist/analyzers/rails/rails-grpc-analyzer.d.ts.map +1 -0
  33. package/dist/analyzers/rails/rails-grpc-analyzer.js +263 -0
  34. package/dist/analyzers/rails/rails-grpc-analyzer.js.map +1 -0
  35. package/dist/analyzers/rails/rails-model-analyzer.d.ts +89 -0
  36. package/dist/analyzers/rails/rails-model-analyzer.d.ts.map +1 -0
  37. package/dist/analyzers/rails/rails-model-analyzer.js +494 -0
  38. package/dist/analyzers/rails/rails-model-analyzer.js.map +1 -0
  39. package/dist/analyzers/rails/rails-react-analyzer.d.ts +42 -0
  40. package/dist/analyzers/rails/rails-react-analyzer.d.ts.map +1 -0
  41. package/dist/analyzers/rails/rails-react-analyzer.js +530 -0
  42. package/dist/analyzers/rails/rails-react-analyzer.js.map +1 -0
  43. package/dist/analyzers/rails/rails-routes-analyzer.d.ts +63 -0
  44. package/dist/analyzers/rails/rails-routes-analyzer.d.ts.map +1 -0
  45. package/dist/analyzers/rails/rails-routes-analyzer.js +541 -0
  46. package/dist/analyzers/rails/rails-routes-analyzer.js.map +1 -0
  47. package/dist/analyzers/rails/rails-view-analyzer.d.ts +50 -0
  48. package/dist/analyzers/rails/rails-view-analyzer.d.ts.map +1 -0
  49. package/dist/analyzers/rails/rails-view-analyzer.js +387 -0
  50. package/dist/analyzers/rails/rails-view-analyzer.js.map +1 -0
  51. package/dist/analyzers/rails/ruby-parser.d.ts +64 -0
  52. package/dist/analyzers/rails/ruby-parser.d.ts.map +1 -0
  53. package/dist/analyzers/rails/ruby-parser.js +213 -0
  54. package/dist/analyzers/rails/ruby-parser.js.map +1 -0
  55. package/dist/analyzers/rest-api-analyzer.d.ts +66 -0
  56. package/dist/analyzers/rest-api-analyzer.d.ts.map +1 -0
  57. package/dist/analyzers/rest-api-analyzer.js +480 -0
  58. package/dist/analyzers/rest-api-analyzer.js.map +1 -0
  59. package/dist/cli.d.ts +3 -0
  60. package/dist/cli.d.ts.map +1 -0
  61. package/dist/cli.js +550 -0
  62. package/dist/cli.js.map +1 -0
  63. package/dist/core/cache.d.ts +48 -0
  64. package/dist/core/cache.d.ts.map +1 -0
  65. package/dist/core/cache.js +152 -0
  66. package/dist/core/cache.js.map +1 -0
  67. package/dist/core/engine.d.ts +47 -0
  68. package/dist/core/engine.d.ts.map +1 -0
  69. package/dist/core/engine.js +320 -0
  70. package/dist/core/engine.js.map +1 -0
  71. package/dist/core/index.d.ts +3 -0
  72. package/dist/core/index.d.ts.map +1 -0
  73. package/dist/core/index.js +3 -0
  74. package/dist/core/index.js.map +1 -0
  75. package/dist/generators/assets/common.css +187 -0
  76. package/dist/generators/assets/docs.css +363 -0
  77. package/dist/generators/assets/page-map.css +305 -0
  78. package/dist/generators/assets/rails-map.css +473 -0
  79. package/dist/generators/index.d.ts +4 -0
  80. package/dist/generators/index.d.ts.map +1 -0
  81. package/dist/generators/index.js +4 -0
  82. package/dist/generators/index.js.map +1 -0
  83. package/dist/generators/markdown-generator.d.ts +26 -0
  84. package/dist/generators/markdown-generator.d.ts.map +1 -0
  85. package/dist/generators/markdown-generator.js +783 -0
  86. package/dist/generators/markdown-generator.js.map +1 -0
  87. package/dist/generators/mermaid-generator.d.ts +36 -0
  88. package/dist/generators/mermaid-generator.d.ts.map +1 -0
  89. package/dist/generators/mermaid-generator.js +365 -0
  90. package/dist/generators/mermaid-generator.js.map +1 -0
  91. package/dist/generators/page-map-generator.d.ts +23 -0
  92. package/dist/generators/page-map-generator.d.ts.map +1 -0
  93. package/dist/generators/page-map-generator.js +3563 -0
  94. package/dist/generators/page-map-generator.js.map +1 -0
  95. package/dist/generators/rails-map-generator.d.ts +22 -0
  96. package/dist/generators/rails-map-generator.d.ts.map +1 -0
  97. package/dist/generators/rails-map-generator.js +909 -0
  98. package/dist/generators/rails-map-generator.js.map +1 -0
  99. package/dist/index.d.ts +11 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +12 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/server/doc-server.d.ts +31 -0
  104. package/dist/server/doc-server.d.ts.map +1 -0
  105. package/dist/server/doc-server.js +1233 -0
  106. package/dist/server/doc-server.js.map +1 -0
  107. package/dist/server/index.d.ts +2 -0
  108. package/dist/server/index.d.ts.map +1 -0
  109. package/dist/server/index.js +2 -0
  110. package/dist/server/index.js.map +1 -0
  111. package/dist/types.d.ts +294 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +6 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/utils/env-detector.d.ts +32 -0
  116. package/dist/utils/env-detector.d.ts.map +1 -0
  117. package/dist/utils/env-detector.js +189 -0
  118. package/dist/utils/env-detector.js.map +1 -0
  119. package/dist/utils/parallel.d.ts +24 -0
  120. package/dist/utils/parallel.d.ts.map +1 -0
  121. package/dist/utils/parallel.js +71 -0
  122. package/dist/utils/parallel.js.map +1 -0
  123. package/package.json +131 -0
@@ -0,0 +1,426 @@
1
+ import { Project, SyntaxKind } from 'ts-morph';
2
+ import fg from 'fast-glob';
3
+ import * as path from 'path';
4
+ import { BaseAnalyzer } from './base-analyzer.js';
5
+ /**
6
+ * Analyzer for data flow patterns
7
+ * データフローパターンの分析器
8
+ */
9
+ export class DataFlowAnalyzer extends BaseAnalyzer {
10
+ project;
11
+ componentCache = new Map();
12
+ constructor(config) {
13
+ super(config);
14
+ this.project = new Project({
15
+ tsConfigFilePath: this.resolvePath('tsconfig.json'),
16
+ skipAddingFilesFromTsConfig: true,
17
+ });
18
+ }
19
+ getName() {
20
+ return 'DataFlowAnalyzer';
21
+ }
22
+ async analyze() {
23
+ this.log('Starting data flow analysis...');
24
+ // Analyze components
25
+ const components = await this.analyzeComponents();
26
+ // Analyze data flows
27
+ const dataFlows = await this.analyzeDataFlows(components);
28
+ this.log(`Analyzed ${components.length} components and ${dataFlows.length} data flows`);
29
+ return { components, dataFlows };
30
+ }
31
+ async analyzeComponents() {
32
+ const components = [];
33
+ // Use configured directories with common fallbacks
34
+ const configuredDirs = [
35
+ this.getSetting('featuresDir', ''),
36
+ this.getSetting('componentsDir', ''),
37
+ this.getSetting('pagesDir', ''),
38
+ ].filter(Boolean);
39
+ // Common directory patterns to scan (will skip non-existent)
40
+ const commonDirs = [
41
+ 'src/features',
42
+ 'src/components',
43
+ 'src/common/components',
44
+ 'src/common',
45
+ 'src/pages',
46
+ 'src/app',
47
+ 'src/modules',
48
+ 'src/views',
49
+ 'src/screens',
50
+ 'components',
51
+ 'pages',
52
+ 'app',
53
+ ];
54
+ const dirs = [...new Set([...configuredDirs, ...commonDirs])];
55
+ for (const dir of dirs) {
56
+ const files = await fg(['**/*.tsx'], {
57
+ cwd: this.resolvePath(dir),
58
+ ignore: ['**/*.test.*', '**/*.spec.*', '**/*.stories.*'],
59
+ absolute: true,
60
+ });
61
+ for (const filePath of files) {
62
+ try {
63
+ const sourceFile = this.project.addSourceFileAtPath(filePath);
64
+ const relativePath = path.relative(this.basePath, filePath);
65
+ const componentInfos = this.analyzeComponentFile(sourceFile, relativePath);
66
+ components.push(...componentInfos);
67
+ }
68
+ catch (error) {
69
+ this.warn(`Failed to analyze ${filePath}: ${error.message}`);
70
+ }
71
+ }
72
+ }
73
+ // Build dependency graph
74
+ this.buildDependencyGraph(components);
75
+ return components;
76
+ }
77
+ analyzeComponentFile(sourceFile, filePath) {
78
+ const components = [];
79
+ // Find function components
80
+ const functionDeclarations = sourceFile.getFunctions();
81
+ for (const func of functionDeclarations) {
82
+ const name = func.getName();
83
+ if (name && this.isComponentName(name)) {
84
+ const info = this.extractComponentInfo(func, name, filePath);
85
+ components.push(info);
86
+ this.componentCache.set(name, info);
87
+ }
88
+ }
89
+ // Find arrow function components
90
+ const variableDeclarations = sourceFile.getVariableDeclarations();
91
+ for (const varDecl of variableDeclarations) {
92
+ const name = varDecl.getName();
93
+ if (this.isComponentName(name)) {
94
+ const initializer = varDecl.getInitializer();
95
+ if (initializer &&
96
+ (initializer.isKind(SyntaxKind.ArrowFunction) ||
97
+ initializer.isKind(SyntaxKind.FunctionExpression))) {
98
+ const info = this.extractComponentInfo(initializer, name, filePath);
99
+ components.push(info);
100
+ this.componentCache.set(name, info);
101
+ }
102
+ }
103
+ }
104
+ // Find exported hooks
105
+ const hookFunctions = sourceFile.getFunctions().filter((f) => {
106
+ const name = f.getName();
107
+ return name && name.startsWith('use');
108
+ });
109
+ for (const hook of hookFunctions) {
110
+ const name = hook.getName() ?? '';
111
+ const info = this.extractHookInfo(hook, name, filePath);
112
+ components.push(info);
113
+ this.componentCache.set(name, info);
114
+ }
115
+ return components;
116
+ }
117
+ isComponentName(name) {
118
+ return /^[A-Z][a-zA-Z0-9]*$/.test(name);
119
+ }
120
+ extractComponentInfo(node, name, filePath) {
121
+ const sourceFile = node.getSourceFile();
122
+ // Determine component type based on path and naming conventions
123
+ let type = 'presentational';
124
+ // Page detection - common patterns for page components
125
+ const pagePathPatterns = ['/pages/', '/app/', '/routes/', '/views/', '/screens/'];
126
+ if (pagePathPatterns.some((pattern) => filePath.includes(pattern))) {
127
+ type = 'page';
128
+ }
129
+ else if (name.includes('Container') || name.includes('Provider')) {
130
+ type = 'container';
131
+ }
132
+ else if (
133
+ // Layout detection - various naming patterns
134
+ name.includes('Layout') ||
135
+ name.includes('Shell') ||
136
+ name.includes('Wrapper') ||
137
+ name.includes('Frame') ||
138
+ name.includes('Scaffold') ||
139
+ // Path-based layout detection
140
+ filePath.includes('/layouts/') ||
141
+ filePath.includes('/layout/')) {
142
+ type = 'layout';
143
+ }
144
+ // Extract props
145
+ const props = this.extractProps(node);
146
+ // Extract hooks used
147
+ const hooks = this.extractHooksUsed(node);
148
+ // Extract dependencies (imported components)
149
+ const dependencies = this.extractDependencies(sourceFile);
150
+ // Extract state management patterns
151
+ const stateManagement = this.extractStateManagement(node);
152
+ return {
153
+ name,
154
+ filePath,
155
+ type,
156
+ props,
157
+ dependencies,
158
+ dependents: [], // Will be filled later
159
+ hooks,
160
+ stateManagement,
161
+ };
162
+ }
163
+ extractHookInfo(node, name, filePath) {
164
+ const sourceFile = node.getSourceFile();
165
+ const props = this.extractProps(node);
166
+ const hooks = this.extractHooksUsed(node);
167
+ const dependencies = this.extractDependencies(sourceFile);
168
+ const stateManagement = this.extractStateManagement(node);
169
+ return {
170
+ name,
171
+ filePath,
172
+ type: 'hook',
173
+ props,
174
+ dependencies,
175
+ dependents: [],
176
+ hooks,
177
+ stateManagement,
178
+ };
179
+ }
180
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
181
+ extractProps(node) {
182
+ const props = [];
183
+ // Get parameter type
184
+ const parameters = node.getParameters?.() || [];
185
+ if (parameters.length > 0) {
186
+ const propsParam = parameters[0];
187
+ const typeNode = propsParam.getTypeNode?.();
188
+ if (typeNode) {
189
+ // Extract properties from type
190
+ const members = typeNode.getDescendantsOfKind?.(SyntaxKind.PropertySignature) || [];
191
+ for (const member of members) {
192
+ props.push({
193
+ name: member.getName(),
194
+ type: member.getType().getText(),
195
+ required: !member.hasQuestionToken(),
196
+ });
197
+ }
198
+ }
199
+ }
200
+ return props;
201
+ }
202
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
203
+ extractHooksUsed(node) {
204
+ const hooks = [];
205
+ const callExpressions = node.getDescendantsOfKind?.(SyntaxKind.CallExpression) || [];
206
+ for (const call of callExpressions) {
207
+ try {
208
+ const callName = call.getExpression().getText();
209
+ if (callName.startsWith('use')) {
210
+ // For useQuery/useMutation, try to extract the operation name
211
+ if (callName === 'useQuery' ||
212
+ callName === 'useMutation' ||
213
+ callName === 'useLazyQuery') {
214
+ const operationInfo = this.extractOperationName(call, callName);
215
+ if (!hooks.includes(operationInfo)) {
216
+ hooks.push(operationInfo);
217
+ }
218
+ }
219
+ else if (callName === 'useContext') {
220
+ const contextInfo = this.extractContextName(call);
221
+ if (!hooks.includes(contextInfo)) {
222
+ hooks.push(contextInfo);
223
+ }
224
+ }
225
+ else if (!hooks.includes(callName)) {
226
+ hooks.push(callName);
227
+ }
228
+ }
229
+ }
230
+ catch {
231
+ // Skip on error
232
+ }
233
+ }
234
+ return hooks;
235
+ }
236
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
237
+ extractOperationName(call, hookType) {
238
+ try {
239
+ const args = call.getArguments?.() || [];
240
+ if (args.length > 0) {
241
+ const firstArg = args[0].getText();
242
+ // Clean up the operation name
243
+ const cleanName = firstArg
244
+ .replace(/^(GET_|FETCH_|CREATE_|UPDATE_|DELETE_)/, '')
245
+ .replace(/_QUERY$|_MUTATION$/, '')
246
+ .replace(/Document$/, '')
247
+ .replace(/Query$|Mutation$/, '');
248
+ // Format nicely
249
+ const icon = hookType === 'useMutation' ? '✏️' : '📡';
250
+ const type = hookType === 'useMutation' ? 'Mutation' : 'Query';
251
+ return `${icon} ${type}: ${cleanName}`;
252
+ }
253
+ }
254
+ catch {
255
+ // Ignore errors
256
+ }
257
+ return hookType;
258
+ }
259
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
260
+ extractContextName(call) {
261
+ try {
262
+ const args = call.getArguments?.() || [];
263
+ if (args.length > 0) {
264
+ const contextName = args[0]
265
+ .getText()
266
+ .replace(/Context$/, '')
267
+ .replace(/^Session|^Token|^Apollo/, (m) => m);
268
+ return `🔄 Context: ${contextName}`;
269
+ }
270
+ }
271
+ catch {
272
+ // Ignore errors
273
+ }
274
+ return 'useContext';
275
+ }
276
+ extractDependencies(sourceFile) {
277
+ const dependencies = [];
278
+ const importDeclarations = sourceFile.getImportDeclarations();
279
+ for (const importDecl of importDeclarations) {
280
+ const moduleSpecifier = importDecl.getModuleSpecifierValue();
281
+ // Only track local imports
282
+ if (moduleSpecifier.startsWith('.') || moduleSpecifier.startsWith('@/')) {
283
+ const namedImports = importDecl.getNamedImports();
284
+ for (const namedImport of namedImports) {
285
+ const name = namedImport.getName();
286
+ if (this.isComponentName(name) || name.startsWith('use')) {
287
+ dependencies.push(name);
288
+ }
289
+ }
290
+ const defaultImport = importDecl.getDefaultImport();
291
+ if (defaultImport) {
292
+ const name = defaultImport.getText();
293
+ if (this.isComponentName(name)) {
294
+ dependencies.push(name);
295
+ }
296
+ }
297
+ }
298
+ }
299
+ return dependencies;
300
+ }
301
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
302
+ extractStateManagement(node) {
303
+ const statePatterns = [];
304
+ const nodeText = node.getText?.() || '';
305
+ // Check for various state management patterns
306
+ if (nodeText.includes('useState'))
307
+ statePatterns.push('useState');
308
+ if (nodeText.includes('useReducer'))
309
+ statePatterns.push('useReducer');
310
+ if (nodeText.includes('useContext'))
311
+ statePatterns.push('useContext');
312
+ if (nodeText.includes('useQuery'))
313
+ statePatterns.push('Apollo Query');
314
+ if (nodeText.includes('useMutation'))
315
+ statePatterns.push('Apollo Mutation');
316
+ if (nodeText.includes('useRecoil'))
317
+ statePatterns.push('Recoil');
318
+ if (nodeText.includes('useSelector') || nodeText.includes('useDispatch')) {
319
+ statePatterns.push('Redux');
320
+ }
321
+ return statePatterns;
322
+ }
323
+ buildDependencyGraph(components) {
324
+ const componentMap = new Map();
325
+ for (const comp of components) {
326
+ componentMap.set(comp.name, comp);
327
+ }
328
+ for (const comp of components) {
329
+ for (const dep of comp.dependencies) {
330
+ const depComponent = componentMap.get(dep);
331
+ if (depComponent && !depComponent.dependents.includes(comp.name)) {
332
+ depComponent.dependents.push(comp.name);
333
+ }
334
+ }
335
+ }
336
+ }
337
+ async analyzeDataFlows(components) {
338
+ const dataFlows = [];
339
+ let flowId = 1;
340
+ // Analyze Context-based data flows
341
+ const contextFlows = this.analyzeContextFlows(components);
342
+ dataFlows.push(...contextFlows.map((flow) => ({ ...flow, id: `flow-${flowId++}` })));
343
+ // Analyze Apollo data flows
344
+ const apolloFlows = this.analyzeApolloFlows(components);
345
+ dataFlows.push(...apolloFlows.map((flow) => ({ ...flow, id: `flow-${flowId++}` })));
346
+ // Analyze prop drilling patterns
347
+ const propDrillingFlows = this.analyzePropDrilling(components);
348
+ dataFlows.push(...propDrillingFlows.map((flow) => ({ ...flow, id: `flow-${flowId++}` })));
349
+ return dataFlows;
350
+ }
351
+ analyzeContextFlows(components) {
352
+ const flows = [];
353
+ // Find providers
354
+ const providers = components.filter((c) => c.name.includes('Provider') || c.name.includes('Context'));
355
+ // Find consumers
356
+ const consumers = components.filter((c) => c.hooks.some((h) => h.includes('Context')));
357
+ for (const provider of providers) {
358
+ const contextName = provider.name.replace('Provider', '').replace('Context', '');
359
+ for (const consumer of consumers) {
360
+ // Check if consumer uses this specific context
361
+ const contextHook = consumer.hooks.find((h) => h.includes('Context') && h.includes(contextName));
362
+ if (contextHook || consumer.hooks.some((h) => h.includes(contextName))) {
363
+ flows.push({
364
+ name: `🔄 ${contextName} Context`,
365
+ description: `Data flows from ${provider.name} to ${consumer.name} via Context`,
366
+ source: { type: 'context', name: provider.name },
367
+ target: { type: 'component', name: consumer.name },
368
+ via: [],
369
+ operations: [contextHook || `useContext(${contextName})`],
370
+ });
371
+ }
372
+ }
373
+ }
374
+ return flows;
375
+ }
376
+ analyzeApolloFlows(components) {
377
+ const flows = [];
378
+ for (const comp of components) {
379
+ // Find all query hooks with their operation names
380
+ const queryHooks = comp.hooks.filter((h) => h.includes('Query:') || h === 'useQuery' || h === 'useLazyQuery');
381
+ for (const hook of queryHooks) {
382
+ const operationName = hook.includes(':') ? hook.split(':')[1].trim() : comp.name;
383
+ flows.push({
384
+ name: `📡 ${operationName}`,
385
+ description: `${comp.name} fetches ${operationName} via Apollo`,
386
+ source: { type: 'api', name: `GraphQL: ${operationName}` },
387
+ target: { type: 'component', name: comp.name },
388
+ via: [{ type: 'cache', name: 'Apollo Cache' }],
389
+ operations: [hook],
390
+ });
391
+ }
392
+ // Find all mutation hooks with their operation names
393
+ const mutationHooks = comp.hooks.filter((h) => h.includes('Mutation:') || h === 'useMutation');
394
+ for (const hook of mutationHooks) {
395
+ const operationName = hook.includes(':') ? hook.split(':')[1].trim() : comp.name;
396
+ flows.push({
397
+ name: `✏️ ${operationName}`,
398
+ description: `${comp.name} mutates ${operationName} via Apollo`,
399
+ source: { type: 'component', name: comp.name },
400
+ target: { type: 'api', name: `GraphQL: ${operationName}` },
401
+ via: [],
402
+ operations: [hook],
403
+ });
404
+ }
405
+ }
406
+ return flows;
407
+ }
408
+ analyzePropDrilling(components) {
409
+ const flows = [];
410
+ // Find components with many props that are passed down
411
+ for (const comp of components) {
412
+ if (comp.props.length > 5 && comp.dependents.length > 0) {
413
+ flows.push({
414
+ name: `Prop Drilling through ${comp.name}`,
415
+ description: `${comp.name} passes ${comp.props.length} props to children`,
416
+ source: { type: 'component', name: comp.name },
417
+ target: { type: 'component', name: comp.dependents[0] },
418
+ via: [],
419
+ operations: ['props'],
420
+ });
421
+ }
422
+ }
423
+ return flows;
424
+ }
425
+ }
426
+ //# sourceMappingURL=dataflow-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/dataflow-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { BaseAnalyzer } from './base-analyzer.js';
2
+ import type { AnalysisResult, RepositoryConfig } from '../types.js';
3
+ /**
4
+ * Analyzer for GraphQL operations
5
+ * GraphQL操作の分析器
6
+ */
7
+ export declare class GraphQLAnalyzer extends BaseAnalyzer {
8
+ private project;
9
+ constructor(config: RepositoryConfig);
10
+ getName(): string;
11
+ analyze(): Promise<Partial<AnalysisResult>>;
12
+ private analyzeGraphQLFiles;
13
+ private analyzeInlineGraphQL;
14
+ private extractOperationsFromDocument;
15
+ private extractOperation;
16
+ private extractFields;
17
+ private extractVariables;
18
+ private typeNodeToString;
19
+ private extractFragmentReferences;
20
+ private inferReturnType;
21
+ private findOperationUsage;
22
+ }
23
+ //# sourceMappingURL=graphql-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/graphql-analyzer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,cAAc,EAId,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,OAAO,CAAU;gBAEb,MAAM,EAAE,gBAAgB;IAQpC,OAAO,IAAI,MAAM;IAIX,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAqBnC,mBAAmB;YAiBnB,oBAAoB;IA8KlC,OAAO,CAAC,6BAA6B;IAgBrC,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,aAAa;IAmDrB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,yBAAyB;IAuBjC,OAAO,CAAC,eAAe;YAUT,kBAAkB;CAqCjC"}