@ entient/ cli- utils
由百度命令行工具共享的无依赖性CLI原始:
- 终端能力检测 —— 说
NO_COLOR编号 :FORCE_COLOR编号 :TERM优先使用可注射嵌入记录,因此检测为单位可测试. - ANSI 颜色助手 ——色后降解为身份(空字符串)代码 不支持.
- 闪光灯 —— 说
parse编号 :compare编号 :satisfies页:1major.minor.patch[-prerelease]无外部semver依赖性.
零运行时间依赖关系. 仅限无害环境管理.
安装
npm install @centient/cli-utils
或作为单体中的工作空间依赖:
pnpm add @centient/cli-utils --workspace
终端能力与颜色
检测被拆分为 a 纯核 (注射器) env 记录和a
流描述符 — read no globals)和薄 活程序包装器 页:1
人类基因组CLI呼叫网站.
颜色优先排序
resolveColorSupport(env, isTTY) 按此精确度确定颜色支持
优先( 最高胜 ) :
FORCE_COLOR当前 (任何价值,包括"") 颜色 打开NO_COLOR当前 (任何价值,包括"") 颜色 关闭TERM === "dumb"• 颜色 关闭, (中文(简体) ),isDumb = true- 流为 TTY • 颜色 打开
- 否则 • 颜色 关闭
存在通过关键存在测试 NO COLOR 公约:
变量的单纯存在是信号,无论价值如何. 一个钥匙
值为 undefined 计数为 缺席。 。 。 .
import {
detectCapabilities,
makeAnsiColors,
colorize,
} from "@centient/cli-utils";
// Pure / testable: pass an env record and a stream descriptor.
const caps = detectCapabilities(process.env, process.stdout);
// caps -> { isTTY, hasColor, isDumb, width }
const colors = makeAnsiColors(caps.hasColor);
console.log(colorize(colors, "green", "ok"));
// "ok" is wrapped in ANSI green when color is enabled, returned unchanged when not.
现场处理便利包装器
import { detectTerminalCapabilities, createAnsiColors } from "@centient/cli-utils";
const caps = detectTerminalCapabilities("stdout"); // reads process.env + process.stdout
const colors = createAnsiColors(); // colors for the live stdout
结构错误
import { writeError } from "@centient/cli-utils";
writeError("config not found", "a path to engram.json", "pass --config <path>");
// [ERROR] config not found
// Expected: a path to engram.json
// Recovery: pass --config <path>
水槽可以注射(writeError(what, expected, recovery, write?), (中文(简体) ),
默认为 process.stderr返回无效;退出代码处理是
电话员的责任.
闪光灯
参数 major.minor.patch 带有可选预释标识符并构建
元数据。 构建元数据解析并忽略命令( SemVer 2. 0)
§10. 按SemVer 2.0 §11订出预放行——一种预放行种类 下级
它的释放.
import {
parseSemver,
tryParseSemver,
formatSemver,
compareSemver,
compareVersions,
satisfies,
} from "@centient/cli-utils";
parseSemver("1.2.3-rc.1");
// { major: 1, minor: 2, patch: 3, prerelease: ["rc", 1] }
tryParseSemver("v1.2.3"); // parsed tuple
tryParseSemver("not-a-version"); // null (diagnostic/fail-open paths)
const actual = tryParseSemver("v1.5.0");
const minimum = tryParseSemver("1.2.0");
const meetsMinimum =
actual === null || minimum === null
? null // caller chooses whether to warn, skip, or fail open
: compareSemver(actual, minimum) >= 0;
formatSemver(parseSemver("1.2.3-rc.1")); // "1.2.3-rc.1" (round-trips)
compareVersions("1.0.0-rc.1", "1.0.0"); // -1 (pre-release < release)
satisfies("1.5.3", "^1.2.0"); // true
支持范围表单
没有复合范围,没有 ||,没有连字符范围.
| 范围 | 含义 |
|---|---|
1.2.3 | 准确匹配 |
>=1.2.3 | 包含下限 |
>1.2.3 | 唯一下限 |
<=1.2.3 | 包含上限 |
<1.2.3 | 绝对上限 |
^1.2.3 | 护理:相同大、高或高(>=1.2.3 <2.0.0(中文(简体) ) |
~1.2.3 | 平面: 同一主要. minor, 水平或以上 (>=1.2.3 <1.3.0(中文(简体) ) |
* 编号 : "" | 任何版本 |
parseSemver, (中文(简体) ), compareVersions,以及 satisfies 保持严格:缺陷
版本或区域抛出 SemverError (载运) expected 财务报告和审定财务报表 input 字段)
而不是无声地羞辱. tryParseSemver 是明显的非抛掷
外部报告版本的边界; 它返回 null 无效输入
并接受一个常规小写 v 就在数字核心之前.
API 密码
| 导出 | 说明 |
|---|---|
resolveColorSupport(env, isTTY) | 纯色支持解析器(优先核心). |
detectCapabilities(env, stream) | 纯能检测从一个嵌入记录 + 流描述符. |
detectTerminalCapabilities(stream?) | 直播进程包装器结束 detectCapabilities。 。 。 . |
makeAnsiColors(enabled) | 纯 ANSI 颜色设置; 禁用时为空字符串 . |
createAnsiColors() | 活程序包装; stdout 的颜色 . |
colorize(colors, code, text) | 在代码 + 重置中环绕文字,或禁用时的身份. |
writeError(what, expected, recovery, write?) | 三段结构错误到可注射槽. |
parseSemver(input) | 解析到 SemverTuple; 抛出 SemverError。 。 。 . |
tryParseSemver(input) | 解析外部版本而不丢出; 接受领导 v 返回时 null 输入无效. |
formatSemver(v) | 格式回到字符串( 回合) parseSemver) (中文(简体) ). |
compareSemver(a, b) 编号 : compareVersions(a, b) | 总订单比较-1 编号 : 0 编号 : 1) (中文(简体) ). |
satisfies(version, range) | 对一个范围进行测试. |
许可证
麻省理工学院