@deessejs/fp (英语)
轻量级,TypeScript的型式安全功能编程工具. 成果,也许,尝试,单位,和朋友——只针对无害环境管理,不依赖运行时间,为一等互操作性设计 @ deessejs/ errors (英语)。 。 。 .
兄弟姐妹项目:
@deessejs/errors提供本地集成错误类型@deessejs/fp是因为Result财务报告和审定财务报表Try。将它们安装在一起,以获得一个没有胶水代码的完整错误处理故事. 内部使用 时间 deessejs.com (英语)。 。 。 .
包括什么
| 层 | 你得到的东西 | 为什么这很重要 |
|---|---|---|
Result<T, E> | ok, (中文(简体) ), err,图案匹配,排序 | 类型安全错误处理无一例外或无效. |
Maybe<T> | some, (中文(简体) ), none, (中文(简体) ), maybe, (中文(简体) ), map, (中文(简体) ), getOrElse | 构成的可选价值. |
Try<T> | try, (中文(简体) ), tryAsync转换为 Result | 在打入的 shell 中环绕抛出函数 . |
Unit | 无效返回操作的单位类型 | 不显示“ 无值” 表示 null 或者说 undefined。 。 。 . |
| 公用事业 | pipe, (中文(简体) ), flow, (中文(简体) ), identity, (中文(简体) ), constant, (中文(简体) ), flip, (中文(简体) ), tupled | 编译功能时不附带临时助手. |
| Async公用事业 | sleep, (中文(简体) ), retry, (中文(简体) ), timeout, (中文(简体) ), Queue | 以时间为基础的原始人 Result。 。 。 . |
| 上游公用事业 | Predicate, (中文(简体) ), Refinement, (中文(简体) ), not, (中文(简体) ), and, (中文(简体) ), or | 一等前卫和类型后卫. |
| 收集类型 | Context, (中文(简体) ), Sequence, (中文(简体) ), Collection,协奏器助手 | 各种来源的序列操作. |
| 发电机组成 | gen() 与 yield* | 类似同步代码的 Async 流量控制 . |
@deessejs/errors 融合 | 全体 Result 构造器接受 @deessejs/errors | 没有字符串- error footguns —— 使用真实错误类型 . |
为什么是这堆
- 默认很简单. 没有过度工程, 没有花花公子类型的体操。 只是原始人 你需要写干净的代码.
- 仅限无害环境管理. 现代包装,没有CJS shim,没有
module编号 :main重叠. - 零运行时间依赖关系. 唯一的对等数据是
@deessejs/errors,这是选入。 图书馆本身是无依赖的. - TypeScript 6 头等舱. 严格类型, 不
any出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 仅凭类型是不够的. - Lockfile - clean pnpm 工作空间. 单人
pnpm install重建 涂料 类型 测试整个单体. - 真正的测试. 测试,包括覆盖和整合测试 @ deessejs/ errors (英语)。 。 。 .
快开始
先决条件
- 节点.js 22.14.0+ (中文(简体) ) (单位:千美元)
engines.node(已执行) - 小时 10岁以上 联合国
corepack enable如果未安装) - 类型脚本 6+ 时间 供消费者使用(软件包输出)
dist/*.d.ts(中文(简体) )
安装
# Install @deessejs/fp with its optional sibling, @deessejs/errors.
# See https://github.com/deessejs/errors
npm install @deessejs/fp @deessejs/errors
@deessejs/errors 是可选的——如果需要安装 Result<T, E> ,可以将键入错误而不是字符串.
使用量
import { ok, err, some, none, maybe, pipe } from '@deessejs/fp';
// Result: represent values that may have failed
const divide = (a: number, b: number) => (b === 0 ? err('Division by zero') : ok(a / b));
const result = divide(10, 2);
result.match({
ok: (value) => console.log(`Result: ${value}`),
err: (error) => console.error(`Error: ${error}`),
});
// Maybe: represent optional values
const user = { name: 'Alice', address: { city: 'Paris' } };
const city = maybe(user.address?.city)
.map((c) => c.toUpperCase())
.getOrElse('Unknown');
// pipe: compose functions without glue
const trim = (s: string) => s.trim();
const uppercase = (s: string) => s.toUpperCase();
const processed = pipe(' hello ', trim, uppercase);
引擎兼容性
| 运行时间 | 最小版本 |
|---|---|
| 节点.js | 22.14.0 (中文(简体) ) |
| 小时 | 10(促进发展) |
| 类型脚本 | 6.0 (韩语) |
仅限无害环境管理。 使用 CJS 解析器的消费者需要使用动态 import() 或迁移到无害环境管理.
可用命令
工作空间( 根)
| 命令 | 它会做什么 |
|---|---|
pnpm build | 构建每个工作空间 |
pnpm test | 在监视模式下运行所有测试 |
pnpm test:run | 运行所有测试一次 |
pnpm lint | 缩小每个工作空间 |
pnpm type-check | 类型检查每个工作空间 |
pnpm format | 格式为 Pretier |
软件包 : @deessejs/fp
| 命令 | 它会做什么 |
|---|---|
pnpm --filter @deessejs/fp build | 构建 dist/ |
pnpm --filter @deessejs/fp test | 以监视模式运行 vitest |
pnpm --filter @deessejs/fp test:run | 运行一次vitest |
pnpm --filter @deessejs/fp type-check | tsc --noEmit |
pnpm --filter @deessejs/fp lint | 运行 ESLint |
应用 : web
| 命令 | 它会做什么 |
|---|---|
pnpm --filter web dev | 以 Dev 模式启动文件站点 |
pnpm --filter web build | 构建文件站点 |
兼容性
同伴依赖关系
| 软件包 | 需求 | 页:1 |
|---|---|---|
@deessejs/errors | 可选, 同行 >=1.0.0 | 如果您需要, 则需要 err() 以接受输入错误。 列为 devDependency 测试. |
发动机
| 外地 | 数值 |
|---|---|
engines.node | >=22.14.0 |
packageManager | [email protected] |
项目结构
.
├── packages/
│ └── fp/ # The library — @deessejs/fp on npm
│ ├── src/ # Source code (ESM)
│ ├── dist/ # Build output (gitignored)
│ ├── vitest.config.ts
│ └── tsconfig.build.json
├── apps/
│ └── web/ # Documentation site (Next.js + Fumadocs)
├── docs/
│ ├── internal/ # Engineering plans, runbooks
│ │ ├── product/
│ │ └── versions/
│ └── AGENTS.md # Agent guidance (CLAUDE.md redirects here)
├── pnpm-workspace.yaml
├── turbo.json # Turborepo pipelines
├── .changeset/ # Changesets for versioning
└── README.md
出版
发行版通过Refersets + npm Trusted Publishing(OIDC)实现全自动化. 没有长寿 NPM_TOKEN 需要时间.
| 什麽 | 怎么样 |
|---|---|
| 弹出版本 | 添加一个 .changeset/<topic>.md 带有 semver + 描述的文件 |
| 打开发布 PR | changesets-version.yml 打开/ 更新“ Version 套件” PR ,从装入到主 |
| 发布 | 合并版本包 PR- publish.yml 运行 = 版本突起 = 信任出版 = npm 有来源证明 |
| 热补 | 按一个标签 vX.Y.Z 到主 – 热补路径相同的工作流程运行 |
| 退后或贬值 | 计划:见 docs/engineering/plans/release-pipeline-github-ui-setup.md |
关于管道的全部设计,见 docs/engineering/plans/release-pipeline.md。 。 。 .
结构说明
- 仅限无害环境管理. 软件包导出ES模块. 消费者使用遗留的 CJS 解析器必须使用动态
import()。 。 。 . - 严格的类型.
Result.match要求两个分支;Maybe.getOrElse需要一个倒计时。 没有部分类型的出逃. - 组成优先于继承. 所有原始人通过
pipe财务报告和审定财务报表flow没有阶级等级,没有extends。 。 。 . - 零跑时间抽象. 没有装饰,没有反射,没有代理陷阱. DevTools 和
node --prof。 。 。 . - 出版前经过烟雾测试. 发布工作流程对已建成的文物进行动态的无害环境管理进口,并核实存在关键出口。 一个已断开的构建在到达 npm 之前失败了发布步骤 .
@deessejs/errors选择进入. 同龄人可以选择 消费者可以选择@deessejs/fp被隔离。 一次@deessejs/errors添加,每个err(error)调用接受打出错误.- 认证式错误的真相来源. 这个
apps/app/proxy.ts(在更广泛的deessejs monorepo中,而不是在这个repo中)在代理级别执行电子邮件验证. @ deessejs/ errors (英语) 错误被捕获并翻译为集中的 HTTP 响应 .
捐款
打开一个问题来讨论更大的变化. 对于打字,断开的链接和小修正,公关是受欢迎的.
在提交公关前:
- 运行
pnpm --filter @deessejs/fp test:run财务报告和审定财务报表pnpm --filter @deessejs/fp lint。 。 。 . - 添加一个
.changeset/<topic>.md如果更改是用户化的(patch / small / major) . - 更新
docs/internal/product/README.md如果 API 表面改变.
许可证
麻省理工学院。详情见LICENSE文件.