npm install @heyq02/openui.mbt @openuidev/lang-core@1.0.1
npx oui.mbt patchimport { parseProgram } from "@heyq02/openui.mbt/parser";
const program = parseProgram('root = TextContent("Hello", "large")');| 文档 | 官方 | patch 后 |
|---|---|---|
| 注册表单,516 字节 | 0.0745 ms | 0.0626 ms |
| 50 个标量字段,2635 字节 | 0.1385 ms | 0.1800 ms |
| 50 个嵌套字段,5055 字节 | 0.2354 ms | 0.3022 ms |
| 400 个标量字段,22085 字节 | 0.9913 ms | 1.2910 ms |
| 4000 个标量字段,232685 字节 | 11.7253 ms | 16.3780 ms |
| 文档 | 官方 | patch 后 |
|---|---|---|
| 注册表单 | 0.3378 ms | 0.2626 ms |
| 50 个标量字段 | 2.1797 ms | 2.7088 ms |
| 50 个嵌套字段 | 7.7688 ms | 13.2447 ms |
| 400 个标量字段 | 145.9486 ms | 140.7504 ms |
| 4000 个标量字段 | 16488.2482 ms | 16950.8052 ms |
npm ci --prefix web
pnpm run benchmarkpub enum Expr {
Null
Bool(Bool)
Num(Double, String)
Str(String)
Ref(String)
StateRef(String)
Comp(String, Bool, Array[Expr])
Arr(Array[Expr])
Obj(Array[(String, Expr)])
UnaryOp(String, Expr)
BinOp(String, Expr, Expr)
Ternary(Expr, Expr, Expr)
Member(Expr, String)
Index(Expr, Expr)
Assign(String, Expr)
}pub struct SchemaCatalog {
components : Array[ComponentDef]
calls : Array[CallDef]
errors : Array[SchemaError]
}pub enum SchemaKind {
InvalidJson(Int)
InvalidJsonString(Int)
InvalidJsonNumber(Int)
Expected(String)
} derive(Eq)pub enum SchemaShape {
Any
Str
Num
Boolean
Obj
Arr
Null
Ref(String)
Enum(Array[String])
Union(Array[SchemaShape])
Unknown(String)
}pub enum TokenKind {
Newline
LParen
RParen
LBrack
RBrack
LBrace
RBrace
Comma
Colon
Equals
True
False
Null
EOF
Str
Num
Ident
Type
StateVar
Dot
Plus
Minus
Star
Slash
Percent
EqEq
NotEq
Greater
Less
GreaterEq
LessEq
And
Or
Not
Question
BuiltinCall
} derive(Eq)fn materialize_count(src : String, schema : String, root_name : String) -> Intfn materialize_dump(src : String, schema : String, root_name : String) -> Stringfn materialize_json(src : String, schema : String, root_name : String) -> Stringfn materialize_result(src : String, schema : String, root_name : String) -> Stringfn source_incomplete(src : String) -> Boolfn stream_append(id : Int, chunk : String, complete : Int) -> Stringfn stream_close(id : Int) -> Intfn stream_finish(id : Int) -> Stringfn stream_open(schema : String, root_name : String) -> Intfn stream_push(id : Int, chunk : String) -> Stringfn stream_replace(id : Int, text : String, complete : Int) -> Stringfn stream_set(id : Int, text : String) -> Stringfn stream_view(id : Int, complete : Int) -> String