ai-first-cli 1.2.2 → 1.3.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/CHANGELOG.md +292 -6
- package/README.md +24 -4
- package/dist/analyzers/symbols.d.ts.map +1 -1
- package/dist/analyzers/symbols.js +9 -7
- package/dist/analyzers/symbols.js.map +1 -1
- package/dist/analyzers/techStack.d.ts.map +1 -1
- package/dist/analyzers/techStack.js +198 -3
- package/dist/analyzers/techStack.js.map +1 -1
- package/dist/commands/ai-first.d.ts.map +1 -1
- package/dist/commands/ai-first.js +14 -13
- package/dist/commands/ai-first.js.map +1 -1
- package/dist/core/adapters/baseAdapter.d.ts +1 -1
- package/dist/core/adapters/baseAdapter.d.ts.map +1 -1
- package/dist/core/adapters/baseAdapter.js +50 -12
- package/dist/core/adapters/baseAdapter.js.map +1 -1
- package/dist/core/analysis/architectureDetector.d.ts +37 -0
- package/dist/core/analysis/architectureDetector.d.ts.map +1 -0
- package/dist/core/analysis/architectureDetector.js +316 -0
- package/dist/core/analysis/architectureDetector.js.map +1 -0
- package/dist/core/analysis/callGraphBuilder.d.ts +37 -0
- package/dist/core/analysis/callGraphBuilder.d.ts.map +1 -0
- package/dist/core/analysis/callGraphBuilder.js +101 -0
- package/dist/core/analysis/callGraphBuilder.js.map +1 -0
- package/dist/core/analysis/dependencyAnalyzer.d.ts +45 -0
- package/dist/core/analysis/dependencyAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/dependencyAnalyzer.js +98 -0
- package/dist/core/analysis/dependencyAnalyzer.js.map +1 -0
- package/dist/core/analysis/index.d.ts +5 -0
- package/dist/core/analysis/index.d.ts.map +1 -0
- package/dist/core/analysis/index.js +5 -0
- package/dist/core/analysis/index.js.map +1 -0
- package/dist/core/analysis/inheritanceAnalyzer.d.ts +35 -0
- package/dist/core/analysis/inheritanceAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/inheritanceAnalyzer.js +115 -0
- package/dist/core/analysis/inheritanceAnalyzer.js.map +1 -0
- package/dist/core/ccp.d.ts.map +1 -1
- package/dist/core/ccp.js +3 -2
- package/dist/core/ccp.js.map +1 -1
- package/dist/core/generation/aiContextGenerator.d.ts +71 -0
- package/dist/core/generation/aiContextGenerator.d.ts.map +1 -0
- package/dist/core/generation/aiContextGenerator.js +217 -0
- package/dist/core/generation/aiContextGenerator.js.map +1 -0
- package/dist/core/generation/architectureGenerator.d.ts +17 -0
- package/dist/core/generation/architectureGenerator.d.ts.map +1 -0
- package/dist/core/generation/architectureGenerator.js +160 -0
- package/dist/core/generation/architectureGenerator.js.map +1 -0
- package/dist/core/generation/flowGenerator.d.ts +52 -0
- package/dist/core/generation/flowGenerator.d.ts.map +1 -0
- package/dist/core/generation/flowGenerator.js +164 -0
- package/dist/core/generation/flowGenerator.js.map +1 -0
- package/dist/core/generation/index.d.ts +4 -0
- package/dist/core/generation/index.d.ts.map +1 -0
- package/dist/core/generation/index.js +4 -0
- package/dist/core/generation/index.js.map +1 -0
- package/dist/core/hierarchyGenerator.d.ts.map +1 -1
- package/dist/core/hierarchyGenerator.js +3 -2
- package/dist/core/hierarchyGenerator.js.map +1 -1
- package/dist/core/parsers/index.d.ts +20 -0
- package/dist/core/parsers/index.d.ts.map +1 -0
- package/dist/core/parsers/index.js +76 -0
- package/dist/core/parsers/index.js.map +1 -0
- package/dist/core/parsers/pythonParser.d.ts +37 -0
- package/dist/core/parsers/pythonParser.d.ts.map +1 -0
- package/dist/core/parsers/pythonParser.js +229 -0
- package/dist/core/parsers/pythonParser.js.map +1 -0
- package/dist/core/parsers/typescriptParser.d.ts +54 -0
- package/dist/core/parsers/typescriptParser.d.ts.map +1 -0
- package/dist/core/parsers/typescriptParser.js +291 -0
- package/dist/core/parsers/typescriptParser.js.map +1 -0
- package/dist/core/pipeline.d.ts +42 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +172 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/semanticContexts.d.ts.map +1 -1
- package/dist/core/semanticContexts.js +23 -61
- package/dist/core/semanticContexts.js.map +1 -1
- package/dist/utils/constants.d.ts +46 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +67 -0
- package/dist/utils/constants.js.map +1 -0
- package/install.sh +143 -17
- package/package.json +1 -1
- package/run-all-tests.sh +184 -0
- package/src/analyzers/symbols.ts +12 -7
- package/src/analyzers/techStack.ts +203 -3
- package/src/commands/ai-first.ts +14 -13
- package/src/core/adapters/baseAdapter.ts +61 -12
- package/src/core/analysis/architectureDetector.ts +487 -0
- package/src/core/analysis/callGraphBuilder.ts +158 -0
- package/src/core/analysis/dependencyAnalyzer.ts +167 -0
- package/src/core/analysis/index.ts +28 -0
- package/src/core/analysis/inheritanceAnalyzer.ts +169 -0
- package/src/core/ccp.ts +3 -2
- package/src/core/generation/aiContextGenerator.ts +335 -0
- package/src/core/generation/architectureGenerator.ts +200 -0
- package/src/core/generation/flowGenerator.ts +238 -0
- package/src/core/generation/index.ts +16 -0
- package/src/core/hierarchyGenerator.ts +3 -2
- package/src/core/parsers/index.ts +99 -0
- package/src/core/parsers/pythonParser.ts +302 -0
- package/src/core/parsers/typescriptParser.ts +445 -0
- package/src/core/pipeline.ts +241 -0
- package/src/core/semanticContexts.ts +25 -67
- package/src/utils/constants.ts +78 -0
- package/tests/analysis.test.ts +283 -0
- package/tests/architectureDetector.test.ts +137 -0
- package/tests/generation.test.ts +216 -0
- package/tests/parserRegistry.test.ts +139 -0
- package/tests/pipeline.integration.test.ts +245 -0
- package/tests/pythonParser.test.ts +210 -0
- package/tests/typescriptParser.test.ts +197 -0
- package/.ai-dev/index.db +0 -0
- package/ANALISIS_COMPLETO.md +0 -424
- package/ANALISIS_MEJORAS.md +0 -327
- package/BUGS.md +0 -455
- package/PLAN_MEJORAS.md +0 -216
- package/STATUS_ADAPTADORES +0 -126
- package/TEST_RESULTS.md +0 -198
- package/TEST_RESULTS_COMPARATIVE.md +0 -159
- package/TEST_RESULTS_COMPLETE.md +0 -127
- package/TEST_RESULTS_COMPREHENSIVE.md +0 -208
- package/TEST_RESULTS_PHASE1.md +0 -420
- package/ai-context/ai_context.md +0 -130
- package/ai-context/ai_rules.md +0 -54
- package/ai-context/architecture.md +0 -136
- package/ai-context/cache.json +0 -2349
- package/ai-context/ccp/jira-123/context.json +0 -7
- package/ai-context/context/features/commands.json +0 -18
- package/ai-context/context/features/src.json +0 -61
- package/ai-context/context/features/test-projects.json +0 -69
- package/ai-context/context/flows/account.json +0 -9
- package/ai-context/context/flows/ai-first.json +0 -9
- package/ai-context/context/flows/api.json +0 -9
- package/ai-context/context/flows/auth.json +0 -13
- package/ai-context/context/flows/category.json +0 -12
- package/ai-context/context/flows/comment.json +0 -16
- package/ai-context/context/flows/dashboard.json +0 -9
- package/ai-context/context/flows/doctor.json +0 -9
- package/ai-context/context/flows/explore.json +0 -9
- package/ai-context/context/flows/login.json +0 -9
- package/ai-context/context/flows/opportunity.json +0 -9
- package/ai-context/context/flows/post.json +0 -18
- package/ai-context/context/flows/routes.json +0 -19
- package/ai-context/context/flows/user.json +0 -20
- package/ai-context/context/flows/users.json +0 -9
- package/ai-context/context/flows/views.json +0 -14
- package/ai-context/context/repo.json +0 -56
- package/ai-context/context/utils.json +0 -7
- package/ai-context/conventions.md +0 -53
- package/ai-context/dependencies.json +0 -2946
- package/ai-context/embeddings.json +0 -23828
- package/ai-context/entrypoints.md +0 -42
- package/ai-context/files.json +0 -2944
- package/ai-context/git/commit-activity.json +0 -8646
- package/ai-context/git/recent-features.json +0 -1
- package/ai-context/git/recent-files.json +0 -52
- package/ai-context/git/recent-flows.json +0 -1
- package/ai-context/graph/knowledge-graph.json +0 -44314
- package/ai-context/graph/module-graph.json +0 -866
- package/ai-context/graph/symbol-graph.json +0 -200622
- package/ai-context/graph/symbol-references.json +0 -6778
- package/ai-context/hierarchy.json +0 -20
- package/ai-context/index-state.json +0 -4340
- package/ai-context/index.db +0 -0
- package/ai-context/modules.json +0 -532
- package/ai-context/project.json +0 -30
- package/ai-context/repo_map.json +0 -5818
- package/ai-context/repo_map.md +0 -1327
- package/ai-context/schema.json +0 -5
- package/ai-context/summary.md +0 -42
- package/ai-context/symbols.json +0 -7
- package/ai-context/tech_stack.md +0 -46
- package/ai-context/tools.json +0 -10
- package/test-projects/django-app/.ai-dev/index.db +0 -0
- package/test-projects/django-app/ai-context/ai_context.md +0 -92
- package/test-projects/django-app/ai-context/ai_rules.md +0 -47
- package/test-projects/django-app/ai-context/architecture.md +0 -57
- package/test-projects/django-app/ai-context/cache.json +0 -169
- package/test-projects/django-app/ai-context/context/flows/views.json +0 -10
- package/test-projects/django-app/ai-context/conventions.md +0 -51
- package/test-projects/django-app/ai-context/dependencies.json +0 -312
- package/test-projects/django-app/ai-context/entrypoints.md +0 -4
- package/test-projects/django-app/ai-context/files.json +0 -209
- package/test-projects/django-app/ai-context/graph/knowledge-graph.json +0 -36
- package/test-projects/django-app/ai-context/graph/module-graph.json +0 -145
- package/test-projects/django-app/ai-context/graph/symbol-graph.json +0 -1488
- package/test-projects/django-app/ai-context/graph/symbol-references.json +0 -1
- package/test-projects/django-app/ai-context/index-state.json +0 -294
- package/test-projects/django-app/ai-context/index.db +0 -0
- package/test-projects/django-app/ai-context/modules.json +0 -35
- package/test-projects/django-app/ai-context/project.json +0 -11
- package/test-projects/django-app/ai-context/repo_map.json +0 -412
- package/test-projects/django-app/ai-context/repo_map.md +0 -105
- package/test-projects/django-app/ai-context/schema.json +0 -5
- package/test-projects/django-app/ai-context/summary.md +0 -15
- package/test-projects/django-app/ai-context/symbols.json +0 -1
- package/test-projects/django-app/ai-context/tech_stack.md +0 -32
- package/test-projects/django-app/ai-context/tools.json +0 -10
- package/test-projects/express-api/ai-context/ai_context.md +0 -112
- package/test-projects/express-api/ai-context/ai_rules.md +0 -50
- package/test-projects/express-api/ai-context/architecture.md +0 -62
- package/test-projects/express-api/ai-context/context/features/controllers.json +0 -13
- package/test-projects/express-api/ai-context/context/features/services.json +0 -13
- package/test-projects/express-api/ai-context/context/flows/auth.json +0 -12
- package/test-projects/express-api/ai-context/context/flows/user.json +0 -13
- package/test-projects/express-api/ai-context/conventions.md +0 -51
- package/test-projects/express-api/ai-context/dependencies.json +0 -54
- package/test-projects/express-api/ai-context/entrypoints.md +0 -17
- package/test-projects/express-api/ai-context/modules.json +0 -30
- package/test-projects/express-api/ai-context/project.json +0 -15
- package/test-projects/express-api/ai-context/repo_map.json +0 -100
- package/test-projects/express-api/ai-context/repo_map.md +0 -36
- package/test-projects/express-api/ai-context/schema.json +0 -5
- package/test-projects/express-api/ai-context/summary.md +0 -14
- package/test-projects/express-api/ai-context/symbols.json +0 -7
- package/test-projects/express-api/ai-context/tech_stack.md +0 -38
- package/test-projects/express-api/ai-context/tools.json +0 -10
- package/test-projects/fastapi-app/.ai-dev/index.db +0 -0
- package/test-projects/fastapi-app/ai-context/ai_context.md +0 -89
- package/test-projects/fastapi-app/ai-context/ai_rules.md +0 -47
- package/test-projects/fastapi-app/ai-context/architecture.md +0 -39
- package/test-projects/fastapi-app/ai-context/cache.json +0 -125
- package/test-projects/fastapi-app/ai-context/conventions.md +0 -51
- package/test-projects/fastapi-app/ai-context/dependencies.json +0 -244
- package/test-projects/fastapi-app/ai-context/entrypoints.md +0 -4
- package/test-projects/fastapi-app/ai-context/files.json +0 -154
- package/test-projects/fastapi-app/ai-context/graph/knowledge-graph.json +0 -15
- package/test-projects/fastapi-app/ai-context/graph/module-graph.json +0 -78
- package/test-projects/fastapi-app/ai-context/graph/symbol-graph.json +0 -1724
- package/test-projects/fastapi-app/ai-context/graph/symbol-references.json +0 -51
- package/test-projects/fastapi-app/ai-context/index-state.json +0 -217
- package/test-projects/fastapi-app/ai-context/index.db +0 -0
- package/test-projects/fastapi-app/ai-context/modules.json +0 -16
- package/test-projects/fastapi-app/ai-context/project.json +0 -9
- package/test-projects/fastapi-app/ai-context/repo_map.json +0 -298
- package/test-projects/fastapi-app/ai-context/repo_map.md +0 -74
- package/test-projects/fastapi-app/ai-context/schema.json +0 -5
- package/test-projects/fastapi-app/ai-context/summary.md +0 -12
- package/test-projects/fastapi-app/ai-context/symbols.json +0 -1
- package/test-projects/fastapi-app/ai-context/tech_stack.md +0 -32
- package/test-projects/fastapi-app/ai-context/tools.json +0 -10
- package/test-projects/flask-app/.ai-dev/index.db +0 -0
- package/test-projects/flask-app/ai-context/ai_context.md +0 -94
- package/test-projects/flask-app/ai-context/ai_rules.md +0 -47
- package/test-projects/flask-app/ai-context/architecture.md +0 -49
- package/test-projects/flask-app/ai-context/cache.json +0 -157
- package/test-projects/flask-app/ai-context/context/features/app.json +0 -25
- package/test-projects/flask-app/ai-context/context/flows/routes.json +0 -14
- package/test-projects/flask-app/ai-context/conventions.md +0 -51
- package/test-projects/flask-app/ai-context/dependencies.json +0 -298
- package/test-projects/flask-app/ai-context/entrypoints.md +0 -4
- package/test-projects/flask-app/ai-context/files.json +0 -194
- package/test-projects/flask-app/ai-context/graph/knowledge-graph.json +0 -60
- package/test-projects/flask-app/ai-context/graph/module-graph.json +0 -95
- package/test-projects/flask-app/ai-context/graph/symbol-graph.json +0 -1448
- package/test-projects/flask-app/ai-context/graph/symbol-references.json +0 -45
- package/test-projects/flask-app/ai-context/index-state.json +0 -273
- package/test-projects/flask-app/ai-context/index.db +0 -0
- package/test-projects/flask-app/ai-context/modules.json +0 -21
- package/test-projects/flask-app/ai-context/project.json +0 -13
- package/test-projects/flask-app/ai-context/repo_map.json +0 -400
- package/test-projects/flask-app/ai-context/repo_map.md +0 -98
- package/test-projects/flask-app/ai-context/schema.json +0 -5
- package/test-projects/flask-app/ai-context/summary.md +0 -13
- package/test-projects/flask-app/ai-context/symbols.json +0 -1
- package/test-projects/flask-app/ai-context/tech_stack.md +0 -32
- package/test-projects/flask-app/ai-context/tools.json +0 -10
- package/test-projects/laravel-app/.ai-dev/index.db +0 -0
- package/test-projects/laravel-app/ai-context/ai_context.md +0 -97
- package/test-projects/laravel-app/ai-context/ai_rules.md +0 -47
- package/test-projects/laravel-app/ai-context/architecture.md +0 -60
- package/test-projects/laravel-app/ai-context/cache.json +0 -161
- package/test-projects/laravel-app/ai-context/context/features/app.json +0 -21
- package/test-projects/laravel-app/ai-context/context/flows/.json +0 -9
- package/test-projects/laravel-app/ai-context/context/flows/category.json +0 -12
- package/test-projects/laravel-app/ai-context/context/flows/comment.json +0 -12
- package/test-projects/laravel-app/ai-context/context/flows/post.json +0 -12
- package/test-projects/laravel-app/ai-context/context/flows/unnamed.json +0 -9
- package/test-projects/laravel-app/ai-context/conventions.md +0 -51
- package/test-projects/laravel-app/ai-context/dependencies.json +0 -6
- package/test-projects/laravel-app/ai-context/entrypoints.md +0 -4
- package/test-projects/laravel-app/ai-context/files.json +0 -199
- package/test-projects/laravel-app/ai-context/graph/knowledge-graph.json +0 -98
- package/test-projects/laravel-app/ai-context/graph/module-graph.json +0 -30
- package/test-projects/laravel-app/ai-context/graph/symbol-graph.json +0 -5
- package/test-projects/laravel-app/ai-context/graph/symbol-references.json +0 -1
- package/test-projects/laravel-app/ai-context/index-state.json +0 -280
- package/test-projects/laravel-app/ai-context/index.db +0 -0
- package/test-projects/laravel-app/ai-context/modules.json +0 -29
- package/test-projects/laravel-app/ai-context/project.json +0 -17
- package/test-projects/laravel-app/ai-context/repo_map.json +0 -419
- package/test-projects/laravel-app/ai-context/repo_map.md +0 -106
- package/test-projects/laravel-app/ai-context/schema.json +0 -5
- package/test-projects/laravel-app/ai-context/summary.md +0 -15
- package/test-projects/laravel-app/ai-context/symbols.json +0 -1
- package/test-projects/laravel-app/ai-context/tech_stack.md +0 -34
- package/test-projects/laravel-app/ai-context/tools.json +0 -10
- package/test-projects/nestjs-backend/.ai-dev/index.db +0 -0
- package/test-projects/nestjs-backend/ai-context/ai_context.md +0 -111
- package/test-projects/nestjs-backend/ai-context/ai_rules.md +0 -52
- package/test-projects/nestjs-backend/ai-context/architecture.md +0 -49
- package/test-projects/nestjs-backend/ai-context/cache.json +0 -169
- package/test-projects/nestjs-backend/ai-context/context/features/src.json +0 -23
- package/test-projects/nestjs-backend/ai-context/context/flows/auth.controller.json +0 -14
- package/test-projects/nestjs-backend/ai-context/context/flows/auth.json +0 -10
- package/test-projects/nestjs-backend/ai-context/context/flows/users..json +0 -10
- package/test-projects/nestjs-backend/ai-context/context/flows/users.controller.json +0 -14
- package/test-projects/nestjs-backend/ai-context/context/flows/users.json +0 -10
- package/test-projects/nestjs-backend/ai-context/conventions.md +0 -52
- package/test-projects/nestjs-backend/ai-context/dependencies.json +0 -152
- package/test-projects/nestjs-backend/ai-context/entrypoints.md +0 -18
- package/test-projects/nestjs-backend/ai-context/files.json +0 -209
- package/test-projects/nestjs-backend/ai-context/graph/knowledge-graph.json +0 -132
- package/test-projects/nestjs-backend/ai-context/graph/module-graph.json +0 -29
- package/test-projects/nestjs-backend/ai-context/graph/symbol-graph.json +0 -304
- package/test-projects/nestjs-backend/ai-context/graph/symbol-references.json +0 -5
- package/test-projects/nestjs-backend/ai-context/index-state.json +0 -294
- package/test-projects/nestjs-backend/ai-context/index.db +0 -0
- package/test-projects/nestjs-backend/ai-context/modules.json +0 -19
- package/test-projects/nestjs-backend/ai-context/project.json +0 -18
- package/test-projects/nestjs-backend/ai-context/repo_map.json +0 -427
- package/test-projects/nestjs-backend/ai-context/repo_map.md +0 -104
- package/test-projects/nestjs-backend/ai-context/schema.json +0 -5
- package/test-projects/nestjs-backend/ai-context/summary.md +0 -13
- package/test-projects/nestjs-backend/ai-context/symbols.json +0 -1
- package/test-projects/nestjs-backend/ai-context/tech_stack.md +0 -38
- package/test-projects/nestjs-backend/ai-context/tools.json +0 -10
- package/test-projects/python-cli/.ai-dev/index.db +0 -0
- package/test-projects/python-cli/ai-context/ai_context.md +0 -95
- package/test-projects/python-cli/ai-context/ai_rules.md +0 -47
- package/test-projects/python-cli/ai-context/architecture.md +0 -55
- package/test-projects/python-cli/ai-context/cache.json +0 -149
- package/test-projects/python-cli/ai-context/context/features/cli.json +0 -16
- package/test-projects/python-cli/ai-context/context/flows/list_.json +0 -9
- package/test-projects/python-cli/ai-context/context/flows/remove_.json +0 -9
- package/test-projects/python-cli/ai-context/conventions.md +0 -51
- package/test-projects/python-cli/ai-context/dependencies.json +0 -66
- package/test-projects/python-cli/ai-context/entrypoints.md +0 -4
- package/test-projects/python-cli/ai-context/files.json +0 -184
- package/test-projects/python-cli/ai-context/graph/knowledge-graph.json +0 -83
- package/test-projects/python-cli/ai-context/graph/module-graph.json +0 -31
- package/test-projects/python-cli/ai-context/graph/symbol-graph.json +0 -358
- package/test-projects/python-cli/ai-context/graph/symbol-references.json +0 -11
- package/test-projects/python-cli/ai-context/index-state.json +0 -259
- package/test-projects/python-cli/ai-context/index.db +0 -0
- package/test-projects/python-cli/ai-context/modules.json +0 -21
- package/test-projects/python-cli/ai-context/project.json +0 -15
- package/test-projects/python-cli/ai-context/repo_map.json +0 -367
- package/test-projects/python-cli/ai-context/repo_map.md +0 -93
- package/test-projects/python-cli/ai-context/schema.json +0 -5
- package/test-projects/python-cli/ai-context/summary.md +0 -14
- package/test-projects/python-cli/ai-context/symbols.json +0 -1
- package/test-projects/python-cli/ai-context/tech_stack.md +0 -32
- package/test-projects/python-cli/ai-context/tools.json +0 -10
- package/test-projects/rails-app/.ai-dev/index.db +0 -0
- package/test-projects/rails-app/ai-context/ai_context.md +0 -94
- package/test-projects/rails-app/ai-context/ai_rules.md +0 -47
- package/test-projects/rails-app/ai-context/architecture.md +0 -49
- package/test-projects/rails-app/ai-context/cache.json +0 -193
- package/test-projects/rails-app/ai-context/context/features/app.json +0 -24
- package/test-projects/rails-app/ai-context/context/features/config.json +0 -13
- package/test-projects/rails-app/ai-context/context/flows/application.json +0 -9
- package/test-projects/rails-app/ai-context/context/flows/application_.json +0 -9
- package/test-projects/rails-app/ai-context/context/flows/comments.json +0 -11
- package/test-projects/rails-app/ai-context/context/flows/comments_.json +0 -11
- package/test-projects/rails-app/ai-context/context/flows/posts.json +0 -11
- package/test-projects/rails-app/ai-context/context/flows/posts_.json +0 -11
- package/test-projects/rails-app/ai-context/context/flows/routes.json +0 -9
- package/test-projects/rails-app/ai-context/context/flows/users.json +0 -11
- package/test-projects/rails-app/ai-context/context/flows/users_.json +0 -11
- package/test-projects/rails-app/ai-context/conventions.md +0 -51
- package/test-projects/rails-app/ai-context/dependencies.json +0 -6
- package/test-projects/rails-app/ai-context/entrypoints.md +0 -4
- package/test-projects/rails-app/ai-context/files.json +0 -239
- package/test-projects/rails-app/ai-context/graph/knowledge-graph.json +0 -130
- package/test-projects/rails-app/ai-context/graph/module-graph.json +0 -27
- package/test-projects/rails-app/ai-context/graph/symbol-graph.json +0 -5
- package/test-projects/rails-app/ai-context/graph/symbol-references.json +0 -1
- package/test-projects/rails-app/ai-context/index-state.json +0 -336
- package/test-projects/rails-app/ai-context/index.db +0 -0
- package/test-projects/rails-app/ai-context/modules.json +0 -26
- package/test-projects/rails-app/ai-context/project.json +0 -22
- package/test-projects/rails-app/ai-context/repo_map.json +0 -486
- package/test-projects/rails-app/ai-context/repo_map.md +0 -117
- package/test-projects/rails-app/ai-context/schema.json +0 -5
- package/test-projects/rails-app/ai-context/summary.md +0 -13
- package/test-projects/rails-app/ai-context/symbols.json +0 -1
- package/test-projects/rails-app/ai-context/tech_stack.md +0 -32
- package/test-projects/rails-app/ai-context/tools.json +0 -10
- package/test-projects/react-app/.ai-dev/index.db +0 -0
- package/test-projects/react-app/ai-context/ai_context.md +0 -96
- package/test-projects/react-app/ai-context/ai_rules.md +0 -49
- package/test-projects/react-app/ai-context/architecture.md +0 -39
- package/test-projects/react-app/ai-context/cache.json +0 -153
- package/test-projects/react-app/ai-context/context/features/src.json +0 -18
- package/test-projects/react-app/ai-context/context/flows/UsersPage.json +0 -14
- package/test-projects/react-app/ai-context/context/flows/dashboard.json +0 -9
- package/test-projects/react-app/ai-context/context/flows/login.json +0 -9
- package/test-projects/react-app/ai-context/context/flows/users.json +0 -9
- package/test-projects/react-app/ai-context/conventions.md +0 -52
- package/test-projects/react-app/ai-context/dependencies.json +0 -128
- package/test-projects/react-app/ai-context/entrypoints.md +0 -4
- package/test-projects/react-app/ai-context/files.json +0 -189
- package/test-projects/react-app/ai-context/graph/knowledge-graph.json +0 -112
- package/test-projects/react-app/ai-context/graph/module-graph.json +0 -31
- package/test-projects/react-app/ai-context/graph/symbol-graph.json +0 -868
- package/test-projects/react-app/ai-context/graph/symbol-references.json +0 -31
- package/test-projects/react-app/ai-context/index-state.json +0 -266
- package/test-projects/react-app/ai-context/index.db +0 -0
- package/test-projects/react-app/ai-context/modules.json +0 -17
- package/test-projects/react-app/ai-context/project.json +0 -16
- package/test-projects/react-app/ai-context/repo_map.json +0 -391
- package/test-projects/react-app/ai-context/repo_map.md +0 -94
- package/test-projects/react-app/ai-context/schema.json +0 -5
- package/test-projects/react-app/ai-context/summary.md +0 -13
- package/test-projects/react-app/ai-context/symbols.json +0 -1
- package/test-projects/react-app/ai-context/tech_stack.md +0 -39
- package/test-projects/react-app/ai-context/tools.json +0 -10
- package/test-projects/salesforce-cli/.ai-dev/index.db +0 -0
- package/test-projects/salesforce-cli/ai-context/ai_context.md +0 -89
- package/test-projects/salesforce-cli/ai-context/ai_rules.md +0 -47
- package/test-projects/salesforce-cli/ai-context/architecture.md +0 -39
- package/test-projects/salesforce-cli/ai-context/cache.json +0 -125
- package/test-projects/salesforce-cli/ai-context/context/features/force-app.json +0 -14
- package/test-projects/salesforce-cli/ai-context/context/flows/account.json +0 -9
- package/test-projects/salesforce-cli/ai-context/context/flows/opportunity.json +0 -9
- package/test-projects/salesforce-cli/ai-context/conventions.md +0 -51
- package/test-projects/salesforce-cli/ai-context/dependencies.json +0 -6
- package/test-projects/salesforce-cli/ai-context/entrypoints.md +0 -4
- package/test-projects/salesforce-cli/ai-context/files.json +0 -154
- package/test-projects/salesforce-cli/ai-context/graph/knowledge-graph.json +0 -64
- package/test-projects/salesforce-cli/ai-context/graph/module-graph.json +0 -13
- package/test-projects/salesforce-cli/ai-context/graph/symbol-graph.json +0 -148
- package/test-projects/salesforce-cli/ai-context/graph/symbol-references.json +0 -1
- package/test-projects/salesforce-cli/ai-context/index-state.json +0 -217
- package/test-projects/salesforce-cli/ai-context/index.db +0 -0
- package/test-projects/salesforce-cli/ai-context/modules.json +0 -12
- package/test-projects/salesforce-cli/ai-context/project.json +0 -14
- package/test-projects/salesforce-cli/ai-context/repo_map.json +0 -328
- package/test-projects/salesforce-cli/ai-context/repo_map.md +0 -80
- package/test-projects/salesforce-cli/ai-context/schema.json +0 -5
- package/test-projects/salesforce-cli/ai-context/summary.md +0 -13
- package/test-projects/salesforce-cli/ai-context/symbols.json +0 -1
- package/test-projects/salesforce-cli/ai-context/tech_stack.md +0 -31
- package/test-projects/salesforce-cli/ai-context/tools.json +0 -10
- package/test-projects/spring-boot-app/.ai-dev/index.db +0 -0
- package/test-projects/spring-boot-app/ai-context/ai_context.md +0 -91
- package/test-projects/spring-boot-app/ai-context/ai_rules.md +0 -48
- package/test-projects/spring-boot-app/ai-context/architecture.md +0 -39
- package/test-projects/spring-boot-app/ai-context/cache.json +0 -173
- package/test-projects/spring-boot-app/ai-context/context/features/src.json +0 -26
- package/test-projects/spring-boot-app/ai-context/context/flows/PostController.json +0 -19
- package/test-projects/spring-boot-app/ai-context/context/flows/UserController.json +0 -19
- package/test-projects/spring-boot-app/ai-context/context/flows/comment.json +0 -11
- package/test-projects/spring-boot-app/ai-context/context/flows/post.json +0 -14
- package/test-projects/spring-boot-app/ai-context/context/flows/user.json +0 -14
- package/test-projects/spring-boot-app/ai-context/conventions.md +0 -52
- package/test-projects/spring-boot-app/ai-context/dependencies.json +0 -326
- package/test-projects/spring-boot-app/ai-context/entrypoints.md +0 -4
- package/test-projects/spring-boot-app/ai-context/files.json +0 -214
- package/test-projects/spring-boot-app/ai-context/graph/knowledge-graph.json +0 -231
- package/test-projects/spring-boot-app/ai-context/graph/module-graph.json +0 -22
- package/test-projects/spring-boot-app/ai-context/graph/symbol-graph.json +0 -794
- package/test-projects/spring-boot-app/ai-context/graph/symbol-references.json +0 -70
- package/test-projects/spring-boot-app/ai-context/index-state.json +0 -301
- package/test-projects/spring-boot-app/ai-context/index.db +0 -0
- package/test-projects/spring-boot-app/ai-context/modules.json +0 -21
- package/test-projects/spring-boot-app/ai-context/project.json +0 -17
- package/test-projects/spring-boot-app/ai-context/repo_map.json +0 -461
- package/test-projects/spring-boot-app/ai-context/repo_map.md +0 -109
- package/test-projects/spring-boot-app/ai-context/schema.json +0 -5
- package/test-projects/spring-boot-app/ai-context/summary.md +0 -12
- package/test-projects/spring-boot-app/ai-context/symbols.json +0 -1
- package/test-projects/spring-boot-app/ai-context/tech_stack.md +0 -32
- package/test-projects/spring-boot-app/ai-context/tools.json +0 -10
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { pythonParser } from "../src/core/parsers/pythonParser";
|
|
3
|
+
|
|
4
|
+
describe("Python Parser", () => {
|
|
5
|
+
it("should parse a simple class", () => {
|
|
6
|
+
const source = `
|
|
7
|
+
class UserService:
|
|
8
|
+
def __init__(self):
|
|
9
|
+
self.users = []
|
|
10
|
+
|
|
11
|
+
def find_by_id(self, id: str) -> dict:
|
|
12
|
+
return next((u for u in self.users if u["id"] == id), None)
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
16
|
+
|
|
17
|
+
expect(result.symbols).toHaveLength(1);
|
|
18
|
+
expect(result.symbols[0].name).toBe("UserService");
|
|
19
|
+
expect(result.symbols[0].type).toBe("class");
|
|
20
|
+
expect(result.symbols[0].isExported).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("should parse class with inheritance", () => {
|
|
24
|
+
const source = `
|
|
25
|
+
class BaseService:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
class UserService(BaseService):
|
|
29
|
+
def get_users(self):
|
|
30
|
+
return []
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
34
|
+
|
|
35
|
+
const userService = result.symbols.find(s => s.name === "UserService");
|
|
36
|
+
expect(userService).toBeDefined();
|
|
37
|
+
expect(userService?.inheritance).toContain("BaseService");
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("should parse functions", () => {
|
|
41
|
+
const source = `
|
|
42
|
+
def calculate_total(items: list) -> float:
|
|
43
|
+
return sum(item["price"] for item in items)
|
|
44
|
+
|
|
45
|
+
async def fetch_user(user_id: str):
|
|
46
|
+
return {"id": user_id}
|
|
47
|
+
|
|
48
|
+
async def process_payment(amount: float, currency: str = "USD"):
|
|
49
|
+
return {"status": "success"}
|
|
50
|
+
`;
|
|
51
|
+
|
|
52
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
53
|
+
|
|
54
|
+
expect(result.symbols).toHaveLength(3);
|
|
55
|
+
|
|
56
|
+
const calculateTotal = result.symbols.find(s => s.name === "calculate_total");
|
|
57
|
+
expect(calculateTotal).toBeDefined();
|
|
58
|
+
expect(calculateTotal?.type).toBe("function");
|
|
59
|
+
expect(calculateTotal?.parameters).toHaveLength(1);
|
|
60
|
+
expect(calculateTotal?.parameters?.[0].name).toBe("items");
|
|
61
|
+
expect(calculateTotal?.parameters?.[0].type).toBe("list");
|
|
62
|
+
|
|
63
|
+
const fetchUser = result.symbols.find(s => s.name === "fetch_user");
|
|
64
|
+
expect(fetchUser?.isAsync).toBe(true);
|
|
65
|
+
|
|
66
|
+
const processPayment = result.symbols.find(s => s.name === "process_payment");
|
|
67
|
+
expect(processPayment?.parameters).toHaveLength(2);
|
|
68
|
+
expect(processPayment?.parameters?.[1].name).toBe("currency");
|
|
69
|
+
expect(processPayment?.parameters?.[1].default).toBe("\"USD\"");
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("should parse imports", () => {
|
|
73
|
+
const source = `
|
|
74
|
+
import os
|
|
75
|
+
import sys
|
|
76
|
+
from typing import List, Optional
|
|
77
|
+
from datetime import datetime as dt
|
|
78
|
+
from django.db import models
|
|
79
|
+
|
|
80
|
+
class User(models.Model):
|
|
81
|
+
name = models.CharField(max_length=100)
|
|
82
|
+
`;
|
|
83
|
+
|
|
84
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
85
|
+
|
|
86
|
+
expect(result.imports).toHaveLength(5);
|
|
87
|
+
|
|
88
|
+
const typingImport = result.imports.find(i => i.module === "typing");
|
|
89
|
+
expect(typingImport).toBeDefined();
|
|
90
|
+
expect(typingImport?.names).toContain("List");
|
|
91
|
+
expect(typingImport?.names).toContain("Optional");
|
|
92
|
+
|
|
93
|
+
const datetimeImport = result.imports.find(i => i.module === "datetime");
|
|
94
|
+
expect(datetimeImport?.names).toContain("datetime");
|
|
95
|
+
|
|
96
|
+
const djangoImport = result.imports.find(i => i.module === "django.db");
|
|
97
|
+
expect(djangoImport?.names).toContain("models");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("should parse decorators", () => {
|
|
101
|
+
const source = `
|
|
102
|
+
@app.route("/users")
|
|
103
|
+
@login_required
|
|
104
|
+
def get_users():
|
|
105
|
+
return []
|
|
106
|
+
|
|
107
|
+
@dataclass
|
|
108
|
+
class UserDTO:
|
|
109
|
+
name: str
|
|
110
|
+
email: str
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def full_name(self):
|
|
114
|
+
return f"{self.first_name} {self.last_name}"
|
|
115
|
+
`;
|
|
116
|
+
|
|
117
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
118
|
+
|
|
119
|
+
const getUsers = result.symbols.find(s => s.name === "get_users");
|
|
120
|
+
expect(getUsers?.decorators).toContain("app.route");
|
|
121
|
+
expect(getUsers?.decorators).toContain("login_required");
|
|
122
|
+
|
|
123
|
+
const userDto = result.symbols.find(s => s.name === "UserDTO");
|
|
124
|
+
expect(userDto?.decorators).toContain("dataclass");
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("should parse docstrings", () => {
|
|
128
|
+
const source = `
|
|
129
|
+
class AuthService:
|
|
130
|
+
"""Service for managing user authentication."""
|
|
131
|
+
|
|
132
|
+
def login(self, email: str, password: str) -> str:
|
|
133
|
+
"""Authenticate a user and return JWT token."""
|
|
134
|
+
return "token"
|
|
135
|
+
`;
|
|
136
|
+
|
|
137
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
138
|
+
|
|
139
|
+
const authService = result.symbols.find(s => s.name === "AuthService");
|
|
140
|
+
expect(authService?.docstring).toContain("Service for managing user authentication");
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("should handle complex Django model", () => {
|
|
144
|
+
const source = `
|
|
145
|
+
from django.db import models
|
|
146
|
+
from django.contrib.auth.models import AbstractUser
|
|
147
|
+
|
|
148
|
+
class User(AbstractUser):
|
|
149
|
+
"""Custom user model with additional fields."""
|
|
150
|
+
|
|
151
|
+
phone = models.CharField(max_length=20, blank=True)
|
|
152
|
+
bio = models.TextField(max_length=500, blank=True)
|
|
153
|
+
|
|
154
|
+
class Meta:
|
|
155
|
+
db_table = "users"
|
|
156
|
+
|
|
157
|
+
def get_full_name(self) -> str:
|
|
158
|
+
return f"{self.first_name} {self.last_name}"
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def display_name(self) -> str:
|
|
162
|
+
return self.username or self.email
|
|
163
|
+
`;
|
|
164
|
+
|
|
165
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
166
|
+
|
|
167
|
+
const user = result.symbols.find(s => s.name === "User");
|
|
168
|
+
expect(user).toBeDefined();
|
|
169
|
+
expect(user?.type).toBe("class");
|
|
170
|
+
expect(user?.inheritance).toContain("AbstractUser");
|
|
171
|
+
expect(user?.docstring).toContain("Custom user model");
|
|
172
|
+
|
|
173
|
+
expect(result.imports).toHaveLength(2);
|
|
174
|
+
expect(result.imports.map(i => i.module)).toContain("django.db");
|
|
175
|
+
expect(result.imports.map(i => i.module)).toContain("django.contrib.auth.models");
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("should parse Flask routes", () => {
|
|
179
|
+
const source = `
|
|
180
|
+
from flask import Flask, request, jsonify
|
|
181
|
+
|
|
182
|
+
app = Flask(__name__)
|
|
183
|
+
|
|
184
|
+
@app.route("/api/users", methods=["GET"])
|
|
185
|
+
def list_users():
|
|
186
|
+
return jsonify([])
|
|
187
|
+
|
|
188
|
+
@app.route("/api/users", methods=["POST"])
|
|
189
|
+
def create_user():
|
|
190
|
+
data = request.get_json()
|
|
191
|
+
return jsonify({"id": 1}), 201
|
|
192
|
+
|
|
193
|
+
@app.route("/api/users/<int:user_id>", methods=["GET"])
|
|
194
|
+
def get_user(user_id: int):
|
|
195
|
+
return jsonify({"id": user_id})
|
|
196
|
+
`;
|
|
197
|
+
|
|
198
|
+
const result = pythonParser.parseFile("test.py", source);
|
|
199
|
+
|
|
200
|
+
const listUsers = result.symbols.find(s => s.name === "list_users");
|
|
201
|
+
expect(listUsers?.decorators).toContain("app.route");
|
|
202
|
+
|
|
203
|
+
const createUser = result.symbols.find(s => s.name === "create_user");
|
|
204
|
+
expect(createUser).toBeDefined();
|
|
205
|
+
|
|
206
|
+
const getUser = result.symbols.find(s => s.name === "get_user");
|
|
207
|
+
expect(getUser?.parameters?.[0].name).toBe("user_id");
|
|
208
|
+
expect(getUser?.parameters?.[0].type).toBe("int");
|
|
209
|
+
});
|
|
210
|
+
});
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { typescriptParser } from "../src/core/parsers/typescriptParser";
|
|
3
|
+
|
|
4
|
+
describe("TypeScript Parser", () => {
|
|
5
|
+
it("should parse a simple class", () => {
|
|
6
|
+
const source = `
|
|
7
|
+
export class UserService {
|
|
8
|
+
private users: User[] = [];
|
|
9
|
+
|
|
10
|
+
async findById(id: string): Promise<User | null> {
|
|
11
|
+
return this.users.find(u => u.id === id) || null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
17
|
+
|
|
18
|
+
expect(result.symbols).toHaveLength(1);
|
|
19
|
+
expect(result.symbols[0].name).toBe("UserService");
|
|
20
|
+
expect(result.symbols[0].type).toBe("class");
|
|
21
|
+
expect(result.symbols[0].isExported).toBe(true);
|
|
22
|
+
expect(result.symbols[0].members).toHaveLength(2);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("should parse interfaces", () => {
|
|
26
|
+
const source = `
|
|
27
|
+
export interface User {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
email: string;
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
|
|
34
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
35
|
+
|
|
36
|
+
expect(result.symbols).toHaveLength(1);
|
|
37
|
+
expect(result.symbols[0].name).toBe("User");
|
|
38
|
+
expect(result.symbols[0].type).toBe("interface");
|
|
39
|
+
expect(result.symbols[0].members).toHaveLength(3);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("should parse functions", () => {
|
|
43
|
+
const source = `
|
|
44
|
+
export async function fetchUser(id: string): Promise<User> {
|
|
45
|
+
return { id, name: "Test" };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function internalHelper(): void {
|
|
49
|
+
console.log("helper");
|
|
50
|
+
}
|
|
51
|
+
`;
|
|
52
|
+
|
|
53
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
54
|
+
|
|
55
|
+
expect(result.symbols).toHaveLength(2);
|
|
56
|
+
expect(result.symbols[0].name).toBe("fetchUser");
|
|
57
|
+
expect(result.symbols[0].type).toBe("function");
|
|
58
|
+
expect(result.symbols[0].isExported).toBe(true);
|
|
59
|
+
expect(result.symbols[1].name).toBe("internalHelper");
|
|
60
|
+
expect(result.symbols[1].isExported).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("should parse class with inheritance", () => {
|
|
64
|
+
const source = `
|
|
65
|
+
class BaseController {}
|
|
66
|
+
interface IController {}
|
|
67
|
+
|
|
68
|
+
export class UserController extends BaseController implements IController {
|
|
69
|
+
async getUsers() {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`;
|
|
74
|
+
|
|
75
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
76
|
+
|
|
77
|
+
const userController = result.symbols.find(s => s.name === "UserController");
|
|
78
|
+
expect(userController).toBeDefined();
|
|
79
|
+
expect(userController?.heritage?.extends).toContain("BaseController");
|
|
80
|
+
expect(userController?.heritage?.implements).toContain("IController");
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("should parse imports", () => {
|
|
84
|
+
const source = `
|
|
85
|
+
import express from "express";
|
|
86
|
+
import { Request, Response } from "express";
|
|
87
|
+
import * as path from "path";
|
|
88
|
+
|
|
89
|
+
export class Server {
|
|
90
|
+
app = express();
|
|
91
|
+
}
|
|
92
|
+
`;
|
|
93
|
+
|
|
94
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
95
|
+
|
|
96
|
+
expect(result.imports).toHaveLength(4);
|
|
97
|
+
expect(result.imports[0]).toEqual({ name: "express", module: "express", isDefault: true });
|
|
98
|
+
expect(result.imports[1]).toEqual({ name: "Request", module: "express", isDefault: false });
|
|
99
|
+
expect(result.imports[2]).toEqual({ name: "Response", module: "express", isDefault: false });
|
|
100
|
+
expect(result.imports[3]).toEqual({ name: "path", module: "path", isNamespace: true });
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it("should parse enums", () => {
|
|
104
|
+
const source = `
|
|
105
|
+
export enum UserRole {
|
|
106
|
+
ADMIN = "admin",
|
|
107
|
+
USER = "user",
|
|
108
|
+
GUEST = "guest"
|
|
109
|
+
}
|
|
110
|
+
`;
|
|
111
|
+
|
|
112
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
113
|
+
|
|
114
|
+
expect(result.symbols).toHaveLength(1);
|
|
115
|
+
expect(result.symbols[0].name).toBe("UserRole");
|
|
116
|
+
expect(result.symbols[0].type).toBe("enum");
|
|
117
|
+
expect(result.symbols[0].isExported).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it("should parse type aliases", () => {
|
|
121
|
+
const source = `
|
|
122
|
+
export type UserId = string;
|
|
123
|
+
export type Maybe<T> = T | null;
|
|
124
|
+
`;
|
|
125
|
+
|
|
126
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
127
|
+
|
|
128
|
+
expect(result.symbols).toHaveLength(2);
|
|
129
|
+
expect(result.symbols[0].type).toBe("type");
|
|
130
|
+
expect(result.symbols[1].type).toBe("type");
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("should extract JSDoc comments", () => {
|
|
134
|
+
const source = `
|
|
135
|
+
/**
|
|
136
|
+
* Service for managing user authentication
|
|
137
|
+
*/
|
|
138
|
+
export class AuthService {
|
|
139
|
+
async login(email: string, password: string): Promise<string> {
|
|
140
|
+
return "token";
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
`;
|
|
144
|
+
|
|
145
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
146
|
+
|
|
147
|
+
expect(result.symbols[0].jsDoc).toBeDefined();
|
|
148
|
+
expect(result.symbols[0].jsDoc).toContain("Service for managing user authentication");
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it("should handle complex real-world TypeScript", () => {
|
|
152
|
+
const source = `
|
|
153
|
+
import { Injectable } from "@nestjs/common";
|
|
154
|
+
import { Repository } from "typeorm";
|
|
155
|
+
import { User } from "./user.entity";
|
|
156
|
+
|
|
157
|
+
@Injectable()
|
|
158
|
+
export class UserService {
|
|
159
|
+
constructor(private readonly userRepo: Repository<User>) {}
|
|
160
|
+
|
|
161
|
+
async findByEmail(email: string): Promise<User | null> {
|
|
162
|
+
return this.userRepo.findOne({ where: { email } });
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async create(userData: CreateUserDto): Promise<User> {
|
|
166
|
+
const user = this.userRepo.create(userData);
|
|
167
|
+
return this.userRepo.save(user);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export interface CreateUserDto {
|
|
172
|
+
email: string;
|
|
173
|
+
password: string;
|
|
174
|
+
name: string;
|
|
175
|
+
}
|
|
176
|
+
`;
|
|
177
|
+
|
|
178
|
+
const result = typescriptParser.parseFile("test.ts", source);
|
|
179
|
+
|
|
180
|
+
expect(result.symbols.length).toBeGreaterThanOrEqual(2);
|
|
181
|
+
|
|
182
|
+
const userService = result.symbols.find(s => s.name === "UserService");
|
|
183
|
+
expect(userService).toBeDefined();
|
|
184
|
+
expect(userService?.type).toBe("class");
|
|
185
|
+
expect(userService?.modifiers).toContain("export");
|
|
186
|
+
expect(userService?.members?.length).toBeGreaterThanOrEqual(2);
|
|
187
|
+
|
|
188
|
+
const createUserDto = result.symbols.find(s => s.name === "CreateUserDto");
|
|
189
|
+
expect(createUserDto).toBeDefined();
|
|
190
|
+
expect(createUserDto?.type).toBe("interface");
|
|
191
|
+
|
|
192
|
+
expect(result.imports).toHaveLength(3);
|
|
193
|
+
expect(result.imports.map(i => i.name)).toContain("Injectable");
|
|
194
|
+
expect(result.imports.map(i => i.name)).toContain("Repository");
|
|
195
|
+
expect(result.imports.map(i => i.name)).toContain("User");
|
|
196
|
+
});
|
|
197
|
+
});
|
package/.ai-dev/index.db
DELETED
|
Binary file
|