@ coloop-ai/ 时空- 超级json- 负载- 转换器
A 类 超级JSON- 基于有效载荷转换器 时间 工作流程。 将标准JSON无法处理的复杂JavaScript类型正确序列化并去序列化.
为什么?
Temperal 默认 JSON 有效载荷转换器无法处理许多常见的 JavaScript 类型 :
Date对象成为字符串Map财务报告和审定财务报表Set成为空对象{}BigInt丢出错误RegExp变为空对象{}
这个软件包通过使用"SuperJSON"来解决了这些问题,它存储了有效载荷元数据中的类型信息,并在去序列化过程中恢复了原始类型.
支持类型
DateMapSetBigIntRegExpundefinedError(和子类)URL- 已打入数组( E)
Int8Array, (中文(简体) ),Uint8Array页:1 - 还有 更多
安装
npm install @coloop-ai/temporal-superjson-payload-converter
快开始
有效载荷转换器必须配置在 全部 这些地方:
- 创造工人
- 客户端创建
- 工作流程捆绑( 如果使用
bundleWorkflowCode(中文(简体) ) - 测试环境
工人设置
import { Worker } from '@temporalio/worker'
const worker = await Worker.create({
// ... other options
dataConverter: {
payloadConverterPath:
require.resolve('@coloop-ai/temporal-superjson-payload-converter'),
},
})
客户端设置
import { Client } from '@temporalio/client'
const client = new Client({
connection,
namespace: 'your-namespace',
dataConverter: {
payloadConverterPath:
require.resolve('@coloop-ai/temporal-superjson-payload-converter'),
},
})
工作流程捆绑
import { bundleWorkflowCode } from '@temporalio/worker'
const workflowBundle = await bundleWorkflowCode({
workflowsPath: require.resolve('./workflows'),
payloadConverterPath:
require.resolve('@coloop-ai/temporal-superjson-payload-converter'),
})
测试环境
import { TestWorkflowEnvironment } from '@temporalio/testing'
const env = await TestWorkflowEnvironment.createTimeSkipping({
client: {
dataConverter: {
payloadConverterPath:
require.resolve('@coloop-ai/temporal-superjson-payload-converter'),
},
},
})
无害环境管理项目
在无害环境管理项目中,使用 createRequire 访问 require.resolve数字 :
import { createRequire } from 'node:module'
const require = createRequire(import.meta.url)
const worker = await Worker.create({
// ... other options
dataConverter: {
payloadConverterPath:
require.resolve('@coloop-ai/temporal-superjson-payload-converter'),
},
})
示例
一旦配置,复杂类型只是工作:
// workflow.ts
import { proxyActivities } from '@temporalio/workflow'
const activities = proxyActivities({
startToCloseTimeout: '10 seconds',
})
export async function myWorkflow(input: {
createdAt: Date
tags: Set<string>
metadata: Map<string, unknown>
}) {
// input.createdAt is a Date instance
// input.tags is a Set instance
// input.metadata is a Map instance
console.log(input.createdAt.toISOString())
console.log(input.tags.has('important'))
console.log(input.metadata.get('key'))
}
// client.ts
await client.workflow.start('myWorkflow', {
taskQueue: 'my-queue',
workflowId: 'my-workflow-id',
args: [
{
createdAt: new Date(),
tags: new Set(['important', 'urgent']),
metadata: new Map([['key', 'value']]),
},
],
})
向后兼容
这种转换器与默认JSON转换器所生成的有效载荷相倒相兼容. 它可以去除两个:
- 没有超级JSON元数据的遗留有效载荷(作为普通JSON处理)
- 带有超级JSON元数据的新有效载荷(完整类型恢复)
说明: 使用默认转换器的老工人仍然可以读取新的有效载荷,但复杂的类型将会被降解(例如:, Date 成为ISO 字符串, Map 成为一系列条目).
API 密码
payloadConverter
预配置的复合转换器,处理:
undefined数值- 二进制数据( E)
Uint8Array(中文(简体) ) - 具有 SuperJSON 支持的所有其他值
这是默认导出, 当您指定时会使用 payloadConverterPath。 。 。 .
SuperJsonPayloadConverter
基础的超级JSON转换器类. 如果您需要自编转换器, 您可以直接使用 :
import {
CompositePayloadConverter,
UndefinedPayloadConverter,
} from '@temporalio/common'
import { SuperJsonPayloadConverter } from '@coloop-ai/temporal-superjson-payload-converter'
export const payloadConverter = new CompositePayloadConverter(
new UndefinedPayloadConverter(),
// Add your custom converters here
new SuperJsonPayloadConverter(),
)
SUPERJSON_META_KEY
元数据键'superjson-meta')用于存储类型信息. 为高级用例而出出.
脚本
npm run build- 制作软件包npm run tc- 类型检查,不排放npm run lint- 运行ESLintnpm run test- 和维特一起测试npm run format- 检查Pretier的格式
许可证
MIT许可证。 见 自由主义 详细情况.