forked from colbymchenry/codegraph
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.ts
More file actions
123 lines (115 loc) · 3.33 KB
/
index.ts
File metadata and controls
123 lines (115 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* Framework Resolver Registry
*
* Manages framework-specific resolvers.
*/
import { FrameworkResolver, ResolutionContext } from '../types';
import type { Language } from '../../types';
import { drupalResolver } from './drupal';
import { laravelResolver } from './laravel';
import { expressResolver } from './express';
import { nestjsResolver } from './nestjs';
import { reactResolver } from './react';
import { svelteResolver } from './svelte';
import { vueResolver } from './vue';
import { djangoResolver, flaskResolver, fastapiResolver } from './python';
import { railsResolver } from './ruby';
import { springResolver } from './java';
import { goResolver } from './go';
import { rustResolver } from './rust';
import { aspnetResolver } from './csharp';
import { swiftUIResolver, uikitResolver, vaporResolver } from './swift';
/**
* All registered framework resolvers
*/
const FRAMEWORK_RESOLVERS: FrameworkResolver[] = [
// PHP
laravelResolver,
drupalResolver,
// JavaScript/TypeScript
expressResolver,
nestjsResolver,
reactResolver,
svelteResolver,
vueResolver,
// Python
djangoResolver,
flaskResolver,
fastapiResolver,
// Ruby
railsResolver,
// Java
springResolver,
// Go
goResolver,
// Rust
rustResolver,
// C#
aspnetResolver,
// Swift
swiftUIResolver,
uikitResolver,
vaporResolver,
];
/**
* Get all framework resolvers
*/
export function getAllFrameworkResolvers(): FrameworkResolver[] {
return FRAMEWORK_RESOLVERS;
}
/**
* Get a resolver by name
*/
export function getFrameworkResolver(name: string): FrameworkResolver | undefined {
return FRAMEWORK_RESOLVERS.find((r) => r.name === name);
}
/**
* Detect which frameworks are used in a project
*/
export function detectFrameworks(context: ResolutionContext): FrameworkResolver[] {
return FRAMEWORK_RESOLVERS.filter((resolver) => {
try {
return resolver.detect(context);
} catch {
return false;
}
});
}
/**
* Filter a list of detected frameworks down to ones that apply to a given language.
* Frameworks without an explicit `languages` list are treated as universal.
*/
export function getApplicableFrameworks(
detected: FrameworkResolver[],
language: Language
): FrameworkResolver[] {
return detected.filter(
(fw) => !fw.languages || fw.languages.includes(language)
);
}
/**
* Register a custom framework resolver
*/
export function registerFrameworkResolver(resolver: FrameworkResolver): void {
// Remove existing resolver with same name
const index = FRAMEWORK_RESOLVERS.findIndex((r) => r.name === resolver.name);
if (index !== -1) {
FRAMEWORK_RESOLVERS.splice(index, 1);
}
FRAMEWORK_RESOLVERS.push(resolver);
}
// Re-export framework resolvers
export { drupalResolver } from './drupal';
export { laravelResolver, FACADE_MAPPINGS } from './laravel';
export { expressResolver } from './express';
export { nestjsResolver } from './nestjs';
export { reactResolver } from './react';
export { svelteResolver } from './svelte';
export { vueResolver } from './vue';
export { djangoResolver, flaskResolver, fastapiResolver } from './python';
export { railsResolver } from './ruby';
export { springResolver } from './java';
export { goResolver } from './go';
export { rustResolver } from './rust';
export { aspnetResolver } from './csharp';
export { swiftUIResolver, uikitResolver, vaporResolver } from './swift';