@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.
- package/LICENSE +21 -0
- package/README.md +527 -0
- package/dist/analyzers/base-analyzer.d.ts +46 -0
- package/dist/analyzers/base-analyzer.d.ts.map +1 -0
- package/dist/analyzers/base-analyzer.js +48 -0
- package/dist/analyzers/base-analyzer.js.map +1 -0
- package/dist/analyzers/dataflow-analyzer.d.ts +30 -0
- package/dist/analyzers/dataflow-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dataflow-analyzer.js +426 -0
- package/dist/analyzers/dataflow-analyzer.js.map +1 -0
- package/dist/analyzers/graphql-analyzer.d.ts +23 -0
- package/dist/analyzers/graphql-analyzer.d.ts.map +1 -0
- package/dist/analyzers/graphql-analyzer.js +387 -0
- package/dist/analyzers/graphql-analyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +6 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +6 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/pages-analyzer.d.ts +85 -0
- package/dist/analyzers/pages-analyzer.d.ts.map +1 -0
- package/dist/analyzers/pages-analyzer.js +1696 -0
- package/dist/analyzers/pages-analyzer.js.map +1 -0
- package/dist/analyzers/rails/index.d.ts +47 -0
- package/dist/analyzers/rails/index.d.ts.map +1 -0
- package/dist/analyzers/rails/index.js +146 -0
- package/dist/analyzers/rails/index.js.map +1 -0
- package/dist/analyzers/rails/rails-controller-analyzer.d.ts +83 -0
- package/dist/analyzers/rails/rails-controller-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rails/rails-controller-analyzer.js +479 -0
- package/dist/analyzers/rails/rails-controller-analyzer.js.map +1 -0
- package/dist/analyzers/rails/rails-grpc-analyzer.d.ts +45 -0
- package/dist/analyzers/rails/rails-grpc-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rails/rails-grpc-analyzer.js +263 -0
- package/dist/analyzers/rails/rails-grpc-analyzer.js.map +1 -0
- package/dist/analyzers/rails/rails-model-analyzer.d.ts +89 -0
- package/dist/analyzers/rails/rails-model-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rails/rails-model-analyzer.js +494 -0
- package/dist/analyzers/rails/rails-model-analyzer.js.map +1 -0
- package/dist/analyzers/rails/rails-react-analyzer.d.ts +42 -0
- package/dist/analyzers/rails/rails-react-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rails/rails-react-analyzer.js +530 -0
- package/dist/analyzers/rails/rails-react-analyzer.js.map +1 -0
- package/dist/analyzers/rails/rails-routes-analyzer.d.ts +63 -0
- package/dist/analyzers/rails/rails-routes-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rails/rails-routes-analyzer.js +541 -0
- package/dist/analyzers/rails/rails-routes-analyzer.js.map +1 -0
- package/dist/analyzers/rails/rails-view-analyzer.d.ts +50 -0
- package/dist/analyzers/rails/rails-view-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rails/rails-view-analyzer.js +387 -0
- package/dist/analyzers/rails/rails-view-analyzer.js.map +1 -0
- package/dist/analyzers/rails/ruby-parser.d.ts +64 -0
- package/dist/analyzers/rails/ruby-parser.d.ts.map +1 -0
- package/dist/analyzers/rails/ruby-parser.js +213 -0
- package/dist/analyzers/rails/ruby-parser.js.map +1 -0
- package/dist/analyzers/rest-api-analyzer.d.ts +66 -0
- package/dist/analyzers/rest-api-analyzer.d.ts.map +1 -0
- package/dist/analyzers/rest-api-analyzer.js +480 -0
- package/dist/analyzers/rest-api-analyzer.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +550 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/cache.d.ts +48 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +152 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/engine.d.ts +47 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +320 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/generators/assets/common.css +187 -0
- package/dist/generators/assets/docs.css +363 -0
- package/dist/generators/assets/page-map.css +305 -0
- package/dist/generators/assets/rails-map.css +473 -0
- package/dist/generators/index.d.ts +4 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +4 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/markdown-generator.d.ts +26 -0
- package/dist/generators/markdown-generator.d.ts.map +1 -0
- package/dist/generators/markdown-generator.js +783 -0
- package/dist/generators/markdown-generator.js.map +1 -0
- package/dist/generators/mermaid-generator.d.ts +36 -0
- package/dist/generators/mermaid-generator.d.ts.map +1 -0
- package/dist/generators/mermaid-generator.js +365 -0
- package/dist/generators/mermaid-generator.js.map +1 -0
- package/dist/generators/page-map-generator.d.ts +23 -0
- package/dist/generators/page-map-generator.d.ts.map +1 -0
- package/dist/generators/page-map-generator.js +3563 -0
- package/dist/generators/page-map-generator.js.map +1 -0
- package/dist/generators/rails-map-generator.d.ts +22 -0
- package/dist/generators/rails-map-generator.d.ts.map +1 -0
- package/dist/generators/rails-map-generator.js +909 -0
- package/dist/generators/rails-map-generator.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/server/doc-server.d.ts +31 -0
- package/dist/server/doc-server.d.ts.map +1 -0
- package/dist/server/doc-server.js +1233 -0
- package/dist/server/doc-server.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/types.d.ts +294 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/env-detector.d.ts +32 -0
- package/dist/utils/env-detector.d.ts.map +1 -0
- package/dist/utils/env-detector.js +189 -0
- package/dist/utils/env-detector.js.map +1 -0
- package/dist/utils/parallel.d.ts +24 -0
- package/dist/utils/parallel.d.ts.map +1 -0
- package/dist/utils/parallel.js +71 -0
- package/dist/utils/parallel.js.map +1 -0
- 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"}
|