dependabot[bot]
|
c55d89d7ad
|
chore(deps-dev): bump @xmldom/xmldom from 0.9.11 to 0.9.12
Bumps [@xmldom/xmldom](https://github.com/xmldom/xmldom) from 0.9.11 to 0.9.12.
- [Release notes](https://github.com/xmldom/xmldom/releases)
- [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/xmldom/xmldom/compare/0.9.11...0.9.12)
---
updated-dependencies:
- dependency-name: "@xmldom/xmldom"
dependency-version: 0.9.12
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-09-02 20:57:20 +00:00 |
|
崮生(子虚)
|
5c118121ff
|
v1.14.0: GSUB/GPOS 共享 gidLookup 查找表 + remapGid 数组化 + WF2_NOTRANSFORM 实验开关
- 优化340:buildGidLookup 提取导出,rewriteLayoutTablesForSubset 构造一次共享传入
subsetGPOS/subsetGSUB(省每侧独立的 maxOrigGid 扫描+fill+Map 遍历,big3500 -4.2%)
- 优化342:remapGid/parseChainRuleFormat1or2 从 Map.get 改为 gidLookup 数组索引
(~9ns→~1ns,语义等价:越界/-1 均映射为 null),GSUB 查询路径 Map 残余清零
- 实验341:woff2-encode.js 增加 WF2_NOTRANSFORM=1 环境变量开关,跳过 glyf/loca
transform(规范合法 untransformed 路径,-13% CPU 但 +10% 体积,默认关闭不影响生产)
验证:tsc 通过;基准 30/30 PASS min ssim 0.9876 与基线一致;输出字节总量 449,440B
与基线完全一致;7 用例 sha256 字节级 IDENTICAL;leafer 渲染 7 用例 SSIM≥0.99;
24 字体结构扫描通过(6 个缺字均为原字体本身无此字形);40/40 边界输入扫描通过。
|
2026-08-27 07:57:32 +08:00 |
|
崮生(子虚)
|
f9160950ea
|
chore: 1.13.0 —— demo 页引用 leafer-x-webfont@latest(importmap 统一)
|
2026-08-15 23:31:22 +08:00 |
|
崮生(子虚)
|
ca1d2fc1e7
|
feat(webfont-sdk): 0.2.0 新增服务端 API 客户端子路径 webfont-sdk/api
- createWebFontApi 工厂封装全部 6 个 REST 接口(fonts/fontMeta/
config/stats/upload/reportEvent)+ 全套类型,独立子路径导出不进主入口
- leafer demo 删除硬编码 FONTS 数组,改 api.fonts() 实时拉取
(24 个字体 vs 原硬编码 6 个),初始字体带回退、失败显式报错
- 主站 src/api.ts 重写为 SDK 客户端薄适配层(dogfooding):
旧类型名保留为别名组件零改动,顺带消灭 FontInfo 重复声明
- /docs 文档页新增 npm 安装、双模式用法、API 客户端示例(中英)
- 主站 package.json 添加 workspace 依赖 webfont-sdk
已发布 npm webfont-sdk@0.2.0,CDN 与 demo 端到端验证通过。
|
2026-08-15 20:35:17 +08:00 |
|
崮生(子虚)
|
64b9ca9a57
|
chore(deps): 全量升级依赖——vite 8.2.1 / jsdom 30 / puppeteer 25.7 / pinyin-pro 3.29 等;unhead 对齐 2.1.17(vite-ssg 内部依赖 2.x,升 3 会双 head 实例)
|
2026-08-15 16:53:44 +08:00 |
|
dependabot[bot]
|
66f16e7040
|
chore(deps-dev): bump undici from 8.8.0 to 8.9.0
Bumps [undici](https://github.com/nodejs/undici) from 8.8.0 to 8.9.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v8.8.0...v8.9.0)
---
updated-dependencies:
- dependency-name: undici
dependency-version: 8.9.0
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-08-15 08:09:14 +00:00 |
|
崮生(子虚)
|
a0c2b4aafc
|
feat: webfont-sdk Node 模式 + leafer 版基准测试(双方案并存)
- webfont-sdk: 新增 Node 模式(node-registry),GlobalFonts 注册 + 每 chunk 唯一 family + 逗号链回退
- leafer-x-webfont: fontFamily 链写回(Node 端),scan 链归一化防套娃、rewriteFamily 跳过链形态防抹回
- 修复 pnpm 双实例 bug: @napi-rs/canvas 版本对齐 1.0.6(根与 SDK 同版本共享 .pnpm 条目)
- 基准测试重构: 用例表抽取为 基准测试用例.ts 共享,SSIM 计算收敛到 scripts/ssim.ts
- 新增 基准测试_leafer.test.ts: @leafer-ui/node + Skia 渲染验证(无浏览器),ttf 输出用例 SSIM=1.0000;woff2 用例仅计时(Skia 不吃 woff2,容器验证由 puppeteer 版守护)
- Node 端集成测试 scripts/test-leafer-node.mts(插件链路 SSIM=1.0000)
|
2026-08-15 15:51:42 +08:00 |
|
崮生(子虚)
|
09f434bbcf
|
feat: 离线裁剪页面 + 增量预览 + DEV预览页 + tempUploads统计 + SDK缓存破坏 + UI优化
- 新增离线裁剪页面 /offline-subset(纯浏览器端字体裁剪)
- SDK subsetProvider 抽象,离线页面注入本地裁剪 provider
- 预览用增量裁剪(SDK自动去重),下载用全量裁剪
- 拖放区域支持点击和拖拽选择字体文件
- 新增 DEV 预览页 /__dev(仅 dev 模式路由可达)
- FontDebugPreview 从首页提取为独立页面
- tempUploads 统计字段(全链路+持久化)
- webfont-sdk.js 构建时戳缓存破坏
- 首页导航栏新增离线裁剪入口
- UploadSection 离线裁剪入口合并到游客上传卡片
- SDK 文档代码示例补充 HTML 用法
- 导航栏窄屏换行适配
|
2026-08-03 15:18:01 +08:00 |
|
崮生(子虚)
|
5a7c6a9913
|
fix: LLRT readdir 不兼容 withFileTypes 导致临时字体清理失效
根因:LLRT 的 fs.readdir 返回字符串数组而非 Dirent 对象,
entry.isFile() 抛 TypeError 被 catch 静默吞掉,
导致 evictIfNeeded 和 temp_cleaner 从未执行(线上堆积 108 个文件 992M)。
修复:
- node.ts: readdir 改为先拿文件名再 stat 判断
- temp_cleaner.ts: catch 块加日志不再静默吞错误
同时包含:
- font-config.json homepage 链接修复(删除 3 个 404,修正 2 个)
- FontDetail 字符预览改为可实时编辑
- 添加 scripts/bench.mjs 压测脚本
|
2026-08-01 08:03:33 +08:00 |
|
崮生(子虚)
|
9397e10aad
|
feat: 字体列表/详情页接入 font-config 配置 + lint 脚本
前端:
- FontList.vue: 卡片使用 router-link 跳转;
展示 displayName/description/previewText/tags;
底部添加字体投稿联系文案
- FontDetail.vue: 预览文字使用 config.previewText 替代写死文案
工具:
- scripts/lint-font-config.ts: 检查 previewText 字符是否被字体支持
- package.json: 添加 lint:font-config 脚本
|
2026-07-30 23:23:30 +08:00 |
|
崮生(子虚)
|
8273508c79
|
feat: StatsPanel 视口内才轮询 + 底部进度条动画
- IntersectionObserver + document.visibilityState 双条件控制轮询
- 卡片底部进度条 (scaleX 动画),每次刷新数据后重启动画
- 避免不可见时浪费请求
- bump version to 1.11.1
|
2026-07-30 17:26:24 +08:00 |
|
崮生(子虚)
|
1c87e8ff46
|
chore: bump version to 1.9.5
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-26 10:48:42 +08:00 |
|
崮生(子虚)
|
4c11470d8c
|
chore: bump version to 1.9.4
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-26 10:39:35 +08:00 |
|
崮生(子虚)
|
259cf7f2d8
|
chore: bump version to 1.9.3
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-26 10:23:47 +08:00 |
|
崮生(子虚)
|
d68551d23e
|
feat(stats): 统计计数跨重启持久化 + 依赖升级
- 新增 stats_store.ts:防抖写盘 font/.stats.json,热路径零磁盘 IO
- shared.ts 暴露 initStats/markStatsDirty/snapshotStats
- app.ts 启动恢复累计计数 + 退出前尽力落盘
- 路由热路径打脏标记(防抖 30s 批量落盘)
- 清理未用变量/导入/常量
- 升级依赖:vue 3.6.0-beta.17、typescript 7.0.2、vite 8.1.5 等
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 21:43:12 +08:00 |
|
崮生(子虚)
|
7d0243e6f5
|
fix(v1.9.2): subsetCache 改用 Date.now() 启动时戳,修复 LLRT process.uptime 报错
process.uptime() 在 LLRT 运行时不存在(typeof === "undefined"),调用抛
TypeError: not a function,导致容器启动即崩溃(v1.9.1 修完 __filename 后暴露)。
改用模块加载时取一次 Date.now():Node/LLRT 均可用,进程重启即变化,
开发态「重启即重置内存缓存」语义不变,生产态靠 PACKAGE_VERSION。
另增 dev:backend:llrt / serve:llrt 本地命令,用 LLRT 跑后端提前暴露兼容问题。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-13 21:32:33 +08:00 |
|
崮生(子虚)
|
8db337d27e
|
chore(release): v1.9.1 — 修复 LLRT __filename 报错
重新发版,修复 v1.9.0 中 createRequire(import.meta.url) 导致 LLRT 运行时报错。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-13 21:22:48 +08:00 |
|
崮生(子虚)
|
168fc66544
|
feat(v1.9.0): OTF 子集化支持 + 法字笔画修复 + subsetCache 版本指纹
性能(vs v1.7.0 基线,基准测试全用例通过):
- 千字文 woff2 346ms → 9.8ms(35x)
- 8汉字 woff2 39.7ms → 2.8ms(14x)
- 千字文 ttf 6.0ms → 4.4ms
- 8汉字 ttf 2.7ms → 2.1ms
OTF 正确性:
- 修复 CFF.js readCFFIndexObject 漏读 off[idx+1] 导致子程序读成 0 字节,
思源黑体「法」字三点水丢笔画的问题
- 修复非 subset 模式 cmap format12 崩溃(空数组误判为 subset)
缓存健壮性:
- subsetCache key 加版本指纹(package version + process.uptime),
杜绝代码已修但缓存返回旧错误结果
基准测试:
- 新增白狐/思源 OTF 用例(含法海波等复杂笔画字)守护 OTF→TTF 转换
- 修复 calculateSSIM 的 width 推断 bug(sqrt 假设正方形)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-13 21:01:19 +08:00 |
|
崮生(子虚)
|
b4a7a820eb
|
feat: AI Typography Skill 系统 + 中英双语 i18n + Before/After Demo
- 新增 skills/chinese-web-typography.md 作为提供给 AI agent 的排版智能文件
- 重写 README.md(中文默认),新增 README.en.md(英文版),互相引用
- 新增 TypographyDemo.vue 前后对比组件,展示中文字体效果差异
- 新增 src/i18n.ts 轻量国际化方案,所有组件文案支持中英切换
- 后端 /api/fonts 返回 temporary 字段标识临时字体
- 升级至 v1.8.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-28 22:41:47 +08:00 |
|
崮生(子虚)
|
53d170dc90
|
feat: 前端迁移至 Vue3 + TS,后端构建迁移至 tsdown
- 前端从 SolidJS 迁移到 Vue3 Composition API(<script setup lang="ts">)
- 后端构建从 tsup 迁移到 tsdown,动态 import 改为静态以支持单文件输出
- FontSelector 添加 defineProps 修复下拉无选项问题
- StatsPanel 添加"服务状态"标题
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-04-30 20:46:30 +08:00 |
|
崮生(子虚)
|
c18dc44e72
|
chore: 升级至 v1.7.0,新增内存缓存与运行时统计
- 新增通用 LruCache 类,支持按条目数/字节容量两种淘汰策略
- 字体裁剪结果 LRU 内存缓存(默认 10MB,X-Cache 响应头标识命中)
- 新增 GET /api/stats 运行时统计接口
- 前端统计面板(10s 轮询,页面不可见时暂停)
- API handler 拆分到 routes/ 目录,提取 shared.ts 共享模块
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-04-30 19:34:30 +08:00 |
|
崮生(子虚)
|
6e5b2c5fb7
|
chore: 升级至 v1.6.0,llrt 切换为 no-sdk 版本
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-04-24 13:32:07 +08:00 |
|
崮生(子虚)
|
258d9f9746
|
chore: 移除 skia-canvas 依赖,清理废弃验证脚本
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-16 17:30:09 +08:00 |
|
崮生(子虚)
|
976a68f189
|
1
|
2026-04-11 17:54:01 +08:00 |
|
崮生(子虚)
|
e977cc9575
|
更新版本
|
2026-04-10 13:57:28 +08:00 |
|
崮生(子虚)
|
1e543d58ab
|
fix: 修复 OTF→TTF 子集字体浏览器渲染空白 + 改进基准测试
- API 默认 outType 改为 ttf(兼容性最好)
- Cache-Control 从 immutable 改为 24h 缓存
- 基准测试改为 DOM 渲染 + puppeteer 截图 + pngjs 解码(更贴近真实浏览器)
- 增加 maxp 表验证(maxPoints/maxContours 为 0 直接报错)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-10 13:55:27 +08:00 |
|
崮生(子虚)
|
af0ab38cec
|
性能优化
|
2026-04-10 13:51:03 +08:00 |
|
崮生(子虚)
|
97f4d72e6a
|
fix: 修复 OTF→TTF 转换字体在浏览器中渲染空白的问题
根因:optimizettf 中 maxPoints/maxContours 只在 TypedArray 格式(_xArr)
的字形分支中统计,OTF→TTF 转换的字形使用对象 contours 格式,
导致 maxp 表中这两个值为 0,浏览器据此跳过渲染。
同时包含 OTF 解析路径的多项性能优化和清理冗余测试文件。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-09 20:46:48 +08:00 |
|
崮生(子虚)
|
84b50db7d9
|
更新版本
|
2026-04-09 12:02:49 +08:00 |
|
崮生(子虚)
|
e2cc7c1144
|
feat: 前端格式选择器组件,服务端支持能力透传
- 新增 FontSelector.tsx 独立组件,字体和输出格式并排选择
- /api/config 新增 supportedOutTypes 字段(LLRT 仅 ttf)
- 前端加载配置后自动适配可用格式
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-09 11:56:10 +08:00 |
|
崮生(子虚)
|
6f0e3d8e6b
|
fix: 修复 name 表写入偏移错误导致浏览器无法渲染字体
name.js write 函数改用 view.setUint16 后未同步 writer.offset,
导致 name 字符串覆盖 header,name 表损坏。浏览器依赖 name 表
识别字体所以无法渲染,而 Node 端渲染不依赖 name 表所以基准
测试未检测到。
同时修复 cmap sizeof 动态计算记录头大小的问题。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-09 11:22:51 +08:00 |
|
崮生(子虚)
|
2f7ce0cb72
|
feat: SDK 多模式架构 + 首页输入事件驱动
- 重构 webfont-sdk.js 为核心增量引擎 + 多触发器架构
- 支持 loadFont(轮询)、observeFont(MutationObserver)、loadText(手动传文本)三种模式
- 三种模式共享 loadedChars,按 fontName|family 自动去重增量加载
- loadFont interval 可从外部配置
- 首页改用 loadText 模式,输入即时触发字体加载
- textarea 高度根据文本行数动态变化
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-09 10:41:53 +08:00 |
|
崮生(子虚)
|
765a301649
|
修改为本地引用,清理冗余文件
|
2026-04-09 09:50:26 +08:00 |
|
崮生(子虚)
|
79ee7dd3f0
|
内存缓存最近三个字体,避免高频的文件io
|
2026-04-08 22:31:53 +08:00 |
|
崮生(子虚)
|
41c2741e3e
|
将 fonteditor-core 嵌入到项目中,方便后续优化
|
2026-04-08 21:24:56 +08:00 |
|
崮生(子虚)
|
3163e99534
|
重构上传组件为独立文件,移除 txikijs 依赖,调整布局顺序
- 提取 UploadSection 为 src/UploadSection.tsx,复用 FileUploader 组件和 useUpload hook
- 移除 @txikijs/types 包及所有相关配置引用
- 布局顺序调整:选择字体 → 预览 → CSS代码 → 上传 → 原理/SDK文档
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-08 20:55:53 +08:00 |
|
崮生(子虚)
|
9da270733d
|
v1.2.0: 增量字体加载 SDK,优化预览体验
- 新增 webfont-sdk.js,支持按需增量加载字体片段,无闪烁
- 预览使用 SDK 增量加载,输入时不再重新加载已有字体
- SDK 根据元素类型(input/textarea vs 其他)正确获取文本
- SDK 支持重复调用同一选择器时自动清理旧状态
- 页面说明区分基础用法和进阶用法,提供 SDK 下载链接
- URL 改为完整域名(location.origin),方便用户直接复制使用
- 预览文本框字体大小调至 32px
- API Key 输入框改为 text 类型消除密码警告
- SEO 优化:添加 description meta,优化 title
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-08 20:48:23 +08:00 |
|
崮生(子虚)
|
878b54a0fd
|
修复上传功能、移除 tjs 运行时支持、添加 vite-plugin-pilot
- 修复 HTTP header 大小写不敏感匹配,解决浏览器上传请求体为空的问题
- 重写 createStreamAfterTarget,修复大文件上传时 body stream 数据流断裂
- 添加 chunked transfer encoding 解码支持
- 读取完 body 后 cancel stream,防止后台循环抛异常炸进程
- 修复 parseHttpRequest 中 split(":") 对含冒号 header value 的错误拆分
- 临时上传同名文件直接覆盖,不再加时间戳前缀
- 移除 tjs (txiki.js) 运行时支持及相关代码
- 安装并配置 vite-plugin-pilot 浏览器测试工具
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-08 20:31:43 +08:00 |
|
崮生(子虚)
|
6cf0bb2bea
|
v1.1.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-08 16:19:59 +08:00 |
|
崮生(子虚)
|
1a611e7e28
|
自行下载 llrt
|
2026-04-08 15:41:39 +08:00 |
|
崮生(子虚)
|
e5b6718ad9
|
优化开发体验
|
2026-04-08 15:35:11 +08:00 |
|
崮生(子虚)
|
6a5f0a72c4
|
升级依赖
|
2026-04-08 15:01:18 +08:00 |
|
zixu
|
1a7a131469
|
fix gitignore
|
2024-09-04 10:45:58 +08:00 |
|
zixu
|
c6567b8948
|
前端界面添加防抖
|
2024-08-29 09:38:47 +08:00 |
|
zixu
|
b50f9e2423
|
更新文档
|
2024-08-28 20:40:23 +08:00 |
|
zixu
|
ad6d3b4649
|
支持 llrt 运行时
|
2024-08-28 19:57:20 +08:00 |
|
zixu
|
a1b5502891
|
支持使用 tjs 运行
|
2024-08-19 18:10:09 +08:00 |
|
zixu
|
a44f978ef5
|
改善前端页面
|
2024-08-18 17:46:13 +08:00 |
|
zixu
|
cae3bad5a9
|
更新文档
|
2024-08-18 16:29:18 +08:00 |
|
zixu
|
6b896d768e
|
init
|
2024-08-18 15:14:50 +08:00 |
|