@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,387 @@
1
+ import { Project, SyntaxKind } from 'ts-morph';
2
+ import fg from 'fast-glob';
3
+ import * as fs from 'fs/promises';
4
+ import * as path from 'path';
5
+ import { parse as parseGraphQL } from 'graphql';
6
+ import { BaseAnalyzer } from './base-analyzer.js';
7
+ import { parallelMapSafe } from '../utils/parallel.js';
8
+ /**
9
+ * Analyzer for GraphQL operations
10
+ * GraphQL操作の分析器
11
+ */
12
+ export class GraphQLAnalyzer extends BaseAnalyzer {
13
+ project;
14
+ constructor(config) {
15
+ super(config);
16
+ this.project = new Project({
17
+ tsConfigFilePath: this.resolvePath('tsconfig.json'),
18
+ skipAddingFilesFromTsConfig: true,
19
+ });
20
+ }
21
+ getName() {
22
+ return 'GraphQLAnalyzer';
23
+ }
24
+ async analyze() {
25
+ this.log('Starting GraphQL analysis...');
26
+ const operations = [];
27
+ // Analyze .graphql files
28
+ const graphqlOperations = await this.analyzeGraphQLFiles();
29
+ operations.push(...graphqlOperations);
30
+ // Analyze gql`` template literals in TypeScript files
31
+ const inlineOperations = await this.analyzeInlineGraphQL();
32
+ operations.push(...inlineOperations);
33
+ // Find where each operation is used
34
+ await this.findOperationUsage(operations);
35
+ this.log(`Found ${operations.length} GraphQL operations`);
36
+ return { graphqlOperations: operations };
37
+ }
38
+ async analyzeGraphQLFiles() {
39
+ const graphqlFiles = await fg(['**/*.graphql'], {
40
+ cwd: this.basePath,
41
+ ignore: ['**/node_modules/**', '**/.next/**'],
42
+ absolute: true,
43
+ });
44
+ // Process files in parallel
45
+ const results = await parallelMapSafe(graphqlFiles, async (filePath) => {
46
+ const content = await fs.readFile(filePath, 'utf-8');
47
+ const document = parseGraphQL(content);
48
+ return this.extractOperationsFromDocument(document, path.relative(this.basePath, filePath));
49
+ });
50
+ return results.flat();
51
+ }
52
+ async analyzeInlineGraphQL() {
53
+ const operations = [];
54
+ const tsFiles = await fg(['**/*.ts', '**/*.tsx'], {
55
+ cwd: this.basePath,
56
+ ignore: [
57
+ '**/node_modules/**',
58
+ '**/.next/**',
59
+ '**/__tests__/**',
60
+ '**/*.test.*',
61
+ '**/*.spec.*',
62
+ ],
63
+ absolute: true,
64
+ });
65
+ for (const filePath of tsFiles) {
66
+ try {
67
+ const sourceFile = this.project.addSourceFileAtPath(filePath);
68
+ const relativePath = path.relative(this.basePath, filePath);
69
+ // Check if file imports gql from any GraphQL-related source
70
+ // Supports: @apollo/client, graphql-tag, graphql.macro, __generated__/gql, gql-masked, etc.
71
+ const hasGqlImport = sourceFile.getImportDeclarations().some((imp) => {
72
+ const spec = imp.getModuleSpecifierValue();
73
+ const namedImports = imp.getNamedImports().map((n) => n.getName());
74
+ const defaultImport = imp.getDefaultImport()?.getText();
75
+ // Check if gql is imported from GraphQL-related modules
76
+ return ((namedImports.includes('gql') ||
77
+ namedImports.includes('graphql') ||
78
+ defaultImport === 'gql') &&
79
+ (spec.includes('graphql') ||
80
+ spec.includes('apollo') ||
81
+ spec.includes('gql') ||
82
+ spec.includes('__generated__')));
83
+ });
84
+ // Find gql`` or graphql`` template literals
85
+ const taggedTemplates = sourceFile.getDescendantsOfKind(SyntaxKind.TaggedTemplateExpression);
86
+ for (const template of taggedTemplates) {
87
+ const tag = template.getTag().getText();
88
+ if (tag === 'gql' || tag === 'graphql') {
89
+ try {
90
+ const templateLiteral = template.getTemplate();
91
+ let content = '';
92
+ if (templateLiteral.isKind(SyntaxKind.NoSubstitutionTemplateLiteral)) {
93
+ content = templateLiteral.getLiteralValue();
94
+ }
95
+ else if (templateLiteral.isKind(SyntaxKind.TemplateExpression)) {
96
+ // Handle template with substitutions - extract text safely
97
+ const fullText = templateLiteral.getText();
98
+ // Remove template literal backticks and fragment interpolations
99
+ content = fullText
100
+ .slice(1, -1) // Remove outer backticks
101
+ .replace(/\$\{[^}]*\}/g, ''); // Remove ${...} entirely (usually fragment refs)
102
+ }
103
+ if (content && content.trim()) {
104
+ try {
105
+ // Try to parse the GraphQL
106
+ const document = parseGraphQL(content);
107
+ const fileOperations = this.extractOperationsFromDocument(document, relativePath);
108
+ operations.push(...fileOperations);
109
+ }
110
+ catch {
111
+ // Skip unparseable GraphQL - this is expected for templates with complex interpolations
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // Skip templates that can't be processed
117
+ }
118
+ }
119
+ }
120
+ // Find gql() function calls: gql(/* GraphQL */ `...`) or gql(`...`)
121
+ // Also supports typed-document-node codegen pattern: gql(/* GraphQL */ `...`)
122
+ const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
123
+ for (const call of callExpressions) {
124
+ try {
125
+ const expression = call.getExpression();
126
+ const expressionText = expression.getText();
127
+ // Match gql() or graphql() function calls
128
+ if (expressionText === 'gql' || expressionText === 'graphql') {
129
+ const args = call.getArguments();
130
+ if (args.length > 0) {
131
+ const firstArg = args[0];
132
+ let content = '';
133
+ // Handle template literal argument (direct or with /* GraphQL */ comment)
134
+ if (firstArg.isKind(SyntaxKind.NoSubstitutionTemplateLiteral)) {
135
+ content = firstArg.getLiteralValue();
136
+ }
137
+ else if (firstArg.isKind(SyntaxKind.TemplateExpression)) {
138
+ const fullText = firstArg.getText();
139
+ content = fullText.slice(1, -1).replace(/\$\{[^}]*\}/g, ''); // Remove fragment refs
140
+ }
141
+ else {
142
+ // Try to get text content (might be a variable or other expression)
143
+ const argText = firstArg.getText();
144
+ // Check if it's a template literal wrapped in comments (/* GraphQL */ `...`)
145
+ if (argText.includes('`')) {
146
+ // Handle /* GraphQL */ `query { ... }` pattern
147
+ const match = argText.match(/\/\*\s*GraphQL\s*\*\/\s*`([^`]*)`/);
148
+ if (match) {
149
+ content = match[1];
150
+ }
151
+ else {
152
+ // Fallback: just extract template literal
153
+ const simpleMatch = argText.match(/`([^`]*)`/);
154
+ if (simpleMatch) {
155
+ content = simpleMatch[1];
156
+ }
157
+ }
158
+ }
159
+ }
160
+ if (content && content.trim()) {
161
+ try {
162
+ const document = parseGraphQL(content);
163
+ const fileOperations = this.extractOperationsFromDocument(document, relativePath);
164
+ operations.push(...fileOperations);
165
+ }
166
+ catch {
167
+ // Skip unparseable GraphQL
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ catch {
174
+ // Skip calls that can't be processed
175
+ }
176
+ }
177
+ // Find exported const queries with GraphQL-like naming patterns
178
+ // Supports: SCREAMING_CASE (e.g., SEARCH_COMPANIES) and PascalCase (e.g., Query, Mutation)
179
+ if (hasGqlImport) {
180
+ const variableDeclarations = sourceFile.getVariableDeclarations();
181
+ for (const varDecl of variableDeclarations) {
182
+ const name = varDecl.getName();
183
+ // Match GraphQL-like variable names
184
+ const isGraphQLLike = name.includes('QUERY') ||
185
+ name.includes('MUTATION') ||
186
+ name.includes('FRAGMENT') ||
187
+ name.includes('Query') ||
188
+ name.includes('Mutation') ||
189
+ name.includes('Subscription') ||
190
+ // SCREAMING_CASE constants ending in related words
191
+ /^[A-Z_]+_(QUERY|MUTATION|FRAGMENT|SUBSCRIPTION)$/.test(name) ||
192
+ // PascalCase Query suffix
193
+ /Query$|Mutation$|Fragment$|Subscription$/.test(name);
194
+ if (isGraphQLLike) {
195
+ const initializer = varDecl.getInitializer();
196
+ // Tagged template is handled above, but let's also handle
197
+ // cases where the initializer is a call expression
198
+ if (initializer && initializer.isKind(SyntaxKind.CallExpression)) {
199
+ // Already handled above in the call expression loop
200
+ }
201
+ }
202
+ }
203
+ }
204
+ }
205
+ catch (error) {
206
+ this.warn(`Failed to analyze ${filePath}: ${error.message}`);
207
+ }
208
+ }
209
+ return operations;
210
+ }
211
+ extractOperationsFromDocument(document, filePath) {
212
+ const operations = [];
213
+ for (const definition of document.definitions) {
214
+ const operation = this.extractOperation(definition, filePath);
215
+ if (operation) {
216
+ operations.push(operation);
217
+ }
218
+ }
219
+ return operations;
220
+ }
221
+ extractOperation(definition, filePath) {
222
+ if (definition.kind === 'OperationDefinition') {
223
+ const name = definition.name?.value || 'anonymous';
224
+ const type = definition.operation;
225
+ const variables = this.extractVariables(definition);
226
+ const fragments = this.extractFragmentReferences(definition);
227
+ const fields = this.extractFields(definition);
228
+ return {
229
+ name,
230
+ type,
231
+ filePath,
232
+ usedIn: [],
233
+ variables,
234
+ returnType: this.inferReturnType(definition),
235
+ fragments,
236
+ fields,
237
+ };
238
+ }
239
+ if (definition.kind === 'FragmentDefinition') {
240
+ return {
241
+ name: definition.name.value,
242
+ type: 'fragment',
243
+ filePath,
244
+ usedIn: [],
245
+ variables: [],
246
+ returnType: definition.typeCondition.name.value,
247
+ fragments: this.extractFragmentReferences(definition),
248
+ fields: this.extractFields(definition),
249
+ };
250
+ }
251
+ return null;
252
+ }
253
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
254
+ extractFields(definition) {
255
+ const fields = [];
256
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
257
+ const extractFromSelectionSet = (selectionSet, depth = 0) => {
258
+ if (!selectionSet || !selectionSet.selections || depth > 5)
259
+ return [];
260
+ const result = [];
261
+ for (const selection of selectionSet.selections) {
262
+ if (selection.kind === 'Field') {
263
+ const field = {
264
+ name: selection.name.value,
265
+ };
266
+ // Extract arguments as part of type info
267
+ if (selection.arguments && selection.arguments.length > 0) {
268
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
269
+ const args = selection.arguments.map((arg) => arg.name.value).join(', ');
270
+ field.type = `(${args})`;
271
+ }
272
+ // Recursively extract nested fields
273
+ if (selection.selectionSet) {
274
+ field.fields = extractFromSelectionSet(selection.selectionSet, depth + 1);
275
+ }
276
+ result.push(field);
277
+ }
278
+ else if (selection.kind === 'FragmentSpread') {
279
+ result.push({ name: `...${selection.name.value}`, type: 'fragment' });
280
+ }
281
+ else if (selection.kind === 'InlineFragment') {
282
+ if (selection.selectionSet) {
283
+ const typeName = selection.typeCondition?.name?.value || 'inline';
284
+ result.push({
285
+ name: `... on ${typeName}`,
286
+ type: 'inline-fragment',
287
+ fields: extractFromSelectionSet(selection.selectionSet, depth + 1),
288
+ });
289
+ }
290
+ }
291
+ }
292
+ return result;
293
+ };
294
+ if (definition.selectionSet) {
295
+ return extractFromSelectionSet(definition.selectionSet);
296
+ }
297
+ return fields;
298
+ }
299
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
300
+ extractVariables(definition) {
301
+ const variables = [];
302
+ if (definition.variableDefinitions) {
303
+ for (const varDef of definition.variableDefinitions) {
304
+ const name = varDef.variable.name.value;
305
+ const type = this.typeNodeToString(varDef.type);
306
+ const required = varDef.type.kind === 'NonNullType';
307
+ variables.push({ name, type, required });
308
+ }
309
+ }
310
+ return variables;
311
+ }
312
+ typeNodeToString(typeNode) {
313
+ if (typeNode.kind === 'NonNullType') {
314
+ return `${this.typeNodeToString(typeNode.type)}!`;
315
+ }
316
+ if (typeNode.kind === 'ListType') {
317
+ return `[${this.typeNodeToString(typeNode.type)}]`;
318
+ }
319
+ if (typeNode.kind === 'NamedType') {
320
+ return typeNode.name.value;
321
+ }
322
+ return 'unknown';
323
+ }
324
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
325
+ extractFragmentReferences(definition) {
326
+ const fragments = [];
327
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
328
+ const visit = (node) => {
329
+ if (!node)
330
+ return;
331
+ if (node.kind === 'FragmentSpread') {
332
+ fragments.push(node.name.value);
333
+ }
334
+ if (node.selectionSet) {
335
+ for (const selection of node.selectionSet.selections) {
336
+ visit(selection);
337
+ }
338
+ }
339
+ };
340
+ visit(definition);
341
+ return fragments;
342
+ }
343
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
344
+ inferReturnType(definition) {
345
+ if (definition.selectionSet && definition.selectionSet.selections.length > 0) {
346
+ const firstSelection = definition.selectionSet.selections[0];
347
+ if (firstSelection.kind === 'Field') {
348
+ return firstSelection.name.value;
349
+ }
350
+ }
351
+ return 'unknown';
352
+ }
353
+ async findOperationUsage(operations) {
354
+ const tsFiles = await fg(['**/*.ts', '**/*.tsx'], {
355
+ cwd: this.basePath,
356
+ ignore: ['**/node_modules/**', '**/.next/**'],
357
+ absolute: true,
358
+ });
359
+ const operationNames = new Map();
360
+ for (const op of operations) {
361
+ operationNames.set(op.name, op);
362
+ }
363
+ for (const filePath of tsFiles) {
364
+ try {
365
+ const content = await fs.readFile(filePath, 'utf-8');
366
+ const relativePath = path.relative(this.basePath, filePath);
367
+ for (const [name, operation] of operationNames) {
368
+ // Check if the operation is used in this file
369
+ if (content.includes(`useQuery<${name}`) ||
370
+ content.includes(`useMutation<${name}`) ||
371
+ content.includes(`useLazyQuery<${name}`) ||
372
+ content.includes(`${name}Query`) ||
373
+ content.includes(`${name}Mutation`) ||
374
+ content.includes(`${name}Variables`)) {
375
+ if (!operation.usedIn.includes(relativePath)) {
376
+ operation.usedIn.push(relativePath);
377
+ }
378
+ }
379
+ }
380
+ }
381
+ catch {
382
+ // Skip unreadable files
383
+ }
384
+ }
385
+ }
386
+ }
387
+ //# sourceMappingURL=graphql-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/graphql-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './base-analyzer.js';
2
+ export * from './pages-analyzer.js';
3
+ export * from './graphql-analyzer.js';
4
+ export * from './dataflow-analyzer.js';
5
+ export * from './rest-api-analyzer.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './base-analyzer.js';
2
+ export * from './pages-analyzer.js';
3
+ export * from './graphql-analyzer.js';
4
+ export * from './dataflow-analyzer.js';
5
+ export * from './rest-api-analyzer.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { BaseAnalyzer } from './base-analyzer.js';
2
+ import type { AnalysisResult, RepositoryConfig } from '../types.js';
3
+ /**
4
+ * Analyzer for Next.js pages
5
+ * Next.jsページの分析器
6
+ */
7
+ export declare class PagesAnalyzer extends BaseAnalyzer {
8
+ private project;
9
+ private codegenMap;
10
+ constructor(config: RepositoryConfig);
11
+ /**
12
+ * Extract GraphQL operation name from a gql template literal or function call
13
+ * Handles multiple patterns:
14
+ * - gql`query Name { ... }`
15
+ * - gql(/‌* GraphQL *‌/ `query Name { ... }`)
16
+ * - graphql(`query Name { ... }`)
17
+ */
18
+ private extractOperationNameFromGql;
19
+ /**
20
+ * Find and extract operation name from a variable declaration in source file
21
+ * Handles cases like: const Query = gql(comment `query ActualName...`)
22
+ */
23
+ private findOperationNameFromVariable;
24
+ getName(): string;
25
+ analyze(): Promise<Partial<AnalysisResult>>;
26
+ private analyzePageFile;
27
+ /**
28
+ * Detect the pages root directory from a file path
29
+ * e.g., /project/src/pages/users/index.tsx -> /project/src/pages
30
+ */
31
+ private detectPagesRoot;
32
+ private filePathToRoutePath;
33
+ private extractRouteParams;
34
+ private findPageComponent;
35
+ private extractLayout;
36
+ private extractAuthRequirement;
37
+ private extractRolesFromCondition;
38
+ private extractPermissions;
39
+ private extractDataFetching;
40
+ private symbolTraceCache;
41
+ /**
42
+ * Analyze an imported component file for GraphQL queries with full symbol tracing
43
+ * 임포트된 컴포넌트를 재귀적으로 완전 추적
44
+ */
45
+ private analyzeImportedComponent;
46
+ /**
47
+ * Analyze a custom hook file for GraphQL queries with recursive tracing
48
+ */
49
+ private analyzeCustomHook;
50
+ private globalContextQueries;
51
+ /**
52
+ * Find page files from multiple possible locations
53
+ * Next.js, React, Rails+React 구조 모두 지원
54
+ */
55
+ private findPageFiles;
56
+ /**
57
+ * Analyze _app.tsx for global providers that use GraphQL
58
+ * _app.tsx에서 전역 Context Provider의 GraphQL 분석
59
+ */
60
+ private analyzeAppFile;
61
+ /**
62
+ * Load codegen mapping from __generated__ folders (optional)
63
+ * 코드젠 폴더가 있으면 Document → Operation name 매핑 로드
64
+ */
65
+ private loadCodegenMapping;
66
+ /**
67
+ * Resolve Document name to operation name using codegen map
68
+ */
69
+ private resolveDocumentName;
70
+ /**
71
+ * Follow re-export in index file to find the actual component file
72
+ */
73
+ private followReExport;
74
+ /**
75
+ * Check if a name looks like a React component (PascalCase with common suffixes)
76
+ */
77
+ private isComponentName;
78
+ private extractNavigation;
79
+ /**
80
+ * Extract multi-step flow information (wizard, stepper, onboarding)
81
+ */
82
+ private extractSteps;
83
+ private extractLinkedPages;
84
+ }
85
+ //# sourceMappingURL=pages-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/pages-analyzer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,cAAc,EAKd,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,UAAU,CAAuE;gBAE7E,MAAM,EAAE,gBAAgB;IAQpC;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAwBnC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAwErC,OAAO,IAAI,MAAM;IAIX,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YA0CnC,eAAe;IAqC7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,iBAAiB;IA4EzB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,sBAAsB;IA+E9B,OAAO,CAAC,yBAAyB;IAkCjC,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,mBAAmB;IA4R3B,OAAO,CAAC,gBAAgB,CAAyC;IAEjE;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAyPhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsLzB,OAAO,CAAC,oBAAoB,CAA0B;IAEtD;;;OAGG;YACW,aAAa;IA2H3B;;;OAGG;YACW,cAAc;IAiE5B;;;OAGG;YACW,kBAAkB;IAqFhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAwFtB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2FvB,OAAO,CAAC,iBAAiB;IA0EzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwJpB,OAAO,CAAC,kBAAkB;CAyD3B"}