近日略闲,于是把之前挖的一些坑填了填,随之草草记录一下,好以此合影留念。

一个工具库 Silver ​

Silver 允许你在写命令行工具的时候,像写文档一样顺畅。

这个库最开始的语法是用正则表达式匹配的,导致很多边界条件无法考虑到,写错了也很难排查。 最近用 ohm-js 重写了语法模块,语法匹配起来更加健壮,如果有语法错误,也会有基础的提示,虽然提示并不是很容易理解。看个例子🌰:

ts
import { silver } from '@0x-jerry/silver'
// @autocompletion will enable `completion` subcommand to generate autocomplete script
// Autocompletion only support zsh for now, and need to install manually
// Manual install: you need to append `source <(silver completion)` to `.zshrc`
const ins = sliver`
v1.0.0 @autocompletion

Silver, let you writing CLI like writing document. ${defaultAction}

-t --test @test:defaultValue, Test autocompletion.

up/upgrade <@test:dir> [...other] #stopEarly, an sub command. ${upgradeAction}

-s --string @string:default, sub command option.
--small @bool, other option.
`

// register autocomplete
ins.type('type', () => ['t1', 't2', 't3'])

function defaultAction(args, options) {
  console.log(args, options)
}

function upgradeAction([dir, ..other], options) {
  console.log(dir, other, options)
}

近期也趁机把一些很早就想做的优化补上了:

  • -h --help 现在显示的帮助文档更加漂亮,也支持显示版本号了
  • 默认支持 -h --help 参数,不再需要显式声明
  • 默认不再添加 completion 子命令,需要显式声明

一些公开的 Serverless 接口 Public API ​

此项目是很早之前为了测试 deno deploy 随手写的,很久没有用了。

最近遇到一个 RSS 订阅文件(问题 rss.xml)不规范,导致 FreshRSS 无法正常获取内容。 为了解决这个问题,所以把 Public API 这个项目宠幸了一番,用 hono 重写了一遍,写了一个接口用于把有问题的 rss.xml 转换成合法的 rss.xml

目前这个项目有一些可用的 API,具体可查看 Public API。

好久没有关注 Deno Deploy,这次重写发现 Deno 已经完全兼容 Node 🎉🎉(但使用 Node 模块时,还是需要指定 node: 标识)。

配合 Deno 出现的是 jsr.io,虽然 jsr.io 说是支持 Node,不过在 Node 项目里使用 jsr.io 就像是在当面牛头人 npm 😂。还是在 Deno 项目里食用更佳。

不得不说,Deno Deploy 整体使用起来非常流畅,非常适合用来做一些 MVP 项目,毕竟白嫖,且免费额度挺多的(目前 1M Request/month, 100G Bandwidth/month),开箱即用的 KV 模块也基本够用。

Typescript <=> OpenAPI Schema 相互转换 ​

这一块有两个工具:

  • OpenAPI-TS-Define: 根据 Typescript 声明的类型生成 OpenAPI Schema,用于后端。
  • OpenAPI-TS: 根据 OpenAPI Schema 生成 Typescript 代码,用于前端。

OpenAPI-TS-Define 还在开发中,基本可用,但项目本身却还没有文档 😂,真是离谱!!!估计又是一个坑,毕竟我自己写后端的时候比较少。

OpenAPI-TS 基本稳定,但还是有一些功能想做但还没有做,例如:

  • 提供更全面的 CLI,目前的 CLI 工具,就是近期刚加上的,基本够用吧 够用了还不够?
  • 提供平铺函数名称模式(主要区别在于调用方式不用 ApiUserGet(params) vs api.user.$get(params)),目前默认生成后者

这个工具基本稳定,后续估计会补全一下使用文档,以及处理一些边界条件吧。

其它只配一提的工具 ​

中场小结 ​

在此时一个不上不下的时刻,在安安静静地搬砖之外,也应享受另一片自由的天空!

你好陌生人🤝,感谢你花时间看完尘封于世间角落的这片文章,祝你生活愉快,再见陌生人!👋

此处应有张配图!
此处应有张配图!
完