@variojs/core 0.0.1 → 0.1.1

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 (150) hide show
  1. package/README.md +31 -216
  2. package/dist/index.d.ts +830 -17
  3. package/dist/index.js +8 -20
  4. package/dist/index.js.map +1 -1
  5. package/package.json +6 -5
  6. package/dist/errors.d.ts +0 -100
  7. package/dist/errors.d.ts.map +0 -1
  8. package/dist/errors.js +0 -132
  9. package/dist/errors.js.map +0 -1
  10. package/dist/expression/cache.d.ts +0 -53
  11. package/dist/expression/cache.d.ts.map +0 -1
  12. package/dist/expression/cache.js +0 -158
  13. package/dist/expression/cache.js.map +0 -1
  14. package/dist/expression/compiler.d.ts +0 -34
  15. package/dist/expression/compiler.d.ts.map +0 -1
  16. package/dist/expression/compiler.js +0 -141
  17. package/dist/expression/compiler.js.map +0 -1
  18. package/dist/expression/dependencies.d.ts +0 -17
  19. package/dist/expression/dependencies.d.ts.map +0 -1
  20. package/dist/expression/dependencies.js +0 -106
  21. package/dist/expression/dependencies.js.map +0 -1
  22. package/dist/expression/evaluate.d.ts +0 -22
  23. package/dist/expression/evaluate.d.ts.map +0 -1
  24. package/dist/expression/evaluate.js +0 -75
  25. package/dist/expression/evaluate.js.map +0 -1
  26. package/dist/expression/evaluator.d.ts +0 -22
  27. package/dist/expression/evaluator.d.ts.map +0 -1
  28. package/dist/expression/evaluator.js +0 -533
  29. package/dist/expression/evaluator.js.map +0 -1
  30. package/dist/expression/index.d.ts +0 -12
  31. package/dist/expression/index.d.ts.map +0 -1
  32. package/dist/expression/index.js +0 -12
  33. package/dist/expression/index.js.map +0 -1
  34. package/dist/expression/parser.d.ts +0 -15
  35. package/dist/expression/parser.d.ts.map +0 -1
  36. package/dist/expression/parser.js +0 -42
  37. package/dist/expression/parser.js.map +0 -1
  38. package/dist/expression/utils.d.ts +0 -46
  39. package/dist/expression/utils.d.ts.map +0 -1
  40. package/dist/expression/utils.js +0 -78
  41. package/dist/expression/utils.js.map +0 -1
  42. package/dist/expression/whitelist.d.ts +0 -24
  43. package/dist/expression/whitelist.d.ts.map +0 -1
  44. package/dist/expression/whitelist.js +0 -198
  45. package/dist/expression/whitelist.js.map +0 -1
  46. package/dist/index.d.ts.map +0 -1
  47. package/dist/runtime/context.d.ts +0 -8
  48. package/dist/runtime/context.d.ts.map +0 -1
  49. package/dist/runtime/context.js +0 -7
  50. package/dist/runtime/context.js.map +0 -1
  51. package/dist/runtime/create-context.d.ts +0 -20
  52. package/dist/runtime/create-context.d.ts.map +0 -1
  53. package/dist/runtime/create-context.js +0 -62
  54. package/dist/runtime/create-context.js.map +0 -1
  55. package/dist/runtime/index.d.ts +0 -10
  56. package/dist/runtime/index.d.ts.map +0 -1
  57. package/dist/runtime/index.js +0 -10
  58. package/dist/runtime/index.js.map +0 -1
  59. package/dist/runtime/loop-context-pool.d.ts +0 -58
  60. package/dist/runtime/loop-context-pool.d.ts.map +0 -1
  61. package/dist/runtime/loop-context-pool.js +0 -114
  62. package/dist/runtime/loop-context-pool.js.map +0 -1
  63. package/dist/runtime/path.d.ts +0 -114
  64. package/dist/runtime/path.d.ts.map +0 -1
  65. package/dist/runtime/path.js +0 -302
  66. package/dist/runtime/path.js.map +0 -1
  67. package/dist/runtime/proxy.d.ts +0 -18
  68. package/dist/runtime/proxy.d.ts.map +0 -1
  69. package/dist/runtime/proxy.js +0 -54
  70. package/dist/runtime/proxy.js.map +0 -1
  71. package/dist/runtime/sandbox.d.ts +0 -20
  72. package/dist/runtime/sandbox.d.ts.map +0 -1
  73. package/dist/runtime/sandbox.js +0 -32
  74. package/dist/runtime/sandbox.js.map +0 -1
  75. package/dist/types.d.ts +0 -191
  76. package/dist/types.d.ts.map +0 -1
  77. package/dist/types.js +0 -20
  78. package/dist/types.js.map +0 -1
  79. package/dist/vm/errors.d.ts +0 -5
  80. package/dist/vm/errors.d.ts.map +0 -1
  81. package/dist/vm/errors.js +0 -5
  82. package/dist/vm/errors.js.map +0 -1
  83. package/dist/vm/executor.d.ts +0 -35
  84. package/dist/vm/executor.d.ts.map +0 -1
  85. package/dist/vm/executor.js +0 -137
  86. package/dist/vm/executor.js.map +0 -1
  87. package/dist/vm/handlers/array/pop.d.ts +0 -12
  88. package/dist/vm/handlers/array/pop.d.ts.map +0 -1
  89. package/dist/vm/handlers/array/pop.js +0 -28
  90. package/dist/vm/handlers/array/pop.js.map +0 -1
  91. package/dist/vm/handlers/array/push.d.ts +0 -13
  92. package/dist/vm/handlers/array/push.d.ts.map +0 -1
  93. package/dist/vm/handlers/array/push.js +0 -42
  94. package/dist/vm/handlers/array/push.js.map +0 -1
  95. package/dist/vm/handlers/array/shift.d.ts +0 -12
  96. package/dist/vm/handlers/array/shift.d.ts.map +0 -1
  97. package/dist/vm/handlers/array/shift.js +0 -28
  98. package/dist/vm/handlers/array/shift.js.map +0 -1
  99. package/dist/vm/handlers/array/splice.d.ts +0 -12
  100. package/dist/vm/handlers/array/splice.d.ts.map +0 -1
  101. package/dist/vm/handlers/array/splice.js +0 -59
  102. package/dist/vm/handlers/array/splice.js.map +0 -1
  103. package/dist/vm/handlers/array/unshift.d.ts +0 -13
  104. package/dist/vm/handlers/array/unshift.d.ts.map +0 -1
  105. package/dist/vm/handlers/array/unshift.js +0 -42
  106. package/dist/vm/handlers/array/unshift.js.map +0 -1
  107. package/dist/vm/handlers/array/utils.d.ts +0 -10
  108. package/dist/vm/handlers/array/utils.d.ts.map +0 -1
  109. package/dist/vm/handlers/array/utils.js +0 -33
  110. package/dist/vm/handlers/array/utils.js.map +0 -1
  111. package/dist/vm/handlers/batch.d.ts +0 -12
  112. package/dist/vm/handlers/batch.d.ts.map +0 -1
  113. package/dist/vm/handlers/batch.js +0 -40
  114. package/dist/vm/handlers/batch.js.map +0 -1
  115. package/dist/vm/handlers/call.d.ts +0 -14
  116. package/dist/vm/handlers/call.d.ts.map +0 -1
  117. package/dist/vm/handlers/call.js +0 -65
  118. package/dist/vm/handlers/call.js.map +0 -1
  119. package/dist/vm/handlers/emit.d.ts +0 -12
  120. package/dist/vm/handlers/emit.d.ts.map +0 -1
  121. package/dist/vm/handlers/emit.js +0 -26
  122. package/dist/vm/handlers/emit.js.map +0 -1
  123. package/dist/vm/handlers/if.d.ts +0 -13
  124. package/dist/vm/handlers/if.d.ts.map +0 -1
  125. package/dist/vm/handlers/if.js +0 -35
  126. package/dist/vm/handlers/if.js.map +0 -1
  127. package/dist/vm/handlers/index.d.ts +0 -14
  128. package/dist/vm/handlers/index.d.ts.map +0 -1
  129. package/dist/vm/handlers/index.js +0 -55
  130. package/dist/vm/handlers/index.js.map +0 -1
  131. package/dist/vm/handlers/log.d.ts +0 -12
  132. package/dist/vm/handlers/log.d.ts.map +0 -1
  133. package/dist/vm/handlers/log.js +0 -41
  134. package/dist/vm/handlers/log.js.map +0 -1
  135. package/dist/vm/handlers/loop.d.ts +0 -12
  136. package/dist/vm/handlers/loop.d.ts.map +0 -1
  137. package/dist/vm/handlers/loop.js +0 -71
  138. package/dist/vm/handlers/loop.js.map +0 -1
  139. package/dist/vm/handlers/navigate.d.ts +0 -12
  140. package/dist/vm/handlers/navigate.d.ts.map +0 -1
  141. package/dist/vm/handlers/navigate.js +0 -43
  142. package/dist/vm/handlers/navigate.js.map +0 -1
  143. package/dist/vm/handlers/set.d.ts +0 -15
  144. package/dist/vm/handlers/set.d.ts.map +0 -1
  145. package/dist/vm/handlers/set.js +0 -30
  146. package/dist/vm/handlers/set.js.map +0 -1
  147. package/dist/vm/index.d.ts +0 -8
  148. package/dist/vm/index.d.ts.map +0 -1
  149. package/dist/vm/index.js +0 -7
  150. package/dist/vm/index.js.map +0 -1
package/README.md CHANGED
@@ -1,16 +1,13 @@
1
- # @variojs/core
1
+ # @variojs/core
2
2
 
3
- Vario Core Runtime - 指令虚拟机、表达式系统、运行时上下文
3
+ Vario 核心运行时 - 指令虚拟机、表达式系统、运行时上下文
4
4
 
5
- ## 简介
5
+ ## 特点
6
6
 
7
- `@variojs/core` Vario 的核心运行时模块,提供了框架无关的基础能力:
8
-
9
- - **RuntimeContext**: 扁平化状态管理 + `$` 前缀系统 API
10
- - **Expression System**: 安全表达式解析、编译和求值
11
- - **Action VM**: 指令虚拟机,执行各种操作指令
12
- - **安全沙箱**: 多层防护机制,防止恶意代码执行
13
- - **性能优化**: 表达式缓存、对象池、路径记忆化
7
+ - 🚀 **高性能**:表达式缓存、对象池、路径记忆化
8
+ - 🔒 **安全沙箱**:多层防护,白名单机制,防止恶意代码
9
+ - 📦 **框架无关**:可在任何 JavaScript 环境中使用
10
+ - 🎯 **扁平化状态**:`$` 前缀系统 API,简洁直观
14
11
 
15
12
  ## 安装
16
13
 
@@ -20,15 +17,12 @@ npm install @variojs/core
20
17
  pnpm add @variojs/core
21
18
  ```
22
19
 
23
- ## 核心概念
24
-
25
- ### RuntimeContext 运行时上下文
26
-
27
- 运行时上下文是 Vario 的核心,提供了扁平化的状态管理和系统 API:
20
+ ## 快速开始
28
21
 
29
22
  ```typescript
30
- import { createRuntimeContext } from '@variojs/core'
23
+ import { createRuntimeContext, createVMExecutor } from '@variojs/core'
31
24
 
25
+ // 创建运行时上下文
32
26
  const ctx = createRuntimeContext({
33
27
  state: {
34
28
  count: 0,
@@ -46,224 +40,45 @@ ctx.count // 0
46
40
  ctx.user.name // 'John'
47
41
 
48
42
  // 使用系统 API
49
- ctx._get('count') // 0
50
- ctx._set('count', 10) // 设置值
51
- ctx.$emit('countChanged', 10) // 发射事件
52
- ```
53
-
54
- ### Expression System 表达式系统
55
-
56
- 安全、强大的表达式求值引擎,支持复杂的条件判断、数据访问和计算:
57
-
58
- ```typescript
59
- import { createExpressionSandbox, compileExpression } from '@variojs/core'
60
-
61
- const sandbox = createExpressionSandbox(ctx)
62
-
63
- // 编译表达式
64
- const expr = compileExpression('count > 10 && user.age >= 18')
65
-
66
- // 求值
67
- const result = expr.evaluate(sandbox) // true/false
68
- ```
69
-
70
- **支持的语法**:
71
- - 变量访问:`count`, `user.name`
72
- - 数组访问:`items[0]`, `todos[index]`
73
- - 可选链:`user?.profile?.email`
74
- - 二元运算:`count + 1`, `price * quantity`
75
- - 比较运算:`count > 10`, `role === "admin"`
76
- - 逻辑运算:`showContent && isActive`
77
- - 三元表达式:`count > 10 ? "high" : "low"`
78
- - 函数调用(白名单):`Array.isArray(items)`, `Math.max(a, b)`
79
-
80
- ### Action VM 指令虚拟机
81
-
82
- 执行各种操作指令,如 `set`、`call`、`if`、`loop` 等:
83
-
84
- ```typescript
85
- import { createVMExecutor } from '@variojs/core'
43
+ ctx._set('count', 10)
44
+ ctx.$emit('countChanged', 10)
86
45
 
46
+ // 执行指令
87
47
  const executor = createVMExecutor(ctx)
88
-
89
- // 执行 set 指令
90
48
  await executor.execute({
91
49
  type: 'set',
92
50
  path: 'count',
93
51
  value: 10
94
52
  })
95
-
96
- // 执行 call 指令
97
- await executor.execute({
98
- type: 'call',
99
- method: 'increment'
100
- })
101
-
102
- // 执行 if 指令
103
- await executor.execute({
104
- type: 'if',
105
- cond: 'count > 10',
106
- then: {
107
- type: 'set',
108
- path: 'status',
109
- value: 'high'
110
- }
111
- })
112
53
  ```
113
54
 
114
- ## API 参考
115
-
116
- ### createRuntimeContext
117
-
118
- 创建运行时上下文。
119
-
120
- ```typescript
121
- function createRuntimeContext<TState extends Record<string, unknown>>(
122
- options: CreateContextOptions<TState>
123
- ): RuntimeContext<TState>
124
- ```
125
-
126
- **选项**:
127
-
128
- ```typescript
129
- interface CreateContextOptions<TState> {
130
- /** 初始状态 */
131
- state?: TState
132
- /** 方法注册表 */
133
- methods?: Record<string, MethodHandler>
134
- /** 表达式选项 */
135
- exprOptions?: ExpressionOptions
136
- /** 事件发射器 */
137
- onEmit?: (event: string, data?: unknown) => void
138
- /** 状态变化回调 */
139
- onStateChange?: (path: string, value: unknown) => void
140
- }
141
- ```
142
-
143
- ### Expression System
144
-
145
- ```typescript
146
- // 创建表达式沙箱
147
- function createExpressionSandbox(ctx: RuntimeContext): ExpressionSandbox
148
-
149
- // 编译表达式
150
- function compileExpression(expr: string): CompiledExpression
151
-
152
- // 解析表达式
153
- function parseExpression(expr: string): ExpressionAST
154
-
155
- // 求值表达式
156
- function evaluateExpression(expr: string, ctx: RuntimeContext): unknown
157
- ```
55
+ ## 表达式系统
158
56
 
159
- ### Action VM
57
+ 安全、强大的表达式求值引擎:
160
58
 
161
59
  ```typescript
162
- // 创建 VM 执行器
163
- function createVMExecutor(ctx: RuntimeContext): VMExecutor
60
+ import { compileExpression, createExpressionSandbox } from '@variojs/core'
164
61
 
165
- // 执行动作
166
- function executeAction(action: Action, ctx: RuntimeContext): Promise<void>
167
- ```
168
-
169
- ### Path Utilities
170
-
171
- 路径解析和操作工具:
172
-
173
- ```typescript
174
- // 解析路径
175
- function parsePath(path: string): PathSegment[]
176
-
177
- // 获取路径值
178
- function getPathValue(obj: Record<string, unknown>, path: string): unknown
179
-
180
- // 设置路径值
181
- function setPathValue(
182
- obj: Record<string, unknown>,
183
- path: string,
184
- value: unknown,
185
- options?: { createObject?: () => object, createArray?: () => unknown[] }
186
- ): void
187
-
188
- // 路径匹配
189
- function matchPath(pattern: string, path: string): boolean
190
- ```
191
-
192
- ## 安全特性
193
-
194
- ### 表达式白名单
195
-
196
- 表达式系统使用白名单机制,只允许安全的操作:
197
-
198
- - ✅ 允许:属性访问、数组访问、数学运算、比较运算
199
- - ✅ 允许:白名单函数(`Array.isArray`, `Math.max` 等)
200
- - ❌ 禁止:`eval`, `Function`, `global`, `window` 等危险操作
201
- - ❌ 禁止:直接访问 Node.js API(`require`, `process` 等)
202
-
203
- ### 沙箱机制
204
-
205
- 表达式在隔离的沙箱中执行,无法访问外部作用域:
206
-
207
- ```typescript
208
62
  const sandbox = createExpressionSandbox(ctx)
209
-
210
- // 只能访问 ctx 中定义的状态和方法
211
- // 无法访问全局变量、Node.js API 等
212
- ```
213
-
214
- ## 性能优化
215
-
216
- ### 表达式缓存
217
-
218
- 编译后的表达式会被缓存,避免重复编译:
219
-
220
- ```typescript
221
- // 第一次编译
222
- const expr1 = compileExpression('count > 10') // 编译
223
-
224
- // 第二次使用相同表达式
225
- const expr2 = compileExpression('count > 10') // 从缓存获取
226
- ```
227
-
228
- ### 路径缓存
229
-
230
- 路径解析结果会被缓存:
231
-
232
- ```typescript
233
- parsePathCached('user.profile.name') // 第一次解析
234
- parsePathCached('user.profile.name') // 从缓存获取
235
- ```
236
-
237
- ### 对象池
238
-
239
- 循环上下文使用对象池复用,减少内存分配:
240
-
241
- ```typescript
242
- import { createLoopContext, releaseLoopContext } from '@variojs/core'
243
-
244
- // 创建循环上下文(从池中获取)
245
- const loopCtx = createLoopContext(ctx, { item, index })
246
-
247
- // 使用后释放(归还到池中)
248
- releaseLoopContext(loopCtx)
63
+ const expr = compileExpression('count > 10 && user.age >= 18')
64
+ const result = expr.evaluate(sandbox) // true/false
249
65
  ```
250
66
 
251
- ## 类型支持
252
-
253
- 完整的 TypeScript 类型定义:
254
-
255
- ```typescript
256
- import type {
257
- RuntimeContext,
258
- Action,
259
- ExpressionOptions,
260
- MethodHandler
261
- } from '@variojs/core'
262
- ```
67
+ **支持的语法**:
68
+ - 变量访问:`count`, `user.name`
69
+ - 数组访问:`items[0]`
70
+ - 可选链:`user?.profile?.email`
71
+ - 运算:`count + 1`, `price * quantity`
72
+ - 逻辑:`showContent && isActive`
73
+ - 三元:`count > 10 ? "high" : "low"`
74
+ - 白名单函数:`Array.isArray`, `Math.max`
263
75
 
264
- ## 示例
76
+ ## 优势
265
77
 
266
- 查看主项目的 `play/src/examples/` 目录下的完整示例。
78
+ - **类型安全**:完整的 TypeScript 类型定义
79
+ - ✅ **性能优化**:表达式缓存、路径缓存、对象池复用
80
+ - ✅ **安全可靠**:白名单机制,沙箱隔离,防止代码注入
81
+ - ✅ **易于扩展**:支持自定义指令和方法
267
82
 
268
83
  ## 许可证
269
84