ai-first-cli 1.1.1 → 1.1.2
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 +78 -0
- package/README.es.md +137 -1
- package/README.md +136 -4
- package/ai/ai_context.md +2 -2
- package/ai/architecture.md +3 -3
- package/ai/cache.json +85 -57
- package/ai/ccp/jira-123/context.json +7 -0
- package/ai/context/repo.json +56 -0
- package/ai/context/utils.json +7 -0
- package/ai/dependencies.json +51 -1026
- package/ai/files.json +195 -3
- package/ai/git/commit-activity.json +8646 -0
- package/ai/git/recent-features.json +1 -0
- package/ai/git/recent-files.json +52 -0
- package/ai/git/recent-flows.json +1 -0
- package/ai/graph/knowledge-graph.json +43643 -0
- package/ai/graph/module-graph.json +4 -0
- package/ai/graph/symbol-graph.json +3307 -879
- package/ai/graph/symbol-references.json +119 -32
- package/ai/index-state.json +843 -188
- package/ai/index.db +0 -0
- package/ai/modules.json +4 -0
- package/ai/repo-map.json +81 -17
- package/ai/repo_map.json +81 -17
- package/ai/repo_map.md +21 -7
- package/ai/summary.md +5 -5
- package/ai/symbols.json +1 -20287
- package/dist/analyzers/androidResources.d.ts +23 -0
- package/dist/analyzers/androidResources.d.ts.map +1 -0
- package/dist/analyzers/androidResources.js +93 -0
- package/dist/analyzers/androidResources.js.map +1 -0
- package/dist/analyzers/dependencies.d.ts.map +1 -1
- package/dist/analyzers/dependencies.js +37 -0
- package/dist/analyzers/dependencies.js.map +1 -1
- package/dist/analyzers/entrypoints.d.ts.map +1 -1
- package/dist/analyzers/entrypoints.js +71 -1
- package/dist/analyzers/entrypoints.js.map +1 -1
- package/dist/analyzers/gradleModules.d.ts +22 -0
- package/dist/analyzers/gradleModules.d.ts.map +1 -0
- package/dist/analyzers/gradleModules.js +75 -0
- package/dist/analyzers/gradleModules.js.map +1 -0
- package/dist/analyzers/techStack.d.ts +7 -0
- package/dist/analyzers/techStack.d.ts.map +1 -1
- package/dist/analyzers/techStack.js +44 -1
- package/dist/analyzers/techStack.js.map +1 -1
- package/dist/commands/ai-first.d.ts.map +1 -1
- package/dist/commands/ai-first.js +311 -1
- package/dist/commands/ai-first.js.map +1 -1
- package/dist/core/adapters/adapterRegistry.d.ts +39 -0
- package/dist/core/adapters/adapterRegistry.d.ts.map +1 -0
- package/dist/core/adapters/adapterRegistry.js +155 -0
- package/dist/core/adapters/adapterRegistry.js.map +1 -0
- package/dist/core/adapters/baseAdapter.d.ts +49 -0
- package/dist/core/adapters/baseAdapter.d.ts.map +1 -0
- package/dist/core/adapters/baseAdapter.js +28 -0
- package/dist/core/adapters/baseAdapter.js.map +1 -0
- package/dist/core/adapters/community/fastapiAdapter.d.ts +7 -0
- package/dist/core/adapters/community/fastapiAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/fastapiAdapter.js +40 -0
- package/dist/core/adapters/community/fastapiAdapter.js.map +1 -0
- package/dist/core/adapters/community/index.d.ts +11 -0
- package/dist/core/adapters/community/index.d.ts.map +1 -0
- package/dist/core/adapters/community/index.js +11 -0
- package/dist/core/adapters/community/index.js.map +1 -0
- package/dist/core/adapters/community/laravelAdapter.d.ts +7 -0
- package/dist/core/adapters/community/laravelAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/laravelAdapter.js +47 -0
- package/dist/core/adapters/community/laravelAdapter.js.map +1 -0
- package/dist/core/adapters/community/nestjsAdapter.d.ts +7 -0
- package/dist/core/adapters/community/nestjsAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/nestjsAdapter.js +48 -0
- package/dist/core/adapters/community/nestjsAdapter.js.map +1 -0
- package/dist/core/adapters/community/phoenixAdapter.d.ts +7 -0
- package/dist/core/adapters/community/phoenixAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/phoenixAdapter.js +45 -0
- package/dist/core/adapters/community/phoenixAdapter.js.map +1 -0
- package/dist/core/adapters/community/springBootAdapter.d.ts +7 -0
- package/dist/core/adapters/community/springBootAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/springBootAdapter.js +44 -0
- package/dist/core/adapters/community/springBootAdapter.js.map +1 -0
- package/dist/core/adapters/dotnetAdapter.d.ts +20 -0
- package/dist/core/adapters/dotnetAdapter.d.ts.map +1 -0
- package/dist/core/adapters/dotnetAdapter.js +86 -0
- package/dist/core/adapters/dotnetAdapter.js.map +1 -0
- package/dist/core/adapters/index.d.ts +18 -0
- package/dist/core/adapters/index.d.ts.map +1 -0
- package/dist/core/adapters/index.js +19 -0
- package/dist/core/adapters/index.js.map +1 -0
- package/dist/core/adapters/javascriptAdapter.d.ts +11 -0
- package/dist/core/adapters/javascriptAdapter.d.ts.map +1 -0
- package/dist/core/adapters/javascriptAdapter.js +47 -0
- package/dist/core/adapters/javascriptAdapter.js.map +1 -0
- package/dist/core/adapters/pythonAdapter.d.ts +20 -0
- package/dist/core/adapters/pythonAdapter.d.ts.map +1 -0
- package/dist/core/adapters/pythonAdapter.js +99 -0
- package/dist/core/adapters/pythonAdapter.js.map +1 -0
- package/dist/core/adapters/railsAdapter.d.ts +10 -0
- package/dist/core/adapters/railsAdapter.d.ts.map +1 -0
- package/dist/core/adapters/railsAdapter.js +52 -0
- package/dist/core/adapters/railsAdapter.js.map +1 -0
- package/dist/core/adapters/salesforceAdapter.d.ts +16 -0
- package/dist/core/adapters/salesforceAdapter.d.ts.map +1 -0
- package/dist/core/adapters/salesforceAdapter.js +64 -0
- package/dist/core/adapters/salesforceAdapter.js.map +1 -0
- package/dist/core/adapters/sdk.d.ts +83 -0
- package/dist/core/adapters/sdk.d.ts.map +1 -0
- package/dist/core/adapters/sdk.js +114 -0
- package/dist/core/adapters/sdk.js.map +1 -0
- package/dist/core/ccp.d.ts +37 -0
- package/dist/core/ccp.d.ts.map +1 -0
- package/dist/core/ccp.js +184 -0
- package/dist/core/ccp.js.map +1 -0
- package/dist/core/gitAnalyzer.d.ts +74 -0
- package/dist/core/gitAnalyzer.d.ts.map +1 -0
- package/dist/core/gitAnalyzer.js +298 -0
- package/dist/core/gitAnalyzer.js.map +1 -0
- package/dist/core/incrementalAnalyzer.d.ts +28 -0
- package/dist/core/incrementalAnalyzer.d.ts.map +1 -0
- package/dist/core/incrementalAnalyzer.js +343 -0
- package/dist/core/incrementalAnalyzer.js.map +1 -0
- package/dist/core/knowledgeGraphBuilder.d.ts +31 -0
- package/dist/core/knowledgeGraphBuilder.d.ts.map +1 -0
- package/dist/core/knowledgeGraphBuilder.js +197 -0
- package/dist/core/knowledgeGraphBuilder.js.map +1 -0
- package/dist/core/lazyAnalyzer.d.ts +57 -0
- package/dist/core/lazyAnalyzer.d.ts.map +1 -0
- package/dist/core/lazyAnalyzer.js +204 -0
- package/dist/core/lazyAnalyzer.js.map +1 -0
- package/dist/core/schema.d.ts +57 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +131 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/semanticContexts.d.ts +40 -0
- package/dist/core/semanticContexts.d.ts.map +1 -0
- package/dist/core/semanticContexts.js +454 -0
- package/dist/core/semanticContexts.js.map +1 -0
- package/docs/es/guide/adapters.md +143 -0
- package/docs/es/guide/ai-repository-schema.md +119 -0
- package/docs/es/guide/features.md +67 -0
- package/docs/es/guide/flows.md +134 -0
- package/docs/es/guide/git-intelligence.md +170 -0
- package/docs/es/guide/incremental-analysis.md +131 -0
- package/docs/es/guide/knowledge-graph.md +135 -0
- package/docs/es/guide/lazy-indexing.md +144 -0
- package/docs/es/guide/performance.md +125 -0
- package/docs/guide/adapters.md +225 -0
- package/docs/guide/ai-repository-schema.md +119 -0
- package/docs/guide/architecture.md +69 -1
- package/docs/guide/flows.md +134 -0
- package/docs/guide/git-intelligence.md +170 -0
- package/docs/guide/incremental-analysis.md +131 -0
- package/docs/guide/knowledge-graph.md +135 -0
- package/docs/guide/lazy-indexing.md +144 -0
- package/docs/guide/performance.md +125 -0
- package/package.json +5 -2
- package/src/analyzers/androidResources.ts +113 -0
- package/src/analyzers/dependencies.ts +41 -0
- package/src/analyzers/entrypoints.ts +80 -1
- package/src/analyzers/gradleModules.ts +100 -0
- package/src/analyzers/techStack.ts +56 -0
- package/src/commands/ai-first.ts +342 -1
- package/src/core/adapters/adapterRegistry.ts +187 -0
- package/src/core/adapters/baseAdapter.ts +82 -0
- package/src/core/adapters/community/fastapiAdapter.ts +50 -0
- package/src/core/adapters/community/index.ts +11 -0
- package/src/core/adapters/community/laravelAdapter.ts +56 -0
- package/src/core/adapters/community/nestjsAdapter.ts +57 -0
- package/src/core/adapters/community/phoenixAdapter.ts +54 -0
- package/src/core/adapters/community/springBootAdapter.ts +53 -0
- package/src/core/adapters/dotnetAdapter.ts +104 -0
- package/src/core/adapters/index.ts +24 -0
- package/src/core/adapters/javascriptAdapter.ts +56 -0
- package/src/core/adapters/pythonAdapter.ts +118 -0
- package/src/core/adapters/railsAdapter.ts +65 -0
- package/src/core/adapters/salesforceAdapter.ts +76 -0
- package/src/core/adapters/sdk.ts +172 -0
- package/src/core/ccp.ts +240 -0
- package/src/core/gitAnalyzer.ts +391 -0
- package/src/core/incrementalAnalyzer.ts +382 -0
- package/src/core/knowledgeGraphBuilder.ts +181 -0
- package/src/core/lazyAnalyzer.ts +261 -0
- package/src/core/schema.ts +157 -0
- package/src/core/semanticContexts.ts +575 -0
- package/tests/adapters.test.ts +159 -0
- package/tests/gitAnalyzer.test.ts +133 -0
- package/tests/incrementalAnalyzer.test.ts +83 -0
- package/tests/knowledgeGraph.test.ts +146 -0
- package/tests/lazyAnalyzer.test.ts +230 -0
- package/tests/schema.test.ts +203 -0
- package/tests/semanticContexts.test.ts +435 -0
- package/ai/context/analyzers.Symbol.json +0 -19
- package/ai/context/analyzers.extractSymbols.json +0 -19
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laravel Adapter
|
|
3
|
+
*
|
|
4
|
+
* Community adapter for Laravel/PHP projects
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
|
|
8
|
+
|
|
9
|
+
export const laravelAdapter = createAdapter({
|
|
10
|
+
name: 'laravel',
|
|
11
|
+
displayName: 'Laravel',
|
|
12
|
+
|
|
13
|
+
detectionSignals: [
|
|
14
|
+
fileSignal('composer.json'),
|
|
15
|
+
fileSignal('artisan'),
|
|
16
|
+
fileSignal('phpunit.xml'),
|
|
17
|
+
directorySignal('app/Http'),
|
|
18
|
+
directorySignal('app/Console')
|
|
19
|
+
],
|
|
20
|
+
|
|
21
|
+
featureRoots: [
|
|
22
|
+
'app/Http/Controllers',
|
|
23
|
+
'app/Services',
|
|
24
|
+
'app/Models',
|
|
25
|
+
'app/Jobs',
|
|
26
|
+
'app/Events',
|
|
27
|
+
'app/Mail'
|
|
28
|
+
],
|
|
29
|
+
|
|
30
|
+
ignoredFolders: [
|
|
31
|
+
'vendor', 'node_modules', 'storage', 'bootstrap', 'config',
|
|
32
|
+
'resources', 'routes', 'database', 'tests', '.git'
|
|
33
|
+
],
|
|
34
|
+
|
|
35
|
+
entrypointPatterns: [
|
|
36
|
+
'Controller', 'Request', 'Command', 'Job', 'Event', 'Listener',
|
|
37
|
+
'Middleware', 'Notification', 'Mail', 'Handler'
|
|
38
|
+
],
|
|
39
|
+
|
|
40
|
+
layerRules: [
|
|
41
|
+
layerRule('api', 1, ['Controller', 'Request', 'Middleware', 'Resource']),
|
|
42
|
+
layerRule('service', 2, ['Service', 'Job', 'Event', 'Listener', 'Notification']),
|
|
43
|
+
layerRule('data', 3, ['Model', 'Repository', 'Database']),
|
|
44
|
+
layerRule('domain', 4, ['Entity', 'ValueObject', 'Rule']),
|
|
45
|
+
layerRule('util', 5, ['Helper', 'Support', 'Traits'])
|
|
46
|
+
],
|
|
47
|
+
|
|
48
|
+
supportedExtensions: ['.php'],
|
|
49
|
+
|
|
50
|
+
flowEntrypointPatterns: ['Controller', 'Command', 'Job', 'Request'],
|
|
51
|
+
|
|
52
|
+
flowExcludePatterns: [
|
|
53
|
+
'Model', 'Migration', 'Seeder', 'Factory', 'Test',
|
|
54
|
+
'Middleware', 'Request', 'Rule', 'Config'
|
|
55
|
+
]
|
|
56
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NestJS Adapter
|
|
3
|
+
*
|
|
4
|
+
* Community adapter for NestJS projects
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
|
|
8
|
+
|
|
9
|
+
export const nestjsAdapter = createAdapter({
|
|
10
|
+
name: 'nestjs',
|
|
11
|
+
displayName: 'NestJS',
|
|
12
|
+
|
|
13
|
+
detectionSignals: [
|
|
14
|
+
fileSignal('package.json'),
|
|
15
|
+
fileSignal('nest-cli.json'),
|
|
16
|
+
fileSignal('tsconfig.json'),
|
|
17
|
+
directorySignal('src/modules'),
|
|
18
|
+
directorySignal('src/controllers')
|
|
19
|
+
],
|
|
20
|
+
|
|
21
|
+
featureRoots: [
|
|
22
|
+
'src/modules',
|
|
23
|
+
'src/controllers',
|
|
24
|
+
'src/services',
|
|
25
|
+
'src/providers',
|
|
26
|
+
'src/guards',
|
|
27
|
+
'src/filters',
|
|
28
|
+
'src/interceptors'
|
|
29
|
+
],
|
|
30
|
+
|
|
31
|
+
ignoredFolders: [
|
|
32
|
+
'node_modules', 'dist', 'build', 'coverage', '.git',
|
|
33
|
+
'test', 'tests', '__fixtures__'
|
|
34
|
+
],
|
|
35
|
+
|
|
36
|
+
entrypointPatterns: [
|
|
37
|
+
'Controller', 'Service', 'Provider', 'Guard',
|
|
38
|
+
'Interceptor', 'Filter', 'Pipe', 'Module', 'Resolver'
|
|
39
|
+
],
|
|
40
|
+
|
|
41
|
+
layerRules: [
|
|
42
|
+
layerRule('api', 1, ['Controller', 'Resolver', 'Gateway', 'Middleware']),
|
|
43
|
+
layerRule('service', 2, ['Service', 'Provider', 'UseCase']),
|
|
44
|
+
layerRule('data', 3, ['Repository', 'Entity', 'Model', 'DAO']),
|
|
45
|
+
layerRule('domain', 4, ['Entity', 'Domain', 'Aggregate']),
|
|
46
|
+
layerRule('util', 5, ['Guard', 'Interceptor', 'Filter', 'Pipe', 'Helper'])
|
|
47
|
+
],
|
|
48
|
+
|
|
49
|
+
supportedExtensions: ['.ts', '.js'],
|
|
50
|
+
|
|
51
|
+
flowEntrypointPatterns: ['Controller', 'Resolver', 'Gateway', 'Service'],
|
|
52
|
+
|
|
53
|
+
flowExcludePatterns: [
|
|
54
|
+
'Module', 'Guard', 'Interceptor', 'Filter', 'Pipe',
|
|
55
|
+
'Entity', 'Model', 'Repository', 'Test', 'spec'
|
|
56
|
+
]
|
|
57
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phoenix Adapter
|
|
3
|
+
*
|
|
4
|
+
* Community adapter for Elixir Phoenix projects
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
|
|
8
|
+
|
|
9
|
+
export const phoenixAdapter = createAdapter({
|
|
10
|
+
name: 'phoenix',
|
|
11
|
+
displayName: 'Elixir Phoenix',
|
|
12
|
+
|
|
13
|
+
detectionSignals: [
|
|
14
|
+
fileSignal('mix.exs'),
|
|
15
|
+
fileSignal('mix.lock'),
|
|
16
|
+
directorySignal('lib'),
|
|
17
|
+
directorySignal('priv')
|
|
18
|
+
],
|
|
19
|
+
|
|
20
|
+
featureRoots: [
|
|
21
|
+
'lib',
|
|
22
|
+
'lib/*/controllers',
|
|
23
|
+
'lib/*/views',
|
|
24
|
+
'lib/*/contexts',
|
|
25
|
+
'lib/*/schemas'
|
|
26
|
+
],
|
|
27
|
+
|
|
28
|
+
ignoredFolders: [
|
|
29
|
+
'node_modules', '_build', '.git', 'priv',
|
|
30
|
+
'test', 'deps', 'assets'
|
|
31
|
+
],
|
|
32
|
+
|
|
33
|
+
entrypointPatterns: [
|
|
34
|
+
'Controller', 'View', 'Channel', 'Socket',
|
|
35
|
+
'Plug', 'Endpoint', 'Context'
|
|
36
|
+
],
|
|
37
|
+
|
|
38
|
+
layerRules: [
|
|
39
|
+
layerRule('api', 1, ['Controller', 'View', 'Channel', 'Socket', 'Plug']),
|
|
40
|
+
layerRule('service', 2, ['Context', 'Service', 'Worker']),
|
|
41
|
+
layerRule('data', 3, ['Schema', 'Repo', 'Model']),
|
|
42
|
+
layerRule('domain', 4, ['Schema', 'Domain', 'Entity']),
|
|
43
|
+
layerRule('util', 5, ['Helper', 'Util', 'HTML'])
|
|
44
|
+
],
|
|
45
|
+
|
|
46
|
+
supportedExtensions: ['.ex', '.exs', '.eex', '.leex'],
|
|
47
|
+
|
|
48
|
+
flowEntrypointPatterns: ['Controller', 'Channel', 'Plug', 'Endpoint'],
|
|
49
|
+
|
|
50
|
+
flowExcludePatterns: [
|
|
51
|
+
'Schema', 'Repo', 'View', 'HTML', 'Endpoint',
|
|
52
|
+
'Router', 'Test', 'TestCase'
|
|
53
|
+
]
|
|
54
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spring Boot Adapter
|
|
3
|
+
*
|
|
4
|
+
* Community adapter for Java Spring Boot projects
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
|
|
8
|
+
|
|
9
|
+
export const springBootAdapter = createAdapter({
|
|
10
|
+
name: 'springboot',
|
|
11
|
+
displayName: 'Spring Boot',
|
|
12
|
+
|
|
13
|
+
detectionSignals: [
|
|
14
|
+
fileSignal('pom.xml'),
|
|
15
|
+
fileSignal('build.gradle'),
|
|
16
|
+
fileSignal('gradlew'),
|
|
17
|
+
directorySignal('src/main/java'),
|
|
18
|
+
directorySignal('src/main/kotlin')
|
|
19
|
+
],
|
|
20
|
+
|
|
21
|
+
featureRoots: [
|
|
22
|
+
'src/main/java',
|
|
23
|
+
'src/main/kotlin',
|
|
24
|
+
'src/main/resources'
|
|
25
|
+
],
|
|
26
|
+
|
|
27
|
+
ignoredFolders: [
|
|
28
|
+
'node_modules', 'target', 'build', '.git', 'gradle',
|
|
29
|
+
'.gradle', 'src/test', 'src/test'
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
entrypointPatterns: [
|
|
33
|
+
'Controller', 'RestController', 'Service', 'Repository',
|
|
34
|
+
'Component', 'Configuration', 'Bean'
|
|
35
|
+
],
|
|
36
|
+
|
|
37
|
+
layerRules: [
|
|
38
|
+
layerRule('api', 1, ['Controller', 'RestController', 'Endpoint', 'Filter']),
|
|
39
|
+
layerRule('service', 2, ['Service', 'Component', 'Configuration']),
|
|
40
|
+
layerRule('data', 3, ['Repository', 'Entity', 'DAO', 'JdbcTemplate']),
|
|
41
|
+
layerRule('domain', 4, ['Entity', 'Domain', 'Model', 'ValueObject']),
|
|
42
|
+
layerRule('util', 5, ['Util', 'Helper', 'Configuration', 'Properties'])
|
|
43
|
+
],
|
|
44
|
+
|
|
45
|
+
supportedExtensions: ['.java', '.kt', '.groovy'],
|
|
46
|
+
|
|
47
|
+
flowEntrypointPatterns: ['Controller', 'RestController', 'Service', 'CommandLineRunner'],
|
|
48
|
+
|
|
49
|
+
flowExcludePatterns: [
|
|
50
|
+
'Repository', 'Entity', 'Configuration', 'Properties',
|
|
51
|
+
'Application', 'Test', 'TestCase'
|
|
52
|
+
]
|
|
53
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { AnalysisAdapter } from './baseAdapter.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* .NET Adapter
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - ASP.NET Core
|
|
8
|
+
* - .NET Framework
|
|
9
|
+
* - Blazor
|
|
10
|
+
* - Xamarin
|
|
11
|
+
*/
|
|
12
|
+
export const dotnetAdapter: AnalysisAdapter = {
|
|
13
|
+
name: 'dotnet',
|
|
14
|
+
displayName: '.NET',
|
|
15
|
+
|
|
16
|
+
detectionSignals: [
|
|
17
|
+
{ type: 'file', pattern: '*.csproj' },
|
|
18
|
+
{ type: 'file', pattern: '*.sln' },
|
|
19
|
+
{ type: 'file', pattern: '*.fsproj' },
|
|
20
|
+
{ type: 'file', pattern: 'Program.cs' },
|
|
21
|
+
{ type: 'file', pattern: 'Startup.cs' },
|
|
22
|
+
{ type: 'file', pattern: 'appsettings.json' }
|
|
23
|
+
],
|
|
24
|
+
|
|
25
|
+
featureRoots: ['src', 'app', 'Services', 'Controllers', 'Models', 'ViewModels', 'Components'],
|
|
26
|
+
|
|
27
|
+
ignoredFolders: [
|
|
28
|
+
'bin', 'obj', 'Properties', 'wwwroot', 'Test', 'Tests',
|
|
29
|
+
'node_modules', '.git', 'packages', '.vs', '.idea'
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
entrypointPatterns: [
|
|
33
|
+
'Controller', 'ApiController', 'Endpoint', 'Handler',
|
|
34
|
+
'Service', 'Command', 'Query', 'Middleware', 'Component'
|
|
35
|
+
],
|
|
36
|
+
|
|
37
|
+
layerRules: [
|
|
38
|
+
{ name: 'api', priority: 1, patterns: ['Controller', 'ApiController', 'Endpoint', 'Handler', 'Middleware', 'Filter'] },
|
|
39
|
+
{ name: 'service', priority: 2, patterns: ['Service', 'Services', 'Command', 'Query', 'Handler', 'Mediator'] },
|
|
40
|
+
{ name: 'data', priority: 3, patterns: ['Repository', 'Repo', 'DbContext', 'Data', 'Entity'] },
|
|
41
|
+
{ name: 'domain', priority: 4, patterns: ['Model', 'Entity', 'Domain', 'ValueObject', 'Aggregate'] },
|
|
42
|
+
{ name: 'util', priority: 5, patterns: ['Helper', 'Util', 'Common', 'Extensions'] }
|
|
43
|
+
],
|
|
44
|
+
|
|
45
|
+
supportedExtensions: ['.cs', '.fs', '.vb', '.razor', '.cshtml', '.xaml'],
|
|
46
|
+
|
|
47
|
+
flowEntrypointPatterns: ['Controller', 'ApiController', 'Endpoint', 'Handler', 'Command', 'Page'],
|
|
48
|
+
|
|
49
|
+
flowExcludePatterns: [
|
|
50
|
+
'Repository', 'Service', 'Model', 'Entity', 'Dto',
|
|
51
|
+
'ViewModel', 'Mapping', 'Configuration', 'Middleware',
|
|
52
|
+
'Test', 'Tests', 'Helper', 'Util', 'Extensions'
|
|
53
|
+
]
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* ASP.NET Core specific
|
|
58
|
+
*/
|
|
59
|
+
export const aspnetCoreAdapter: AnalysisAdapter = {
|
|
60
|
+
...dotnetAdapter,
|
|
61
|
+
name: 'aspnetcore',
|
|
62
|
+
displayName: 'ASP.NET Core',
|
|
63
|
+
|
|
64
|
+
detectionSignals: [
|
|
65
|
+
{ type: 'file', pattern: '*.csproj' },
|
|
66
|
+
{ type: 'content', pattern: 'Microsoft.AspNetCore', contentPattern: '' },
|
|
67
|
+
{ type: 'file', pattern: 'Program.cs' },
|
|
68
|
+
{ type: 'file', pattern: 'Startup.cs' }
|
|
69
|
+
],
|
|
70
|
+
|
|
71
|
+
featureRoots: ['Controllers', 'Services', 'Models', 'Views', 'Pages', 'Components', 'Areas'],
|
|
72
|
+
|
|
73
|
+
entrypointPatterns: [
|
|
74
|
+
'Controller', 'ApiController', 'Endpoint', 'MinimalApi',
|
|
75
|
+
'Middleware', 'Filter', 'Service'
|
|
76
|
+
]
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Blazor specific
|
|
81
|
+
*/
|
|
82
|
+
export const blazorAdapter: AnalysisAdapter = {
|
|
83
|
+
...dotnetAdapter,
|
|
84
|
+
name: 'blazor',
|
|
85
|
+
displayName: 'Blazor',
|
|
86
|
+
|
|
87
|
+
detectionSignals: [
|
|
88
|
+
{ type: 'file', pattern: '*.csproj' },
|
|
89
|
+
{ type: 'file', pattern: '_Imports.razor' },
|
|
90
|
+
{ type: 'content', pattern: '@page', contentPattern: '' }
|
|
91
|
+
],
|
|
92
|
+
|
|
93
|
+
featureRoots: ['Components', 'Pages', 'Shared', 'Services'],
|
|
94
|
+
|
|
95
|
+
entrypointPatterns: ['Component', 'Page', 'Layout', 'Service', 'Controller'],
|
|
96
|
+
|
|
97
|
+
layerRules: [
|
|
98
|
+
{ name: 'ui', priority: 1, patterns: ['Component', 'Page', 'Layout', 'Razor'] },
|
|
99
|
+
{ name: 'service', priority: 2, patterns: ['Service', 'Services', 'State', 'Store'] },
|
|
100
|
+
{ name: 'data', priority: 3, patterns: ['Repository', 'DbContext', 'Model', 'Entity'] },
|
|
101
|
+
{ name: 'domain', priority: 4, patterns: ['Entity', 'Domain', 'Model'] },
|
|
102
|
+
{ name: 'util', priority: 5, patterns: ['Helper', 'Util', 'Extensions'] }
|
|
103
|
+
]
|
|
104
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Adapters
|
|
3
|
+
*
|
|
4
|
+
* Language and framework-specific adapters for customizing
|
|
5
|
+
* feature and flow detection.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { AnalysisAdapter, DetectionSignal, LayerRule, DEFAULT_ADAPTER } from './baseAdapter.js';
|
|
9
|
+
export { javascriptAdapter } from './javascriptAdapter.js';
|
|
10
|
+
export { pythonAdapter, djangoAdapter, flaskAdapter } from './pythonAdapter.js';
|
|
11
|
+
export { railsAdapter, rubyAdapter } from './railsAdapter.js';
|
|
12
|
+
export { salesforceAdapter, sfdxAdapter } from './salesforceAdapter.js';
|
|
13
|
+
export { dotnetAdapter, aspnetCoreAdapter, blazorAdapter } from './dotnetAdapter.js';
|
|
14
|
+
|
|
15
|
+
// SDK exports
|
|
16
|
+
export { createAdapter, validateAdapter, fileSignal, directorySignal, contentSignal, layerRule } from './sdk.js';
|
|
17
|
+
export type { AdapterConfig } from './sdk.js';
|
|
18
|
+
|
|
19
|
+
// Community adapters
|
|
20
|
+
export { laravelAdapter, nestjsAdapter, springBootAdapter, phoenixAdapter, fastapiAdapter } from './community/index.js';
|
|
21
|
+
|
|
22
|
+
// Registry
|
|
23
|
+
export { detectAdapter, detectAllAdapters, getAdapter, listAdapters, ADAPTERS } from './adapterRegistry.js';
|
|
24
|
+
export type { AdapterDetectionResult } from './adapterRegistry.js';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AnalysisAdapter, DetectionSignal, LayerRule } from './baseAdapter.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* JavaScript/TypeScript Adapter
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Node.js projects
|
|
8
|
+
* - React/Vue/Angular apps
|
|
9
|
+
* - TypeScript projects
|
|
10
|
+
*/
|
|
11
|
+
export const javascriptAdapter: AnalysisAdapter = {
|
|
12
|
+
name: 'javascript',
|
|
13
|
+
displayName: 'JavaScript / TypeScript',
|
|
14
|
+
|
|
15
|
+
detectionSignals: [
|
|
16
|
+
{ type: 'file', pattern: 'package.json' },
|
|
17
|
+
{ type: 'file', pattern: 'tsconfig.json' },
|
|
18
|
+
{ type: 'file', pattern: 'jest.config.js' },
|
|
19
|
+
{ type: 'file', pattern: 'vite.config.ts' },
|
|
20
|
+
{ type: 'file', pattern: 'webpack.config.js' },
|
|
21
|
+
{ type: 'file', pattern: 'next.config.js' },
|
|
22
|
+
{ type: 'file', pattern: 'angular.json' }
|
|
23
|
+
],
|
|
24
|
+
|
|
25
|
+
featureRoots: ['src', 'app', 'packages', 'services', 'modules', 'features', 'pages', 'components'],
|
|
26
|
+
|
|
27
|
+
ignoredFolders: [
|
|
28
|
+
'utils', 'helpers', 'types', 'interfaces', 'constants', 'config',
|
|
29
|
+
'dto', 'models', 'common', 'shared', 'node_modules', '.git',
|
|
30
|
+
'dist', 'build', 'coverage', '__tests__', 'test', 'tests',
|
|
31
|
+
'.next', '.nuxt', '.vite'
|
|
32
|
+
],
|
|
33
|
+
|
|
34
|
+
entrypointPatterns: [
|
|
35
|
+
'controller', 'route', 'router', 'handler', 'command',
|
|
36
|
+
'service', 'middleware', 'endpoint', 'api'
|
|
37
|
+
],
|
|
38
|
+
|
|
39
|
+
layerRules: [
|
|
40
|
+
{ name: 'api', priority: 1, patterns: ['controller', 'handler', 'route', 'router', 'api', 'endpoint', 'middleware'] },
|
|
41
|
+
{ name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor', 'business'] },
|
|
42
|
+
{ name: 'data', priority: 3, patterns: ['repository', 'repo', 'dal', 'dao', 'data', 'persistence', 'db'] },
|
|
43
|
+
{ name: 'domain', priority: 4, patterns: ['model', 'entity', 'schema', 'domain', 'type'] },
|
|
44
|
+
{ name: 'util', priority: 5, patterns: ['util', 'helper', 'lib', 'common', 'static'] }
|
|
45
|
+
],
|
|
46
|
+
|
|
47
|
+
supportedExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.vue', '.svelte'],
|
|
48
|
+
|
|
49
|
+
flowEntrypointPatterns: ['controller', 'route', 'handler', 'command', 'router', 'api'],
|
|
50
|
+
|
|
51
|
+
flowExcludePatterns: [
|
|
52
|
+
'repository', 'repo', 'utils', 'helper', 'model', 'entity',
|
|
53
|
+
'dto', 'type', 'interface', 'constant', 'config', 'schema',
|
|
54
|
+
'middleware', 'util', 'lib', 'test', 'spec'
|
|
55
|
+
]
|
|
56
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { AnalysisAdapter } from './baseAdapter.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Python Adapter
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Django projects
|
|
8
|
+
* - Flask projects
|
|
9
|
+
* - FastAPI projects
|
|
10
|
+
* - Generic Python packages
|
|
11
|
+
*/
|
|
12
|
+
export const pythonAdapter: AnalysisAdapter = {
|
|
13
|
+
name: 'python',
|
|
14
|
+
displayName: 'Python',
|
|
15
|
+
|
|
16
|
+
detectionSignals: [
|
|
17
|
+
{ type: 'file', pattern: 'pyproject.toml' },
|
|
18
|
+
{ type: 'file', pattern: 'requirements.txt' },
|
|
19
|
+
{ type: 'file', pattern: 'Pipfile' },
|
|
20
|
+
{ type: 'file', pattern: 'setup.py' },
|
|
21
|
+
{ type: 'file', pattern: 'setup.cfg' },
|
|
22
|
+
{ type: 'directory', pattern: 'venv' },
|
|
23
|
+
{ type: 'directory', pattern: '.venv' },
|
|
24
|
+
{ type: 'file', pattern: 'manage.py' }
|
|
25
|
+
],
|
|
26
|
+
|
|
27
|
+
featureRoots: ['src', 'app', 'apps', 'modules', 'services', 'api', 'core'],
|
|
28
|
+
|
|
29
|
+
ignoredFolders: [
|
|
30
|
+
'utils', 'helpers', 'types', 'constants', 'config',
|
|
31
|
+
'migrations', '__pycache__', '.git', 'venv', '.venv',
|
|
32
|
+
'tests', 'test', '.pytest_cache', 'docs', 'scripts'
|
|
33
|
+
],
|
|
34
|
+
|
|
35
|
+
entrypointPatterns: [
|
|
36
|
+
'view', 'views', 'controller', 'endpoint', 'api',
|
|
37
|
+
'service', 'task', 'celery', 'command', 'management'
|
|
38
|
+
],
|
|
39
|
+
|
|
40
|
+
layerRules: [
|
|
41
|
+
{ name: 'api', priority: 1, patterns: ['view', 'views', 'controller', 'endpoint', 'api', 'route', 'resource'] },
|
|
42
|
+
{ name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor', 'business', 'logic'] },
|
|
43
|
+
{ name: 'data', priority: 3, patterns: ['repository', 'repo', 'model', 'dao', 'data', 'persistence', 'db'] },
|
|
44
|
+
{ name: 'domain', priority: 4, patterns: ['entity', 'schema', 'domain', 'core'] },
|
|
45
|
+
{ name: 'util', priority: 5, patterns: ['util', 'helper', 'lib', 'common'] }
|
|
46
|
+
],
|
|
47
|
+
|
|
48
|
+
supportedExtensions: ['.py'],
|
|
49
|
+
|
|
50
|
+
flowEntrypointPatterns: ['view', 'controller', 'endpoint', 'api', 'command', 'task'],
|
|
51
|
+
|
|
52
|
+
flowExcludePatterns: [
|
|
53
|
+
'model', 'entity', 'utils', 'helper', 'migration',
|
|
54
|
+
'test', 'tests', '__pycache__', 'conftest', 'schema'
|
|
55
|
+
]
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Django-specific adapter
|
|
60
|
+
*/
|
|
61
|
+
export const djangoAdapter: AnalysisAdapter = {
|
|
62
|
+
...pythonAdapter,
|
|
63
|
+
name: 'django',
|
|
64
|
+
displayName: 'Django',
|
|
65
|
+
|
|
66
|
+
detectionSignals: [
|
|
67
|
+
{ type: 'file', pattern: 'manage.py' },
|
|
68
|
+
{ type: 'file', pattern: 'settings.py' },
|
|
69
|
+
{ type: 'file', pattern: 'wsgi.py' },
|
|
70
|
+
{ type: 'content', pattern: 'DJANGO_SETTINGS_MODULE', contentPattern: '' }
|
|
71
|
+
],
|
|
72
|
+
|
|
73
|
+
featureRoots: ['apps', 'modules', 'api', 'core'],
|
|
74
|
+
|
|
75
|
+
entrypointPatterns: [
|
|
76
|
+
'view', 'views', 'api_view', 'controller', 'endpoint',
|
|
77
|
+
'serializer', 'service', 'task', 'management'
|
|
78
|
+
],
|
|
79
|
+
|
|
80
|
+
layerRules: [
|
|
81
|
+
{ name: 'api', priority: 1, patterns: ['view', 'views', 'api_view', 'controller', 'endpoint', 'resource', 'serializer'] },
|
|
82
|
+
{ name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'business', 'logic'] },
|
|
83
|
+
{ name: 'data', priority: 3, patterns: ['model', 'models', 'repository', 'dao', 'manager'] },
|
|
84
|
+
{ name: 'domain', priority: 4, patterns: ['entity', 'schema', 'domain', 'signals'] },
|
|
85
|
+
{ name: 'util', priority: 5, patterns: ['util', 'helpers', 'lib', 'common', 'middleware'] }
|
|
86
|
+
]
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Flask/FastAPI adapter
|
|
91
|
+
*/
|
|
92
|
+
export const flaskAdapter: AnalysisAdapter = {
|
|
93
|
+
...pythonAdapter,
|
|
94
|
+
name: 'flask',
|
|
95
|
+
displayName: 'Flask / FastAPI',
|
|
96
|
+
|
|
97
|
+
detectionSignals: [
|
|
98
|
+
{ type: 'file', pattern: 'app.py' },
|
|
99
|
+
{ type: 'file', pattern: 'main.py' },
|
|
100
|
+
{ type: 'content', pattern: 'from flask import', contentPattern: '' },
|
|
101
|
+
{ type: 'content', pattern: 'from fastapi import', contentPattern: '' }
|
|
102
|
+
],
|
|
103
|
+
|
|
104
|
+
featureRoots: ['src', 'app', 'api', 'routes', 'services', 'models'],
|
|
105
|
+
|
|
106
|
+
entrypointPatterns: [
|
|
107
|
+
'route', 'routes', 'endpoint', 'api', 'view',
|
|
108
|
+
'service', 'command', 'blueprint'
|
|
109
|
+
],
|
|
110
|
+
|
|
111
|
+
layerRules: [
|
|
112
|
+
{ name: 'api', priority: 1, patterns: ['route', 'routes', 'endpoint', 'api', 'blueprint', 'view'] },
|
|
113
|
+
{ name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'business'] },
|
|
114
|
+
{ name: 'data', priority: 3, patterns: ['model', 'models', 'repository', 'dao'] },
|
|
115
|
+
{ name: 'domain', priority: 4, patterns: ['entity', 'schema', 'domain'] },
|
|
116
|
+
{ name: 'util', priority: 5, patterns: ['util', 'helpers', 'lib'] }
|
|
117
|
+
]
|
|
118
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { AnalysisAdapter } from './baseAdapter.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Ruby on Rails Adapter
|
|
5
|
+
*/
|
|
6
|
+
export const railsAdapter: AnalysisAdapter = {
|
|
7
|
+
name: 'rails',
|
|
8
|
+
displayName: 'Ruby on Rails',
|
|
9
|
+
|
|
10
|
+
detectionSignals: [
|
|
11
|
+
{ type: 'file', pattern: 'Gemfile' },
|
|
12
|
+
{ type: 'file', pattern: 'config.ru' },
|
|
13
|
+
{ type: 'file', pattern: 'Rakefile' },
|
|
14
|
+
{ type: 'directory', pattern: 'app/controllers' },
|
|
15
|
+
{ type: 'directory', pattern: 'app/models' }
|
|
16
|
+
],
|
|
17
|
+
|
|
18
|
+
featureRoots: ['app', 'modules', 'lib', 'engines'],
|
|
19
|
+
|
|
20
|
+
ignoredFolders: [
|
|
21
|
+
'assets', 'javascripts', 'stylesheets', 'images', 'fonts',
|
|
22
|
+
'helpers', 'views', 'mailers', 'jobs', 'channels',
|
|
23
|
+
'node_modules', '.git', 'log', 'tmp', 'coverage', 'spec', 'test'
|
|
24
|
+
],
|
|
25
|
+
|
|
26
|
+
entrypointPatterns: [
|
|
27
|
+
'controller', 'endpoint', 'api', 'service', 'job',
|
|
28
|
+
'channel', 'mailer', 'serializer'
|
|
29
|
+
],
|
|
30
|
+
|
|
31
|
+
layerRules: [
|
|
32
|
+
{ name: 'api', priority: 1, patterns: ['controller', 'endpoint', 'api', 'channel', 'mailer'] },
|
|
33
|
+
{ name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor', 'operation'] },
|
|
34
|
+
{ name: 'data', priority: 3, patterns: ['model', 'repository', 'record', 'concern'] },
|
|
35
|
+
{ name: 'domain', priority: 4, patterns: ['entity', 'domain', 'value_object'] },
|
|
36
|
+
{ name: 'util', priority: 5, patterns: ['helper', 'lib', 'concern', 'middleware'] }
|
|
37
|
+
],
|
|
38
|
+
|
|
39
|
+
supportedExtensions: ['.rb', '.erb', '.rake'],
|
|
40
|
+
|
|
41
|
+
flowEntrypointPatterns: ['controller', 'endpoint', 'api', 'job', 'channel'],
|
|
42
|
+
|
|
43
|
+
flowExcludePatterns: [
|
|
44
|
+
'model', 'helper', 'view', 'mailer', 'channel',
|
|
45
|
+
'serializer', 'concern', 'lib', 'config', 'spec', 'test'
|
|
46
|
+
]
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Ruby Gem adapter
|
|
51
|
+
*/
|
|
52
|
+
export const rubyAdapter: AnalysisAdapter = {
|
|
53
|
+
...railsAdapter,
|
|
54
|
+
name: 'ruby',
|
|
55
|
+
displayName: 'Ruby',
|
|
56
|
+
|
|
57
|
+
detectionSignals: [
|
|
58
|
+
{ type: 'file', pattern: '*.gemspec' },
|
|
59
|
+
{ type: 'file', pattern: 'Gemfile' }
|
|
60
|
+
],
|
|
61
|
+
|
|
62
|
+
featureRoots: ['lib', 'app'],
|
|
63
|
+
|
|
64
|
+
ignoredFolders: ['spec', 'test', 'examples', 'node_modules', '.git']
|
|
65
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { AnalysisAdapter } from './baseAdapter.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Salesforce Adapter
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Salesforce DX projects
|
|
8
|
+
* - Aura components
|
|
9
|
+
* - Lightning Web Components (LWC)
|
|
10
|
+
* - Apex classes
|
|
11
|
+
*/
|
|
12
|
+
export const salesforceAdapter: AnalysisAdapter = {
|
|
13
|
+
name: 'salesforce',
|
|
14
|
+
displayName: 'Salesforce',
|
|
15
|
+
|
|
16
|
+
detectionSignals: [
|
|
17
|
+
{ type: 'file', pattern: 'sfdx-project.json' },
|
|
18
|
+
{ type: 'file', pattern: 'project-scratch-def.json' },
|
|
19
|
+
{ type: 'directory', pattern: 'force-app' },
|
|
20
|
+
{ type: 'directory', pattern: 'src/classes' },
|
|
21
|
+
{ type: 'file', pattern: 'package.xml' }
|
|
22
|
+
],
|
|
23
|
+
|
|
24
|
+
featureRoots: [
|
|
25
|
+
'force-app/main/default',
|
|
26
|
+
'src',
|
|
27
|
+
'src/classes',
|
|
28
|
+
'src/objects',
|
|
29
|
+
'src/triggers'
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
ignoredFolders: [
|
|
33
|
+
'node_modules', '.git', 'dist', 'build', 'coverage',
|
|
34
|
+
'test', 'tests', 'mdapi', 'deploy', 'package.xml'
|
|
35
|
+
],
|
|
36
|
+
|
|
37
|
+
entrypointPatterns: [
|
|
38
|
+
'Controller', 'Trigger', 'Batch', 'Queueable', 'Schedulable',
|
|
39
|
+
'AuraEnabled', 'RestResource', 'FlowAction', 'FlowConnector',
|
|
40
|
+
'LWC', 'Component', 'App', 'Event', 'Interface'
|
|
41
|
+
],
|
|
42
|
+
|
|
43
|
+
layerRules: [
|
|
44
|
+
{ name: 'api', priority: 1, patterns: ['Controller', 'Trigger', 'RestResource', 'AuraEnabled', 'FlowAction'] },
|
|
45
|
+
{ name: 'service', priority: 2, patterns: ['Service', 'Selector', 'Domain', 'UnitOfWork'] },
|
|
46
|
+
{ name: 'data', priority: 3, patterns: ['Repository', 'DAO', 'Selector', 'Model'] },
|
|
47
|
+
{ name: 'domain', priority: 4, patterns: ['Entity', 'SObject', 'Schema', 'Object'] },
|
|
48
|
+
{ name: 'util', priority: 5, patterns: ['Util', 'Helper', 'Constants', 'Exception'] }
|
|
49
|
+
],
|
|
50
|
+
|
|
51
|
+
supportedExtensions: ['.cls', '.trigger', '.apex', '.js', '.html', '.css', '.xml', '.meta.xml'],
|
|
52
|
+
|
|
53
|
+
flowEntrypointPatterns: ['Controller', 'Trigger', 'Batch', 'Queueable', 'RestResource', 'AuraEnabled', 'LWC'],
|
|
54
|
+
|
|
55
|
+
flowExcludePatterns: [
|
|
56
|
+
'Test', 'TestSuite', 'Settings', 'PermissionSet', 'Profile',
|
|
57
|
+
'SharingRule', 'ValidationRule', 'Workflow', 'Flow', 'ProcessBuilder'
|
|
58
|
+
]
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Salesforce DX specific
|
|
63
|
+
*/
|
|
64
|
+
export const sfdxAdapter: AnalysisAdapter = {
|
|
65
|
+
...salesforceAdapter,
|
|
66
|
+
name: 'sfdx',
|
|
67
|
+
displayName: 'Salesforce DX',
|
|
68
|
+
|
|
69
|
+
detectionSignals: [
|
|
70
|
+
{ type: 'file', pattern: 'sfdx-project.json' },
|
|
71
|
+
{ type: 'file', pattern: 'project-scratch-def.json' },
|
|
72
|
+
{ type: 'file', pattern: '.forceignore' }
|
|
73
|
+
],
|
|
74
|
+
|
|
75
|
+
featureRoots: ['force-app', 'src', 'unpackaged', 'mdapi']
|
|
76
|
+
};
|