satoru-render 0.0.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/LICENSE +21 -0
- package/README.md +201 -0
- package/dist/child-workers.d.ts +6 -0
- package/dist/child-workers.js +20 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +110 -0
- package/dist/core.d.ts +80 -0
- package/dist/core.js +258 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +52 -0
- package/dist/log-level.d.ts +7 -0
- package/dist/log-level.js +8 -0
- package/dist/node.d.ts +10 -0
- package/dist/node.js +70 -0
- package/dist/react.d.ts +9 -0
- package/dist/react.js +11 -0
- package/dist/satoru-single.js +0 -0
- package/dist/satoru.js +2 -0
- package/dist/satoru.wasm +0 -0
- package/dist/single.d.ts +26 -0
- package/dist/single.js +29 -0
- package/dist/web-workers.js +3482 -0
- package/dist/workerd.d.ts +25 -0
- package/dist/workerd.js +43 -0
- package/dist/workers.d.ts +29 -0
- package/dist/workers.js +46 -0
- package/package.json +122 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Satoru as BaseSatoru, type RenderOptions } from "./index.js";
|
|
2
|
+
export type { SatoruModule, RequiredResource, ResourceResolver, RenderOptions, } from "./index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Cloudflare Workers (workerd) specialized wrapper for Satoru.
|
|
5
|
+
* Handles the specific WASM instantiation requirements for the environment.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Satoru extends BaseSatoru {
|
|
8
|
+
private constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Create Satoru instance for Cloudflare Workers.
|
|
11
|
+
* @param wasm The compiled WASM module (defaults to the bundled one)
|
|
12
|
+
*/
|
|
13
|
+
static create(wasm?: WebAssembly.Module): Promise<Satoru>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* High-level render function for Cloudflare Workers.
|
|
17
|
+
* Automatically creates and reuses a Satoru instance.
|
|
18
|
+
*/
|
|
19
|
+
export declare function render(options: RenderOptions & {
|
|
20
|
+
format: "png" | "webp" | "pdf";
|
|
21
|
+
}): Promise<Uint8Array>;
|
|
22
|
+
export declare function render(options: RenderOptions & {
|
|
23
|
+
format?: "svg";
|
|
24
|
+
}): Promise<string>;
|
|
25
|
+
export declare function render(options: RenderOptions): Promise<string | Uint8Array>;
|
package/dist/workerd.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import createSatoruModule from "../dist/satoru.js";
|
|
3
|
+
import { Satoru as BaseSatoru } from "./index.js";
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
import satoruWasm from "../dist/satoru.wasm";
|
|
6
|
+
/**
|
|
7
|
+
* Cloudflare Workers (workerd) specialized wrapper for Satoru.
|
|
8
|
+
* Handles the specific WASM instantiation requirements for the environment.
|
|
9
|
+
*/
|
|
10
|
+
export class Satoru extends BaseSatoru {
|
|
11
|
+
// Use protected constructor from base
|
|
12
|
+
constructor(factory) {
|
|
13
|
+
super(factory);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create Satoru instance for Cloudflare Workers.
|
|
17
|
+
* @param wasm The compiled WASM module (defaults to the bundled one)
|
|
18
|
+
*/
|
|
19
|
+
static async create(wasm = satoruWasm) {
|
|
20
|
+
const factory = async (o) => createSatoruModule({
|
|
21
|
+
...o,
|
|
22
|
+
instantiateWasm: (imports, successCallback) => {
|
|
23
|
+
// Cloudflare Workers requires using the pre-compiled WebAssembly.Module
|
|
24
|
+
WebAssembly.instantiate(wasm, imports)
|
|
25
|
+
.then((instance) => {
|
|
26
|
+
successCallback(instance, wasm);
|
|
27
|
+
})
|
|
28
|
+
.catch((e) => {
|
|
29
|
+
console.error("Satoru [workerd]: Wasm instantiation failed:", e);
|
|
30
|
+
});
|
|
31
|
+
return {}; // Return empty object as emscripten expects
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
return BaseSatoru.create(factory);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
let instance = null;
|
|
38
|
+
export async function render(options) {
|
|
39
|
+
if (!instance) {
|
|
40
|
+
instance = await Satoru.create();
|
|
41
|
+
}
|
|
42
|
+
return instance.render(options);
|
|
43
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type { SatoruWorker } from "./child-workers.js";
|
|
2
|
+
import { type RenderOptions } from "./index.js";
|
|
3
|
+
export { Satoru } from "./index.js";
|
|
4
|
+
export * from "./index.js";
|
|
5
|
+
export * from "./log-level.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create a Satoru worker proxy using worker-lib.
|
|
8
|
+
* @param params Initialization parameters
|
|
9
|
+
* @param params.worker Optional: Path to the worker file, a URL, or a factory function.
|
|
10
|
+
* Defaults to the bundled workers.js in the same directory.
|
|
11
|
+
* @param params.maxParallel Maximum number of parallel workers
|
|
12
|
+
*/
|
|
13
|
+
export declare const createSatoruWorker: (params?: {
|
|
14
|
+
worker?: string | URL | (() => Worker | string | URL);
|
|
15
|
+
maxParallel?: number;
|
|
16
|
+
}) => Omit<{
|
|
17
|
+
execute: <K extends "render">(name: K, ...value: Parameters<{
|
|
18
|
+
render(options: RenderOptions): Promise<string | Uint8Array<ArrayBufferLike>>;
|
|
19
|
+
}[K]>) => Promise<Awaited<ReturnType<{
|
|
20
|
+
render(options: RenderOptions): Promise<string | Uint8Array<ArrayBufferLike>>;
|
|
21
|
+
}[K]>>>;
|
|
22
|
+
waitAll: () => Promise<void>;
|
|
23
|
+
waitReady: (retryTime?: number) => Promise<void>;
|
|
24
|
+
close: () => void;
|
|
25
|
+
setLimit: (newLimit: number) => void;
|
|
26
|
+
launchWorker: () => Promise<void[]>;
|
|
27
|
+
}, "execute"> & {
|
|
28
|
+
render(options: RenderOptions): Promise<string | Uint8Array<ArrayBufferLike>>;
|
|
29
|
+
};
|
package/dist/workers.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createWorker, Worker } from "worker-lib";
|
|
2
|
+
export { Satoru } from "./index.js";
|
|
3
|
+
export * from "./index.js";
|
|
4
|
+
export * from "./log-level.js";
|
|
5
|
+
/**
|
|
6
|
+
* Create a Satoru worker proxy using worker-lib.
|
|
7
|
+
* @param params Initialization parameters
|
|
8
|
+
* @param params.worker Optional: Path to the worker file, a URL, or a factory function.
|
|
9
|
+
* Defaults to the bundled workers.js in the same directory.
|
|
10
|
+
* @param params.maxParallel Maximum number of parallel workers
|
|
11
|
+
*/
|
|
12
|
+
export const createSatoruWorker = (params) => {
|
|
13
|
+
const { worker, maxParallel = 4 } = params ?? {};
|
|
14
|
+
const factory = () => {
|
|
15
|
+
let w;
|
|
16
|
+
if (worker) {
|
|
17
|
+
w = typeof worker === "function" ? worker() : worker;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const workerUrl = typeof window !== "undefined"
|
|
21
|
+
? new URL("./web-workers.js", import.meta.url)
|
|
22
|
+
: new URL("./child-workers.js", import.meta.url);
|
|
23
|
+
if (typeof Worker !== "undefined") {
|
|
24
|
+
w = new Worker(workerUrl, { type: "module" });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!w)
|
|
28
|
+
throw new Error("Worker is not supported in this environment.");
|
|
29
|
+
return w;
|
|
30
|
+
};
|
|
31
|
+
const workerInstance = createWorker(factory, maxParallel);
|
|
32
|
+
const proxy = new Proxy(workerInstance, {
|
|
33
|
+
get(target, prop, receiver) {
|
|
34
|
+
if (prop === "render") {
|
|
35
|
+
return async (options) => {
|
|
36
|
+
return await target.execute("render", options);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (prop in target) {
|
|
40
|
+
return Reflect.get(target, prop, receiver);
|
|
41
|
+
}
|
|
42
|
+
return (...args) => target.execute(prop, ...args);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return proxy;
|
|
46
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "satoru-render",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "High-fidelity HTML/CSS to SVG/PNG/PDF converter running in WebAssembly",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"satoru-render": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc -b && rolldown -c rolldown.config.js"
|
|
13
|
+
},
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"workerd": {
|
|
17
|
+
"types": "./dist/workerd.d.ts",
|
|
18
|
+
"import": "./dist/workerd.js"
|
|
19
|
+
},
|
|
20
|
+
"deno": {
|
|
21
|
+
"types": "./dist/single.d.ts",
|
|
22
|
+
"import": "./dist/single.js"
|
|
23
|
+
},
|
|
24
|
+
"single": {
|
|
25
|
+
"types": "./dist/single.d.ts",
|
|
26
|
+
"import": "./dist/single.js"
|
|
27
|
+
},
|
|
28
|
+
"types": "./dist/single.d.ts",
|
|
29
|
+
"import": "./dist/single.js",
|
|
30
|
+
"default": "./dist/single.js"
|
|
31
|
+
},
|
|
32
|
+
"./index": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"node": "./dist/node.js",
|
|
35
|
+
"default": "./dist/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./workerd": {
|
|
38
|
+
"types": "./dist/workerd.d.ts",
|
|
39
|
+
"import": "./dist/workerd.js"
|
|
40
|
+
},
|
|
41
|
+
"./workers": {
|
|
42
|
+
"types": "./dist/workers.d.ts",
|
|
43
|
+
"import": "./dist/workers.js"
|
|
44
|
+
},
|
|
45
|
+
"./single": {
|
|
46
|
+
"types": "./dist/single.d.ts",
|
|
47
|
+
"import": "./dist/single.js"
|
|
48
|
+
},
|
|
49
|
+
"./react": {
|
|
50
|
+
"types": "./dist/react.d.ts",
|
|
51
|
+
"import": "./dist/react.js"
|
|
52
|
+
},
|
|
53
|
+
"./satoru.js": "./dist/satoru.js",
|
|
54
|
+
"./satoru.wasm": "./dist/satoru.wasm"
|
|
55
|
+
},
|
|
56
|
+
"typesVersions": {
|
|
57
|
+
"*": {
|
|
58
|
+
"workerd": [
|
|
59
|
+
"./dist/workerd.d.ts"
|
|
60
|
+
],
|
|
61
|
+
"single": [
|
|
62
|
+
"./dist/single.d.ts"
|
|
63
|
+
],
|
|
64
|
+
"react": [
|
|
65
|
+
"./dist/react.d.ts"
|
|
66
|
+
],
|
|
67
|
+
"*": [
|
|
68
|
+
"./dist/single.d.ts"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"files": [
|
|
73
|
+
"dist",
|
|
74
|
+
"README.md",
|
|
75
|
+
"LICENSE"
|
|
76
|
+
],
|
|
77
|
+
"repository": {
|
|
78
|
+
"type": "git",
|
|
79
|
+
"url": "https://github.com/SoraKumo001/satoru.git",
|
|
80
|
+
"directory": "packages/satoru"
|
|
81
|
+
},
|
|
82
|
+
"author": "SoraKumo <info@croud.jp>",
|
|
83
|
+
"license": "MIT",
|
|
84
|
+
"bugs": {
|
|
85
|
+
"url": "https://github.com/SoraKumo001/satoru/issues"
|
|
86
|
+
},
|
|
87
|
+
"homepage": "https://github.com/SoraKumo001/satoru/tree/master/packages/satoru#readme",
|
|
88
|
+
"keywords": [
|
|
89
|
+
"html",
|
|
90
|
+
"css",
|
|
91
|
+
"svg",
|
|
92
|
+
"png",
|
|
93
|
+
"pdf",
|
|
94
|
+
"wasm",
|
|
95
|
+
"skia",
|
|
96
|
+
"litehtml",
|
|
97
|
+
"webassembly",
|
|
98
|
+
"cloudflare-workers"
|
|
99
|
+
],
|
|
100
|
+
"devDependencies": {
|
|
101
|
+
"@types/react": "^19.2.14",
|
|
102
|
+
"@types/react-dom": "^19.2.3",
|
|
103
|
+
"rolldown": "1.0.0-rc.5",
|
|
104
|
+
"typescript": "^5.9.3",
|
|
105
|
+
"vitest": "^4.0.18"
|
|
106
|
+
},
|
|
107
|
+
"dependencies": {
|
|
108
|
+
"worker-lib": "2.2.0"
|
|
109
|
+
},
|
|
110
|
+
"peerDependencies": {
|
|
111
|
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
112
|
+
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
|
113
|
+
},
|
|
114
|
+
"peerDependenciesMeta": {
|
|
115
|
+
"react": {
|
|
116
|
+
"optional": true
|
|
117
|
+
},
|
|
118
|
+
"react-dom": {
|
|
119
|
+
"optional": true
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|