@hlang-org翻译
运行hlang程序(IGraph)在当前过程中。它构建节点,连接它们的端口,并运行流,不需要代码生成和文件访问。它可以在Node.js和浏览器中工作。
安装
npm install @hlang-org/interpreter @hlang-org/runtime
相同的构建发布为 @hlang-tech/interpreter。ESM和CommonJS的构建带有类型声明。
使用
import { Flow } from '@hlang-org/runtime';
import { interpret, NodeRegistry } from '@hlang-org/interpreter';
const registry = new NodeRegistry()
.register('numbers', Numbers) // classes that extend the runtime's node classes
.register('double', Double)
.register('log', Log);
const handle = interpret(graph, { registry, createFlow: () => new Flow() }, { env: 'prod' });
handle.onError(({ nodeId, error }) => console.error(nodeId, error));
handle.onActivity(({ nodeId, portId }) => highlight(nodeId, portId));
// Later: stop long-running nodes and release subscriptions.
handle.dispose();
什么 interpret 做
- 用验证图
planGraph从@hlang-org/ir。无效图形抛出GraphError. - 构造每个节点
new NodeClass({ nodeId, flowId, env, middleware, config, signal }).config是节点的bizData. - 订阅的
@node/error每个可读和转换节点的端口。 - 将每个连接连接为
source.O(port).connect(target.I(port)). - 运行每个可读根目录
Flow.
@hlang-org/compiler 发出与ES模块相同的步骤。
API
interpret(graph, deps, options?)
| 论点 | 描述 |
|---|---|
deps.registry | 一、 NodeRegistry 映射每个节点 code 到节点类。 |
deps.createFlow | 返回一个新的运行时 Flow. |
options.flowId | 传递给每个节点的流id。省略时生成。 |
options.env | 传递给每个节点的环境标签。默认的 'prod'. |
options.middleware | 对象传递给每个节点,用于日志记录器等服务。 |
它抛出一个节点 code 未注册。
执行处理
| 成员 | 描述 |
|---|---|
flowId | 此运行的流id。 |
roots | 可读根节点。 |
getNode(nodeId) | 构造的节点,或 undefined. |
onError(listener) | 发送的错误 @node/error 端口。流启动时发送的错误将被缓冲,因此之后将添加侦听器 interpret return仍然接收它们。返回一次性对象。 |
onActivity(listener) | 当数据通过连接时,为源端口和目标节点触发。返回一次性对象。 |
dispose() | 停止运行:发出停止信号,调用 onStop 回调,并取消订阅解释器的观察器。 |
停止信号
每个节点接收到 signal 在其构造函数选项中。将长时间运行的工作绑定到它:
interval(1000).pipe(takeUntil(this.opts.signal.observable)).subscribe(tick);
this.opts.signal.onStop(() => socket.close());
NodeRegistry
register(code, NodeClass) (可链,最后注册者获胜), get(code), has(code), codes().
该包还可以再出口 planGraph, GraphError,和 IGraph 类型的 @hlang-org/ir.
来源和文件: github.com/hlang-tech/hlang.
许可证
麻省理工学院