@akairos/typeset-studio 0.2.8 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/assets/{index-Dn5YtK3W.js → index-CrJAVx3W.js} +17 -17
- package/dist/cover/cover.js +124 -0
- package/dist/editor/editor.js +1 -0
- package/dist/index.html +1 -1
- package/dist/lib/adapter.js +2 -1
- package/dist/lib/{canvas-renderer-wce6xgb2.js → canvas-renderer-hpe2bqkt.js} +3 -2
- package/dist/lib/{font-loader-j28mt43t.js → font-loader-cft81crk.js} +2 -1
- package/dist/lib/index-2vgqm8ms.js +167 -0
- package/dist/lib/{index-qszn98j2.js → index-3ptjkctd.js} +14 -2
- package/dist/lib/{index-y2tk7642.js → index-51d5rpf7.js} +11 -5
- package/dist/lib/index-94yttj49.js +34 -0
- package/dist/lib/{index-697fkv5y.js → index-dz9pmgbk.js} +12 -2
- package/dist/lib/index-nwch18wp.js +18 -0
- package/dist/lib/{index-6c43c7h4.js → index-xg6pyfw6.js} +1 -163
- package/dist/lib/index.js +7 -4
- package/dist/lib/render-epbcmzxe.js +14 -0
- package/dist/lib/server-font.js +9 -0
- package/package.json +16 -2
- package/src/adapter.test.ts +41 -0
- package/src/adapter.ts +5 -2
- package/src/core/article-cover.test.ts +47 -0
- package/src/core/article-cover.ts +97 -0
- package/src/core/canvas-draw.ts +9 -1
- package/src/core/types.ts +1 -0
- package/src/cover.ts +10 -0
- package/src/server/index.ts +1 -1
- package/src/server/routes/render.ts +9 -0
- package/src/server-font.test.ts +46 -0
- package/src/server-font.ts +23 -0
- package/src/web/components/CoverControls.tsx +22 -0
- package/src/web/components/Header.tsx +1 -1
- package/src/web/editor.ts +1 -0
- package/dist/lib/render-064weavx.js +0 -11
package/README.md
CHANGED
|
@@ -33,6 +33,26 @@
|
|
|
33
33
|
|
|
34
34
|
独立服务支持 [Docker 构建与持久化运行](./docs/docker.md),镜像使用 Bun 1.3.14 和系统中文字体,默认仅映射宿主机回环端口。Pipeline 的本地 npm 插件模式无需另启此容器。
|
|
35
35
|
|
|
36
|
+
## 有限文章封面接口(0.3.0)
|
|
37
|
+
|
|
38
|
+
新宿主使用浏览器安全的 `@akairos/typeset-studio/cover` 和 `@akairos/typeset-studio/editor`,无需引入独立服务或管理员 key。`CoverControls` 是受控 React 组件,仅接收 `value`、`onChange` 和可选 `disabled`;不上传文件、不请求后端、不在浏览器测量字体。宿主负责命名保存、素材所有权和权威 PNG 预览。
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import {
|
|
42
|
+
createArticleCoverConfig, normalizeArticleCoverTitle, validateArticleCoverControls,
|
|
43
|
+
ARTICLE_COVER_FONT, ARTICLE_COVER_IMAGE_KEY,
|
|
44
|
+
} from "@akairos/typeset-studio/cover";
|
|
45
|
+
import { CoverControls } from "@akairos/typeset-studio/editor";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
有限控件为 `backgroundColor`/`titleColor`(六位 hex)、`fontSize`(80–200 整数)、`textAlign`(left/center/right)和 `safePadding`(60–200 整数)。未知字段、字体、路径和 URL 被拒绝。工厂调用 `createArticleCoverConfig({ id, name, controls, assetId })`,两个 ID 都为 UUID;返回完整规范配置,保留 `wechat-cover-2.35` ID,画布 3350×1000、左 2350 标题、右 1000 方图。图片 `asset:<id>` 只作身份占位,必须由可信后端通过 `applyTemplateImages([], config.images, { [ARTICLE_COVER_IMAGE_KEY]: imagePath })` 映射已经验证的持久素材。图片中心裁切、不拉伸;不开放自由布局。标题不自动截断或缩字,宿主必须以 `maxPages: 1` 排版,过长时明确失败。
|
|
49
|
+
|
|
50
|
+
仅服务端调用的 `@akairos/typeset-studio/server-font` 提供同步 `registerArticleCoverFont({ path })`。它要求可信绝对路径,校验固定字体字节后注册 `Publishing Cover` 别名并清测量缓存;缺失、hash 错误或注册失败都抛错。字体身份为 `publishing-noto-cjk-regular-v1`,来自 Debian `fonts-noto-cjk=1:20240730+repack1-1` 的 `NotoSansCJK-Regular.ttc`,SHA256 `b76b0433203017ca80401b2ee0dd69350349871c4b19d504c34dbdd80541690a`。npm 不携带字体;宿主部署需固定包版本、保留字体许可证并保存受控恢复副本。客户端快照只记录字体 id/hash,不能提交路径。
|
|
51
|
+
|
|
52
|
+
可信 PNG 调用顺序:注册字体 → 工厂配置 → 解析素材占位 → `runTypeset({ markdown, config, images, maxPages: 1 })` → `renderPageToPng(...)`。从 0.3.1 起,宿主先用 `normalizeArticleCoverTitle(title)` 清理首尾空白和前导 `#` 组,拒绝清理后为空的标题,再构造标题 Markdown;重复调用结果不变,中间及尾部的 `#` 保留。Pipeline 仅在可信 `ZZHUB_PIPELINE_COVER_SNAPSHOT=1` 分支使用同一规则,旧调用保留原标题行为。原 root API 仅供服务端使用,`/cover` 和 `/editor` 没有原生 Canvas 或 Node 依赖。Pipeline 插件在实际渲染子进程中通过受信环境 `TYPESET_ARTICLE_COVER_FONT_PATH` 注册工厂配置的字体,不能只在 Worker 父进程注册;旧模板和 standalone 原路径不受影响。
|
|
53
|
+
|
|
54
|
+
本次定向检查入口为 `src/core/article-cover.test.ts` 和 `src/server-font.test.ts`;后者的真实 PNG 测试需显式设置 `TYPESET_ARTICLE_COVER_FONT_PATH` 为受控字体文件,否则该项跳过。开发只构建/静态检查,真实字体、PNG、HTTP/插件和消费方浏览器检查由主控执行并区分留证。
|
|
55
|
+
|
|
36
56
|
## 📖 定位与核心哲学
|
|
37
57
|
|
|
38
58
|
在内容自动化分发、微信公众号文章与小红书图文制作中,传统的卡片出图方案普遍依赖 **Chrome Headless (Puppeteer / Playwright)**。为了获取最佳排版效果,往往需要在浏览器实例中多次反复渲染、测量高度、试探字号并进行 CDP 通信截屏。这种方式**速度缓慢(单次耗时数秒)、内存占用高、排版结果难以量化微调**。
|