mira-consciousness
Version:
Memory & Intelligence Retention Archive - Preserving The Spark
392 lines • 16.5 kB
JavaScript
/**
* Language Configuration Manager
* Handles language-specific patterns, detection, and analysis rules
*/
export class LanguageConfigManager {
languageConfigs = new Map();
constructor() {
this.initializeLanguageConfigs();
}
getConfig(language) {
return this.languageConfigs.get(language);
}
getLanguageFromExtension(ext) {
for (const [key, config] of this.languageConfigs) {
if (config.extensions.includes(ext.toLowerCase())) {
return key;
}
}
return null;
}
getLanguageKeyFromName(name) {
for (const [key, config] of this.languageConfigs) {
if (config.name.toLowerCase().includes(name.toLowerCase())) {
return key;
}
}
return null;
}
getAllLanguages() {
return Array.from(this.languageConfigs.keys());
}
initializeLanguageConfigs() {
// JavaScript/TypeScript/Node.js
this.languageConfigs.set('javascript', {
name: 'JavaScript/TypeScript',
extensions: ['js', 'jsx', 'ts', 'tsx', 'mjs', 'cjs'],
entryPointPatterns: ['index.*', 'main.*', 'app.*', 'server.*', 'src/index.*'],
packageFiles: ['package.json', 'yarn.lock', 'package-lock.json', 'pnpm-lock.yaml'],
buildFiles: ['webpack.config.*', 'vite.config.*', 'rollup.config.*', 'tsconfig.json', '.babelrc*'],
importPatterns: [
/import\s+.*?from\s+['"]([^'"]+)['"]/g,
/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g
],
exportPatterns: [
/export\s+(?:default\s+)?(?:const|let|var|function|class|interface|type)\s+(\w+)/g,
/module\.exports\s*=\s*(\w+)/g
],
functionPatterns: [
/(?:export\s+)?(?:async\s+)?function\s+(\w+)/g,
/(?:export\s+)?const\s+(\w+)\s*=\s*(?:async\s+)?\(.*?\)\s*=>/g,
/(\w+)\s*:\s*(?:async\s+)?function/g
],
classPatterns: [/(?:export\s+)?class\s+(\w+)/g],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'React': ['react', '@types/react', 'react-dom'],
'Vue': ['vue', '@vue/core', 'nuxt'],
'Angular': ['@angular/core', '@angular/cli'],
'Express': ['express', 'fastify', 'koa'],
'Next.js': ['next', 'next/router'],
'Svelte': ['svelte', '@sveltejs/kit'],
'Solid': ['solid-js', '@solidjs/start']
}
});
// Python
this.languageConfigs.set('python', {
name: 'Python',
extensions: ['py', 'pyx', 'pyi', 'pyw'],
entryPointPatterns: ['main.py', '__main__.py', 'app.py', 'server.py', 'manage.py'],
packageFiles: ['requirements.txt', 'Pipfile', 'pyproject.toml', 'setup.py', 'poetry.lock', 'conda.yaml'],
buildFiles: ['setup.cfg', 'tox.ini', 'Makefile', 'Dockerfile'],
importPatterns: [
/^import\s+([^\s#]+)/gm,
/^from\s+([^\s#]+)\s+import/gm
],
exportPatterns: [
/__all__\s*=\s*\[(.*?)\]/gs,
/^def\s+(\w+)/gm,
/^class\s+(\w+)/gm
],
functionPatterns: [
/^def\s+(\w+)/gm,
/^\s+def\s+(\w+)/gm
],
classPatterns: [/^class\s+(\w+)/gm],
commentPatterns: [/#.*$/gm, /'''[\s\S]*?'''/g, /"""[\s\S]*?"""/g],
frameworkDetection: {
'Django': ['django', 'Django'],
'Flask': ['flask', 'Flask'],
'FastAPI': ['fastapi', 'uvicorn'],
'Tornado': ['tornado'],
'Pyramid': ['pyramid'],
'Bottle': ['bottle']
}
});
// Java
this.languageConfigs.set('java', {
name: 'Java',
extensions: ['java', 'kt', 'scala'],
entryPointPatterns: ['Main.java', 'Application.java', '*Application.java'],
packageFiles: ['pom.xml', 'build.gradle', 'gradle.properties', 'ivy.xml'],
buildFiles: ['build.xml', 'Makefile', 'Dockerfile'],
importPatterns: [/^import\s+([^\s;]+);/gm],
exportPatterns: [
/public\s+(?:static\s+)?(?:final\s+)?(?:class|interface|enum)\s+(\w+)/g,
/public\s+(?:static\s+)?(?:final\s+)?(?:\w+\s+)?(\w+)\s*\(/g
],
functionPatterns: [
/public\s+(?:static\s+)?(?:\w+\s+)?(\w+)\s*\(/g,
/private\s+(?:static\s+)?(?:\w+\s+)?(\w+)\s*\(/g,
/protected\s+(?:static\s+)?(?:\w+\s+)?(\w+)\s*\(/g
],
classPatterns: [/(?:public\s+)?(?:final\s+)?class\s+(\w+)/g],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'Spring': ['spring-boot', 'spring-core', 'org.springframework'],
'Spring Boot': ['spring-boot-starter'],
'Android': ['android.app', 'androidx'],
'Hibernate': ['hibernate-core', 'org.hibernate'],
'Struts': ['struts2-core'],
'JSF': ['jsf-api', 'javax.faces']
}
});
// C#
this.languageConfigs.set('csharp', {
name: 'C#',
extensions: ['cs', 'csx', 'vb'],
entryPointPatterns: ['Program.cs', 'Main.cs', 'Startup.cs'],
packageFiles: ['*.csproj', '*.sln', 'packages.config', 'Directory.Build.props'],
buildFiles: ['Directory.Build.targets', 'nuget.config', 'global.json'],
importPatterns: [/^using\s+([^\s;]+);/gm],
exportPatterns: [
/public\s+(?:static\s+)?(?:partial\s+)?class\s+(\w+)/g,
/public\s+(?:static\s+)?(?:partial\s+)?interface\s+(\w+)/g
],
functionPatterns: [
/public\s+(?:static\s+)?(?:async\s+)?(?:\w+\s+)?(\w+)\s*\(/g,
/private\s+(?:static\s+)?(?:async\s+)?(?:\w+\s+)?(\w+)\s*\(/g,
/protected\s+(?:static\s+)?(?:async\s+)?(?:\w+\s+)?(\w+)\s*\(/g
],
classPatterns: [/(?:public\s+)?(?:partial\s+)?class\s+(\w+)/g],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'ASP.NET Core': ['Microsoft.AspNetCore', 'aspnetcore'],
'ASP.NET': ['System.Web', 'webforms'],
'Entity Framework': ['EntityFramework', 'Microsoft.EntityFrameworkCore'],
'Blazor': ['Microsoft.AspNetCore.Blazor'],
'WPF': ['System.Windows', 'Microsoft.WindowsDesktop.App'],
'WinForms': ['System.Windows.Forms']
}
});
// Go
this.languageConfigs.set('go', {
name: 'Go',
extensions: ['go'],
entryPointPatterns: ['main.go', 'cmd/*/main.go'],
packageFiles: ['go.mod', 'go.sum', 'Gopkg.toml', 'Gopkg.lock'],
buildFiles: ['Makefile', 'Dockerfile', '.goreleaser.yml'],
importPatterns: [
/^import\s+"([^"]+)"/gm,
/^import\s+\(\s*\n([\s\S]*?)\n\s*\)/gm
],
exportPatterns: [
/^func\s+([A-Z]\w*)/gm,
/^type\s+([A-Z]\w*)/gm,
/^var\s+([A-Z]\w*)/gm,
/^const\s+([A-Z]\w*)/gm
],
functionPatterns: [/^func\s+(?:\([^)]*\)\s+)?(\w+)/gm],
classPatterns: [/^type\s+(\w+)\s+struct/gm],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'Gin': ['github.com/gin-gonic/gin'],
'Echo': ['github.com/labstack/echo'],
'Fiber': ['github.com/gofiber/fiber'],
'Chi': ['github.com/go-chi/chi'],
'Gorilla Mux': ['github.com/gorilla/mux'],
'gRPC': ['google.golang.org/grpc']
}
});
// Rust
this.languageConfigs.set('rust', {
name: 'Rust',
extensions: ['rs'],
entryPointPatterns: ['main.rs', 'lib.rs', 'src/main.rs', 'src/lib.rs'],
packageFiles: ['Cargo.toml', 'Cargo.lock'],
buildFiles: ['build.rs', 'Makefile', 'Dockerfile'],
importPatterns: [
/^use\s+([^;]+);/gm,
/^extern\s+crate\s+(\w+);/gm
],
exportPatterns: [
/^pub\s+fn\s+(\w+)/gm,
/^pub\s+struct\s+(\w+)/gm,
/^pub\s+enum\s+(\w+)/gm,
/^pub\s+trait\s+(\w+)/gm
],
functionPatterns: [
/^fn\s+(\w+)/gm,
/^pub\s+fn\s+(\w+)/gm
],
classPatterns: [
/^struct\s+(\w+)/gm,
/^enum\s+(\w+)/gm,
/^trait\s+(\w+)/gm
],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'Actix Web': ['actix-web'],
'Rocket': ['rocket'],
'Warp': ['warp'],
'Axum': ['axum'],
'Tokio': ['tokio'],
'Serde': ['serde']
}
});
// PHP
this.languageConfigs.set('php', {
name: 'PHP',
extensions: ['php', 'phtml', 'php3', 'php4', 'php5', 'php7', 'php8'],
entryPointPatterns: ['index.php', 'app.php', 'public/index.php'],
packageFiles: ['composer.json', 'composer.lock'],
buildFiles: ['Makefile', 'Dockerfile', 'phpunit.xml'],
importPatterns: [
/^require_once\s+['"]([^'"]+)['"]/gm,
/^include_once\s+['"]([^'"]+)['"]/gm,
/^use\s+([^;]+);/gm
],
exportPatterns: [
/^class\s+(\w+)/gm,
/^interface\s+(\w+)/gm,
/^trait\s+(\w+)/gm,
/^function\s+(\w+)/gm
],
functionPatterns: [
/^function\s+(\w+)/gm,
/public\s+function\s+(\w+)/gm,
/private\s+function\s+(\w+)/gm,
/protected\s+function\s+(\w+)/gm
],
classPatterns: [/^class\s+(\w+)/gm],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g, /#.*$/gm],
frameworkDetection: {
'Laravel': ['laravel/framework', 'illuminate/'],
'Symfony': ['symfony/symfony', 'symfony/'],
'CodeIgniter': ['codeigniter/framework'],
'CakePHP': ['cakephp/cakephp'],
'Zend': ['zendframework/'],
'Yii': ['yiisoft/yii2']
}
});
// Ruby
this.languageConfigs.set('ruby', {
name: 'Ruby',
extensions: ['rb', 'rbw', 'rake', 'gemspec'],
entryPointPatterns: ['app.rb', 'main.rb', 'config/application.rb'],
packageFiles: ['Gemfile', 'Gemfile.lock', '*.gemspec'],
buildFiles: ['Rakefile', 'Makefile', 'Dockerfile'],
importPatterns: [
/^require\s+['"]([^'"]+)['"]/gm,
/^require_relative\s+['"]([^'"]+)['"]/gm,
/^load\s+['"]([^'"]+)['"]/gm
],
exportPatterns: [
/^class\s+(\w+)/gm,
/^module\s+(\w+)/gm,
/^def\s+(\w+)/gm
],
functionPatterns: [
/^def\s+(\w+)/gm,
/^\s+def\s+(\w+)/gm
],
classPatterns: [
/^class\s+(\w+)/gm,
/^module\s+(\w+)/gm
],
commentPatterns: [/#.*$/gm, /^=begin[\s\S]*?^=end/gm],
frameworkDetection: {
'Ruby on Rails': ['rails', 'actionpack'],
'Sinatra': ['sinatra'],
'Hanami': ['hanami'],
'Grape': ['grape'],
'Roda': ['roda'],
'Padrino': ['padrino']
}
});
// Swift (iOS/macOS)
this.languageConfigs.set('swift', {
name: 'Swift',
extensions: ['swift'],
entryPointPatterns: ['main.swift', 'AppDelegate.swift', 'SceneDelegate.swift'],
packageFiles: ['Package.swift', 'Podfile', 'Podfile.lock', '*.xcodeproj', '*.xcworkspace'],
buildFiles: ['Makefile', 'Dockerfile', 'fastlane/Fastfile'],
importPatterns: [/^import\s+(\w+)/gm],
exportPatterns: [
/^public\s+(?:class|struct|enum|protocol)\s+(\w+)/gm,
/^open\s+(?:class|struct|enum|protocol)\s+(\w+)/gm,
/^public\s+func\s+(\w+)/gm
],
functionPatterns: [
/^func\s+(\w+)/gm,
/^\s+func\s+(\w+)/gm,
/^public\s+func\s+(\w+)/gm,
/^private\s+func\s+(\w+)/gm
],
classPatterns: [
/^class\s+(\w+)/gm,
/^struct\s+(\w+)/gm,
/^enum\s+(\w+)/gm,
/^protocol\s+(\w+)/gm
],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'SwiftUI': ['SwiftUI'],
'UIKit': ['UIKit'],
'Vapor': ['Vapor'],
'Perfect': ['PerfectHTTP'],
'Kitura': ['Kitura'],
'RxSwift': ['RxSwift']
}
});
// C/C++
this.languageConfigs.set('cpp', {
name: 'C/C++',
extensions: ['c', 'cpp', 'cxx', 'cc', 'h', 'hpp', 'hxx'],
entryPointPatterns: ['main.c', 'main.cpp', 'src/main.c', 'src/main.cpp'],
packageFiles: ['CMakeLists.txt', 'Makefile', 'configure.ac', 'meson.build', 'conanfile.txt'],
buildFiles: ['Makefile', 'CMakeCache.txt', 'build.ninja', 'Dockerfile'],
importPatterns: [
/#include\s+<([^>]+)>/gm,
/#include\s+"([^"]+)"/gm
],
exportPatterns: [
/^(?:extern\s+)?(?:inline\s+)?(?:\w+\s+)?(\w+)\s*\(/gm,
/^(?:extern\s+)?(?:inline\s+)?(?:class|struct)\s+(\w+)/gm
],
functionPatterns: [
/^(?:static\s+)?(?:inline\s+)?(?:\w+\s+)?(\w+)\s*\(/gm,
/^\w+\s+(\w+)\s*\(/gm
],
classPatterns: [
/^(?:class|struct)\s+(\w+)/gm,
/^enum\s+(?:class\s+)?(\w+)/gm
],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'Qt': ['#include <Q', 'find_package(Qt'],
'GTK': ['#include <gtk/', 'pkg-config.*gtk'],
'Boost': ['#include <boost/', 'find_package(Boost'],
'OpenCV': ['#include <opencv2/', 'find_package(OpenCV'],
'SFML': ['#include <SFML/', 'find_package(sfml']
}
});
// Dart (Flutter)
this.languageConfigs.set('dart', {
name: 'Dart',
extensions: ['dart'],
entryPointPatterns: ['main.dart', 'lib/main.dart'],
packageFiles: ['pubspec.yaml', 'pubspec.lock'],
buildFiles: ['Makefile', 'Dockerfile', 'analysis_options.yaml'],
importPatterns: [
/^import\s+'([^']+)'/gm,
/^import\s+"([^"]+)"/gm,
/^export\s+'([^']+)'/gm
],
exportPatterns: [
/^class\s+(\w+)/gm,
/^abstract\s+class\s+(\w+)/gm,
/^enum\s+(\w+)/gm,
/^mixin\s+(\w+)/gm
],
functionPatterns: [
/^(?:\w+\s+)?(\w+)\s*\(/gm,
/^\s+(?:\w+\s+)?(\w+)\s*\(/gm
],
classPatterns: [
/^class\s+(\w+)/gm,
/^abstract\s+class\s+(\w+)/gm,
/^mixin\s+(\w+)/gm
],
commentPatterns: [/\/\/.*$/gm, /\/\*[\s\S]*?\*\//g],
frameworkDetection: {
'Flutter': ['flutter', 'package:flutter/'],
'Aqueduct': ['aqueduct'],
'Angel': ['angel_framework'],
'Shelf': ['package:shelf/']
}
});
}
}
//# sourceMappingURL=LanguageConfigManager.js.map