takumi-js 1.0.13 → 1.0.15

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.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_render = require("./render-_g6WzckI.cjs");
2
+ const require_render = require("./render-GE_5ugLi.cjs");
3
3
  exports.render = require_render.render;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as render, t as RenderOptions } from "./render-mfKqlvP8.cjs";
1
+ import { n as RenderOptions, r as render } from "./render-8qtfnpqJ.cjs";
2
2
  import { ContainerNode, FetchResourcesOptions, ImageNode, Node, NodeAttributes, NodeMetadata, ReactElementLike, TextNode } from "@takumi-rs/helpers";
3
3
  import { AnimationFrameSource, AnimationOutputFormat, AnimationSceneSource, ConstructRendererOptions, DitheringAlgorithm, EncodeFramesOptions, Font, FontDetails, ImageSource, Keyframes, KeyframesMap, KeyframesRuleList, MeasuredNode, MeasuredTextRun, OutputFormat, RenderAnimationOptions } from "@takumi-rs/core";
4
4
 
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as render, t as RenderOptions } from "./render-D_xiyqZH.mjs";
1
+ import { n as RenderOptions, r as render } from "./render-tDjGNf6b.mjs";
2
2
  import { ContainerNode, FetchResourcesOptions, ImageNode, Node, NodeAttributes, NodeMetadata, ReactElementLike, TextNode } from "@takumi-rs/helpers";
3
3
  import { AnimationFrameSource, AnimationOutputFormat, AnimationSceneSource, ConstructRendererOptions, DitheringAlgorithm, EncodeFramesOptions, Font, FontDetails, ImageSource, Keyframes, KeyframesMap, KeyframesRuleList, MeasuredNode, MeasuredTextRun, OutputFormat, RenderAnimationOptions } from "@takumi-rs/core";
4
4
 
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { t as render } from "./render-CdlW9EIh.mjs";
1
+ import { t as render } from "./render-01YbRqd2.mjs";
2
2
  export { render };
@@ -82,7 +82,15 @@ function isNodeEnvironment() {
82
82
  //#endregion
83
83
  //#region src/render.ts
84
84
  let globalRenderer;
85
- function transformElement(element, options) {
85
+ function isTakumiNode(element) {
86
+ if (typeof element !== "object" || element === null || !("type" in element)) return false;
87
+ return element.type === "container" || element.type === "text" || element.type === "image";
88
+ }
89
+ async function transformElement(element, options) {
90
+ if (isTakumiNode(element)) return {
91
+ node: element,
92
+ stylesheets: []
93
+ };
86
94
  if (typeof element === "string") return fromHtml(element);
87
95
  return fromJsx(element, options?.jsx);
88
96
  }
@@ -1,5 +1,5 @@
1
1
  import { EmojiType } from "@takumi-rs/helpers/emoji";
2
- import { FetchResourcesOptions, ReactElementLike } from "@takumi-rs/helpers";
2
+ import { FetchResourcesOptions, Node, ReactElementLike } from "@takumi-rs/helpers";
3
3
  import { FromJsxOptions } from "@takumi-rs/helpers/jsx";
4
4
  import * as napi from "@takumi-rs/core";
5
5
  import * as wasm from "@takumi-rs/wasm";
@@ -37,6 +37,7 @@ type RenderOptionsWithRenderer = InnerRenderOptions & {
37
37
  };
38
38
  type RenderOptionsWithoutRenderer = Omit<RenderOptionsWithRenderer, "renderer"> & ManagedRendererOptions;
39
39
  type RenderOptions = RenderOptionsWithRenderer | RenderOptionsWithoutRenderer;
40
+ type RenderInput = ReactNode | ReactElementLike | Node | string;
40
41
  /**
41
42
  * Renders a React element, HTML string, or Takumi node tree into an image.
42
43
  *
@@ -57,6 +58,6 @@ type RenderOptions = RenderOptionsWithRenderer | RenderOptionsWithoutRenderer;
57
58
  * @param options - Configuration for rendering, including dimensions, format, fonts, and more.
58
59
  * @returns A promise that resolves to the rendered image data (Buffer/Uint8Array).
59
60
  */
60
- declare function render(element: ReactNode | ReactElementLike | string, options?: RenderOptions): Promise<Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>>;
61
+ declare function render(element: RenderInput, options?: RenderOptions): Promise<Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>>;
61
62
  //#endregion
62
- export { render as n, RenderOptions as t };
63
+ export { RenderOptions as n, render as r, RenderInput as t };
@@ -83,7 +83,15 @@ function isNodeEnvironment() {
83
83
  //#endregion
84
84
  //#region src/render.ts
85
85
  let globalRenderer;
86
- function transformElement(element, options) {
86
+ function isTakumiNode(element) {
87
+ if (typeof element !== "object" || element === null || !("type" in element)) return false;
88
+ return element.type === "container" || element.type === "text" || element.type === "image";
89
+ }
90
+ async function transformElement(element, options) {
91
+ if (isTakumiNode(element)) return {
92
+ node: element,
93
+ stylesheets: []
94
+ };
87
95
  if (typeof element === "string") return (0, _takumi_rs_helpers_html.fromHtml)(element);
88
96
  return (0, _takumi_rs_helpers_jsx.fromJsx)(element, options?.jsx);
89
97
  }
@@ -1,5 +1,5 @@
1
1
  import { EmojiType } from "@takumi-rs/helpers/emoji";
2
- import { FetchResourcesOptions, ReactElementLike } from "@takumi-rs/helpers";
2
+ import { FetchResourcesOptions, Node, ReactElementLike } from "@takumi-rs/helpers";
3
3
  import { FromJsxOptions } from "@takumi-rs/helpers/jsx";
4
4
  import * as napi from "@takumi-rs/core";
5
5
  import * as wasm from "@takumi-rs/wasm";
@@ -37,6 +37,7 @@ type RenderOptionsWithRenderer = InnerRenderOptions & {
37
37
  };
38
38
  type RenderOptionsWithoutRenderer = Omit<RenderOptionsWithRenderer, "renderer"> & ManagedRendererOptions;
39
39
  type RenderOptions = RenderOptionsWithRenderer | RenderOptionsWithoutRenderer;
40
+ type RenderInput = ReactNode | ReactElementLike | Node | string;
40
41
  /**
41
42
  * Renders a React element, HTML string, or Takumi node tree into an image.
42
43
  *
@@ -57,6 +58,6 @@ type RenderOptions = RenderOptionsWithRenderer | RenderOptionsWithoutRenderer;
57
58
  * @param options - Configuration for rendering, including dimensions, format, fonts, and more.
58
59
  * @returns A promise that resolves to the rendered image data (Buffer/Uint8Array).
59
60
  */
60
- declare function render(element: ReactNode | ReactElementLike | string, options?: RenderOptions): Promise<Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>>;
61
+ declare function render(element: RenderInput, options?: RenderOptions): Promise<Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>>;
61
62
  //#endregion
62
- export { render as n, RenderOptions as t };
63
+ export { RenderOptions as n, render as r, RenderInput as t };
package/dist/response.cjs CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_render = require("./render-_g6WzckI.cjs");
5
+ const require_render = require("./render-GE_5ugLi.cjs");
6
6
  //#region src/response/index.ts
7
7
  function mergeOptions(defaultOptions, options) {
8
8
  if (!defaultOptions) return options;
@@ -58,21 +58,18 @@ function createImageResponse(defaultOptions) {
58
58
  resolveReady = resolve;
59
59
  rejectReady = reject;
60
60
  });
61
- const stream = new ReadableStream({
62
- type: "bytes",
63
- async start(controller) {
64
- try {
65
- const image = await require_render.render(element, mergedOptions);
66
- controller.enqueue(image);
67
- controller.close();
68
- resolveReady();
69
- } catch (error) {
70
- controller.error(error);
71
- rejectReady(error);
72
- await (mergedOptions?.onError ?? defaultErrorHandler)(error);
73
- }
61
+ const stream = new ReadableStream({ async start(controller) {
62
+ try {
63
+ const image = await require_render.render(element, mergedOptions);
64
+ controller.enqueue(image);
65
+ controller.close();
66
+ resolveReady();
67
+ } catch (error) {
68
+ controller.error(error);
69
+ rejectReady(error);
70
+ await (mergedOptions?.onError ?? defaultErrorHandler)(error);
74
71
  }
75
- });
72
+ } });
76
73
  const headers = new Headers(mergedOptions?.headers);
77
74
  if (!headers.get("content-type")) headers.set("content-type", contentTypeMap[mergedOptions?.format ?? "png"]);
78
75
  const response = new Response(stream, {
@@ -1,5 +1,4 @@
1
- import { t as RenderOptions } from "./render-mfKqlvP8.cjs";
2
- import { ReactNode } from "react";
1
+ import { n as RenderOptions, t as RenderInput } from "./render-8qtfnpqJ.cjs";
3
2
 
4
3
  //#region src/response/index.d.ts
5
4
  type ImageResponseResult = Response & {
@@ -8,7 +7,7 @@ type ImageResponseResult = Response & {
8
7
  type ImageResponseOptions = RenderOptions & ResponseInit & {
9
8
  onError?: (error: unknown) => void | Promise<void>;
10
9
  };
11
- type ImageResponseFactory = (component: ReactNode, options?: ImageResponseOptions) => ImageResponseResult;
10
+ type ImageResponseFactory = (component: RenderInput, options?: ImageResponseOptions) => ImageResponseResult;
12
11
  /**
13
12
  * Creates a reusable ImageResponse factory with shared configuration.
14
13
  *
@@ -55,7 +54,7 @@ declare function createImageResponse(defaultOptions?: ImageResponseOptions): Ima
55
54
  */
56
55
  declare class ImageResponse extends Response {
57
56
  readonly ready: Promise<void>;
58
- constructor(component: ReactNode, options?: ImageResponseOptions);
57
+ constructor(component: RenderInput, options?: ImageResponseOptions);
59
58
  }
60
59
  //#endregion
61
60
  export { ImageResponse, ImageResponse as default, ImageResponseFactory, ImageResponseOptions, ImageResponseResult, createImageResponse };
@@ -1,5 +1,4 @@
1
- import { t as RenderOptions } from "./render-D_xiyqZH.mjs";
2
- import { ReactNode } from "react";
1
+ import { n as RenderOptions, t as RenderInput } from "./render-tDjGNf6b.mjs";
3
2
 
4
3
  //#region src/response/index.d.ts
5
4
  type ImageResponseResult = Response & {
@@ -8,7 +7,7 @@ type ImageResponseResult = Response & {
8
7
  type ImageResponseOptions = RenderOptions & ResponseInit & {
9
8
  onError?: (error: unknown) => void | Promise<void>;
10
9
  };
11
- type ImageResponseFactory = (component: ReactNode, options?: ImageResponseOptions) => ImageResponseResult;
10
+ type ImageResponseFactory = (component: RenderInput, options?: ImageResponseOptions) => ImageResponseResult;
12
11
  /**
13
12
  * Creates a reusable ImageResponse factory with shared configuration.
14
13
  *
@@ -55,7 +54,7 @@ declare function createImageResponse(defaultOptions?: ImageResponseOptions): Ima
55
54
  */
56
55
  declare class ImageResponse extends Response {
57
56
  readonly ready: Promise<void>;
58
- constructor(component: ReactNode, options?: ImageResponseOptions);
57
+ constructor(component: RenderInput, options?: ImageResponseOptions);
59
58
  }
60
59
  //#endregion
61
60
  export { ImageResponse, ImageResponse as default, ImageResponseFactory, ImageResponseOptions, ImageResponseResult, createImageResponse };
package/dist/response.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as render } from "./render-CdlW9EIh.mjs";
1
+ import { t as render } from "./render-01YbRqd2.mjs";
2
2
  //#region src/response/index.ts
3
3
  function mergeOptions(defaultOptions, options) {
4
4
  if (!defaultOptions) return options;
@@ -54,21 +54,18 @@ function createImageResponse(defaultOptions) {
54
54
  resolveReady = resolve;
55
55
  rejectReady = reject;
56
56
  });
57
- const stream = new ReadableStream({
58
- type: "bytes",
59
- async start(controller) {
60
- try {
61
- const image = await render(element, mergedOptions);
62
- controller.enqueue(image);
63
- controller.close();
64
- resolveReady();
65
- } catch (error) {
66
- controller.error(error);
67
- rejectReady(error);
68
- await (mergedOptions?.onError ?? defaultErrorHandler)(error);
69
- }
57
+ const stream = new ReadableStream({ async start(controller) {
58
+ try {
59
+ const image = await render(element, mergedOptions);
60
+ controller.enqueue(image);
61
+ controller.close();
62
+ resolveReady();
63
+ } catch (error) {
64
+ controller.error(error);
65
+ rejectReady(error);
66
+ await (mergedOptions?.onError ?? defaultErrorHandler)(error);
70
67
  }
71
- });
68
+ } });
72
69
  const headers = new Headers(mergedOptions?.headers);
73
70
  if (!headers.get("content-type")) headers.set("content-type", contentTypeMap[mergedOptions?.format ?? "png"]);
74
71
  const response = new Response(stream, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "takumi-js",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "All-in-one Takumi package for Node.js and WebAssembly runtimes.",
5
5
  "keywords": [
6
6
  "css",
@@ -90,9 +90,9 @@
90
90
  "test:bundlers": "bun test tests/bundlers.test.ts"
91
91
  },
92
92
  "dependencies": {
93
- "@takumi-rs/core": "1.0.13",
94
- "@takumi-rs/helpers": "1.0.13",
95
- "@takumi-rs/wasm": "1.0.13"
93
+ "@takumi-rs/core": "1.0.15",
94
+ "@takumi-rs/helpers": "1.0.15",
95
+ "@takumi-rs/wasm": "1.0.15"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@types/bun": "catalog:",