# @fnndsc/fond 中文文档

规范地址：https://npmcn.com/package/%40fnndsc/fond/

版本：0\.6\.2
npm 元数据更新时间：2026-11-15T01:13:38.781Z
中文译文更新时间：2026-11-15T03:51:40.874Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40fnndsc/fond
原文对照：https://npmcn.com/package/%40fnndsc/fond/?lang=original
项目主页：https://github.com/HARBOR-Medical-AI/mise/tree/main/packages/fond#readme
源码仓库：https://github.com/HARBOR-Medical-AI/mise

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：165 kB，36 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2026-10-08T22:06:59.073Z
- 最新版本发布：2026-11-15T01:13:38.588Z
- 近 30 天下载量：3730（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：12（近 12 个月 12 个）

## 中文简介

每一层雾都需要的碎片 不论后端是什么 取决于在 @fnndsc 中的任何内容.

## 安装

```sh
npm install @fnndsc/fond
```

也可以使用：`pnpm add @fnndsc/fond`、`yarn add @fnndsc/fond`、`bun add @fnndsc/fond`

## README

# @fnndsc/fond (英语)

每一层雾都需要的片段,无论后端是什么:发动机所用的小而通用的基部(`@fnndsc/brasa`)),会议主办方(`@fnndsc/calypso`),而后端的自有软件包全部站立.

名字来自厨房,就像其他的堆: _美食之爱_ 是基地储备 一个厨房 烹饪其他的一切.

```
npm install @fnndsc/fond
```

## 为什么它存在

后端如ChRIS(CUBE)会带来自己的客户和自己的世界. 每个层都需要的棋子,不管后端是什么,都住在这里,而不是后端的套件,所以一个与CUBE无关的地层可以不用加载CUBE(参见 [文件/后端中性.adoc](https://github.com/HARBOR-Medical-AI/mise/blob/main/docs/backend-neutral.adoc)) (中文(简体) ).

慈爱的一条规则: **这取决于什么 `@fnndsc`**CI对此持怀疑态度(`npm run lint:fond`) (中文(简体) ). 它唯一的依赖是 `chalk`,用于列表视图.

## 里面有什么东西

| 导出 | 这是什么 |
| --- | --- |
| `Result<T>`, (中文(简体) ), `Ok`, (中文(简体) ), `Err`, (中文(简体) ), `result_isOk`, (中文(简体) ), `result_isErr` | 明确的成功或失败价值。 一个函数返回 `Result<T>` 而不是说 `T | null`,而 TypeScript 将不会让呼叫者读取 `.value` 直到检查完毕 `.ok`。 。 。 . |
| `errorStack` | 整个进程的信息堆积起来,报告失败,有上下文隔离的放眼和检查站. |
| `errorStack_configure`, (中文(简体) ), `errorStack_getAllOfType`, (中文(简体) ), `StackMessage` | 配置,一个方便阅读器,以及消息类型. |
| `VFSProvider`, (中文(简体) ), `VFSItem`, (中文(简体) ), `CpOptions` | 虚拟文件系统的合同:一个挂载,它声称路径前缀和列表,复制和(可选择的)阅读,写作,制作,去掉并重命名在其下;它所列出的项目. |
| `VFSDispatcher` | 向拥有路径的挂载或向倒置方向运行。 它不知道后端:一个后端记录它的挂载并命名它的倒置. |
| `vfsItems_sort` | 按名称、大小、日期或所有者排序列表中的项目,而不更改给出的数组. |
| `grid_render`, (中文(简体) ), `long_render`, (中文(简体) ), `size_format` | 作为终端的列表显示: `ls`电网和 `ls -l`长相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相. |
| `ListingLook`, (中文(简体) ), `ItemKindLook`, (中文(简体) ), `LISTING_CORE_KINDS`, (中文(简体) ), `LISTING_LOOK_PLAIN` | 一个列表如何显示:核心的种类(文件,文件夹,链接,挂载)和一个后端的旁边,每个后端都有它的长视图标记,一个名字是如何被取色的. |
| `listingItems_sort` | 按一个字段对列表进行排序;一个倒置的排序按项目顺序保持等号. |

## 使用 `Result`

故障本身没有有效载荷:原因出现在错误堆上,表面可以显示 `Result` 只说失败了.

```typescript
import { Ok, Err, errorStack, type Result } from '@fnndsc/fond';

async function config_read(path: string): Promise<Result<Config>> {
  const text: string | null = await file_read(path);
  if (text === null) {
    errorStack.stack_push('error', `No configuration at ${path}.`);
    return Err();
  }
  return Ok(config_parse(text));
}

const config: Result<Config> = await config_read('~/.config/app.yml');
if (!config.ok) {
  // config.value does not exist here; TypeScript says so.
  return;
}
config_apply(config.value);
```

## 使用错误堆栈

`errorStack` 是整个过程的单一实例。 每个消息都印有推动它的函数名称:

```typescript
errorStack.stack_push('error', 'CUBE refused the login');
errorStack.stack_pop();
// { type: 'error', message: '[login_run                               ] | CUBE refused the login' }
```

阅读和清除:

| 方法 | 对 |
| --- | --- |
| `stack_push(type, message)` | 推着一个 `error` 或一个 `warning`。 。 。 . |
| `stack_pop()`, (中文(简体) ), `stack_getAll()` | 取最新消息; 列出全部信息 . |
| `stack_search(text)`, (中文(简体) ), `messagesOfType_search(type, text)` | 查找包含一些文本的信件 . |
| `allOfType_get(type)`, (中文(简体) ), `messages_has()`, (中文(简体) ), `messagesOfType_has(type)` | 按类型读取;询问是否有什么内容. |
| `stack_clear()`, (中文(简体) ), `type_clear(type)` | 扩展堆栈,或一种类型. |

有两个特征使同时进行的工作不会混淆其错误:

-   **范围.** 内部工作 `errorStack.scope_run(fn)` 由节点公司承载 `AsyncLocalStorage` 通过每个 `await` 内在的 背景工作(缓冲变暖,刷新)在范围中运行,因此它的失败永远不会在前台命令的报告中落地.
-   **检点.** 命令调用 `checkpoint_mark()` 在它起作用之前 `checkpoint_drain(mark)` 之后,得到准确的信息 推入之间.

```typescript
const mark: number = errorStack.checkpoint_mark();
const answer: Result<Listing> = await listing_fetch(path);
const reasons: StackMessage[] = errorStack.checkpoint_drain(mark);
```

`errorStack_configure({ functionNamePadWidth })` 设定添加函数名印花的宽度.

## 虚拟文件系统

会话文件系统是一棵由挂载组成的树. 每个挂载(a) `VFSProvider`) 主张路径前缀和答案,用于它所在或下面的一切;在一段边界匹配的最长前缀获胜,所以 `/proc/jobs` 优先于 `/proc`,以及 `/procs` 没有低于 `/proc`。没有挂载要求的路径会回到倒计时.

```typescript
import { VFSDispatcher, type VFSProvider } from '@fnndsc/fond';

const dispatcher: VFSDispatcher = new VFSDispatcher(filesFallback);   // what no mount claims
dispatcher.provider_register(notesMount);                             // prefix '/notes'
dispatcher.provider_register(jobsMount);                              // prefix '/proc/jobs'

await dispatcher.list('/proc');        // the mounts beneath it ('jobs'), beside what the fallback holds there
await dispatcher.read('/notes/today'); // notesMount.read('/notes/today')
```

每一次挂载操作都因姓名而被拒绝(`mkdir: cannot create directory '/x': Read-only file system`),从未默默被忽略. 没有倒计时的调度器拒绝任何没有挂载的路径, 而不是用空文件夹回答 . `pathResolver_register` 添加一个钩子,在倒背者看到它之前将路径映射到倒背者自己的形态;一个无法解决路径的复制会失败而不是猜测. 一个代表倒计时文件夹的挂载( 任务) `data` 下级 `/proc/jobs` 工作输出文件夹中是否有此语句 `storePath_resolve`:它下面的倒行道意味着一条倒行道,或者对于挂载的一条路径来说是无效的. 一个会话问它, 和倒背的链接在答案, 之前,每个读取和列表(brasa's `storePath_resolve`) (中文(简体) ).

## 一例,谁装就装

错误堆栈只有在整个进程共享一个时才有效 。 喜欢是建立在普通JS, 所以包 `require` 它(积分)和包件 `import` 它(萨尔萨,brasa,calypso) 装入相同的模块,所以是相同的堆. `@fnndsc/cumin` 再出口的宠物 `Result` 财务报告和审定财务报表 `errorStack` 而不是保留复制品, 所以代码从Cumin进口它们 共享堆栈。 如果你捆绑的代码 使用喜欢的, 保存在一个副本.

## 其所坐处

```
  brasa (engine)    calypso (session host)    cumin, salsa (the ChRIS backend)
        │                     │                          │
        └─────────────────────┼──────────────────────────┘
                              ▼
                      ┌───────────────┐
                      │     fond      │   depends on nothing in @fnndsc
                      └───────────────┘
```

## 许可证

麻省理工学院. 部分 [爱](https://github.com/HARBOR-Medical-AI/mise)。 。 。 .

## 常见问题

### @fnndsc/fond 是什么？

每一层雾都需要的碎片 不论后端是什么 取决于在 @fnndsc 中的任何内容\.

### 如何安装 @fnndsc/fond？

在项目目录运行 npm install @fnndsc/fond，或使用 pnpm add / yarn add / bun add。

### @fnndsc/fond 支持 TypeScript 吗？

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

### @fnndsc/fond 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @fnndsc/fond 可以商用吗？

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

### @fnndsc/fond 的下载量有多少？

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

### @fnndsc/fond 还在维护吗？

最新版本 0\.6\.2 发布于 2026/11/15（今天）；至今共发布 12 个版本，其中过去 12 个月发布了 12 个；首次发布于 2026/10/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

