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

@type-dom/framework

v0.9.0

Published

## 框架概述

Readme

TypeDOM Framework

框架概述

TypeDOM 是一个完全面向对象(OOP)设计的 TypeScript 前端框架,基于虚拟 DOM 技术,参考 Vuejs/AngularJS/Ext.js 框架架构。它采用抽象类/具体类/实例的组织方式,为前端开发提供了独特的面向对象编程体验。

核心设计理念

面向对象编程(OOP)为核心

  • 完全面向对象的设计思路,所有组件都是类的实例
  • 支持类、继承、封装、多态等 OOP 特性
  • 通过抽象类和具体类建立清晰的类层次结构
  • 实例化管理组件生命周期和状态

虚拟 DOM 与直接操作并重

  • 基于虚拟 DOM 技术,但不完全依赖虚拟 DOM diff
  • 直接操作原生 DOM,通过 TypeScript 提供类型安全保障
  • 精确控制 DOM 操作,避免不必要的重排重绘
  • 支持直接 DOM 操作与虚拟 DOM 的灵活切换

技术架构深度解析

架构层次结构

┌─────────────────────────────────────────────────────────────┐
│                    Application Layer                        │
│              (AppRoot, AppElement, 业务组件)                 │
├─────────────────────────────────────────────────────────────┤
│                      Framework Core                         │
│  ┌─────────────┬─────────────┬─────────────┬─────────────┐  │
│  │   Core API  │   Renderer  │  Reactivity │   DOM Ops   │  │
│  │             │             │   System    │             │  │
│  └─────────────┴─────────────┴─────────────┴─────────────┘  │
├─────────────────────────────────────────────────────────────┤
│                    Abstract Layer                           │
│  TypeNode → TypeElement → TypeHtml / TypeSvg               │
├─────────────────────────────────────────────────────────────┤
│                    Infrastructure                           │
│           Utils, Helpers, Constants, Types                  │
└─────────────────────────────────────────────────────────────┘

核心模块详细分析

1. 核心抽象层 (Abstract Layer)

TypeNode 抽象类 (/src/core/abstracts/type-node/type-node.abstract.ts)

  • 作用: 所有节点的基类,定义了虚拟节点的基本行为和属性

  • 核心属性:

    • uid: 唯一标识符,用于节点比较和调试
    • ClassName: 类名标识(只读 getter,返回 constructor.name),用于运行时类型识别
    • props: 节点属性集合
    • childNodes: 子节点数组
    • parent: 父节点引用
    • dom: 对应的真实 DOM 节点
    • lifeCycles: 生命周期钩子集合
  • 关键方法:

    • mount(): 挂载到指定容器
    • render(): 渲染虚拟 DOM 到真实 DOM
    • unmount(): 卸载节点及其子节点
    • findChildNode(): 查找子节点
    • findDownNodes(): 深度查找后代节点
    • toJSON(): 序列化为 JSON 格式

TypeElement 抽象类 (/src/core/abstracts/type-element/type-element.abstract.ts)

  • 继承: 继承自 TypeNode
  • 扩展功能:
    • 元素特有的属性和方法
    • DOM 元素操作封装
    • 样式和属性管理
    • 事件处理机制

专用元素抽象类:

  • TypeHtml: HTML 元素抽象类(Div、Span、Button、Input 等 87 个 HTML 标签类均继承自此;标签类位于 src/core/components/html-element/
  • TypeSvg: SVG 元素抽象类(SvgCircle、SvgRect、SvgPath 等 19 个 SVG 标签类均继承自此;位于 src/core/components/svg-element/
  • Fragment: 片段组件(继承自 TypeElement,可直接实例化,用于多根节点/条件渲染/路由视图等场景)。FragmentXElementTextNodeCommentNode 均为 src/core/components/ 下的可实例化具体类(非抽象类),不要把它们与 TypeNode/TypeElement/TypeHtml/TypeSvg 这 4 个抽象基类混淆。

2. 核心 API 层 (Core API)

组件系统 (/src/core/component.ts - 37.64 KB)

  • 提供组件选项与组合式 API 支撑,负责组件实例化、生命周期钩子(beforeCreate、created、mounted 等)、属性与状态管理、事件发射/监听、插槽支持。
  • 主要导出:DataComponentOptionsSetupContextcurrentInstancegetCurrentInstancesetCurrentInstanceunsetCurrentInstancevalidateComponentNamecreateSetupContextgetComponentPublicInstancegetComponentNameformatComponentName
  • 注意:本框架没有独立的 TypeComponent 抽象类。组件基类即为 TypeElement / TypeHtml 这条抽象链——业务组件通过继承 DivFragment 等具体类(如 class UserCard extends Div)来创建,而非继承某个虚构的 TypeComponent

工具函数 (/src/core/helpers/)

  • mergeProps / isTypeNode 等虚拟节点与属性处理的辅助函数(原 vnode.ts 已移除,相关能力下沉到 helpers/)。

API 创建和注入

  • apiCreateApp.ts (11.76 KB): 应用创建 API
  • apiInject.ts (4.47 KB): 依赖注入 API
  • apiLifecycle.ts (6.36 KB): 生命周期 API
  • apiSetupHelpers.ts (14.3 KB): 组合式 API 辅助函数

3. 渲染器层 (Renderer)

渲染核心 (/src/core/renderer/)

  • patch.ts (29.93 KB): 核心补丁算法

    • 节点差异计算和最小更新
    • 节点类型处理和转换
    • 子节点 diff 算法
    • 性能优化策略
  • hydration.ts (32.53 KB): 服务端渲染水合

    • SSR 内容客户端激活
    • 水合不匹配处理
    • 渐进式水合策略
  • mountChildren.ts: 子节点挂载管理

  • remove.ts (1.93 KB): 节点移除清理

  • render.ts: 渲染入口函数

DOM 操作层 (/src/dom/)

  • nodeOps.ts (4.6 KB): 原生 DOM 操作封装

    • 跨浏览器兼容性处理
    • DOM 操作抽象接口
    • 事件系统集成
  • patchProp.ts (4.32 KB): 属性更新算法

    • 属性差异计算
    • 样式和类更新优化
    • 事件监听器管理

指令与转换/解析/测试辅助模块 (/src/core/directives//src/core/transforms//src/parser//src/test-utils/)

  • directives/:指令是 TypeProps 的构造参数字段,由 core/components/fragment/mountFragment.ts 统一编排,顺序为 vIf → vShow → vModel → (render) → vOnce → vMemo → vFor。内置指令:vIfvShowvModelvOncevMemovForvOn(提供 withModifiers)、vLoadingvRepeatClick
  • transforms/transformSlot(作用域插槽转换)、useRecurseRender(递归渲染),已由 core/index.ts 公开导出。
  • parser/:模板/结构解析工具(如 Parser 类)。
  • test-utils/:测试辅助(nodeOpspatchPropserializetriggerEvent),供 Vitest 使用。

5. 响应式系统 (Reactivity)

响应式核心 (/src/reactivity/)

  • reactive.ts (12.88 KB): 响应式对象实现

    • Proxy-based 响应式系统
    • 深度响应式转换
    • 响应式状态跟踪
  • ref.ts (10.71 KB): 引用类型管理

    • 基本类型响应式包装
    • 引用解包和访问
    • 响应式引用集合
  • watch.ts (13.86 KB): 观察者模式

    • 副作用函数管理
    • 依赖收集和触发
    • 异步观察支持
  • batchEffect.ts: 批量更新优化

    • 异步更新队列
    • 批量执行策略
    • 更新优先级管理

6. 组件辅助系统

组件选项和工具

  • componentOptions.ts (33.92 KB): 组件选项定义和验证
  • componentProps.ts (24.6 KB): 属性定义和处理
  • componentEmits.ts (9.8 KB,另含 componentEmits.interface.ts / componentEmits.legacy.ts): 事件发射系统
  • componentSlots.ts: 插槽管理机制
  • componentPublicInstance.ts (22.07 KB): 公共实例接口

生命周期管理

  • scheduler.ts (9.83 KB): 任务调度器
  • errorHandling.ts (5.74 KB): 错误处理系统
  • warning.ts (~0.8 KB): 警告和调试信息

核心特性深度分析

1. 面向对象设计优势

类层次结构清晰

// 典型的类继承结构
TypeNode (抽象基类)
├── TypeElement (元素抽象类)
│   ├── TypeHtml (HTML元素)
│   ├── TypeSvg (SVG元素)
│   ├── XElement (通用元素,继承自 TypeElement)
│   └── Fragment (片段节点/组件基类,继承自 TypeElement)
├── TextNode (文本节点)
└── CommentNode (注释节点)

封装性和继承性

  • 每个类都有明确的职责和边界
  • 通过继承复用通用功能
  • 通过多态实现组件行为的灵活扩展
  • 私有属性和方法的访问控制

实例化管理

  • 每个组件都是类的实例,拥有独立的状态
  • 实例间相互隔离,避免状态污染
  • 支持实例的动态创建和销毁

2. 虚拟 DOM 优化策略

精确的 DOM 控制

  • 不依赖传统的虚拟 DOM diff 算法
  • 直接操作目标节点,减少中间层开销
  • 智能的节点复用和更新策略

Patch Flags 优化

// 编译时生成的优化标记
// 实际定义并导出于 @type-dom/utils(libs/utils/src/shared/patchFlags.ts)
import { PatchFlags } from '@type-dom/utils';

enum PatchFlags {
  TEXT = 1,                  // 动态文本子节点
  CLASS = 1 << 1,            // 动态 class
  STYLE = 1 << 2,            // 动态 style
  PROPS = 1 << 3,            // 动态非 class/style 属性
  FULL_PROPS = 1 << 4,       // 带动态 key 的 props,需全量 diff
  NEED_HYDRATION = 1 << 5,   // 需要属性水合
  STABLE_FRAGMENT = 1 << 6,  // 子节点顺序不变的片段
  KEYED_FRAGMENT = 1 << 7,   // 带 key 的片段
  UNKEYED_FRAGMENT = 1 << 8, // 无 key 的片段
  NEED_PATCH = 1 << 9,       // 仅需非 props 补丁
  DYNAMIC_SLOTS = 1 << 10,   // 动态插槽
  DEV_ROOT_FRAGMENT = 1 << 11, // 仅开发环境的根片段
  CACHED = -1,               // 缓存的静态节点
  BAIL = -2                  // 退出优化模式,全量对比
}

Block Tree 优化

  • 将模板分为嵌套的块(Block)
  • 块内节点结构稳定,只跟踪动态节点
  • 大幅减少节点对比的计算量

3. 响应式系统设计

响应式标记

// libs/framework/src/reactivity/constants.ts
// 以字面量字符串而非数字定义,便于在调试器中查看
export enum ReactiveFlags {
  SKIP = '__v_skip',
  IS_REACTIVE = '__v_isReactive',
  IS_READONLY = '__v_isReadonly',
  IS_SHALLOW = '__v_isShallow',
  RAW = '__v_raw',
  IS_REF = '__v_isRef',
}

export enum TrackOpTypes {
  GET = 'get',
  HAS = 'has',
  ITERATE = 'iterate',
}

export enum TriggerOpTypes {
  SET = 'set',
  ADD = 'add',
  DELETE = 'delete',
  CLEAR = 'clear',
}

说明:ReactiveNode / Link 这套基于双向链表的依赖结构是 @type-dom/signals 的内部实现,不在 framework 中。

批量更新优化

  • 异步更新队列,避免频繁 DOM 操作
  • 微任务级别的更新调度
  • 更新优先级和中断机制

4. 类型安全体系

编译时类型检查

  • 完整的 TypeScript 类型定义
  • 泛型约束确保类型安全
  • 接口定义组件契约

运行时类型识别

// 通过只读的 ClassName getter 进行运行时类型识别
// (返回 this.constructor.name,无需在每个子类中显式赋值)
abstract class TypeNode {
  get ClassName(): string {
    return this.constructor.name;
  }

  getRoot<T extends TypeNode>(): T | undefined {
    // 类型安全的根节点查找
  }
}

// isTypeNode 是独立导出的函数,不是静态方法
import { isTypeNode } from '@type-dom/framework';
export function isTypeNode(value: any): value is TypeNode {
  return value instanceof TypeNode;
}

与传统框架对比分析

与 React 对比

| 维度 | TypeDOM | React | |------|---------|-------| | 设计理念 | 完全面向对象 | 函数式编程 + 组件化 | | 状态管理 | 类属性 + 响应式系统 | useState/useReducer Hooks | | DOM 操作 | 直接操作 + 虚拟 DOM | 虚拟 DOM diff | | 类型系统 | TypeScript 原生支持 | 需要额外类型定义 | | 学习曲线 | 面向对象背景友好 | 函数式概念门槛 | | 性能 | 直接操作,无 diff 开销 | 虚拟 DOM diff 开销 | | 生态 | 新兴框架,生态较小 | 成熟生态,资源丰富 |

与 Vue 对比

| 维度 | TypeDOM | Vue | |------|---------|-----| | 响应式 | Proxy + 精细控制 | Proxy + 自动追踪 | | 组件模型 | 类继承 | Options API / Composition API | | 模板编译 | 运行时 + 编译时优化 | 编译时优化为主 | | 类型支持 | 原生 TypeScript | 逐步增强 | | 扩展性 | 面向对象扩展 | 插件和 Mixin 机制 |

独特优势

  1. 面向对象纯粹性: 100% 面向对象设计,无函数式污染
  2. 直接 DOM 控制: 避免虚拟 DOM 开销,性能更可控
  3. 精确类型安全: 编译时和运行时的双重类型保障
  4. 标准化数据交换: 天然支持 JSON/XML 数据结构转换
  5. 企业级设计模式: 天然支持 MVC、MVVM 等企业架构

性能特征分析

优势场景

1. 大型复杂应用

  • 类继承体系清晰,代码结构易于维护
  • 面向对象设计天然支持复杂业务逻辑建模
  • 类型安全减少运行时错误

2. 需要精确 DOM 控制的应用

  • OFD 文档编辑器、富文本编辑器等
  • 游戏开发和图形应用
  • 需要与原生 API 深度集成的场景

3. 企业级应用

  • 严格的代码组织和规范
  • 长生命周期项目的稳定性要求
  • 团队协作的标准化需求

性能基准

DOM 操作性能

  • 直接操作比虚拟 DOM 快约 30%(基于 CSS Typed OM 测试)
  • 避免虚拟 DOM diff 算法的计算开销
  • 精确控制更新范围,减少不必要的重排重绘

内存使用

  • 无虚拟 DOM 树的内存开销
  • 类实例化管理,内存使用可预测
  • 垃圾回收友好,无循环引用问题

启动性能

  • Vite 支持秒级开发服务器启动
  • 按需编译,无全量打包开销
  • Tree-shaking 优化,只加载使用代码

生态系统架构

核心库矩阵

| 库名 | 功能定位 | 核心特性 | 与主框架关系 | |------|----------|----------|-------------| | @type-dom/ui | UI 组件库 | 60+ 组件,主题系统 | 基于 TypeDOM 构建 | | @type-dom/svgs | SVG 图标库 | 矢量图标,按需加载 | 独立组件生态 | | @type-dom/form-builder | 动态表单 | JSON Schema 驱动 | 业务逻辑扩展 | | @type-dom/router | 路由管理 | History API,嵌套路由 | 应用级功能 | | @type-dom/i18n | 国际化 | 多语言,RTL 支持 | 跨地域支持 | | @type-dom/signals | 响应式 | Signal 系统,批更新 | 状态管理补充 |

扩展机制

插件系统

// 框架级插件接口
interface FrameworkPlugin {
  install(app: TypeApp, ...options: any[]): void;
}

// 组件级扩展:业务组件继承具体元素类(而非虚构的 TypeComponent)
class CustomComponent extends Div {
  // 通过继承和组合扩展功能
}

自定义元素支持

class AppElement extends HTMLElement {
  connectedCallback() {
    const appRoot = new AppRoot();
    appRoot.mount(this);
  }
}
customElements.define('app-root', AppElement);

开发体验和工具链

开发工具支持

IDE 集成

  • VS Code 插件提供智能提示
  • TypeScript 语言服务完整支持
  • 调试工具集成

构建工具

  • Vite: 开发服务器和构建优化
  • Rollup: 库打包优化
  • Webpack: 兼容性支持

测试工具

  • Vitest: 单元测试框架
  • Playwright: E2E 测试
  • Testing Library: 组件测试

调试和诊断

开发调试

// 生命周期钩子调试
class DebugComponent extends Div {
  created() {
    console.log('Component created:', this.uid);
  }
  
  mounted() {
    console.log('Component mounted:', this.dom);
  }
}

性能监控

  • 组件渲染时间追踪
  • 内存使用监控
  • 响应式更新频率统计

应用场景和最佳实践

适用场景

1. 政务信息化系统

  • OFD 文档处理需求
  • 严格的格式标准要求
  • 长期维护和稳定性要求

2. 企业级后台管理

  • 复杂表单和流程管理
  • 面向对象的数据建模
  • 团队协作开发

3. 文档编辑和处理

  • 需要精确控制文档结构
  • 复杂的交互逻辑
  • 标准化数据交换

4. 游戏和图形应用

  • 面向对象的设计模式匹配
  • 直接 DOM 操作性能优势
  • 复杂状态管理需求

最佳实践

组件设计原则

// 1. 单一职责原则
class UserProfileCard extends Div {
  // 只负责用户信息展示
}

class UserEditForm extends Div {
  // 只负责用户信息编辑
}

// 2. 开闭原则 - 通过继承扩展
class AdminUserProfileCard extends UserProfileCard {
  // 扩展管理员特有的显示逻辑
}

// 3. 依赖倒置原则
abstract class DataService {
  abstract fetchUserData(): Promise<User>;
}

class HttpUserService extends DataService {
  // 具体实现
}

性能优化策略

// 1. 合理使用响应式
class OptimizedComponent extends Div {
  // 只对需要响应的数据使用响应式
  private counter = 0; // 非响应式,避免不必要追踪
  public reactiveCounter = ref(0); // 响应式,需要触发更新
}

// 2. 批量更新
class BatchUpdateComponent extends Div {
  private updateQueue: (() => void)[] = [];
  
  scheduleUpdate(update: () => void) {
    this.updateQueue.push(update);
    // 批量执行,避免频繁更新
    nextTick(() => {
      this.updateQueue.forEach(fn => fn());
      this.updateQueue = [];
    });
  }
}

未来发展方向

技术演进路线

短期目标 (6-12个月)

  1. 性能优化: 进一步完善渲染性能,减少内存占用
  2. 开发工具: 增强调试工具和开发体验
  3. 生态建设: 丰富 UI 组件库和工具库
  4. 文档完善: 建立完整的文档和示例体系

中期目标 (1-2年)

  1. 服务端渲染: 完善 SSR 和静态站点生成
  2. 微前端支持: 提供微前端架构支持
  3. 跨平台扩展: 支持桌面和移动端应用开发
  4. AI 辅助开发: 集成 AI 编程助手

长期愿景 (3-5年)

  1. 行业标准: 成为企业级前端开发标准之一
  2. 生态繁荣: 建立完整的开发者生态
  3. 技术引领: 在前端架构设计方面引领趋势
  4. 全球影响: 在国际市场获得认可和应用

创新方向

1. WebAssembly 集成

  • 核心算法 WASM 化,进一步提升性能
  • 支持高性能计算和图形处理

2. 量子计算准备

  • 研究量子计算对传统编程模型的冲击
  • 为未来的计算范式做准备

3. 元宇宙支持

  • VR/AR 应用开发支持
  • 3D 图形和交互能力增强

总结评价

TypeDOM 框架代表了前端开发的一种全新思路:回归面向对象本质,追求极致性能和控制力。它的独特价值在于:

技术价值

  • 证明了面向对象在前端领域的可行性
  • 提供了虚拟 DOM 之外的另一种性能优化路径
  • 建立了 TypeScript 与 OOP 结合的典范

工程价值

  • 为企业级应用提供了可靠的技术选型
  • 降低了复杂业务系统的开发和维护成本
  • 提升了代码的可读性和可维护性

战略价值

  • 打破了传统前端框架的垄断格局
  • 为中国前端技术发展贡献了新的思路
  • 推动了前端工程化向更深层次发展

TypeDOM 不仅仅是一个技术框架,更是一种设计哲学的体现:在追求技术进步的同时,不应忘记软件工程的本质——用清晰的逻辑和严谨的结构来解决实际问题。它为企业级前端开发提供了一个值得认真考虑的选择,特别是在需要处理复杂业务逻辑和长期维护的大型项目中。