# Jazor
**Repository Path**: devhxj/Jazor
## Basic Information
- **Project Name**: Jazor
- **Description**: C# to Javascript Compiler implemented via Roslyn.
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-04-08
- **Last Updated**: 2026-04-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Csharp, roslyn
## README

# Jazor - C# 到 JavaScript 编译器(支持模块系统)
[](https://dotnet.microsoft.com/)
[](LICENSE.txt)
> ⚠️ **实验性项目** ⚠️\
> Jazor 仍在演进中。随着仓库持续稳定,公共 API、生成的输出形态以及相关工具链可能会发生变化。
Jazor 是一个基于 Roslyn 的 C# → JavaScript 编译器。核心能力是将 C# 操作树(IOperation)语义保持地降低为 JavaScript AST。当前以编译器主线和 `Jolt`(`.jazor` 全功能开发时宿主)为活跃开发边界。
## 两条技术线路
| 线路 | 模式 | 核心项目 | 说明 |
|------|------|---------|------|
| **RazorVue** | 库模式 | `Jazor.RazorVue` + Analysis + Vuetify | Source Generator 驱动,不使用 .vue SFC,编译时直接输出 JS/TS 模块 |
| **Jolt** | 全功能模式 | `Jolt` | 类似 Vite,支持 .jazor + .vue SFC,LSP + DevServer/HMR + Debug + Build |
两条线路共享同一套编译器基础设施(SemanticWalker、WhiteList、AstConverter)。
## 文档入口
| 角色 | 入口 |
|------|------|
| **新访客** | [文档中心](docs/README.md) — 项目全貌与导航 |
| **维护者** | [工作流总览](docs/02-计划/workstream-dashboard.md) — 恢复工作唯一入口 |
| **架构设计** | [编译器架构](docs/01-目标/compiler/ArchitectureOverview.Simplified.md) · [Jolt 设计](docs/01-目标/jolt/README.md) · [RazorVue 设计](docs/01-目标/razorvue/README.md) |
文档按五类组织:[目标](docs/01-目标/README.md) · [计划](docs/02-计划/README.md) · [完成](docs/03-完成/README.md) · [补充](docs/04-补充/README.md) · [遗弃](docs/05-遗弃/README.md)
## 项目状态
详见 [工作流总览](docs/02-计划/workstream-dashboard.md)。
- ✅ **Compiler 主线** — 接近稳定,是仓库最成熟的部分
- 🔄 **Jolt** — Phase 1–6 收口中,Phase 7 扩展系统规划中
- 🔄 **Emit / Materialisation** — 持续承接,产物输出和打包管道
- 🔄 **SourceMap** — 局部活跃(narrow lane),支撑 Jolt / Deno 物化链路
## 项目结构
```
Jazor/
├── src/
│ ├── ECMAScript/ # ECMAScript AST 核心类型与特性
│ ├── ECMAScript.WebIDL/ # WebIDL 绑定生成器(TypeScript,已归档)
│ ├── ECMAScript.WebIDL.Generator/ # WebIDL 绑定生成器(.NET)
│ ├── ECMAScript.WebIDL.GeneratorTest/ # WebIDL 生成器测试(MSTest)
│ ├── Jazor.Compiler/ # C# → JS 编译器核心(SemanticWalker 分文件组织)
│ ├── Jazor.Compiler.Generator/ # 白名单 Source Generator
│ ├── Jazor.Compiler.Razor/ # 编译器 Razor 集成层
│ ├── Jazor.CompilerTest/ # 编译器 + Jolt + LSP 测试(MSTest)
│ ├── Jazor.CLR/ # CLR 运行时支持(白名单声明 + JS 实现)
│ ├── Jazor.CLR.Generator/ # CLR 类型映射与绑定代码生成器
│ ├── Jazor.CLR.Test/ # CLR 测试(MSTest)
│ ├── Jazor.Common/ # 跨项目共享契约
│ ├── Jazor.Name/ # 符号格式化与哈希命名工具
│ ├── Jazor.Emit/ # 发射管线、打包物化、SourceMap 输出
│ ├── Jazor.EmitTest/ # 发射测试(MSTest)
│ ├── Jazor.Analyzer/ # 静态代码分析器(白名单编译时验证)
│ ├── Jazor.Razor/ # Razor 基础层(桥接 ASP.NET Core)
│ ├── Jazor.RazorVue/ # 【RazorVue 线路】核心语义
│ ├── Jazor.RazorVue.Analysis/ # 【RazorVue 线路】编译时分析
│ ├── Jazor.RazorVue.Test/ # 【RazorVue 线路】测试(MSTest)
│ ├── Jazor.RazorVue.Vuetify/ # 【RazorVue 线路】Vuetify 3 组件库
│ ├── Jazor.Test/ # Jazor 集成测试(MSTest)
│ ├── Jolt/ # 【Jolt 线路】LSP + DevServer + HMR + Debug + Build
│ ├── Jolt.Test/ # Jolt 测试(MSTest)
│ ├── Jolt.VSCodeExtension/ # VS Code Language Client 扩展
│ └── Jazor/ # NuGet 包(运行时 + 分析器 + 生成器 + MSBuild)
├── samples/ # 示例项目
├── docs/ # 文档中心(01-目标/02-计划/03-完成/04-补充/05-遗弃)
├── scripts/ # 构建与工具脚本
└── README.md
```
> **注**:`ECMAScript.WebIDL`(TypeScript 版)已归档,非当前活跃方向。
## 核心组件
- **Jazor.Compiler** — C# 到 JavaScript 的编译器核心 [→ 文档](src/Jazor.Compiler/README.md)
- **Jazor.Analyzer** — 静态分析和白名单验证,确保编译时类型安全
- **Jazor.CLR** — .NET 类型的运行时模块支持,提供 JavaScript 运行时实现
- **Jazor.Emit** — 产物输出和打包管道,处理 host-facing 输出 [→ 文档](src/Jazor.Emit/README.md)
- **Jazor.RazorVue** — Vue 导向的 Razor 编译路径,支持 Blazor 风格的组件编写 [→ 设计](docs/01-目标/razorvue/README.md)
- **Jolt** — `.jazor` 全功能开发时边界:LSP + DevServer + HMR + Debug + Build [→ 设计](docs/01-目标/jolt/README.md) [→ 状态](docs/03-完成/jolt/status.md)
`.jazor` 以 Razor 作为源码语法,Vue 相关产物仅作为内部投影或桥接工件。
## 核心能力
Jazor 支持将 C# 代码转换为 JavaScript,包括:
- 变量声明和基础类型转换
- 模式匹配和条件表达式
- 可空类型处理
- 异步编程(async/await)
- 字符串插值(模板字符串)
- 对象和集合初始化
- 元组与解构
- switch 语句和表达式
- 循环(for / foreach / while / do-while)
详见 [编译器文档](src/Jazor.Compiler/README.md) 了解支持的完整特性。
### 转换示例
```csharp
// C# 代码
int x = 42;
string message = $"Value is {x}";
bool isPositive = x > 0;
```
```javascript
// 转换后的 JavaScript 代码
let x = 42;
let message = `Value is ${x}`;
let isPositive = x > 0;
```
## 使用方法
### 使用 ECMAScriptModule 特性
```csharp
using ECMAScript;
[ECMAScriptModule]
public static class MyMathModule
{
public static int Add(int a, int b) => a + b;
public static string Greet(string name) => $"Hello, {name}!";
}
```
### 基本编译流程
```csharp
using Jazor.Compiler;
using Microsoft.CodeAnalysis;
// 获取语义模型
var semanticModel = compilation.GetSemanticModel(syntaxTree);
// 转换为 JavaScript AST - 类级别
var converter = new AstConverter(classSymbol, semanticModel);
var module = converter.Convert();
// 转换为 JavaScript AST - 操作级别
var walker = new SemanticWalker();
var jsAst = walker.Visit(operation, new());
```
## 开发和构建
### 环境要求
- .NET 10 SDK
- PowerShell 7+(用于测试脚本)
- Windows、Linux 或 macOS
### 构建步骤
```bash
# 克隆仓库
git clone https://github.com/devhxj/Jazor.git
cd Jazor
# 恢复依赖
dotnet restore
# 构建解决方案
dotnet build
# 运行所有测试
pwsh ./scripts/test-dotnet.ps1
# 运行编译器测试
pwsh ./scripts/test-dotnet.ps1 -Project compiler
# 运行单个测试类
dotnet test src/Jazor.CompilerTest/Jazor.CompilerTest.csproj --filter "SemanticWalkerPatternTest"
# 运行单个测试方法
dotnet test src/Jazor.CompilerTest/Jazor.CompilerTest.csproj --filter "SemanticWalkerPatternTest.Visit_IsPattern_Constant"
```
## 贡献
欢迎社区贡献。请在提交 Pull Request 前查阅仓库文档并遵循代码库中描述的约定。
### 开发流程
1. Fork 项目仓库
2. 创建功能分支
3. 实现功能并添加测试
4. 确保所有测试通过
5. 提交 Pull Request
### 代码规范
- 遵循 C# 编码约定
- 在需要澄清的地方添加适当的注释和文档
- 确保新功能有相应的单元测试
- 遵循语义保持的设计原则
## 许可证
本项目采用 MIT 许可证。详见 [LICENSE.txt](LICENSE.txt) 文件。
## 联系方式
- 项目主页:https://github.com/devhxj/Jazor
- 问题追踪:https://github.com/devhxj/Jazor/issues
- 邮箱:developerhan@msn.cn
## 致谢
感谢所有为 Jazor 项目做出贡献的开发者和社区成员。
特别感谢以下开源项目:
- [Roslyn](https://github.com/dotnet/roslyn) - C# 编译器平台
- [Acornima](https://github.com/adams85/acornima) - JavaScript 解析器和 AST 库
- [WebRef](https://github.com/w3c/webref) - Web 规范引用
- [WootzJs](https://github.com/kswoll/WootzJs) - C# 到 JavaScript 编译器
- [h5](https://github.com/curiosity-ai/h5) - C# 到 JavaScript 编译器
- [SharpKit](https://github.com/SharpKit/SharpKit) - C# 到 JavaScript 转换器
- [SharpPromise](https://github.com/legacybass/SharpPromise) - C# 的 Promise 实现
- [DenoHost](https://github.com/thomas3577/DenoHost) - .NET 的 Deno 运行时宿主
- [CSharpToJavaScript](https://github.com/TiLied/CSharpToJavaScript) - C# 到 JavaScript 转译器