@fnndsc/fond (英语)
每一层雾都需要的片段,无论后端是什么:发动机所用的小而通用的基部(@fnndsc/brasa)),会议主办方(@fnndsc/calypso),而后端的自有软件包全部站立.
名字来自厨房,就像其他的堆: 美食之爱 是基地储备 一个厨房 烹饪其他的一切.
npm install @fnndsc/fond
为什么它存在
后端如ChRIS(CUBE)会带来自己的客户和自己的世界. 每个层都需要的棋子,不管后端是什么,都住在这里,而不是后端的套件,所以一个与CUBE无关的地层可以不用加载CUBE(参见 文件/后端中性.adoc) (中文(简体) ).
慈爱的一条规则: 这取决于什么 @fnndscCI对此持怀疑态度(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 只说失败了.
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 是整个过程的单一实例。 每个消息都印有推动它的函数名称:
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)之后,得到准确的信息 推入之间.
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。没有挂载要求的路径会回到倒计时.
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
└───────────────┘
许可证
麻省理工学院. 部分 爱。 。 。 .