@cellarnode/finance

中文文档
0.5.0发布于 2026/10/20UNLICENSEDTypeScriptES Module近 30 天下载 3353

Canonical price-range Zod schemas, BASIS enum, CellarNode (无头型Script)的货币助手.

中文使用文档
文档目录11 节
  1. 安装
  2. 出口
  3. 快速实例
  4. 验证一个价格范围
  5. 从组合配置中继承默认值
  6. 格式化显示的价格范围
  7. 比较正常价格金额
  8. 为什么是这个包裹?
  9. 发展
  10. 出版
  11. 许可证

@ cellarnode/ 财务

Canonical price-range Zod schemas, BASIS enum, 货币助手,格式助手,以及 CellarNode 的继承助手. 无头类型脚本——无回放,无UI分解.

安装

pnpm add @cellarnode/finance zod
# or
npm install @cellarnode/finance zod
# or
bun add @cellarnode/finance zod

zod 是同级依赖.

出口

import {
  // BASIS
  BASIS, type Basis,

  // Price ranges
  priceRangeSchema, type PriceRange,
  fingerprintRange,

  // Chosen price ranges (with rangeRef + label)
  chosenPriceRangeSchema, type ChosenPriceRange,

  // Inheritance
  resolveEffective,
  type DefaultPriceProfile,
  type EffectiveRange,

  // Currency
  isValidCurrencyCode,
  getCurrencyName,
  getMinorUnits,

  // Formatting
  formatMoney,
  formatBasis,
  formatPriceRange,
} from "@cellarnode/finance";

快速实例

验证一个价格范围

import { priceRangeSchema } from "@cellarnode/finance";

const range = priceRangeSchema.parse({
  min: 12.0,
  max: 18.0,
  currency: "EUR",
  basis: "per_unit",
  priceTypeId: "fob",
  priceTypeOther: null,
  basisNote: null,
});

审定规则superRefine:

  • max >= min
  • priceTypeId 财务报告和审定财务报表 priceTypeOther 相互排斥,相互排斥
  • basisNote 如果需要的话f basis === "other"

从组合配置中继承默认值

import { resolveEffective } from "@cellarnode/finance";

const range = { min: 1, max: 2, currency: null, basis: null, priceTypeId: null, priceTypeOther: null, basisNote: null };
const profile = { currency: "EUR", basis: "per_unit", priceTypeId: "fob" };
const effective = resolveEffective(range, profile);
// → { min:1, max:2, currency:"EUR", basis:"per_unit", priceTypeId:"fob", ... }

格式化显示的价格范围

import { formatPriceRange } from "@cellarnode/finance";

formatPriceRange({ min: 12, max: 18, currency: "EUR", basis: "per_unit", ... });
// → "€12.00 - €18.00 per unit"

比较正常价格金额

import { compareNormalizedPriceAmount } from "@cellarnode/finance";

const result = compareNormalizedPriceAmount({
  amount: 7.5,
  min: null,
  max: 10,
  fromBasis: "per_unit",
  toBasis: "per_litre",
  packageVolumeMl: 750,
  fxRate: 1,
});
// { ok: true, relation: "within", comparisonAmount: 10 }

边界是包容性的、有限度的、非否定性的和有秩序的; null 打开一边. 两个界限都不能是 null. 数量必须是有限度的、非负的,以及FX率 必须是正和有限度的(通过) 1 (对同一种货币而言) 供应的软件包 数量必须是正的和有限度的,并且在基数不同时需要. 只有条子 per_unit 财务报告和审定财务报表 per_litre 基础被输入类型接受.

每一行都意味着 String(number) 十进制拼写,包括缩写. 关系使用精确的理性算法,不进行货币四舍五入或容忍. 资料 comparisonAmount 在 JavaScript 编号后方圆 比较;即使确切的关系不在其中,它也可能等同于约束. 流出或正结果四舍五入为零 { ok: false, reason: "unrepresentable_amount" }其他失败原因有: invalid_amount, (中文(简体) ), invalid_bounds, (中文(简体) ), invalid_fx_rate,以及 invalid_package_volume。 。 。 . 无 BigInt 值离开帮助者 .

呼叫者拥有货币身份, FX 选择/新鲜度, 信任的包量, (c) 合格的案件身份,以及不受限制的处理范围。 此助手执行 没有I/O,变异,评分或政策评价.

为什么是这个包裹?

在此之前 @cellarnode/finance{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}这只犬的价程是Zod schema的 cellarnode-backend-v2/src/features/opportunities/price-range-schema.ts3个仪表板(管理人员、生产商、进口商)重复了验证规则——在Spec 1执行期间已经观察到一次漂移。 这个软件包拥有有线格式的端到端,因此所有消费者保持同步.

发展

make build       # clean + typecheck + compile
make test        # vitest run
make test-watch  # vitest watch
make typecheck   # tsc --noEmit
make check-exports  # publint + arethetypeswrong

出版

发布至npm (公众访问 - publishConfig.access: "public"见CEL-1983 npm 信任出版(OIDC) —— 说 .github/workflows/publish.yml 在合并时自动发布到 main 变化 package.json'"版本. 出版工作没有长生不老的npm符号, 没有人运行 npm publish 手边。 这是私人财产 所以不像 @cellarnode/beverage-utils, npm 会 不生成此软件包的出处证明 .

切出一个本地发布,然后降落通过一个正常的PR:

make release-patch   # bump patch, commit, tag
make release-minor   # bump minor, commit, tag
make release-major   # bump major, commit, tag

目标撞了 package.json、建设、承诺和标记——它们不出版。 推开 分支,打开 PR,并合并到 main 启动CI的发布工作.

许可证

UNLICENSED——版权(c) Cellar节点. 版权所有。 这个软件包是 为 CellarNode 自己的申请而公布; 不给许可证 其他用途.

版本与发布记录

@cellarnode/finance 共发布 9 个版本,首次发布于 2026/04/24;过去 12 个月发布了 9 个版本。

版本发布日期距今
0.5.0latest2026/10/2020 天前
0.4.32026/09/151 个月前
0.4.22026/08/132 个月前
0.4.12026/06/174 个月前
0.4.02026/06/104 个月前
0.3.02026/05/275 个月前

关于 @cellarnode/finance 的常见问题

@cellarnode/finance 是什么?

Canonical price-range Zod schemas, BASIS enum, CellarNode (无头型Script)的货币助手.

如何安装 @cellarnode/finance?

在项目目录运行 npm install @cellarnode/finance,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:zod(^3.25.0 || ^4.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@cellarnode/finance 支持 TypeScript 吗?

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

@cellarnode/finance 支持 ESM 还是 CommonJS?

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

@cellarnode/finance 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.19.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cellarnode/finance 可以商用吗?

@cellarnode/finance 使用 UNLICENSED 许可。作者声明为 UNLICENSED,即不授予公开使用许可(与公共领域的 Unlicense 不同)。使用前需获得作者授权。以上为概括,不构成法律意见,请以许可原文为准。

@cellarnode/finance 的下载量有多少?

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

@cellarnode/finance 还在维护吗?

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