⚠️ EXPERIMENTAL DEMO⚠️
Jazor is still evolving. Public APIs, generated output shapes, and adjacent toolchains may change as the repository continues to stabilize.
Jazor is an experimental Roslyn-based C# to JavaScript compiler project. It focuses on semantic-preserving lowering into JavaScript AST and currently treats the compiler mainline as the repository's most stable reference area. The active Vue-side development boundary is Jazor.VueHost; Jazor.Vite, Bun, and the old split-host / analysis-host path are migration leftovers.
Jazor 当前以编译器主线和 Jazor.VueHost 为核心,Deno 是唯一的前端/运行时宿主路径。Jazor.Vite、Bun 以及旧的 split-host / analysis-host 路线都只是迁移残留。详见 工作流总览。
- ✅ Compiler 主线:接近稳定,是仓库最成熟的部分
- ✅ Jazor.VueHost:当前的开发时边界,负责
.jazor和前端智能感知 - 🔄 Emit / Materialisation:持续承接,产物输出和打包管道
- 🔄 SourceMap:局部活跃,支撑当前的 VueHost / Deno 物化链路
Jazor/
├── src/
│ ├── Jazor.Compiler/ # C# to JavaScript compiler core
│ ├── Jazor.Analyzer/ # Static analyzer and whitelist validation
│ ├── Jazor.CLR/ # CLR runtime support modules
│ ├── Jazor.Emit/ # Emit and packaging pipeline
│ ├── Jazor.RazorVue/ # RazorVue integration surface
│ ├── Jazor.RazorVue.Analysis/ # RazorVue analysis and lowering
│ ├── Jazor.RazorVue.Vuetify/ # Vuetify component stubs
│ ├── Jazor.VueHost/ # Active `.jazor` development-time host
│ ├── Jazor.Razor/ # Razor template support
│ ├── Jazor.Common/ # Shared utilities and types
│ ├── ECMAScript/ # ECMAScript core types and attributes
│ ├── ECMAScript.WebIDL/ # WebIDL binding generator
│ ├── Jazor.CompilerTest/ # Compiler tests (MSTest)
│ └── Jazor.EmitTest/ # Emit pipeline tests (MSTest)
├── docs/ # Repository-level documentation hub
└── README.md # This file
- Jazor.Compiler - C# 到 JavaScript 的编译器核心 → 详细文档
- Jazor.Analyzer - 静态分析和白名单验证,确保编译时类型安全
- Jazor.CLR - .NET 类型的运行时模块支持,提供 JavaScript 运行时实现
- Jazor.Emit - 产物输出和打包管道,处理 host-facing 输出
- Jazor.RazorVue - Vue 导向的 Razor 编译路径,支持 Blazor 风格的组件编写
- Jazor.VueHost -
.jazor开发时边界和前端智能感知宿主.jazor以 Razor 作为源码语法,Vue 相关产物仅作为内部投影或桥接工件。Jazor.Vite、Bun 和旧的分析宿主路径都不再是当前架构方向;若迁移期间仍需独立分析进程,兼容入口是Jazor.VueHost --analysis-stdio。
详见 模块索引 了解所有模块。
Jazor 支持将 C# 代码转换为 JavaScript,包括:
- 变量声明和基础类型转换
- 模式匹配和条件表达式
- 可空类型处理
- 异步编程(async/await)
- 字符串插值
- 对象和集合初始化
详见 编译器文档 了解支持的完整特性。
// C# code
int x = 42;
string message = $"Value is {x}";
bool isPositive = x > 0;// Converted JavaScript code
let x = 42;
let message = `Value is ${x}`;
let isPositive = x > 0;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}!";
}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
# 克隆仓库
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 前查阅仓库文档并遵循代码库中描述的约定。
- Fork 项目仓库
- 创建功能分支
- 实现功能并添加测试
- 确保所有测试通过
- 提交 Pull Request
- 遵循 C# 编码约定
- 在需要澄清的地方添加适当的注释和文档
- 确保新功能有相应的单元测试
- 遵循语义保持的设计原则
本项目采用 MIT 许可证。详见 LICENSE.txt 文件。
- 项目主页:https://github.com/devhxj/Jazor
- 问题追踪:https://github.com/devhxj/Jazor/issues
- 邮箱:[email protected]
感谢所有为 Jazor 项目做出贡献的开发者和社区成员。
特别感谢以下开源项目:
- Roslyn - C# 编译器平台
- Acornima - JavaScript 解析器和 AST 库
- WebRef - Web 规范引用
- WootzJs - C# 到 JavaScript 编译器
- h5 - C# 到 JavaScript 编译器
- SharpKit - C# 到 JavaScript 转换器
- SharpPromise - C# 的 Promise 实现
- DenoHost - .NET 的 Deno 运行时宿主
- CSharpToJavaScript - C# 到 JavaScript 转译器