@formancy/spec

中文文档
0.13.0发布于 2026/11/06Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 6936

The formancy form schema specification: types, JSON Schema, canonical serialisation and diffing.

原始使用文档

@formancy/spec

The formancy form schema: its TypeScript types, its JSON Schema, a validator, a canonical content hash, and a diff that classifies what a change costs the data already collected.

This package has no dependencies on any framework, on Node or on the DOM. The same build runs in a browser, in a server and in a build script.

Two load-bearing decisions

The canonical hash is the version's identity. schemaHash(schema) is a SHA-256 over a canonical serialisation, so two documents differing only in key order are the same version. canonicalize refuses undefined, NaN and Infinity rather than letting JSON.stringify drop or coerce them — a dropped field would make two different schemas share a hash, which would quietly break the tamper evidence every submission relies on.

diffSchemas classifies by cost, over data paths. Every change is compatible, lossy or breaking, and the walk follows data paths rather than the field list: a change inside a group or a repeater template is seen, moving a field between wizard pages is no change at all, and moving one into a group is a removal plus an addition — because the submission shape really did change. A key that changes without a declared renamedFrom is reported as remove-plus-add rather than guessed at; guessing wrong silently moves one field's answers into another field.

Use

import { schemaHash, diffSchemas, modelDataPaths } from '@formancy/spec'
import { validateSchema } from '@formancy/spec/validate'

const result = validateSchema(document)
if (!result.valid) {
  for (const error of result.errors) console.log(error.path, error.message)
}

for (const change of diffSchemas(published, draft)) {
  console.log(change.severity, change.kind, change.path)
}

validateSchema lives behind its own subpath because it pulls in ajv, and the renderers import this package only for types and hashing. The validator itself is precompiled at authoring time — compiling at runtime would reach for new Function, which throws under the strict no-unsafe-eval policy the browser-embedded builder runs under.

Docs: apps/docs (Concepts → The schema).

版本与发布记录

@formancy/spec 共发布 13 个版本,首次发布于 2026/09/21;过去 12 个月发布了 13 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.13.0latest2026/11/0610 天前
0.12.02026/11/0115 天前
0.11.02026/10/3016 天前
0.10.02026/10/3017 天前
0.9.02026/10/3017 天前
0.8.02026/10/2918 天前

关于 @formancy/spec 的常见问题

@formancy/spec 是什么?

The formancy form schema specification: types, JSON Schema, canonical serialisation and diffing.

如何安装 @formancy/spec?

在项目目录运行 npm install @formancy/spec,或使用 pnpm add / yarn add / bun add。

@formancy/spec 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@formancy/spec 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@formancy/spec 可以商用吗?

@formancy/spec 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@formancy/spec 的下载量有多少?

根据 npm 官方下载统计,@formancy/spec 在 2026/10/16 – 2026/11/14 这 30 天内被下载 6,936 次,日均约 231 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@formancy/spec 还在维护吗?

最新版本 0.13.0 发布于 2026/11/06(10 天前);至今共发布 13 个版本,其中过去 12 个月发布了 13 个;首次发布于 2026/09/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。