@bgotink/kdl

中文文档
0.4.1发布于 2026/10/14MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 13.3万

方便修改的 KDL 解析器和序列器.

中文使用文档
文档目录9 节
  1. 安装
  2. 使用量
  3. JSON-in-KDL(吉克语)
  4. (去)序号
  5. KDL v1 数据
  6. 基尔克
  7. 属性
  8. 数字
  9. 许可证

@bgotink/kdl

此软件包包含一个解析器和字符串 KDL 文档语言,一种以节点为基础,方便人类的配置和串行格式.

此软件包中的解析器注重以允许格式保留修改的方式解析文档. 这在与人类维护的KDL文件合作时最为有用.

安装

yarn add @bgotink/kdl
# or
npm install @bgotink/kdl
# or
pnpm add @bgotink/kdl
# or ...

使用量

以下例子假设一个节点.js环境. 这个 @bgotink/kdl 软件包在任何javascript运行时间,包括浏览器中工作,只要它支持相对现代的浏览器标准. 如果您想在非节点运行时运行这些样本,请将输入替换为 assert 和你的运行时间相当的东西.

import {parse, format} from "@bgotink/kdl";
import assert from "node:assert/strict";

const doc = parse(String.raw`
    node "value" #"other value"# 2.0 4 #false \
            #null -0 {
        child; "child too"
    }
`);

doc.nodes[0].children.nodes[0].entries.push(
    parse(
        String.raw`/-lorem="ipsum" \
            dolor=#true`,
        {as: "entry"},
    ),
);

assert.equal(
    format(doc),
    String.raw`
    node "value" #"other value"# 2.0 4 #false \
            #null -0 {
        child /-lorem="ipsum" \
            dolor=#true; "child too"
    }
`,
);

JSON-in-KDL(吉克语)

此套件导出功能来自 @bgotink/kdl/json 以 JSON- in- KDL (JiK) 4. 0. 关于格式的资料,见 jiK 4.0.0 规格。 。 。 .

import {parse} from "@bgotink/kdl/json";
import assert from "node:assert/strict";

assert.deepEqual(
    parse(
        String.raw`
            - {
                prop #false
                otherProp {
                    - 0
                    - 2
                    - 4
                }
            }
        `,
    ),
    {
        prop: false,
        otherProp: [0, 2, 4],
    },
);

有四项职能:

  • parse 财务报告和审定财务报表 stringify 将文本转换为编码的 JSON 值并返回。 这些功能对于编码/解码整个JiK文件很有用.
  • toJson 财务报告和审定财务报表 fromJson 将 KDL 节点转换为编码后的 JSON 值并返回 。 这些函数对输出提供了更精细的控制,可用于例如嵌入到KDL文档的JiK节点的编码/解码.

(去)序号

该软件包包含用于(去)串行化的公用事业 @bgotink/kdl/dessert。 。 。 .

import {parse} from "@bgotink/kdl/dessert";
import assert from "node:assert/strict";

assert.deepEqual(
    parse(
        String.raw`
            name "my-package"
            
            dependency "@bgotink/kdl" range="^0.2.0"
            dependency "prettier" range="^3" dev=#true
        `,
        (ctx) => {
            const dependencies = {};
            const devDependencies = {};

            const name = ctx.child.single.required("name", (ctx) =>
                ctx.argument.required("string"),
            );

            for (const dependency of ctx.children("dependency", (ctx) => ({
                name: ctx.argument.required("string"),
                range: ctx.property("range", "string") ?? "*",
                dev: ctx.property("dev", "boolean") ?? false,
            }))) {
                (dependency.dev ? devDependencies : dependencies)[dependency.name] =
                    dependency.range;
            }

            return {name, dependencies, devDependencies};
        },
    ),
    {
        name: "my-package",
        dependencies: {
            "@bgotink/kdl": "^0.2.0",
        },
        devDependencies: {
            prettier: "^3",
        },
    },
);

KDL v1 数据

软件包导出两个函数 @bgotink/kdl/v1-compat 以支持 KDL v1 中写入的文档 :

  • parse 剖析 KDL v1 文档,并将所有链接的格式信息转换为有效的 KDL v2 文档 . 如果产生的文件被传递到 format(),生成的字符串将是同一个文档,但在 KDL v2 语法中。 其中将包括原始文件作者采用的所有评论和格式.
  • parseCompat 剖析 KDL v2 或 KDL v1 的文档, 并返回有效的 KDL v2 文档 . 这是一个结合正则 parse 与 v1 兼容的函数 parse 函数为支持两种格式的单一函数.

基尔克

这个软件包将 KDL 文档转换为 JavaScript 对象,反之亦然. 因此受到JavaScript语言的限制.

属性

允许多个同名属性. 将保留所有复制文件,这意味着这些文件将正确往返。 使用时 node.getProperty()编号 :node.getProperties()编号 :node.getPropertyEntry()中,最后一个有该名称值的属性将被返回,从而有效地阴影了任何先前的重复。 使用 node.getPropertyEntries()编号 :node.entries 确实暴露了阴影的复制品, 把它留给呼叫者来处理。 通过节点 clearFormat() 删除这些阴影复制件.

数字

JavaScript 将所有数字存储为 64 位 IEEE 754 (英语) 浮点数. 这限制了哪些整数可以安全使用. 这些限制比您可能预期的要低,如果您习惯于在一个单独的64位整数数据类型的环境中工作.

原表示的解析数字予以保留,除非 clearFormat 使用该值或含有该值的任何条目/节点/文档.

许可证

这个包裹根据麻省理工学院的许可获得许可,可以在 LICENSE.md。 。 。 .

测试套房在 test/upstream 属于 KDL 规格 依据创用CC授权使用.

版本与发布记录

@bgotink/kdl 共发布 30 个版本,首次发布于 2022/06/26;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.1latest2026/10/1425 天前
0.5.0-next.1next2026/10/031 个月前
0.5.0-next.02026/10/021 个月前
0.4.02025/11/3011 个月前
0.4.0-next.22025/04/291.5 年前
0.4.0-next.12025/03/081.7 年前

关于 @bgotink/kdl 的常见问题

@bgotink/kdl 是什么?

方便修改的 KDL 解析器和序列器.

如何安装 @bgotink/kdl?

在项目目录运行 npm install @bgotink/kdl,或使用 pnpm add / yarn add / bun add。

@bgotink/kdl 支持 TypeScript 吗?

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

@bgotink/kdl 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bgotink/kdl 可以商用吗?

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

@bgotink/kdl 的下载量有多少?

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

@bgotink/kdl 还在维护吗?

最新版本 0.4.1 发布于 2026/10/14(25 天前);至今共发布 30 个版本,其中过去 12 个月发布了 4 个;首次发布于 2022/06/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。