consistency

svelte-custom-renderer-single-type-argument
Rich Harris 4 months ago
parent 42fcdb91a2
commit 2c5b556b56

@ -25,7 +25,8 @@ export function createRenderer(renderer) {
* @param {{} extends Props ? { target: TFragment | TElement | TTextNode | TComment, props?: Props, context?: Map<any, any> } : { target: TFragment | TElement | TTextNode | TComment, props: Props, context?: Map<any, any> }} options * @param {{} extends Props ? { target: TFragment | TElement | TTextNode | TComment, props?: Props, context?: Map<any, any> } : { target: TFragment | TElement | TTextNode | TComment, props: Props, context?: Map<any, any> }} options
*/ */
render(Component, { target, props, context }) { render(Component, { target, props, context }) {
var cleanup = push_renderer(compound_renderer); var pop_renderer = push_renderer(compound_renderer);
try { try {
/** @type {Exports} */ /** @type {Exports} */
// @ts-expect-error will be defined because the render effect runs synchronously // @ts-expect-error will be defined because the render effect runs synchronously
@ -51,7 +52,7 @@ export function createRenderer(renderer) {
}); });
return { component, unmount }; return { component, unmount };
} finally { } finally {
cleanup(); pop_renderer();
} }
} }
}; };

@ -1,6 +1,4 @@
/** /** @import { Renderer } from './types.js'; */
* @import { Renderer } from "./types.js";
*/
/** /**
* @type {Renderer<any, any, any, any> | null} * @type {Renderer<any, any, any, any> | null}
@ -19,10 +17,11 @@ export function set_renderer(value) {
* @param {Renderer<any, any, any, any> | null} value * @param {Renderer<any, any, any, any> | null} value
*/ */
export function push_renderer(value) { export function push_renderer(value) {
let old_renderer = current_renderer; var previous_renderer = current_renderer;
current_renderer = value; current_renderer = value;
return () => { return () => {
current_renderer = old_renderer; current_renderer = previous_renderer;
}; };
} }
@ -32,9 +31,13 @@ export function push_renderer(value) {
* @returns {T} * @returns {T}
*/ */
export function without_renderer(fn) { export function without_renderer(fn) {
if (current_renderer === null) return fn(); if (current_renderer === null) {
let previous_renderer = current_renderer; return fn();
}
var previous_renderer = current_renderer;
current_renderer = null; current_renderer = null;
try { try {
return fn(); return fn();
} finally { } finally {

Loading…
Cancel
Save