@xeonr/renderer-sdk 1.8.1 → 1.8.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/react/worker.d.ts +7 -1
- package/dist/react/worker.d.ts.map +1 -1
- package/dist/react/worker.js +22 -4
- package/dist/react/worker.js.map +1 -1
- package/dist/worker-renderer.d.ts +10 -3
- package/dist/worker-renderer.d.ts.map +1 -1
- package/dist/worker-renderer.js +20 -7
- package/dist/worker-renderer.js.map +1 -1
- package/package.json +1 -1
package/dist/react/worker.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export interface WorkerRendererProviderProps {
|
|
|
13
13
|
* (once per theme); each mount passes the relevant value here so
|
|
14
14
|
* useRendererClient's `theme` reflects the active capture pass. */
|
|
15
15
|
theme: 'light' | 'dark';
|
|
16
|
+
/** Called when the renderer signals readiness via markReady()
|
|
17
|
+
* (useRendererClient().markReady). defineRendererWorker uses this to
|
|
18
|
+
* hold the screenshot capture until the renderer's content has
|
|
19
|
+
* actually loaded + painted, instead of capturing on a blind timer
|
|
20
|
+
* (which races async content fetches → blank thumbnails). */
|
|
21
|
+
onReady?: () => void;
|
|
16
22
|
children: ReactNode;
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
@@ -30,5 +36,5 @@ export interface WorkerRendererProviderProps {
|
|
|
30
36
|
* - `__scope` → RendererScope (precomputed by controller from
|
|
31
37
|
* the upload's bucket + content type)
|
|
32
38
|
*/
|
|
33
|
-
export declare function WorkerRendererProvider({ ctx, theme, children }: WorkerRendererProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
export declare function WorkerRendererProvider({ ctx, theme, onReady, children }: WorkerRendererProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
34
40
|
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/react/worker.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAStE;;wDAEwD;AACxD,wBAAgB,uBAAuB,IAAI,uBAAuB,GAAG,IAAI,CAExE;AAED,MAAM,WAAW,2BAA2B;IAC3C;oEACgE;IAChE,GAAG,EAAE,aAAa,CAAC;IACnB;;uEAEmE;IACnE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/react/worker.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAStE;;wDAEwD;AACxD,wBAAgB,uBAAuB,IAAI,uBAAuB,GAAG,IAAI,CAExE;AAED,MAAM,WAAW,2BAA2B;IAC3C;oEACgE;IAChE,GAAG,EAAE,aAAa,CAAC;IACnB;;uEAEmE;IACnE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB;;;;iEAI6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,2BAA2B,2CAyDpG"}
|
package/dist/react/worker.js
CHANGED
|
@@ -51,7 +51,7 @@ export function useWorkerRendererResult() {
|
|
|
51
51
|
* - `__scope` → RendererScope (precomputed by controller from
|
|
52
52
|
* the upload's bucket + content type)
|
|
53
53
|
*/
|
|
54
|
-
export function WorkerRendererProvider({ ctx, theme, children }) {
|
|
54
|
+
export function WorkerRendererProvider({ ctx, theme, onReady, children }) {
|
|
55
55
|
const [result, setResult] = useState(null);
|
|
56
56
|
useEffect(() => {
|
|
57
57
|
let cancelled = false;
|
|
@@ -67,7 +67,7 @@ export function WorkerRendererProvider({ ctx, theme, children }) {
|
|
|
67
67
|
if (cancelled)
|
|
68
68
|
return;
|
|
69
69
|
const built = buildWorkerResult({
|
|
70
|
-
ctx, theme,
|
|
70
|
+
ctx, theme, onReady,
|
|
71
71
|
upload,
|
|
72
72
|
config: config ?? defaultConfig(),
|
|
73
73
|
token: token ?? '',
|
|
@@ -83,7 +83,7 @@ export function WorkerRendererProvider({ ctx, theme, children }) {
|
|
|
83
83
|
}
|
|
84
84
|
})();
|
|
85
85
|
return () => { cancelled = true; };
|
|
86
|
-
}, [ctx, theme]);
|
|
86
|
+
}, [ctx, theme, onReady]);
|
|
87
87
|
// Re-apply theme attribute when defineRendererWorker swaps theme
|
|
88
88
|
// between capture passes. useEffect above also does it on first
|
|
89
89
|
// resolution; this one handles subsequent passes (provider remounts
|
|
@@ -145,7 +145,17 @@ function buildWorkerResult(args) {
|
|
|
145
145
|
openUpload: (uploadId) => warnNoOp('openUpload', uploadId),
|
|
146
146
|
requestToken: () => warnNoOp('requestToken'),
|
|
147
147
|
close: () => warnNoOp('close'),
|
|
148
|
-
markReady: () => {
|
|
148
|
+
markReady: () => {
|
|
149
|
+
// Worker mode: markReady signals THIS capture pass that content
|
|
150
|
+
// has painted (defineRendererWorker waits on it before the
|
|
151
|
+
// screenshot). It must NOT call ctx.ready() — that signals the
|
|
152
|
+
// puppeteer controller the whole worker is done, which on a
|
|
153
|
+
// multi-pass capture (light + dark) tears the page down after
|
|
154
|
+
// the first pass and aborts the second pass's blob PUT
|
|
155
|
+
// (→ missing-required-output). The SDK calls bridge.ready()
|
|
156
|
+
// exactly once on handler exit, after every pass has committed.
|
|
157
|
+
args.onReady?.();
|
|
158
|
+
},
|
|
149
159
|
apiAdapter,
|
|
150
160
|
client: stubClient,
|
|
151
161
|
};
|
|
@@ -212,6 +222,14 @@ function makeStubClient(args) {
|
|
|
212
222
|
getEntrypoint: () => null,
|
|
213
223
|
getApiBaseUrl: () => args.apiBaseUrl || null,
|
|
214
224
|
getResource: () => args.upload,
|
|
225
|
+
// Worker-mode getUpload(): the interactive client fetches the Upload
|
|
226
|
+
// via an RPC, but in worker mode the controller already fed it as the
|
|
227
|
+
// resource (GetRenderWorkerContext). Return it directly so renderer
|
|
228
|
+
// worker views that call `await client.getUpload()` (the same code
|
|
229
|
+
// they use in portal/dashboard) work unchanged — without this the
|
|
230
|
+
// stub had no getUpload and those calls threw "not a function".
|
|
231
|
+
getUpload: async () => args.upload,
|
|
232
|
+
refreshUpload: async () => args.upload,
|
|
215
233
|
getPath: () => '/',
|
|
216
234
|
getApiAdapter: () => ({
|
|
217
235
|
hostname: args.apiBaseUrl || undefined,
|
package/dist/react/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/react/worker.tsx"],"names":[],"mappings":";AAAA,mCAAmC;AACnC,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,yEAAyE;AACzE,uDAAuD;AACvD,EAAE;AACF,4DAA4D;AAC5D,gEAAgE;AAChE,iEAAiE;AACjE,8DAA8D;AAC9D,wEAAwE;AACxE,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,gEAAgE;AAChE,0DAA0D;AAC1D,EAAE;AACF,sEAAsE;AACtE,mCAAmC;AACnC,EAAE;AACF,sBAAsB;AACtB,gFAAgF;AAChF,2CAA2C;AAC3C,8CAA8C;AAE9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAYvF,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,gEAAgE;AAChE,MAAM,qBAAqB,GAAG,aAAa,CAAiC,IAAI,CAAC,CAAC;AAElF;;wDAEwD;AACxD,MAAM,UAAU,uBAAuB;IACtC,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC1C,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/react/worker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,17 @@ export interface RendererWorkerOptions {
|
|
|
18
18
|
/** Devicepixelratio override. 2 = retina-ish. Higher = sharper PNG
|
|
19
19
|
* at proportional cost. Default 2 keeps PNGs under ~1MB at 1024×768. */
|
|
20
20
|
pixelRatio?: number;
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
/** Post-ready paint settle (ms) — waited AFTER the renderer signals
|
|
22
|
+
* markReady (or after readyTimeoutMs elapses), to let final layout /
|
|
23
|
+
* fonts / async images settle before the screenshot. Default 300. */
|
|
24
24
|
settleMs?: number;
|
|
25
|
+
/** Max time (ms) to wait for the renderer to call markReady() before
|
|
26
|
+
* capturing anyway. The capture used to fire on a blind timer, which
|
|
27
|
+
* raced the renderer's async content fetch and produced blank
|
|
28
|
+
* thumbnails. Renderers that resolve their content + call markReady
|
|
29
|
+
* are captured as soon as they're ready; renderers that never signal
|
|
30
|
+
* fall back to this timeout. Default 15000. */
|
|
31
|
+
readyTimeoutMs?: number;
|
|
25
32
|
}
|
|
26
33
|
export type RendererWorkerRenderFn = (args: {
|
|
27
34
|
theme: 'light' | 'dark';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-renderer.d.ts","sourceRoot":"","sources":["../src/worker-renderer.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGpF;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,EAAE,cAO9C,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACrC;;mEAE+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4EACwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB
|
|
1
|
+
{"version":3,"file":"worker-renderer.d.ts","sourceRoot":"","sources":["../src/worker-renderer.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGpF;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,EAAE,cAO9C,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACrC;;mEAE+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4EACwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;yEAEqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;mDAK+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,aAAa,CAAC;CACnB,KAAK,YAAY,CAAC;AAEnB;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,qBAA0B,GACjC,IAAI,CA0BN"}
|
package/dist/worker-renderer.js
CHANGED
|
@@ -59,7 +59,8 @@ export function defineRendererWorker(render, options = {}) {
|
|
|
59
59
|
const width = options.width ?? 1024;
|
|
60
60
|
const height = options.height ?? 768;
|
|
61
61
|
const pixelRatio = options.pixelRatio ?? 2;
|
|
62
|
-
const settleMs = options.settleMs ??
|
|
62
|
+
const settleMs = options.settleMs ?? 300;
|
|
63
|
+
const readyTimeoutMs = options.readyTimeoutMs ?? 15000;
|
|
63
64
|
// html-to-image is a 30KB+ dep — lazy-load so portal/dashboard
|
|
64
65
|
// bundles don't pull it.
|
|
65
66
|
const { toPng } = await import('html-to-image');
|
|
@@ -67,7 +68,7 @@ export function defineRendererWorker(render, options = {}) {
|
|
|
67
68
|
ctx.log.info('render.theme.start', { theme });
|
|
68
69
|
const png = await renderAndCapture({
|
|
69
70
|
render: () => render({ theme, ctx }),
|
|
70
|
-
ctx, theme, width, height, pixelRatio, settleMs, toPng,
|
|
71
|
+
ctx, theme, width, height, pixelRatio, settleMs, readyTimeoutMs, toPng,
|
|
71
72
|
});
|
|
72
73
|
const outputName = theme === 'light' ? 'common:thumbnail_light' : 'common:thumbnail_dark';
|
|
73
74
|
await ctx.outputBlob(outputName, png, 'image/png');
|
|
@@ -90,6 +91,11 @@ async function renderAndCapture(args) {
|
|
|
90
91
|
container.dataset.theme = args.theme;
|
|
91
92
|
container.style.colorScheme = args.theme;
|
|
92
93
|
document.body.appendChild(container);
|
|
94
|
+
// Resolved when the renderer signals markReady() — see onReady below.
|
|
95
|
+
// We hold the capture until this fires (bounded by readyTimeoutMs) so
|
|
96
|
+
// the screenshot reflects loaded content, not an empty initial frame.
|
|
97
|
+
let resolveReady;
|
|
98
|
+
const readyPromise = new Promise((r) => { resolveReady = r; });
|
|
93
99
|
let root = null;
|
|
94
100
|
try {
|
|
95
101
|
root = createRoot(container);
|
|
@@ -99,14 +105,21 @@ async function renderAndCapture(args) {
|
|
|
99
105
|
// This is the "extra export" called out in plan Drill-in 3 — lets
|
|
100
106
|
// the same <Renderer /> component work in portal/dashboard AND
|
|
101
107
|
// worker entries without per-renderer refactoring.
|
|
102
|
-
root.render(_jsx(StrictMode, { children: _jsx(WorkerRendererProvider, { ctx: args.ctx, theme: args.theme, children: args.render() }) }));
|
|
103
|
-
//
|
|
104
|
-
//
|
|
108
|
+
root.render(_jsx(StrictMode, { children: _jsx(WorkerRendererProvider, { ctx: args.ctx, theme: args.theme, onReady: resolveReady, children: args.render() }) }));
|
|
109
|
+
// Hold for the renderer to signal it has loaded + painted its
|
|
110
|
+
// content (markReady → onReady → resolveReady). Renderers that
|
|
111
|
+
// fetch their resource async (the common case) would otherwise be
|
|
112
|
+
// captured mid-fetch → blank thumbnail. Bounded by readyTimeoutMs
|
|
113
|
+
// so a renderer that never signals still gets captured.
|
|
114
|
+
await Promise.race([
|
|
115
|
+
readyPromise,
|
|
116
|
+
new Promise((r) => setTimeout(r, args.readyTimeoutMs)),
|
|
117
|
+
]);
|
|
118
|
+
// Post-ready settle: let the final commit paint + fonts / async
|
|
119
|
+
// images / canvas-based renders finish before the screenshot.
|
|
105
120
|
await waitForRaf();
|
|
106
121
|
await waitForRaf();
|
|
107
122
|
await new Promise((r) => setTimeout(r, args.settleMs));
|
|
108
|
-
// Wait for any pending image decodes the renderer may have kicked
|
|
109
|
-
// off (font-faces, presigned-URL fetches that turned into <img>s).
|
|
110
123
|
await waitForImages(container);
|
|
111
124
|
const bgColor = args.theme === 'dark' ? '#111111' : '#ffffff';
|
|
112
125
|
const dataUrl = await args.toPng(container, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../src/worker-renderer.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,qEAAqE;AACrE,qDAAqD;AACrD,EAAE;AACF,oDAAoD;AACpD,EAAE;AACF,gFAAgF;AAChF,2CAA2C;AAC3C,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,6DAA6D;AAC7D,4BAA4B;AAC5B,sEAAsE;AACtE,kEAAkE;AAClE,mBAAmB;AACnB,qEAAqE;AACrE,oEAAoE;AACpE,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,wEAAwE;AACxE,kEAAkE;AAClE,+DAA+D;AAE/D,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAqB,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAmB;IAC/D,OAAO,EAAE;QACR,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW;YACpF,WAAW,EAAE,iCAAiC,EAAE;QACjD,EAAE,IAAI,EAAE,uBAAuB,EAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW;YACpF,WAAW,EAAE,gCAAgC,EAAE;KAChD;CACD,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../src/worker-renderer.tsx"],"names":[],"mappings":"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"}
|