refactor: drop `RenderContext.owner`, since `render` can't be nested

elliott/warp-core
Elliott Johnson 2 days ago
parent cfa3dd09c8
commit 1d3fa0c249
No known key found for this signature in database

@ -29,11 +29,11 @@ function get_render_context_safe() {
} }
/** /**
* @param {RenderContext['owner']} owner * @param {boolean} rendered
* @param {UnevalReplacer | undefined} replacer * @param {UnevalReplacer | undefined} replacer
* @returns {RenderContext} * @returns {RenderContext}
*/ */
function create_render_context(owner, replacer) { function create_render_context(rendered, replacer) {
return { return {
warp: { warp: {
values: new Map(), values: new Map(),
@ -41,8 +41,7 @@ function create_render_context(owner, replacer) {
comparisons: [], comparisons: [],
emitted: false emitted: false
}, },
owner, rendered,
rendered: owner === 'render',
replacer replacer
}; };
} }
@ -57,8 +56,7 @@ function create_render_context(owner, replacer) {
export async function with_render_context(fn) { export async function with_render_context(fn) {
const existing = get_render_context_safe(); const existing = get_render_context_safe();
// a `render` inside another `render` (rather than inside `withWarp`) gets its own context if (existing !== null) {
if (existing?.owner === 'withWarp') {
if (existing.rendered) { if (existing.rendered) {
e.warp_context_already_rendered(); e.warp_context_already_rendered();
} }
@ -68,7 +66,7 @@ export async function with_render_context(fn) {
} }
await init_render_context(); await init_render_context();
return run(create_render_context('render', undefined), fn); return run(create_render_context(true, undefined), fn);
} }
/** /**
@ -87,7 +85,7 @@ export async function withWarp(fn, options = {}) {
} }
await init_render_context(); await init_render_context();
return run(create_render_context('withWarp', options.replacer), async () => fn()); return run(create_render_context(false, options.replacer), async () => fn());
} }
/** /**

@ -31,8 +31,6 @@ export interface WarpStore {
export interface RenderContext { export interface RenderContext {
warp: WarpStore; warp: WarpStore;
/** Whether this context was created by `render` or by `withWarp` */
owner: 'render' | 'withWarp';
/** Whether a `render` has claimed this context. Each context can only be rendered once */ /** Whether a `render` has claimed this context. Each context can only be rendered once */
rendered: boolean; rendered: boolean;
/** The `replacer` passed to `withWarp` */ /** The `replacer` passed to `withWarp` */

Loading…
Cancel
Save