@xeonr/renderer-sdk 1.8.0 → 1.8.2
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 +24 -5
- 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,13 +83,26 @@ 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
|
|
90
90
|
// per theme, so this fires every time).
|
|
91
91
|
useEffect(() => { applyThemeAttribute(theme); }, [theme]);
|
|
92
|
-
|
|
92
|
+
// Gate children on a resolved result. `result` starts null and only
|
|
93
|
+
// becomes non-null after the async useEffect above resolves. If we
|
|
94
|
+
// rendered children while null, `useRendererClient` would see a null
|
|
95
|
+
// context on the first pass and run its FULL hook path (the iframe
|
|
96
|
+
// fallback: useState×N + useEffect), then on the next render — once
|
|
97
|
+
// result resolves — see a non-null context and EARLY-RETURN before
|
|
98
|
+
// those same hooks. That changes the hook count between renders for
|
|
99
|
+
// the same component instance → React reads a now-null hook slot and
|
|
100
|
+
// throws `Cannot read properties of null (reading '1')`. Holding
|
|
101
|
+
// children back until result is set means useRendererClient's
|
|
102
|
+
// early-return branch is taken from a child's very first render, so
|
|
103
|
+
// its hook set is stable for the instance's lifetime (the invariant
|
|
104
|
+
// the early-return relies on).
|
|
105
|
+
return (_jsx(WorkerRendererContext.Provider, { value: result, children: result !== null ? children : null }));
|
|
93
106
|
}
|
|
94
107
|
function buildWorkerResult(args) {
|
|
95
108
|
const apiAdapter = {
|
|
@@ -132,7 +145,13 @@ function buildWorkerResult(args) {
|
|
|
132
145
|
openUpload: (uploadId) => warnNoOp('openUpload', uploadId),
|
|
133
146
|
requestToken: () => warnNoOp('requestToken'),
|
|
134
147
|
close: () => warnNoOp('close'),
|
|
135
|
-
markReady: () => {
|
|
148
|
+
markReady: () => {
|
|
149
|
+
// Notify defineRendererWorker's capture loop FIRST (so the
|
|
150
|
+
// screenshot waits for painted content), then signal the
|
|
151
|
+
// controller. Both are idempotent.
|
|
152
|
+
args.onReady?.();
|
|
153
|
+
void args.ctx.ready();
|
|
154
|
+
},
|
|
136
155
|
apiAdapter,
|
|
137
156
|
client: stubClient,
|
|
138
157
|
};
|
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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"}
|