npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@xfcodeai/dsh-typert-generator

v0.1.5-rc.5

Published

TypeScript project analyzer and model-driven Typert artifact generator

Downloads

228

Readme


description: "构建时 Typert 生成器:源代码类型分析、与编译器无关的模型与产物生成,供接入 Typert 发布或消费生成产物的维护者阅读。" kind: "package-library"

@xfcodeai/dsh-typert-generator

English | 中文

概述

dsh-typert-generator 让维护者把公开的 TypeScript 类型转换为构建产物和与编译器无关的模型。包通过 ./typert 和可选的 ./client/typert 导出选择加入;如果声明、发布清单、Remote 导出或 Zod 投影无法被正确表示,生成过程就会失败。仓库构建可以生成可执行 schema 与配套声明,工具也可以调用 WorkspaceAnalyzer 完成检查或目录生成而不发布产物。生成过程只在构建时运行,绝不会进入实时 agent(智能体)会话。

目录


使用本包

本包供把 Typert 生成接入构建或消费生成产物的包维护者与仓库维护者使用。发布是选择加入的:声明导出入口、运行构建,产物即出现在 lib/ 中;静态分析则不需要产物。

从包中发布 Typert 产物

参与贡献的包在 package.json 中声明宿主侧产物导出;同时贡献两侧的包还要声明 ./client/typert,含 Remote 方法的包还要声明 ./remote:

exports:
  "./typert":
    types: "./lib/typert.host.d.ts"
    default: "./lib/typert.host.js"
files:
  - "lib/typert.host.js"
  - "lib/typert.host.d.ts"

构建完成后,lib/typert.host.js 与 lib/typert.host.d.ts 即存在,loader 会在 Loader 组合中注册该贡献。生成的声明文件把 TYPERT 暴露为 unknown,因此参与贡献的包永远不会依赖运行时注册表。当声明缺失、指向错误文件,或在没有 Remote 方法的情况下发布 Remote 产物时,生成器会使构建失败;不支持的 Zod 投影会以 TypertEmitError 指明具体构造并失败,而不会展平或弱化源类型。

静态分析工作区

静态消费方直接针对工作区的 tsconfig.host.json 与 tsconfig.client.json 聚合配置调用 WorkspaceAnalyzer,选择 face 与包子集,并在不生成或加载运行时产物的前提下读取生成的 FaceModel 与类型图。analyzeInBatches() 通过有界的编译器程序处理大批量包选择,模型形态保持一致;discoverPackages() 无需构建类型检查程序即可找出参与贡献的包。

在 tsdown 构建中运行生成

包的 ./tsdown 子路径为根 tsdown 配置提供 typertPlugin():它在打包前转换 TypeScript 依赖中的标准装饰器,并在包输出根目录生成模型驱动的 face 产物。package 模式只生成当前打包的包;workspace 模式对每个显式贡献方各生成一次。


理解实现

本节解释生成器如何得到与编译器无关的模型以及它生成什么;可观察的构建行为已在使用本包中说明。

设计理念

生成器遵循一项核心分离原则:提取与生成通过与编译器无关的模型解耦。WorkspaceAnalyzer 读取以 face aggregate tsconfig 为种子的 TypeScript 程序,产出 FaceModel 与 TypeGraph 数据;FaceModelEmitter 只消费该模型,绝不接收编译器节点。模型保留声明标识、泛型参数及应用、显式继承、条件类型与映射类型、导入属性、abstract 修饰符与源码 JSDoc,并排除构造函数、静态成员与非公共成员。

源码地图

| 文件 | 职责 | |---|---| | src/index.ts | 公共 API:分析器、生成器、工作区生成器、渲染器、目录投影 | | src/analyzer.ts | WorkspaceAnalyzer:face 程序、check/write 模式、分批、发现、源码索引 | | src/model.ts | 与编译器无关的模型类型 | | src/emitter.ts | FaceModelEmitter:Zod schema 与声明生成、Remote 声明 | | src/workspace.ts | WorkspaceTypertGenerator:发现、生成、导出与文件清单校验 | | src/tsdown-plugin.ts | tsdown 插件面:装饰器转换与产物生成 | | src/cordis-catalog.ts | 生成 Cordis 目录所用的目录投影 |

分析与 face

Host 与 Client 是两个独立的 TypeScript 程序。直接项目引用确定编译器 face 的成员归属,dsh.client 包子路径则确定运行时 face 的贡献;package.json#exports 划定所有跨包公开边界,跨 face 的边只能来自导入或重新导出。解析到本包内部模块的相对导入会沿该模块的重新导出继续追踪,直到出现包说明符,因此包内转发模块保留原始声明引用;解析到其他包的相对导入会失败。check 模式遇到语法或语义诊断、缺失的公开类型标注、跨包私有引用,以及模型无法无损保留的可达声明合并时都会失败;write 模式插入类型检查器推导出的标注,并返回无诊断的 check 模式模型。NPM 依赖拥有的类型继续以 external 引用表示,不会被展开。

生成与发布约定

FaceModelEmitter 输出包含受支持 Zod schema 与 TYPERT 贡献的可执行 JavaScript,以及把 schema 通过包的公开导出标注为 z.ZodType<SourceType> 的声明文件;不支持的 Zod 投影会失败。含 Remote 方法的 Host face 还会额外为 Client 生成 Host Remote 约定的 typert.remote-client.* 投影。WorkspaceTypertGenerator 校验每个贡献方的 package.json:./typert 与 ./client/typert(存在 Remote 方法时还有 ./remote)必须指向精确的生成文件,且 files 清单必须包含它们。

目录投影

根导出包含本仓库 Cordis 目录使用的模型驱动提取逻辑、完整性检查与确定性文本渲染器。它们接受 CordisCatalogPolicy;由仓库持有的类型链接、基础类型/豁免分类与继承的 Cordis 条目仍位于 scripts/gen-cordis-catalog.ts,由调用方显式传入,因此本包只包含投影机制,不会隐式复制仓库的文档分类体系。


进一步探索

当包级约定不够用时阅读以下页面;它们从生成模型逐步进入运行时与 Remote 调用路径。


模型体验

无,因为构建时生成器在任何 agent 运行时之外运行,不触及任何模型请求。

KV Cache 影响

无直接影响;生成产物只有在消费方将其放入请求时才会触及请求。

已知限制与延期工作

这些限制说明生成器无法建模或生成的构造;它们是当前包约束,不是任务积压。

  • 包导出模式会被跳过——参与贡献的包需要具体的导出目标;通配符导出模式不会被分析。
  • 跨 face 的命名空间重新导出会失败——具名与星号重新导出会生成链接,但在 TypeTargetModel 能够不经展平表示模块命名空间之前,命名空间重新导出无法表示。
  • Zod 生成器只支持有意限定的子集——泛型 schema 声明,以及以条件类型或映射类型为 schema 根的计算构造,都会失败,直到存在明确的 schema 工厂策略。
  • 没有生成的 schema 跨 face 导入——跨 face 链接会在模型中表示以供分析,但生成的 schema 均不需要跨 face 的运行时 Zod 导入。
  • 发现范围只覆盖具体公开导出——既未导出、也未由可达图导入的声明按设计排除在包模型之外。

开发备注

无。

运行时不变式: 不发布伴生入口。源码项目分析器与构建时 emitter 均不在任何 Cordis 运行时中运行;模型快照、可执行产物与消费方包的类型检查会强制执行其输出约定。