@farthershore/business

中文文档
3.5.0发布于 2026/11/10MITTypeScriptES Module近 30 天下载 5480

Farther Shore Business-as-Code SDK — 在类型脚本中声明您的软件业务

中文使用文档
文档目录6 节
  1. 安装
  2. 撰写模式
  3. 文件夹发现和隔离
  4. 决定主义
  5. 主要声明
  6. 重命名计数器

@ farthershore/ 商业

SDK的功能 用于宣布路线、仪表、计划, 资源,以及普通类型脚本中的后端。 远岸 将这些宣言汇编成决定性宣言 明确IR 并应用边缘授权、限制、使用计量和计费.

状态 : 3.5.0。 。 。 . 此 SDK 版本独立于前端 后端的SDKs(英语:SDKs).

安装

pnpm add @farthershore/business

3.x API是一个功能值模型. 用一个 名称空间导入 :

fs.business() 返回一个不透明的控件,其编译清单保存在 非出口包单通. 原始对象和有计划有效 JSON 无法 冒充SDK出品的生意 由单独捆绑而成的生意 因此,SDK的物理副本被拒绝;在自己的进程中运行该副本 或将每个业务模块解析为同一已安装的软件包实例.

import * as fs from "@farthershore/business";

const requests = fs.requests();
const tokens = fs.meter("tokens", { unit: "token" });
const seats = fs.resource("seats", { cap: fs.scope.subscription });

// Routes need a backend; with exactly one, every route uses it implicitly.
fs.backend("api");

const chat = fs.route("/v1/chat", {
  post: { costs: [requests.fixed(1)], reports: [tokens] },
});
const admin = fs.route("/v1/admin", {
  post: { surfaces: [fs.surfaces.api] },
});

fs.plan("pro", {
  kind: fs.plan.kind.flat,
  price: fs.money.usd(49).monthly(),
  grants: [chat, admin],
  limits: [tokens.perMonth(1000000), seats.max(25)],
});

export default fs.business();

撰写模式

申报功能返回不可改变,品牌化的参考文献。 相互参照 所以打字机不能无声地 给缺失的仪表 后端 资源, 路径,或赠款组。 平台控制词汇按类型分类 命名空间, 如 fs.surfaces, (中文(简体) ), fs.scope,以及 fs.money; 建造者拥有 标记如计量器的单位仍然是字符串.

价格使用人的主要单位: fs.money.usd(49).monthly() 指每笔49美元 月并下至精确整数小单位. 每个计划都宣布 kind (单位:千美元)fs.plan.kind.free | flat | usage | prepaid | hybrid | trial | custom; 计 数 此类物质的验证与计划的经济控制相对应(price, (中文(简体) ), usagePricing, (中文(简体) ), funding, (中文(简体) ), lifecycle, (中文(简体) ), spendPolicy) 并且从未被推断 从形状。 使用费只存在于 fs.pricing() 目录和供资 水桶——一个计划没有每米的速率. 例如,测量器限制帮助使窗口清晰 tokens.perMinute(600) 或者说 tokens.perMonth(1000000)。 。 。 .

计划直接批准路线. fs.group() 可能会将路由参考器捆绑起来进行再利用. 特性、能力、特性门和字符串键授权不是 部分为 3.x 作者表面. 非洲区域局的启用由平台管理——a 业务上的仪表板/API旗,不是重写声明;前端 权限字符串仍然是独立的组件/成员授权 词汇.

订阅者群组也是平台拥有的发行状态. 构建者作者计划 参考和路线组; 核心指针用户不可改变编译计划组群 在申请和迁移期间。 不要将分组标识符或非洲区域局旗帜放入 Business SDK程序或手工Manification IR.

文件夹发现和隔离

传统方案以 business/; 管理启动器使用 business/business.ts,但发现文件名不可知:

business/
  business.ts
  routes.ts
  plans.ts

编译器导入每个源模块 business/ 以条条序. 一个模块必须默认导出 fs.business()。在 重新设置在新工人领域的编译范围登记册 建造,因此无法单独建造和复制物理SDK装置 相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相会相.

普通类型Script是惰性的: 助手函数, 不相关的导入, 计算 常数、注释和额外出口不输入清单。 仅 SDK 创建的声明和密封默认 fs.business() 结果为 消费。 导入时丢入的模块生成文件位置构建 错误.

决定主义

业务单元必须具有决定性。 平台两次编译程序 且拒绝分道扬镳。 避免时间、随机性、网络呼叫、文件系统 以及以环境为依托的宣言.

主要声明

  • fs.requests() 财务报告和审定财务报表 fs.meter() 宣布计量维度.
  • fs.route(path, operations) 声明路径首个 HTTP 操作 .
  • fs.plan(key, options) 宣布价格、直接路线赠款、限额、信贷、, 审判,花费界限和档案行为.
  • fs.resource() 宣布计算资源; resource.max(n) 创建一个 按计划输入所有权限额.
  • fs.backend() 声明后端并返回可选择路由的参考文件 .
  • fs.group() 捆绑路线可重复使用.
  • fs.business() 封存注册,是唯一有效的默认导出.

重命名计数器

计数器 id 是它的稳定身份 和它的密钥的默认。 计划限制, 路由计量、定价、后端允许列表和使用历史均按键 根据身份,所以重命名一个表 通过改变它的键和钉住旧的 键为 id数字 :

// was: fs.meter("calls", { unit: "call" })
const apiCalls = fs.meter("api_calls", { id: "calls", unit: "call" });
// was: fs.requests()
const requests = fs.meter("billable_requests", { id: "requests" });

重命名 fs.requests() 保存默认值( 单位 ) request, (中文(简体) ), COUNT 汇总, estimated_then_settled 你所忽略的, 因此,重命名只改变名称。 (你宣称的普通计分器) 作为 fs.meter("requests", ...) 没有 fs.requests(): 当重新命名时, 拼写 任何你所依赖的选项

保持不变 id 在以后的每个重命名上。 重命名为已存在的无操作 用户(相同的计划版本、价格、限制和使用历史);默认 显示标签跟随新密钥,后端在其新密钥下报告公尺 键。 无需修改密钥 id 宣布新计数器( 现有用法不 结转). 计数器的键可能不等于 又一个计数器 id键或键 id。 。 。 .

前端页面和导航在可编辑区域中直播 frontend/ 应用. 路线 surfaces 声明某项操作是否可以从API证书中调用, 平台UI,或两者;它们不声明前端路线.

使用混凝土或 OpenAPI 样式的路由 {parameter} 路径和列表 HTTP 实际存在的操作。 结卡是非授予选择者 在单独申报的路线上附加共享计量:

const tokens = fs.meter("tokens", { unit: "token" });

const createChat = fs.route("/v1/chat", {
  post: { surfaces: [fs.surfaces.api] },
});

const getChat = fs.route("/v1/chat/{id}", {
  get: { surfaces: [fs.surfaces.api, fs.surfaces.ui] },
});

fs.meterRoutes("chat-tokens", "/v1/chat/**", {
  reports: [tokens],
});

fs.plan("pro", {
  kind: fs.plan.kind.flat,
  price: fs.money.usd(49).monthly(),
  grants: [createChat, getChat],
  limits: [tokens.perMonth(1000000)],
});

meterRoutes(key, target, options) 总是带一个作者提供的稳定 键。 通配符字符串、赠款组或数组目标是一个结构计量 在匹配的路线上覆盖;一个单一的路线参考目标就是该路线的 商业计量约束(reports 已申报的公尺 measures附加时 入学限制)。 它从不创建或授权操作 和选择者 匹配未声明的路由失败 。 本地路线 reports 或者说 costs 装订替换该操作所继承的通配符; 没有操作 costs编号 :reports (而且没有重叠匹配)没有得到满足.

业务身份和列报元数据为平台所有,不是 写在这个SDK.

版本与发布记录

@farthershore/business 共发布 25 个版本,首次发布于 2026/06/27;过去 12 个月发布了 25 个版本。

版本发布日期距今
3.5.0latest2026/11/104 天前
3.4.12026/11/068 天前
4.0.0next2026/11/0113 天前
3.4.02026/10/1430 天前
3.3.02026/10/041 个月前
3.2.02026/09/072 个月前

关于 @farthershore/business 的常见问题

@farthershore/business 是什么?

Farther Shore Business-as-Code SDK — 在类型脚本中声明您的软件业务

如何安装 @farthershore/business?

在项目目录运行 npm install @farthershore/business,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 farthershore-manifest-build,可以用 npx farthershore-manifest-build 直接运行。

@farthershore/business 支持 TypeScript 吗?

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

@farthershore/business 支持 ESM 还是 CommonJS?

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

@farthershore/business 需要什么版本的 Node.js?

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

@farthershore/business 可以商用吗?

@farthershore/business 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@farthershore/business 的下载量有多少?

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

@farthershore/business 还在维护吗?

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