smart-code-editor 1.0.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.
Files changed (63) hide show
  1. package/README.md +155 -0
  2. package/lib/adapters/vanilla/index.d.ts +3 -0
  3. package/lib/adapters/vanilla/index.d.ts.map +1 -0
  4. package/lib/config/languages.d.ts +21 -0
  5. package/lib/config/languages.d.ts.map +1 -0
  6. package/lib/config/runnerStrategies.d.ts +12 -0
  7. package/lib/config/runnerStrategies.d.ts.map +1 -0
  8. package/lib/config/runnerStrategies_v2.d.ts +31 -0
  9. package/lib/config/runnerStrategies_v2.d.ts.map +1 -0
  10. package/lib/config/themes.d.ts +54 -0
  11. package/lib/config/themes.d.ts.map +1 -0
  12. package/lib/core/BackendRunner.d.ts +78 -0
  13. package/lib/core/BackendRunner.d.ts.map +1 -0
  14. package/lib/core/CodeRunner.d.ts +32 -0
  15. package/lib/core/CodeRunner.d.ts.map +1 -0
  16. package/lib/core/LanguageManager.d.ts +41 -0
  17. package/lib/core/LanguageManager.d.ts.map +1 -0
  18. package/lib/core/LayoutManager.d.ts +59 -0
  19. package/lib/core/LayoutManager.d.ts.map +1 -0
  20. package/lib/core/MonacoWrapper.d.ts +63 -0
  21. package/lib/core/MonacoWrapper.d.ts.map +1 -0
  22. package/lib/core/SmartCodeEditor.d.ts +140 -0
  23. package/lib/core/SmartCodeEditor.d.ts.map +1 -0
  24. package/lib/dev-main.d.ts +2 -0
  25. package/lib/dev-main.d.ts.map +1 -0
  26. package/lib/index.cjs +242 -0
  27. package/lib/index.d.ts +5 -0
  28. package/lib/index.d.ts.map +1 -0
  29. package/lib/index.js +1369 -0
  30. package/lib/index.umd.cjs +242 -0
  31. package/lib/shims-vue.d.ts +4 -0
  32. package/lib/types/index.d.ts +101 -0
  33. package/lib/types/index.d.ts.map +1 -0
  34. package/lib/types/language.d.ts +37 -0
  35. package/lib/types/language.d.ts.map +1 -0
  36. package/lib/types/question.d.ts +75 -0
  37. package/lib/types/question.d.ts.map +1 -0
  38. package/lib/utils/loader.d.ts +9 -0
  39. package/lib/utils/loader.d.ts.map +1 -0
  40. package/lib/utils/markdown.d.ts +2 -0
  41. package/lib/utils/markdown.d.ts.map +1 -0
  42. package/package.json +72 -0
  43. package/src/adapters/vanilla/index.ts +7 -0
  44. package/src/adapters/vue/SmartCodeEditor.vue +1190 -0
  45. package/src/config/languages.ts +273 -0
  46. package/src/config/runnerStrategies.ts +261 -0
  47. package/src/config/runnerStrategies_v2.ts +182 -0
  48. package/src/config/themes.ts +37 -0
  49. package/src/core/BackendRunner.ts +329 -0
  50. package/src/core/CodeRunner.ts +107 -0
  51. package/src/core/LanguageManager.ts +108 -0
  52. package/src/core/LayoutManager.ts +268 -0
  53. package/src/core/MonacoWrapper.ts +173 -0
  54. package/src/core/SmartCodeEditor.ts +1015 -0
  55. package/src/dev-app.vue +488 -0
  56. package/src/dev-main.ts +7 -0
  57. package/src/index.ts +19 -0
  58. package/src/shims-vue.d.ts +4 -0
  59. package/src/types/index.ts +129 -0
  60. package/src/types/language.ts +44 -0
  61. package/src/types/question.ts +98 -0
  62. package/src/utils/loader.ts +69 -0
  63. package/src/utils/markdown.ts +89 -0
package/README.md ADDED
@@ -0,0 +1,155 @@
1
+ # Smart Code Editor
2
+
3
+ 智能代码编辑器 - 支持多语言、语法高亮、代码运行,可在 Vue2/3、React、原生 JS 中使用
4
+
5
+ ## ✨ 特性
6
+
7
+ - 🎨 **语法高亮** - 基于 Monaco Editor,VS Code 同款编辑器
8
+ - 💡 **智能提示** - 完整的代码补全和智能提示
9
+ - 🌐 **多语言支持** - 支持 JavaScript、Python、Java、C++、Go 等多种语言
10
+ - ▶️ **代码运行** - 支持在线运行代码(JavaScript/TypeScript)
11
+ - 🎭 **主题切换** - 明暗主题随心切换
12
+ - 📱 **响应式布局** - 左右分栏,可拖拽调整大小
13
+ - 🔌 **跨框架** - Vue2/3、React、原生 JS 全支持
14
+ - ⚙️ **高度可配置** - 丰富的配置选项
15
+
16
+ ## 📦 安装
17
+
18
+ ```bash
19
+ npm install smart-code-editor
20
+ # 或
21
+ pnpm add smart-code-editor
22
+ # 或
23
+ yarn add smart-code-editor
24
+ ```
25
+
26
+ ## 🚀 快速开始
27
+
28
+ ### 原生 JavaScript
29
+
30
+ ```javascript
31
+ import { SmartCodeEditor } from "smart-code-editor";
32
+
33
+ const editor = new SmartCodeEditor({
34
+ container: "#editor",
35
+ language: "javascript",
36
+ theme: "vs-dark",
37
+ enableRun: true,
38
+ onChange: (value) => console.log(value),
39
+ onRun: (result) => console.log(result),
40
+ });
41
+ ```
42
+
43
+ ### Vue 3
44
+
45
+ ```vue
46
+ <template>
47
+ <SmartCodeEditor
48
+ v-model="code"
49
+ language="javascript"
50
+ theme="vs-dark"
51
+ :enable-run="true"
52
+ @run="handleRun"
53
+ />
54
+ </template>
55
+
56
+ <script setup>
57
+ import { ref } from "vue";
58
+ import SmartCodeEditor from "smart-code-editor/adapters/vue";
59
+
60
+ const code = ref('console.log("Hello World!")');
61
+
62
+ const handleRun = (result) => {
63
+ console.log(result);
64
+ };
65
+ </script>
66
+ ```
67
+
68
+ ### React
69
+
70
+ ```tsx
71
+ import { SmartCodeEditor } from "smart-code-editor/adapters/react";
72
+
73
+ function App() {
74
+ const [code, setCode] = useState('console.log("Hello World!")');
75
+
76
+ return (
77
+ <SmartCodeEditor
78
+ value={code}
79
+ onChange={setCode}
80
+ language="javascript"
81
+ theme="vs-dark"
82
+ enableRun
83
+ onRun={(result) => console.log(result)}
84
+ />
85
+ );
86
+ }
87
+ ```
88
+
89
+ ## 📖 API 文档
90
+
91
+ ### SmartCodeEditorOptions
92
+
93
+ | 参数 | 类型 | 默认值 | 说明 |
94
+ | -------------------- | --------------------- | ------------ | ---------------- |
95
+ | container | HTMLElement \| string | - | 编辑器容器 |
96
+ | language | string | 'javascript' | 编程语言 |
97
+ | theme | string | 'vs-dark' | 编辑器主题 |
98
+ | value | string | '' | 初始代码 |
99
+ | readOnly | boolean | false | 只读模式 |
100
+ | showQuestionPanel | boolean | true | 显示试题面板 |
101
+ | questionContent | string | '' | 试题内容(HTML) |
102
+ | enableRun | boolean | true | 启用代码运行 |
103
+ | enableLanguageSwitch | boolean | true | 允许切换语言 |
104
+ | onChange | Function | - | 代码变化回调 |
105
+ | onRun | Function | - | 运行完成回调 |
106
+ | onLanguageChange | Function | - | 语言切换回调 |
107
+
108
+ ### 方法
109
+
110
+ - `getValue()`: 获取代码
111
+ - `setValue(code)`: 设置代码
112
+ - `getLanguage()`: 获取当前语言
113
+ - `setLanguage(language)`: 设置语言
114
+ - `setTheme(theme)`: 设置主题
115
+ - `run()`: 运行代码
116
+ - `destroy()`: 销毁编辑器
117
+
118
+ ## 🌈 支持的语言
119
+
120
+ - JavaScript / TypeScript
121
+ - Python
122
+ - Java
123
+ - C / C++
124
+ - Go
125
+ - HTML / CSS
126
+ - SQL
127
+ - 更多...
128
+
129
+ ## ⚙️ 扩展性
130
+
131
+ ### 新增语言
132
+
133
+ 只需在 `src/config/languages.ts` 添加配置:
134
+
135
+ ```typescript
136
+ {
137
+ id: 'rust',
138
+ name: 'Rust',
139
+ monacoId: 'rust',
140
+ icon: '🦀',
141
+ defaultCode: 'fn main() {\n println!("Hello, World!");\n}',
142
+ canRun: true,
143
+ runnerType: 'remote'
144
+ }
145
+ ```
146
+
147
+ 所有框架适配器自动支持新语言!
148
+
149
+ ## 📄 License
150
+
151
+ ISC
152
+
153
+ ## 👨‍💻 Author
154
+
155
+ haichao_kk
@@ -0,0 +1,3 @@
1
+ export { SmartCodeEditor } from '../../core/SmartCodeEditor';
2
+ export type { SmartCodeEditorOptions, RunResult, LanguageConfig, } from '../../types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/vanilla/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EACV,sBAAsB,EACtB,SAAS,EACT,cAAc,GACf,MAAM,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { LanguageMetadata } from '../types/language';
2
+
3
+ /**
4
+ *语言元数据配置列表
5
+ * 只包含语言的静态元数据,不包含题目相关的代码模板
6
+ * ⭐ 新增语言只需在这里添加基础配置
7
+ */
8
+ export declare const LANGUAGE_CONFIGS: LanguageMetadata[];
9
+ /**
10
+ * 根据 ID 获取语言配置
11
+ */
12
+ export declare function getLanguageConfig(id: string): LanguageMetadata | undefined;
13
+ /**
14
+ * 获取所有支持的语言
15
+ */
16
+ export declare function getAllLanguages(): LanguageMetadata[];
17
+ /**
18
+ * 获取可运行的语言列表
19
+ */
20
+ export declare function getRunnableLanguages(): LanguageMetadata[];
21
+ //# sourceMappingURL=languages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../src/config/languages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,EAoP9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAEzD"}
@@ -0,0 +1,12 @@
1
+ import { RunnerStrategy } from '../types';
2
+
3
+ /**
4
+ * 运行策略映射
5
+ * ⭐ 新增自定义运行逻辑只需在这里添加
6
+ */
7
+ export declare const RUNNER_STRATEGIES: Record<string, RunnerStrategy>;
8
+ /**
9
+ * 获取运行策略
10
+ */
11
+ export declare function getRunnerStrategy(language: string): RunnerStrategy | undefined;
12
+ //# sourceMappingURL=runnerStrategies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerStrategies.d.ts","sourceRoot":"","sources":["../../src/config/runnerStrategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,UAAU,CAAC;AAgP1D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAO5D,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,SAAS,CAE5B"}
@@ -0,0 +1,31 @@
1
+ import { RunnerStrategy } from '../types';
2
+
3
+ /**
4
+ * 配置后端运行器
5
+ */
6
+ export declare function configureBackendRunner(config: {
7
+ apiUrl?: string;
8
+ timeout?: number;
9
+ debug?: boolean;
10
+ }): void;
11
+ /**
12
+ * 运行策略映射 V2
13
+ */
14
+ export declare const RUNNER_STRATEGIES_V2: Record<string, RunnerStrategy>;
15
+ /**
16
+ * 获取运行策略 V2
17
+ */
18
+ export declare function getRunnerStrategyV2(language: string): RunnerStrategy | undefined;
19
+ /**
20
+ * 检查语言是否支持
21
+ */
22
+ export declare function isLanguageSupported(language: string): boolean;
23
+ /**
24
+ * 获取支持的语言列表
25
+ */
26
+ export declare function getSupportedLanguages(): string[];
27
+ /**
28
+ * 检查后端健康状态
29
+ */
30
+ export declare function checkBackendHealth(): Promise<boolean>;
31
+ //# sourceMappingURL=runnerStrategies_v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerStrategies_v2.d.ts","sourceRoot":"","sources":["../../src/config/runnerStrategies_v2.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAa,cAAc,EAAY,MAAM,UAAU,CAAC;AAMpE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,QAEA;AA+GD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAY/D,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,SAAS,CAE5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO3D"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 主题配置
3
+ */
4
+ export declare const THEME_CONFIGS: {
5
+ readonly light: {
6
+ readonly id: "vs";
7
+ readonly name: "VS Light";
8
+ readonly displayName: "浅色主题";
9
+ };
10
+ readonly dark: {
11
+ readonly id: "vs-dark";
12
+ readonly name: "VS Dark";
13
+ readonly displayName: "深色主题";
14
+ };
15
+ readonly "high-contrast": {
16
+ readonly id: "hc-black";
17
+ readonly name: "High Contrast";
18
+ readonly displayName: "高对比度";
19
+ };
20
+ };
21
+ export type ThemeId = keyof typeof THEME_CONFIGS;
22
+ /**
23
+ * 获取所有主题
24
+ */
25
+ export declare function getAllThemes(): ({
26
+ readonly id: "vs";
27
+ readonly name: "VS Light";
28
+ readonly displayName: "浅色主题";
29
+ } | {
30
+ readonly id: "vs-dark";
31
+ readonly name: "VS Dark";
32
+ readonly displayName: "深色主题";
33
+ } | {
34
+ readonly id: "hc-black";
35
+ readonly name: "High Contrast";
36
+ readonly displayName: "高对比度";
37
+ })[];
38
+ /**
39
+ * 获取主题配置
40
+ */
41
+ export declare function getThemeConfig(id: ThemeId): {
42
+ readonly id: "vs";
43
+ readonly name: "VS Light";
44
+ readonly displayName: "浅色主题";
45
+ } | {
46
+ readonly id: "vs-dark";
47
+ readonly name: "VS Dark";
48
+ readonly displayName: "深色主题";
49
+ } | {
50
+ readonly id: "hc-black";
51
+ readonly name: "High Contrast";
52
+ readonly displayName: "高对比度";
53
+ };
54
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/config/themes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;CAgBhB,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,aAAa,CAAC;AAEjD;;GAEG;AACH,wBAAgB,YAAY;;;;;;;;;;;;KAE3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO;;;;;;;;;;;;EAEzC"}
@@ -0,0 +1,78 @@
1
+ import { RunResult, TestCase, TestCaseResult } from '../types';
2
+
3
+ export interface BackendConfig {
4
+ /** API 基础 URL */
5
+ apiUrl?: string;
6
+ /** 请求超时时间(毫秒) */
7
+ timeout?: number;
8
+ /** 是否启用调试日志 */
9
+ debug?: boolean;
10
+ }
11
+ export interface BackendResponse {
12
+ stdout: string;
13
+ stderr: string;
14
+ exit_code: number;
15
+ execution_time_ms: number;
16
+ error: string;
17
+ test_results?: TestCaseResult[];
18
+ }
19
+ /**
20
+ * 后端运行器
21
+ * 通过 HTTP API 调用 code-backend 服务
22
+ */
23
+ export declare class BackendRunner {
24
+ private config;
25
+ constructor(config?: BackendConfig);
26
+ /**
27
+ * 运行代码
28
+ */
29
+ run(language: string, code: string, testCases?: TestCase[], questionId?: number): Promise<RunResult>;
30
+ /**
31
+ * 提交代码(异步执行)
32
+ */
33
+ submit(language: string, code: string, testCases?: TestCase[], questionId?: number): Promise<string>;
34
+ /**
35
+ * 查询提交状态
36
+ */
37
+ getStatus(submissionId: string): Promise<{
38
+ status: "Pending" | "Running" | "Completed" | "Failed";
39
+ result?: BackendResponse;
40
+ }>;
41
+ /**
42
+ * 轮询等待结果
43
+ */
44
+ waitForResult(submissionId: string, maxAttempts?: number, interval?: number): Promise<RunResult>;
45
+ /**
46
+ * 获取题目信息
47
+ */
48
+ getQuestion(questionId?: number): Promise<any>;
49
+ /**
50
+ * 检查后端健康状态
51
+ */
52
+ healthCheck(): Promise<boolean>;
53
+ /**
54
+ * 转换后端响应为前端格式
55
+ */
56
+ private convertResponse;
57
+ /**
58
+ * 格式化错误信息
59
+ */
60
+ private formatError;
61
+ /**
62
+ * 带超时的 fetch
63
+ */
64
+ private fetchWithTimeout;
65
+ /**
66
+ * 更新配置
67
+ */
68
+ setConfig(config: Partial<BackendConfig>): void;
69
+ /**
70
+ * 获取当前配置
71
+ */
72
+ getConfig(): Readonly<Required<BackendConfig>>;
73
+ }
74
+ /**
75
+ * 创建默认的后端运行器实例
76
+ */
77
+ export declare function createBackendRunner(config?: BackendConfig): BackendRunner;
78
+ //# sourceMappingURL=BackendRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendRunner.d.ts","sourceRoot":"","sources":["../../src/core/BackendRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,GAAE,aAAkB;IAQtC;;OAEG;IACG,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,QAAQ,EAAE,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC;IA4DrB;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,QAAQ,EAAE,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IA+BlB;;OAEG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;QACvD,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B,CAAC;IAiBF;;OAEG;IACG,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAW,EACxB,QAAQ,GAAE,MAAa,GACtB,OAAO,CAAC,SAAS,CAAC;IAsBrB;;OAEG;IACG,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBpD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAI/C;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;CAG/C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,CAEzE"}
@@ -0,0 +1,32 @@
1
+ import { RunResult } from '../types';
2
+
3
+ /**
4
+ * 代码运行引擎
5
+ * 使用策略模式支持多种语言
6
+ */
7
+ export declare class CodeRunner {
8
+ private timeout;
9
+ private abortController;
10
+ constructor(timeout?: number);
11
+ /**
12
+ * 运行代码
13
+ */
14
+ run(code: string, language: string, testCases?: import('../types').TestCase[]): Promise<RunResult>;
15
+ /**
16
+ * 创建超时 Promise
17
+ */
18
+ private createTimeoutPromise;
19
+ /**
20
+ * 取消运行
21
+ */
22
+ cancel(): void;
23
+ /**
24
+ * 设置超时时间
25
+ */
26
+ setTimeout(timeout: number): void;
27
+ /**
28
+ * 销毁
29
+ */
30
+ destroy(): void;
31
+ }
32
+ //# sourceMappingURL=CodeRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeRunner.d.ts","sourceRoot":"","sources":["../../src/core/CodeRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAgC;gBAE3C,OAAO,GAAE,MAAa;IAIlC;;OAEG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,OAAO,UAAU,EAAE,QAAQ,EAAE,GACxC,OAAO,CAAC,SAAS,CAAC;IAmDrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,41 @@
1
+ import { LanguageConfig } from '../types';
2
+
3
+ /**
4
+ * 语言管理器
5
+ * 负责管理支持的编程语言,从配置文件读取
6
+ */
7
+ export declare class LanguageManager {
8
+ private languages;
9
+ private currentLanguage;
10
+ constructor(defaultLanguage?: string);
11
+ /**
12
+ * 获取指定语言配置
13
+ */
14
+ getLanguage(id: string): LanguageConfig | undefined;
15
+ /**
16
+ * 获取所有语言
17
+ */
18
+ getAllLanguages(): LanguageConfig[];
19
+ /**
20
+ * 切换语言
21
+ */
22
+ switchLanguage(languageId: string): LanguageConfig;
23
+ /**
24
+ * 获取当前语言
25
+ */
26
+ getCurrentLanguage(): LanguageConfig;
27
+ /**
28
+ * 检查语言是否支持
29
+ */
30
+ isSupported(languageId: string): boolean;
31
+ /**
32
+ * 获取可运行的语言列表
33
+ */
34
+ getRunnableLanguages(): LanguageConfig[];
35
+ /**
36
+ * 获取语言的代码模板(支持外部配置)
37
+ * 优先级: languageTemplates > questionConfig > fallbackTemplate > 空字符串
38
+ */
39
+ getTemplate(languageId: string, questionConfig?: import('../types/question').QuestionConfig, languageTemplates?: import('../types/question').LanguageTemplates): string;
40
+ }
41
+ //# sourceMappingURL=LanguageManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageManager.d.ts","sourceRoot":"","sources":["../../src/core/LanguageManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,eAAe,CAAiB;gBAE5B,eAAe,GAAE,MAAqB;IAclD;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInD;;OAEG;IACH,eAAe,IAAI,cAAc,EAAE;IAInC;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IASlD;;OAEG;IACH,kBAAkB,IAAI,cAAc;IAIpC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,oBAAoB,IAAI,cAAc,EAAE;IAIxC;;;OAGG;IACH,WAAW,CACT,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,OAAO,mBAAmB,EAAE,cAAc,EAC3D,iBAAiB,CAAC,EAAE,OAAO,mBAAmB,EAAE,iBAAiB,GAChE,MAAM;CA2BV"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 布局管理器
3
+ * 负责管理左右分栏布局和拖拽调整
4
+ */
5
+ export declare class LayoutManager {
6
+ private container;
7
+ private leftPanel;
8
+ private rightPanel;
9
+ private splitter;
10
+ private isDragging;
11
+ private startX;
12
+ private startLeftWidth;
13
+ constructor(container: HTMLElement, defaultRatio?: number, theme?: string);
14
+ /**
15
+ * 初始化布局
16
+ */
17
+ private initLayout;
18
+ /**
19
+ * 初始化拖拽功能
20
+ */
21
+ private initResizable;
22
+ /**
23
+ * 鼠标按下
24
+ */
25
+ private handleMouseDown;
26
+ /**
27
+ * 鼠标移动
28
+ */
29
+ private handleMouseMove;
30
+ /**
31
+ * 鼠标释放
32
+ */
33
+ private handleMouseUp;
34
+ /**
35
+ * 设置左侧内容
36
+ */
37
+ setLeftContent(content: string | HTMLElement): void;
38
+ /**
39
+ * 获取右侧容器(用于放置编辑器)
40
+ */
41
+ getRightContainer(): HTMLElement;
42
+ /**
43
+ * 显示/隐藏左侧面板
44
+ */
45
+ setQuestionPanelVisible(visible: boolean): void;
46
+ /**
47
+ * 设置分割比例
48
+ */
49
+ setSplitRatio(ratio: number): void;
50
+ /**
51
+ * 设置主题
52
+ */
53
+ setTheme(theme: string): void;
54
+ /**
55
+ * 销毁
56
+ */
57
+ destroy(): void;
58
+ }
59
+ //# sourceMappingURL=LayoutManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutManager.d.ts","sourceRoot":"","sources":["../../src/core/LayoutManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAc;IAE9B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,cAAc,CAAa;gBAGjC,SAAS,EAAE,WAAW,EACtB,YAAY,GAAE,MAAa,EAC3B,KAAK,GAAE,MAAkB;IAa3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAgElB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,eAAe,CAWrB;IAEF;;OAEG;IACH,OAAO,CAAC,eAAe,CAerB;IAEF;;OAEG;IACH,OAAO,CAAC,aAAa,CAOnB;IAEF;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAenD;;OAEG;IACH,iBAAiB,IAAI,WAAW;IAIhC;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAU/C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAyD7B;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,63 @@
1
+ import { MonacoEditorOptions } from '../types';
2
+
3
+ /**
4
+ * Monaco Editor 封装
5
+ */
6
+ export declare class MonacoWrapper {
7
+ private editor;
8
+ private monaco;
9
+ private container;
10
+ constructor(container: HTMLElement);
11
+ /**
12
+ * 初始化编辑器
13
+ */
14
+ initialize(options?: MonacoEditorOptions): Promise<void>;
15
+ /**
16
+ * 设置值
17
+ */
18
+ setValue(code: string): void;
19
+ /**
20
+ * 获取值
21
+ */
22
+ getValue(): string;
23
+ /**
24
+ * 设置语言
25
+ */
26
+ /**
27
+ * 更新模型(切换语言时重建模型以确保语法提示正确)
28
+ */
29
+ updateModel(code: string, language: string, extension?: string, instanceId?: string): void;
30
+ /**
31
+ * 设置主题
32
+ */
33
+ setTheme(theme: string): void;
34
+ /**
35
+ * 设置只读
36
+ */
37
+ setReadOnly(readOnly: boolean): void;
38
+ /**
39
+ * 更新配置
40
+ */
41
+ updateOptions(options: any): void;
42
+ /**
43
+ * 监听内容变化
44
+ */
45
+ onDidChangeContent(callback: (value: string) => void): void;
46
+ /**
47
+ * 调整布局
48
+ */
49
+ layout(): void;
50
+ /**
51
+ * 获取 Monaco 实例
52
+ */
53
+ getMonaco(): any;
54
+ /**
55
+ * 获取编辑器实例
56
+ */
57
+ getEditor(): any;
58
+ /**
59
+ * 销毁
60
+ */
61
+ dispose(): void;
62
+ }
63
+ //# sourceMappingURL=MonacoWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonacoWrapper.d.ts","sourceRoot":"","sources":["../../src/core/MonacoWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGpD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAc;gBAEnB,SAAS,EAAE,WAAW;IAIlC;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BlE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAW,EACtB,UAAU,GAAE,MAAkB,GAC7B,IAAI;IA4BP;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAMpC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAMjC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAQ3D;;OAEG;IACH,MAAM,IAAI,IAAI;IAMd;;OAEG;IACH,SAAS;IAIT;;OAEG;IACH,SAAS;IAIT;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}