@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 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 { renderAsync } = await import('@resvg/resvg-js');
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
- ...this.config.defaultParams,
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 { renderAsync } = await import('@resvg/resvg-js');
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
- ...this.config.defaultParams,
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.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
  }