jeeflow 引擎规范的 TypeScript 实现。仅依赖 node:* 标准库,零外部依赖(引擎核心)。
统一门面 JeeflowFacade.flow(action, args);支持管理扩展(流程设计/历史/委托)、
assignee 变量解析与 flow.auto/flow.admin 系统代执行。
npm install @mldong/jeeflowimport { EngineImpl, MemoryRepository } from '@mldong/jeeflow'
const repo = new MemoryRepository()
const engine = new EngineImpl(repo)
const def = {
id: '1', name: 'leave', displayName: '请假审批',
content: JSON.stringify({ nodes: [...], edges: [...] })
}
repo.addDefine(def)
const inst = await engine.startProcessInstanceById(def.id, '张三')
const tasks = await repo.findDoingTasks(inst.id)
await engine.executeProcessTask(tasks[0].id, 'leader')
⚠️ id 全程 string(issue 38 E9):引擎内部与 API 契约的 id(流程定义/实例/任务/设计)一律为字符串。 Java 雪花 id(>2^53)超出 JS 安全整数,Number()转换必丢精度;字符串可无损承载,保证多语言同库共享流程。
import mysql from 'mysql2/promise'
import { JdbcRepository, TsIDGenerator, MysqlAdapter } from '@mldong/jeeflow/jdbc'
// ⚠️ 必须配置 bigNumberStrings(issue 38 E9):BIGINT 列以 string 返回,
// 否则 mysql2 默认转 number,Java 雪花 id(>2^53)在驱动层就已丢精度
const pool = mysql.createPool({
host: 'localhost', user: 'root', password: '***', database: 'wf',
supportBigNumbers: true,
bigNumberStrings: true,
})
const repo = new JdbcRepository(new MysqlAdapter(pool), new TsIDGenerator())- MySQL 连接池必须带
supportBigNumbers: true, bigNumberStrings: true;PostgreSQL 的 int8 默认即字符串,无此要求 - 引擎侧已做驱动兜底:
rowId()把驱动返回的 number/string 统一归一化为 string,未开bigNumberStrings时小 id(Node 自建)仍可用 MysqlAdapter走query()不走execute():mysql2 预处理绑LIMIT ?会失败,分页整段 99999999(issues/66)
git clone https://github.com/mldong/jeeflow-node
cd jeeflow-node
npm install
npm run demo # http://localhost:8082| 路径 | 说明 |
|---|---|
src/engine.ts |
引擎核心 |
src/model.ts |
域类型 |
src/spi.ts |
SPI 接口 |
src/memory.ts |
内存仓储 |
src/jdbc/ |
JDBC 多库实现(shared 核心 + mysql/postgres 适配器) |
demo/main.ts |
Express 演示 |
__tests__/ |
9 项合规测试 |
对齐 jeeflow-doc——与其他语言实现行为一致。
Copyright © 2025-2026 mldong
Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.