fix: make sure returned elements are not primitives

pull/18058/head
paoloricciuti 4 months ago
parent 13ae09b861
commit 8270a2fd55

@ -3,10 +3,10 @@ import { branch, effect_root } from '../reactivity/effects.js';
import { push_renderer } from './state.js';
/**
* @template [TFragment=any]
* @template [TElement=any]
* @template [TTextNode=any]
* @template [TComment=any]
* @template {object} [TFragment=object]
* @template {object} [TElement=object]
* @template {object} [TTextNode=object]
* @template {object} [TComment=object]
* @template [TNode=TFragment | TElement | TTextNode | TComment]
* @typedef {Object} Renderer
* @property {()=>TFragment} createFragment - Creates a fragment, a container for multiple nodes. Inserting a fragment should insert all of it's children.
@ -31,10 +31,10 @@ import { push_renderer } from './state.js';
*/
/**
* @template [TFragment=unknown]
* @template [TElement=unknown]
* @template [TTextNode=unknown]
* @template [TComment=unknown]
* @template {object} [TFragment=object]
* @template {object} [TElement=object]
* @template {object} [TTextNode=object]
* @template {object} [TComment=object]
* @param {Renderer<TFragment, TElement, TTextNode, TComment>} renderer
* @returns {Renderer<TFragment, TElement, TTextNode, TComment> & { render: (Component: any, options: { target: TFragment | TElement | TTextNode | TComment, props?: any }) => () => void }}
*/

@ -3,12 +3,12 @@
*/
/**
* @type {Renderer | null}
* @type {Renderer<any, any, any, any> | null}
*/
export let renderer = null;
/**
* @param {Renderer | null} $renderer
* @param {Renderer<any, any, any, any> | null} $renderer
*/
export function set_renderer($renderer) {
renderer = $renderer;
@ -16,7 +16,7 @@ export function set_renderer($renderer) {
/**
*
* @param {Renderer} $renderer
* @param {Renderer<any, any, any, any>} $renderer
*/
export function push_renderer($renderer) {
let old_renderer = renderer;

@ -34,7 +34,6 @@ export function add_locations(fn, filename, locations) {
*/
function assign_location(element, filename, location) {
// @ts-expect-error
// TODO RENDERER: what if the element is not an object?
element.__svelte_meta = {
parent: dev_stack,
loc: { file: filename, line: location[0], column: location[1] }

@ -2568,13 +2568,13 @@ declare module 'svelte/reactivity/window' {
}
declare module 'svelte/renderer' {
export function createRenderer<TFragment = unknown, TElement = unknown, TTextNode = unknown, TComment = unknown>(renderer: Renderer<TFragment, TElement, TTextNode, TComment>): Renderer<TFragment, TElement, TTextNode, TComment> & {
export function createRenderer<TFragment extends object = object, TElement extends object = object, TTextNode extends object = object, TComment extends object = object>(renderer: Renderer<TFragment, TElement, TTextNode, TComment>): Renderer<TFragment, TElement, TTextNode, TComment> & {
render: (Component: any, options: {
target: TFragment | TElement | TTextNode | TComment;
props?: any;
}) => () => void;
};
export type Renderer<TFragment = any, TElement = any, TTextNode = any, TComment = any, TNode = TFragment | TElement | TTextNode | TComment> = {
export type Renderer<TFragment extends object = object, TElement extends object = object, TTextNode extends object = object, TComment extends object = object, TNode = TFragment | TElement | TTextNode | TComment> = {
/**
* - Creates a fragment, a container for multiple nodes. Inserting a fragment should insert all of it's children.
*/

Loading…
Cancel
Save