@zhin.js/html-renderer 3.0.14 → 3.0.16

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/lib/renderer.js CHANGED
@@ -1,279 +1,159 @@
1
- import { htmlToSvg, getAllBuiltinFonts, h, e } from '@zhin.js/satori';
2
- import { Resvg } from '@resvg/resvg-js';
3
- const DEFAULT_CONFIG = {
4
- defaultWidth: 800,
5
- defaultFonts: [],
6
- defaultBackgroundColor: '#ffffff',
7
- };
8
- /** 外部资源(twemoji CDN)拉取超时 */
9
- const EMOJI_FETCH_TIMEOUT_MS = 10_000;
10
- /** 渲染并发上限,防止渲染任务堆积拖垮进程 */
1
+ import { resolveHtmlRendererConfig } from './config.js';
2
+ import { createEngine } from './engine.js';
3
+ import { buildFontFaces, isFullDocument, withDocumentFile, wrapDocument } from './html.js';
4
+ import { readImageSize } from './image.js';
5
+ import { serializeJsxToHtml } from './jsx.js';
11
6
  const MAX_CONCURRENT_RENDERS = 2;
12
- const fontCache = new Map();
13
- let defaultFontLoaded = false;
14
- /** fontCache 键:name + weight + style(缺 style 会让 italic 覆盖 normal) */
15
- function fontCacheKey(name, weight, style) {
16
- return `${name}-${weight ?? 400}-${style ?? 'normal'}`;
17
- }
18
- function toFontConfig(f) {
19
- return { name: f.name, data: f.data, weight: f.weight, style: f.style };
20
- }
21
- function uniqueFontsForRender(list) {
22
- const m = new Map();
23
- for (const f of list) {
24
- const k = `${f.name}\0${f.weight ?? 400}\0${f.style ?? 'normal'}`;
25
- m.set(k, f);
26
- }
27
- return [...m.values()];
28
- }
29
- function mergeFontLists(...lists) {
30
- const flat = [];
31
- for (const list of lists)
32
- flat.push(...list);
33
- return uniqueFontsForRender(flat);
34
- }
35
- function ensureBuiltinFontsCached(logger) {
36
- if (defaultFontLoaded)
37
- return;
38
- try {
39
- const builtinFonts = getAllBuiltinFonts();
40
- if (builtinFonts.length > 0) {
41
- for (const font of builtinFonts) {
42
- const fc = toFontConfig(font);
43
- fontCache.set(fontCacheKey(font.name, font.weight, font.style), fc);
44
- logger?.debug?.(`Builtin font: ${font.name} (${Math.round(font.data.byteLength / 1024)}KB)`);
45
- }
46
- fontCache.set('default', toFontConfig(builtinFonts[0]));
47
- defaultFontLoaded = true;
48
- return;
49
- }
50
- }
51
- catch (e) {
52
- logger?.warn?.('html-renderer: builtin fonts failed', e);
53
- }
54
- defaultFontLoaded = true;
55
- logger?.warn?.('html-renderer: no builtin fonts available');
56
- }
57
- function emojiToTwemojiUrl(emoji) {
58
- const codePoints = [];
59
- for (const char of emoji) {
60
- const cp = char.codePointAt(0);
61
- if (cp && cp !== 0xfe0f)
62
- codePoints.push(cp.toString(16));
63
- }
64
- return `https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/${codePoints.join('-')}.svg`;
65
- }
66
- async function loadEmojiImage(emoji, logger) {
67
- try {
68
- const url = emojiToTwemojiUrl(emoji);
69
- const response = await fetch(url, { signal: AbortSignal.timeout(EMOJI_FETCH_TIMEOUT_MS) });
70
- if (!response.ok) {
71
- logger?.debug?.(`Failed to load emoji ${emoji}: ${response.status}`);
72
- return null;
73
- }
74
- const svg = await response.text();
75
- return `data:image/svg+xml;base64,${Buffer.from(svg).toString('base64')}`;
76
- }
77
- catch (error) {
78
- logger?.debug?.(`Failed to load emoji ${emoji}:`, error);
79
- return null;
80
- }
81
- }
82
- const EMOJI_CACHE_MAX = 200;
83
- /** 失败(null)结果的负缓存 TTL,避免每次渲染都重试失败的 emoji */
84
- const EMOJI_NEGATIVE_TTL_MS = 60_000;
85
- /** LRU:Map 迭代顺序即插入顺序,命中时移到末尾,超容量时淘汰最旧项 */
86
- const emojiCache = new Map();
87
- function getCachedEmoji(segment) {
88
- const entry = emojiCache.get(segment);
89
- if (!entry)
90
- return { hit: false, value: null };
91
- if (entry.value === null && Date.now() - entry.ts > EMOJI_NEGATIVE_TTL_MS) {
92
- emojiCache.delete(segment);
93
- return { hit: false, value: null };
94
- }
95
- // LRU touch:重新插入到末尾
96
- emojiCache.delete(segment);
97
- emojiCache.set(segment, entry);
98
- return { hit: true, value: entry.value };
99
- }
100
- function setCachedEmoji(segment, value) {
101
- emojiCache.delete(segment);
102
- emojiCache.set(segment, { value, ts: Date.now() });
103
- while (emojiCache.size > EMOJI_CACHE_MAX) {
104
- const oldest = emojiCache.keys().next().value;
105
- if (oldest === undefined)
106
- break;
107
- emojiCache.delete(oldest);
108
- }
109
- }
110
- async function loadAdditionalAsset(languageCode, segment, logger) {
111
- if (languageCode === 'emoji') {
112
- const cached = getCachedEmoji(segment);
113
- if (cached.hit)
114
- return cached.value;
115
- const result = await loadEmojiImage(segment, logger);
116
- // 失败也缓存(短 TTL 负缓存),防止同一 emoji 反复打爆 CDN
117
- setCachedEmoji(segment, result);
118
- return result;
119
- }
120
- return null;
121
- }
122
- function wrapHtmlFragment(html, backgroundColor) {
123
- if (html.includes('<!DOCTYPE') || html.includes('<html'))
124
- return html;
125
- return `<div style="display:flex;flex-direction:column;width:100%;height:100%;margin:0;padding:0;box-sizing:border-box;background-color:${backgroundColor};font-family:Noto Sans SC,sans-serif">${html}</div>`;
126
- }
127
- async function renderHtmlToSvg(html, width, height, fonts, backgroundColor, logger, enableEmoji = true) {
128
- ensureBuiltinFontsCached(logger);
129
- const finalFonts = mergeFontLists(getAllBuiltinFonts().map(toFontConfig), fonts);
130
- if (finalFonts.length === 0) {
131
- logger?.warn?.('html-renderer: no fonts; non-ascii text may fail');
132
- }
133
- const svg = await htmlToSvg(wrapHtmlFragment(html, backgroundColor ?? '#ffffff'), {
134
- width,
135
- ...(height != null && { height }),
136
- fonts: finalFonts.map((f) => ({
137
- name: f.name,
138
- data: f.data,
139
- weight: f.weight,
140
- style: f.style,
141
- })),
142
- loadAdditionalAsset: async (code, seg) => enableEmoji ? ((await loadAdditionalAsset(code, seg, logger)) ?? '') : '',
143
- });
144
- const wm = svg.match(/width="(\d+)"/);
145
- const hm = svg.match(/height="(\d+)"/);
146
- return {
147
- svg,
148
- width: wm ? parseInt(wm[1], 10) : width,
149
- height: hm ? parseInt(hm[1], 10) : height || width,
150
- };
151
- }
152
- function svgToPng(svg, scale = 1) {
153
- const resvg = new Resvg(svg, {
154
- fitTo: scale !== 1
155
- ? {
156
- mode: 'zoom',
157
- value: scale,
158
- }
159
- : undefined,
160
- });
161
- const pngData = resvg.render();
162
- return Buffer.from(pngData.asPng());
163
- }
164
- export function serializeJsxToHtml(element) {
165
- if (typeof element === 'string')
166
- return e(element);
167
- if (typeof element === 'number')
168
- return String(element);
169
- // boolean / null / undefined 一律渲染为空串
170
- if (element == null || typeof element === 'boolean')
171
- return '';
172
- if (Array.isArray(element)) {
173
- return element.map(serializeJsxToHtml).join('');
174
- }
175
- if (typeof element === 'object' && element !== null && 'type' in element) {
176
- const { type, props = {} } = element;
177
- const { children, style, dangerouslySetInnerHTML, ...restProps } = props;
178
- let styleStr = '';
179
- if (style && typeof style === 'object') {
180
- styleStr = Object.entries(style)
181
- .map(([key, value]) => `${key.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${value}`)
182
- .join('; ');
183
- }
184
- const attrs = Object.entries(restProps)
185
- .filter(([key, value]) => key !== 'dangerouslySetInnerHTML' && value != null && value !== false)
186
- .map(([key, value]) => `${key}="${e(String(value))}"`)
187
- .join(' ');
188
- const styleAttr = styleStr ? ` style="${e(styleStr)}"` : '';
189
- const attrStr = attrs ? ` ${attrs}` : '';
190
- // Raw HTML 只走显式通道 dangerouslySetInnerHTML
191
- if (dangerouslySetInnerHTML?.__html) {
192
- return `<${type}${attrStr}${styleAttr}>${dangerouslySetInnerHTML.__html}</${type}>`;
193
- }
194
- const childrenHtml = serializeJsxToHtml(children);
195
- const selfClosingTags = ['img', 'br', 'hr', 'input', 'meta', 'link'];
196
- if (selfClosingTags.includes(type) && !childrenHtml) {
197
- return `<${type}${attrStr}${styleAttr} />`;
198
- }
199
- return `<${type}${attrStr}${styleAttr}>${childrenHtml}</${type}>`;
200
- }
201
- return '';
7
+ const MIME = {
8
+ png: 'image/png',
9
+ jpeg: 'image/jpeg',
10
+ webp: 'image/webp',
11
+ };
12
+ function fontKey(font) {
13
+ return `${font.name}\0${font.weight ?? 400}\0${font.style ?? 'normal'}`;
202
14
  }
203
15
  export function createHtmlRenderer(config = {}, logger) {
204
- const mergedConfig = { ...DEFAULT_CONFIG, ...config };
205
- function cacheDefaultFonts() {
206
- for (const font of mergedConfig.defaultFonts) {
207
- fontCache.set(fontCacheKey(font.name, font.weight, font.style), font);
208
- }
209
- }
210
- ensureBuiltinFontsCached(logger);
211
- cacheDefaultFonts();
212
- // 渲染并发闸:最多 MAX_CONCURRENT_RENDERS 个并发,其余排队
16
+ const mergedConfig = resolveHtmlRendererConfig(config);
17
+ const engine = createEngine(mergedConfig.shotium, logger);
18
+ const registeredFonts = new Map();
19
+ const warned = new Set();
213
20
  let activeRenders = 0;
214
21
  const renderQueue = [];
215
- async function acquireRenderSlot() {
22
+ const warnOnce = (key, ...message) => {
23
+ if (warned.has(key))
24
+ return;
25
+ warned.add(key);
26
+ logger?.warn?.(...message);
27
+ };
28
+ const getFonts = (extraFonts = []) => {
29
+ const fonts = new Map();
30
+ for (const font of mergedConfig.defaultFonts)
31
+ fonts.set(fontKey(font), font);
32
+ for (const font of registeredFonts.values())
33
+ fonts.set(fontKey(font), font);
34
+ for (const font of extraFonts)
35
+ fonts.set(fontKey(font), font);
36
+ return [...fonts.values()];
37
+ };
38
+ const acquireRenderSlot = async () => {
216
39
  if (activeRenders >= MAX_CONCURRENT_RENDERS) {
217
40
  await new Promise((resolve) => renderQueue.push(resolve));
218
41
  }
219
42
  activeRenders++;
220
- }
221
- function releaseRenderSlot() {
43
+ };
44
+ const releaseRenderSlot = () => {
222
45
  activeRenders--;
223
- const next = renderQueue.shift();
224
- if (next)
225
- next();
226
- }
46
+ renderQueue.shift()?.();
47
+ };
48
+ const capture = async (file, options, defaults) => {
49
+ const type = options.type ?? defaults.type;
50
+ const shot = {
51
+ file,
52
+ type,
53
+ viewport: {
54
+ width: Math.round(options.width ?? mergedConfig.shotium.viewport.width),
55
+ height: Math.round(options.height ?? mergedConfig.shotium.viewport.height),
56
+ },
57
+ allowFileAccess: options.allowFileAccess ?? mergedConfig.shotium.allowFileAccess,
58
+ pageGotoParams: {
59
+ waitUntil: options.waitUntil ?? mergedConfig.shotium.waitUntil,
60
+ timeout: options.timeout ?? mergedConfig.shotium.timeout,
61
+ },
62
+ };
63
+ if (type !== 'png')
64
+ shot.quality = options.quality ?? mergedConfig.shotium.quality;
65
+ const selector = options.selector ?? defaults.selector;
66
+ if (options.fullPage ?? defaults.fullPage)
67
+ shot.fullPage = true;
68
+ else if (selector)
69
+ shot.selector = selector;
70
+ if (options.omitBackground && type !== 'jpeg')
71
+ shot.omitBackground = true;
72
+ if (options.clip && !shot.fullPage && !shot.selector)
73
+ shot.clip = options.clip;
74
+ const scale = options.scale ?? mergedConfig.shotium.scale;
75
+ if (scale !== 1)
76
+ shot.scale = scale;
77
+ if (options.headers && Object.keys(options.headers).length > 0)
78
+ shot.headers = options.headers;
79
+ if (options.cache)
80
+ shot.cache = options.cache;
81
+ const result = await engine.screenshot(shot);
82
+ const image = result.image;
83
+ if (!image)
84
+ throw new Error('[shotium] engine returned no image');
85
+ const size = readImageSize(image);
86
+ if (mergedConfig.shotium.logStats) {
87
+ logger?.info?.(`[shotium] render ${size ? `${size.width}x${size.height}` : '?'} ${(image.length / 1024).toFixed(1)}KB `
88
+ + `(engine ${result.stats.timing.total.toFixed(1)}ms, requests ${result.stats.requests}, cache ${result.stats.fromCache})`);
89
+ }
90
+ return {
91
+ data: image,
92
+ width: size?.width ?? 0,
93
+ height: size?.height ?? 0,
94
+ mimeType: MIME[type],
95
+ stats: result.stats,
96
+ };
97
+ };
98
+ const renderWithShotium = async (html, options = {}) => {
99
+ const fonts = getFonts(options.fonts ?? []);
100
+ const wrapped = !isFullDocument(html);
101
+ const document = wrapDocument(html, {
102
+ width: options.width ?? mergedConfig.shotium.viewport.width,
103
+ ...(options.height != null ? { height: options.height } : {}),
104
+ backgroundColor: options.backgroundColor ?? mergedConfig.shotium.backgroundColor,
105
+ fontFamily: mergedConfig.shotium.fontFamily,
106
+ fontFaces: buildFontFaces(fonts),
107
+ });
108
+ const defaults = wrapped
109
+ ? { type: 'png', fullPage: false, selector: 'body' }
110
+ : { type: 'png', fullPage: true };
111
+ const result = await withDocumentFile(document, (file) => capture(file, {
112
+ width: options.width,
113
+ height: options.height,
114
+ backgroundColor: options.backgroundColor,
115
+ scale: options.scale,
116
+ }, defaults));
117
+ return {
118
+ data: result.data,
119
+ format: 'png',
120
+ width: result.width,
121
+ height: result.height,
122
+ mimeType: result.mimeType,
123
+ };
124
+ };
227
125
  return {
228
126
  async render(html, options = {}) {
229
- const { width = mergedConfig.defaultWidth, height, format = 'png', backgroundColor = mergedConfig.defaultBackgroundColor, fonts = [], enableEmoji = true, scale = 1, } = options;
230
127
  await acquireRenderSlot();
231
128
  try {
232
- ensureBuiltinFontsCached(logger);
233
- const allFonts = uniqueFontsForRender([...fontCache.values(), ...fonts]);
234
- const { svg, width: actualWidth, height: actualHeight } = await renderHtmlToSvg(html, width, height, allFonts, backgroundColor, logger, enableEmoji);
235
- if (format === 'svg') {
236
- return {
237
- data: svg,
238
- format: 'svg',
239
- width: actualWidth,
240
- height: actualHeight,
241
- mimeType: 'image/svg+xml',
242
- };
129
+ if ((options.format ?? 'png') === 'svg') {
130
+ warnOnce('svg', 'html-renderer: shotium does not support svg output; returning png instead');
243
131
  }
244
- const png = svgToPng(svg, scale);
245
- return {
246
- data: png,
247
- format: 'png',
248
- width: Math.round(actualWidth * scale),
249
- height: Math.round(actualHeight * scale),
250
- mimeType: 'image/png',
251
- };
132
+ return await renderWithShotium(html, options);
252
133
  }
253
134
  finally {
254
135
  releaseRenderSlot();
136
+ engine.release();
255
137
  }
256
138
  },
257
139
  async renderJsx(element, options = {}) {
258
140
  return this.render(serializeJsxToHtml(element), options);
259
141
  },
260
142
  async renderComponent(component, props, options = {}) {
261
- return this.render(h(component, props), options);
143
+ return this.render(serializeJsxToHtml(component(props)), options);
262
144
  },
263
145
  registerFont(font) {
264
- fontCache.set(fontCacheKey(font.name, font.weight, font.style), font);
146
+ registeredFonts.set(fontKey(font), font);
265
147
  logger?.debug?.(`Font registered: ${font.name}`);
266
148
  },
267
149
  getFonts() {
268
- return Array.from(fontCache.values());
150
+ return getFonts();
269
151
  },
270
152
  clearFonts() {
271
- fontCache.clear();
272
- defaultFontLoaded = false;
273
- // clear 后重新合并 defaultFonts,避免用户配置的默认字体永久丢失
274
- cacheDefaultFonts();
153
+ registeredFonts.clear();
275
154
  logger?.debug?.('Font cache cleared');
276
155
  },
277
156
  };
278
157
  }
158
+ export { serializeJsxToHtml } from './jsx.js';
279
159
  //# sourceMappingURL=renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -1,5 +1,7 @@
1
- import type { HtmlComponent } from '@zhin.js/satori';
2
1
  export type OutputFormat = 'svg' | 'png';
2
+ export type RasterFormat = 'png' | 'jpeg' | 'webp';
3
+ export type WaitUntil = 'load' | 'networkidle';
4
+ export type HtmlComponent<P> = (props: P) => unknown;
3
5
  export interface FontConfig {
4
6
  name: string;
5
7
  data: ArrayBuffer | Buffer;
@@ -37,11 +39,34 @@ export interface HtmlRendererAiTextAsImageConfig {
37
39
  scale?: number;
38
40
  fileName?: string;
39
41
  }
42
+ export interface HtmlRendererViewport {
43
+ width?: number;
44
+ height?: number;
45
+ }
40
46
  export interface HtmlRendererConfig {
41
47
  defaultWidth?: number;
48
+ width?: number;
42
49
  defaultFonts?: FontConfig[];
43
50
  defaultBackgroundColor?: string;
51
+ backgroundColor?: string;
44
52
  aiTextAsImage?: boolean | HtmlRendererAiTextAsImageConfig;
53
+ viewport?: HtmlRendererViewport;
54
+ scale?: number;
55
+ type?: RasterFormat;
56
+ quality?: number;
57
+ timeout?: number;
58
+ waitUntil?: WaitUntil;
59
+ fontFamily?: string;
60
+ maxImageHeight?: number;
61
+ sliceCompression?: number;
62
+ allowFileAccess?: boolean;
63
+ takeOverHtmlSegments?: boolean;
64
+ cacheDir?: string;
65
+ cacheMaxBytes?: number;
66
+ userAgent?: string;
67
+ idleTimeoutMs?: number;
68
+ logStats?: boolean;
69
+ htmlRenderer?: HtmlRendererConfig | Record<string, unknown>;
45
70
  }
46
71
  export interface HtmlRendererService {
47
72
  render(html: string, options?: RenderOptions): Promise<RenderResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7D,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,GAAG,+BAA+B,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5E,eAAe,CAAC,CAAC,EACf,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACrC,QAAQ,IAAI,UAAU,EAAE,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zhin.js/html-renderer",
3
- "version": "3.0.14",
4
- "description": "HTML to PNG/SVG for Zhin.js (satori + resvg); optional peer of zhin.js",
3
+ "version": "3.0.16",
4
+ "description": "HTML rendering for Zhin.js with Shotium; optional peer of zhin.js",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",
@@ -23,7 +23,7 @@
23
23
  "zhin.js",
24
24
  "html",
25
25
  "image",
26
- "satori",
26
+ "shotium",
27
27
  "png"
28
28
  ],
29
29
  "author": {
@@ -33,11 +33,10 @@
33
33
  },
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
- "@resvg/resvg-js": "^2.6.2",
37
- "@zhin.js/satori": "1.0.19"
36
+ "@shotkit/shotium": "^0.3.3"
38
37
  },
39
38
  "peerDependencies": {
40
- "@zhin.js/core": "1.5.14"
39
+ "@zhin.js/core": "1.5.16"
41
40
  },
42
41
  "peerDependenciesMeta": {
43
42
  "@zhin.js/core": {
@@ -46,7 +45,7 @@
46
45
  },
47
46
  "devDependencies": {
48
47
  "typescript": "^6.0.3",
49
- "@zhin.js/core": "1.5.14"
48
+ "@zhin.js/core": "1.5.16"
50
49
  },
51
50
  "repository": {
52
51
  "type": "git",