import type { LanguageMetadata } from "../types/language";
/**
*语言元数据配置列表
* 只包含语言的静态元数据,不包含题目相关的代码模板
* ⭐ 新增语言只需在这里添加基础配置
*/
export const LANGUAGE_CONFIGS: LanguageMetadata[] = [
{
id: "javascript",
name: "JavaScript",
monacoId: "javascript",
extensions: [".js"],
fallbackTemplate: `// JavaScript 示例
console.log("Hello, World!");
// 定义一个函数
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log("斐波那契数列前10项:");
for (let i = 0; i < 10; i++) {
console.log(\`F(\${i}) = \${fibonacci(i)}\`);
}`,
canRun: true,
},
{
id: "typescript",
name: "TypeScript",
monacoId: "typescript",
extensions: [".ts"],
fallbackTemplate: `// TypeScript 示例
interface User {
name: string;
age: number;
}
const user: User = {
name: "张三",
age: 25
};
console.log(\`用户: \${user.name}, 年龄: \${user.age}\`);`,
canRun: true,
},
{
id: "python",
name: "Python",
monacoId: "python",
extensions: [".py"],
fallbackTemplate: `# Python 示例
print("Hello, World!")
# 列表推导式
squares = [x**2 for x in range(10)]
print("前10个平方数:", squares)
# 定义一个类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"你好,我是{self.name},今年{self.age}岁"
person = Person("李四", 30)
print(person.greet())`,
canRun: true,
},
{
id: "html",
name: "HTML",
monacoId: "html",
fallbackTemplate: `
Hello HTML
欢迎使用智能代码编辑器
这是一个 HTML 示例
`,
canRun: false,
extensions: [".html"],
},
{
id: "css",
name: "CSS",
monacoId: "css",
fallbackTemplate: `/* CSS 示例 */
body {
font-family: 'Arial', sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
padding: 30px;
}
h1 {
font-size: 2.5rem;
margin-bottom: 20px;
}`,
canRun: false,
extensions: [".css"],
},
{
id: "java",
name: "Java",
monacoId: "java",
fallbackTemplate: `public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
// 数组示例
int[] numbers = {1, 2, 3, 4, 5};
int sum = 0;
for (int num : numbers) {
sum += num;
}
System.out.println("数组总和: " + sum);
}
}`,
canRun: true,
// 需要远程编译服务
extensions: [".java"],
},
{
id: "cpp",
name: "C++",
monacoId: "cpp",
fallbackTemplate: `#include
#include
using namespace std;
int main() {
cout << "Hello, World!" << endl;
// 向量示例
vector vec = {1, 2, 3, 4, 5};
int sum = 0;
for(int num : vec) {
sum += num;
}
cout << "向量总和: " << sum << endl;
return 0;
}`,
canRun: true,
extensions: [".cpp", ".cc", ".cxx"],
},
{
id: "go",
name: "Go",
monacoId: "go",
fallbackTemplate: `package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
// 切片示例
numbers := []int{1, 2, 3, 4, 5}
sum := 0
for _, num := range numbers {
sum += num
}
fmt.Printf("切片总和: %d\\n", sum)
}`,
canRun: true,
extensions: [".go"],
},
{
id: "rust",
name: "Rust",
monacoId: "rust",
fallbackTemplate: `fn main() {
println!("Hello, World!");
// 向量示例
let numbers = vec![1, 2, 3, 4, 5];
let sum: i32 = numbers.iter().sum();
println!("总和: {}", sum);
}`,
canRun: true,
extensions: [".rs"],
},
{
id: "c",
name: "C",
monacoId: "c",
fallbackTemplate: `#include
int main() {
printf("Hello, World!\\n");
// 数组示例
int numbers[] = {1, 2, 3, 4, 5};
int sum = 0;
int size = sizeof(numbers) / sizeof(numbers[0]);
for(int i = 0; i < size; i++) {
sum += numbers[i];
}
printf("数组总和: %d\\n", sum);
return 0;
}`,
canRun: true,
extensions: [".c"],
},
{
id: "csharp",
name: "C#",
monacoId: "csharp",
fallbackTemplate: `using System;
using System.Collections.Generic;
using System.Linq;
public static class Program
{
public static void Main()
{
Console.WriteLine("Hello, World!");
}
}`,
canRun: true,
extensions: [".cs"],
},
{
id: "php",
name: "PHP",
monacoId: "php",
fallbackTemplate: `name = $name;
$this->age = $age;
}
public function greet(): string {
return "你好,我是{$this->name},今年{$this->age}岁";
}
}
$person = new Person("张三", 25);
echo $person->greet() . "\\n";
`,
canRun: true,
extensions: [".php"],
},
{
id: "sql",
name: "SQL",
monacoId: "sql",
fallbackTemplate: `-- SQL 示例
SELECT
users.name,
users.email,
COUNT(orders.id) as order_count,
SUM(orders.amount) as total_amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE users.created_at >= '2024-01-01'
GROUP BY users.id, users.name, users.email
HAVING COUNT(orders.id) > 0
ORDER BY total_amount DESC
LIMIT 10;`,
canRun: false,
extensions: [".sql"],
},
];
/**
* 根据 ID 获取语言配置
*/
export function getLanguageConfig(id: string): LanguageMetadata | undefined {
return LANGUAGE_CONFIGS.find((lang) => lang.id === id);
}
/**
* 获取所有支持的语言
*/
export function getAllLanguages(): LanguageMetadata[] {
return LANGUAGE_CONFIGS;
}
/**
* 获取可运行的语言列表
*/
export function getRunnableLanguages(): LanguageMetadata[] {
return LANGUAGE_CONFIGS.filter((lang) => lang.canRun);
}