@ogify/core 0.1.1 → 0.1.3
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/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +8 -6
- package/dist/index.mjs +8 -6
- package/package.json +12 -5
package/dist/index.d.mts
CHANGED
|
@@ -168,7 +168,7 @@ type OgTemplateRenderer = {
|
|
|
168
168
|
* These values are merged with user-provided parameters,
|
|
169
169
|
* with user values taking precedence.
|
|
170
170
|
*/
|
|
171
|
-
defaultParams?: OgTemplateParams;
|
|
171
|
+
defaultParams?: OgTemplateParams | (() => Promise<OgTemplateParams>);
|
|
172
172
|
/**
|
|
173
173
|
* Hook called before rendering.
|
|
174
174
|
*
|
|
@@ -315,7 +315,7 @@ declare class TemplateRenderer {
|
|
|
315
315
|
* @returns Promise resolving to a PNG image buffer
|
|
316
316
|
* @throws Error if template is not found or rendering fails
|
|
317
317
|
*/
|
|
318
|
-
renderToImage(templateId: string, params: OgTemplateParams, options?: {
|
|
318
|
+
renderToImage(templateId: string, params: OgTemplateParams | (() => Promise<OgTemplateParams>), options?: {
|
|
319
319
|
width: number;
|
|
320
320
|
height: number;
|
|
321
321
|
}): Promise<Buffer>;
|
|
@@ -366,7 +366,7 @@ declare function createTemplateRenderer(config: OgTemplateRenderer): TemplateRen
|
|
|
366
366
|
* - SVG rendering fails
|
|
367
367
|
* - PNG conversion fails
|
|
368
368
|
*/
|
|
369
|
-
declare function renderTemplate(template: OgTemplate, params: OgTemplateParams, options?: {
|
|
369
|
+
declare function renderTemplate(template: OgTemplate, params: OgTemplateParams | (() => Promise<OgTemplateParams>), options?: {
|
|
370
370
|
width: number;
|
|
371
371
|
height: number;
|
|
372
372
|
}): Promise<Buffer>;
|
package/dist/index.d.ts
CHANGED
|
@@ -168,7 +168,7 @@ type OgTemplateRenderer = {
|
|
|
168
168
|
* These values are merged with user-provided parameters,
|
|
169
169
|
* with user values taking precedence.
|
|
170
170
|
*/
|
|
171
|
-
defaultParams?: OgTemplateParams;
|
|
171
|
+
defaultParams?: OgTemplateParams | (() => Promise<OgTemplateParams>);
|
|
172
172
|
/**
|
|
173
173
|
* Hook called before rendering.
|
|
174
174
|
*
|
|
@@ -315,7 +315,7 @@ declare class TemplateRenderer {
|
|
|
315
315
|
* @returns Promise resolving to a PNG image buffer
|
|
316
316
|
* @throws Error if template is not found or rendering fails
|
|
317
317
|
*/
|
|
318
|
-
renderToImage(templateId: string, params: OgTemplateParams, options?: {
|
|
318
|
+
renderToImage(templateId: string, params: OgTemplateParams | (() => Promise<OgTemplateParams>), options?: {
|
|
319
319
|
width: number;
|
|
320
320
|
height: number;
|
|
321
321
|
}): Promise<Buffer>;
|
|
@@ -366,7 +366,7 @@ declare function createTemplateRenderer(config: OgTemplateRenderer): TemplateRen
|
|
|
366
366
|
* - SVG rendering fails
|
|
367
367
|
* - PNG conversion fails
|
|
368
368
|
*/
|
|
369
|
-
declare function renderTemplate(template: OgTemplate, params: OgTemplateParams, options?: {
|
|
369
|
+
declare function renderTemplate(template: OgTemplate, params: OgTemplateParams | (() => Promise<OgTemplateParams>), options?: {
|
|
370
370
|
width: number;
|
|
371
371
|
height: number;
|
|
372
372
|
}): Promise<Buffer>;
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var satori = require('satori');
|
|
4
4
|
var satoriHtml = require('satori-html');
|
|
5
|
+
var resvgJs = require('@resvg/resvg-js');
|
|
5
6
|
|
|
6
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
8
|
|
|
@@ -314,8 +315,8 @@ async function renderTemplate(template, params, options) {
|
|
|
314
315
|
const width = options?.width || DEFAULT_WIDTH;
|
|
315
316
|
const height = options?.height || DEFAULT_HEIGHT;
|
|
316
317
|
const satoriFonts = await loadFonts(template.fonts);
|
|
317
|
-
const htmlString = template.renderer({
|
|
318
|
-
params,
|
|
318
|
+
const htmlString = await template.renderer({
|
|
319
|
+
params: typeof params === "function" ? await params() : params,
|
|
319
320
|
width,
|
|
320
321
|
height
|
|
321
322
|
});
|
|
@@ -343,14 +344,14 @@ async function renderTemplate(template, params, options) {
|
|
|
343
344
|
});
|
|
344
345
|
}
|
|
345
346
|
});
|
|
346
|
-
const
|
|
347
|
-
const pngData = await renderAsync(svg, {
|
|
347
|
+
const resvg = new resvgJs.Resvg(svg, {
|
|
348
348
|
fitTo: {
|
|
349
349
|
mode: "width",
|
|
350
350
|
// Scale based on width, maintain aspect ratio
|
|
351
351
|
value: width
|
|
352
352
|
}
|
|
353
353
|
});
|
|
354
|
+
const pngData = resvg.render();
|
|
354
355
|
return Buffer.from(pngData.asPng());
|
|
355
356
|
}
|
|
356
357
|
|
|
@@ -461,13 +462,14 @@ var TemplateRenderer = class {
|
|
|
461
462
|
* @throws Error if template is not found or rendering fails
|
|
462
463
|
*/
|
|
463
464
|
async renderToImage(templateId, params, options) {
|
|
465
|
+
const { defaultParams } = this.config;
|
|
464
466
|
const template = this.getTemplate(templateId);
|
|
465
467
|
if (!template) {
|
|
466
468
|
throw new Error(`Template '${templateId}' not found`);
|
|
467
469
|
}
|
|
468
470
|
const mergedParams = {
|
|
469
|
-
...
|
|
470
|
-
...params
|
|
471
|
+
...typeof defaultParams === "function" ? await defaultParams() : defaultParams,
|
|
472
|
+
...typeof params === "function" ? await params() : params
|
|
471
473
|
};
|
|
472
474
|
if (this.config.beforeRender) {
|
|
473
475
|
await this.config.beforeRender(templateId, mergedParams);
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import satori from 'satori';
|
|
2
2
|
import { html } from 'satori-html';
|
|
3
|
+
import { Resvg } from '@resvg/resvg-js';
|
|
3
4
|
|
|
4
5
|
// src/template.ts
|
|
5
6
|
|
|
@@ -308,8 +309,8 @@ async function renderTemplate(template, params, options) {
|
|
|
308
309
|
const width = options?.width || DEFAULT_WIDTH;
|
|
309
310
|
const height = options?.height || DEFAULT_HEIGHT;
|
|
310
311
|
const satoriFonts = await loadFonts(template.fonts);
|
|
311
|
-
const htmlString = template.renderer({
|
|
312
|
-
params,
|
|
312
|
+
const htmlString = await template.renderer({
|
|
313
|
+
params: typeof params === "function" ? await params() : params,
|
|
313
314
|
width,
|
|
314
315
|
height
|
|
315
316
|
});
|
|
@@ -337,14 +338,14 @@ async function renderTemplate(template, params, options) {
|
|
|
337
338
|
});
|
|
338
339
|
}
|
|
339
340
|
});
|
|
340
|
-
const
|
|
341
|
-
const pngData = await renderAsync(svg, {
|
|
341
|
+
const resvg = new Resvg(svg, {
|
|
342
342
|
fitTo: {
|
|
343
343
|
mode: "width",
|
|
344
344
|
// Scale based on width, maintain aspect ratio
|
|
345
345
|
value: width
|
|
346
346
|
}
|
|
347
347
|
});
|
|
348
|
+
const pngData = resvg.render();
|
|
348
349
|
return Buffer.from(pngData.asPng());
|
|
349
350
|
}
|
|
350
351
|
|
|
@@ -455,13 +456,14 @@ var TemplateRenderer = class {
|
|
|
455
456
|
* @throws Error if template is not found or rendering fails
|
|
456
457
|
*/
|
|
457
458
|
async renderToImage(templateId, params, options) {
|
|
459
|
+
const { defaultParams } = this.config;
|
|
458
460
|
const template = this.getTemplate(templateId);
|
|
459
461
|
if (!template) {
|
|
460
462
|
throw new Error(`Template '${templateId}' not found`);
|
|
461
463
|
}
|
|
462
464
|
const mergedParams = {
|
|
463
|
-
...
|
|
464
|
-
...params
|
|
465
|
+
...typeof defaultParams === "function" ? await defaultParams() : defaultParams,
|
|
466
|
+
...typeof params === "function" ? await params() : params
|
|
465
467
|
};
|
|
466
468
|
if (this.config.beforeRender) {
|
|
467
469
|
await this.config.beforeRender(templateId, mergedParams);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ogify/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Core types and utilities for OGify Open Graph image generator",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -21,19 +21,26 @@
|
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"dependencies": {
|
|
24
|
+
"@resvg/resvg-js": "^2.6.2",
|
|
24
25
|
"satori": "^0.18.3",
|
|
25
|
-
"satori-html": "^0.3.2"
|
|
26
|
-
"@resvg/resvg-js": "^2.6.2"
|
|
26
|
+
"satori-html": "^0.3.2"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^18",
|
|
30
|
+
"@vitest/ui": "^4.0.15",
|
|
31
|
+
"happy-dom": "^20.0.11",
|
|
30
32
|
"tsup": "^8.5.1",
|
|
31
|
-
"typescript": "^5.9.3"
|
|
33
|
+
"typescript": "^5.9.3",
|
|
34
|
+
"vitest": "^4.0.15"
|
|
32
35
|
},
|
|
33
36
|
"scripts": {
|
|
34
37
|
"build": "tsup",
|
|
35
38
|
"dev": "tsup --watch",
|
|
36
39
|
"lint": "tsc --noEmit",
|
|
37
|
-
"clean": "rm -rf dist"
|
|
40
|
+
"clean": "rm -rf dist",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:watch": "vitest",
|
|
43
|
+
"test:ui": "vitest --ui",
|
|
44
|
+
"test:coverage": "vitest run --coverage"
|
|
38
45
|
}
|
|
39
46
|
}
|