@@ -18,6 +18,7 @@ import { validate_store } from '../shared/validate.js';
1818import { is_boolean_attribute , is_raw_text_element , is_void } from '../../utils.js' ;
1919import { reset_elements } from './dev.js' ;
2020import { Payload } from './payload.js' ;
21+ import { abort } from './abort-signal.js' ;
2122
2223// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
2324// https://infra.spec.whatwg.org/#noncharacter
@@ -66,50 +67,54 @@ export let on_destroy = [];
6667 * @returns {RenderOutput }
6768 */
6869export function render ( component , options = { } ) {
69- const payload = new Payload ( options . idPrefix ? options . idPrefix + '-' : '' ) ;
70+ try {
71+ const payload = new Payload ( options . idPrefix ? options . idPrefix + '-' : '' ) ;
7072
71- const prev_on_destroy = on_destroy ;
72- on_destroy = [ ] ;
73- payload . out += BLOCK_OPEN ;
73+ const prev_on_destroy = on_destroy ;
74+ on_destroy = [ ] ;
75+ payload . out += BLOCK_OPEN ;
7476
75- let reset_reset_element ;
77+ let reset_reset_element ;
7678
77- if ( DEV ) {
78- // prevent parent/child element state being corrupted by a bad render
79- reset_reset_element = reset_elements ( ) ;
80- }
79+ if ( DEV ) {
80+ // prevent parent/child element state being corrupted by a bad render
81+ reset_reset_element = reset_elements ( ) ;
82+ }
8183
82- if ( options . context ) {
83- push ( ) ;
84- /** @type {Component } */ ( current_component ) . c = options . context ;
85- }
84+ if ( options . context ) {
85+ push ( ) ;
86+ /** @type {Component } */ ( current_component ) . c = options . context ;
87+ }
8688
87- // @ts -expect-error
88- component ( payload , options . props ?? { } , { } , { } ) ;
89+ // @ts -expect-error
90+ component ( payload , options . props ?? { } , { } , { } ) ;
8991
90- if ( options . context ) {
91- pop ( ) ;
92- }
92+ if ( options . context ) {
93+ pop ( ) ;
94+ }
9395
94- if ( reset_reset_element ) {
95- reset_reset_element ( ) ;
96- }
96+ if ( reset_reset_element ) {
97+ reset_reset_element ( ) ;
98+ }
9799
98- payload . out += BLOCK_CLOSE ;
99- for ( const cleanup of on_destroy ) cleanup ( ) ;
100- on_destroy = prev_on_destroy ;
100+ payload . out += BLOCK_CLOSE ;
101+ for ( const cleanup of on_destroy ) cleanup ( ) ;
102+ on_destroy = prev_on_destroy ;
101103
102- let head = payload . head . out + payload . head . title ;
104+ let head = payload . head . out + payload . head . title ;
103105
104- for ( const { hash, code } of payload . css ) {
105- head += `<style id="${ hash } ">${ code } </style>` ;
106- }
106+ for ( const { hash, code } of payload . css ) {
107+ head += `<style id="${ hash } ">${ code } </style>` ;
108+ }
107109
108- return {
109- head,
110- html : payload . out ,
111- body : payload . out
112- } ;
110+ return {
111+ head,
112+ html : payload . out ,
113+ body : payload . out
114+ } ;
115+ } finally {
116+ abort ( ) ;
117+ }
113118}
114119
115120/**
0 commit comments