@atcute/lexicons

中文文档
2.1.1发布于 2026/09/230BSDES Module近 30 天下载 42.2万

AT 协议核心词典类型和计划验证

中文使用文档
文档目录6 节
  1. 使用量
  2. 正在验证语法
  3. 解析 AT URI
  4. 品牌类型
  5. 正在验证记录
  6. IPLD 类型

@ atcute/ 语法

aT 协议的核心类型和语法验证符.

npm install @atcute/lexicons

此软件包为 AT 协议的字符串格式提供语法验证器( 手语、 DDEs、 NSIDs, ) , 等),以及用于定义包中用lexicon schemas的验证功能.

使用量

正在验证语法

使用语法验证符检查 AT 协议字符串格式 :

import {
    isHandle,
    isDid,
    isNsid,
    isCid,
    isTid,
    isRecordKey,
    isDatetime,
    isResourceUri,
    isActorIdentifier,
} from '@atcute/lexicons/syntax';

// handle format (domain names)
isHandle('alice.bsky.social'); // true
isHandle('invalid'); // false (no TLD)

// DID format
isDid('did:plc:z72i7hdynmk6r22z27h6tvur'); // true
isDid('did:web:example.com'); // true
isDid('not-a-did'); // false

// NSID format (namespaced identifiers)
isNsid('app.bsky.feed.post'); // true
isNsid('com.atproto.repo.createRecord'); // true

// CID format (content identifiers)
isCid('bafyreigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi'); // true

// TID format (timestamp identifiers)
isTid('3jzfcijpj2z2a'); // true

// record key format
isRecordKey('3jzfcijpj2z2a'); // true (TID)
isRecordKey('self'); // true (literal "self")

// datetime format (ISO 8601)
isDatetime('2024-01-15T12:00:00.000Z'); // true

// AT URI format
isResourceUri('at://did:plc:123/app.bsky.feed.post/abc'); // true

// actor identifier (handle or DID)
isActorIdentifier('alice.bsky.social'); // true
isActorIdentifier('did:plc:123'); // true

解析 AT URI

分析 AT URI 以提取其组件:

import { parseResourceUri, parseCanonicalResourceUri } from '@atcute/lexicons/syntax';

// parse any AT URI (handle or DID authority); throws SyntaxError on invalid input
const uri = parseResourceUri('at://alice.bsky.social/app.bsky.feed.post/123');
console.log(uri.repo); // 'alice.bsky.social'
console.log(uri.collection); // 'app.bsky.feed.post'
console.log(uri.rkey); // '123'

// parse canonical AT URI (DID authority only); throws SyntaxError on invalid input
const canonical = parseCanonicalResourceUri('at://did:plc:123/app.bsky.feed.post/abc');
console.log(canonical.repo); // 'did:plc:123'

品牌类型

用于类型安全字符串处理的语法模块导出品牌类型 :

import type { Handle, Did, Nsid, Cid, Tid, RecordKey, Datetime } from '@atcute/lexicons/syntax';
import { isHandle } from '@atcute/lexicons/syntax';

function getProfile(handle: Handle): Promise<Profile> {
    // handle is guaranteed to be a valid handle format
}

const input = 'alice.bsky.social';
if (isHandle(input)) {
    // input is narrowed to Handle type
    getProfile(input);
}

正在验证记录

使用词汇图验证数据 is(), (中文(简体) ), safeParse(),或 parse()计划来自 定义软件包 @atcute/bluesky数字 :

import { is, safeParse, parse, ValidationError } from '@atcute/lexicons';
import { AppBskyFeedPost } from '@atcute/bluesky';

const data: unknown = {
    $type: 'app.bsky.feed.post',
    text: 'hello world',
    createdAt: '2024-01-15T12:00:00.000Z',
};

// type guard - returns boolean
if (is(AppBskyFeedPost.mainSchema, data)) {
    // data is typed as AppBskyFeedPost.$record
    console.log(data.text);
}

// safe parse - returns result object
const result = safeParse(AppBskyFeedPost.mainSchema, data);
if (result.ok) {
    console.log(result.value.text);
} else {
    console.log(result.message);
    console.log(result.issues);
}

// parse - throws on failure
try {
    const post = parse(AppBskyFeedPost.mainSchema, data);
    console.log(post.text);
} catch (err) {
    if (err instanceof ValidationError) {
        console.log(err.message);
        console.log(err.issues);
    }
}

IPLD 类型

aT 协议中使用的 IPLD 数据结构的软件包导出类型 :

import type { Blob, Bytes, CidLink } from '@atcute/lexicons';

// Blob - reference to uploaded media (images, videos)
// Bytes - raw binary data (base64 encoded in JSON)
// CidLink - reference to content by CID

版本与发布记录

@atcute/lexicons 共发布 26 个版本,首次发布于 2025/05/14;过去 12 个月发布了 16 个版本。

版本发布日期距今
2.1.1latest2026/09/231 个月前
2.1.02026/08/192 个月前
2.0.32026/07/163 个月前
2.0.22026/06/294 个月前
2.0.12026/06/154 个月前
2.0.02026/05/095 个月前

关于 @atcute/lexicons 的常见问题

@atcute/lexicons 是什么?

AT 协议核心词典类型和计划验证

如何安装 @atcute/lexicons?

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

@atcute/lexicons 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/atcute__lexicons 是否存在。

@atcute/lexicons 支持 ESM 还是 CommonJS?

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

@atcute/lexicons 可以商用吗?

@atcute/lexicons 使用 0BSD 许可。几乎没有限制:可自由使用、修改和分发,连保留版权声明也不要求。以上为概括,不构成法律意见,请以许可原文为准。

@atcute/lexicons 的下载量有多少?

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

@atcute/lexicons 还在维护吗?

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