@@ -9,14 +9,14 @@ import { current_component } from './context.js';
9
9
* @typedef {{
10
10
* tag: string;
11
11
* parent: null | Element;
12
- * filename: string;
12
+ * filename: null | string;
13
13
* }} Element
14
14
*/
15
15
16
16
/**
17
17
* @type {Element | null }
18
18
*/
19
- let current_element = null ;
19
+ let parent = null ;
20
20
21
21
/**
22
22
* @param {import('#server').Payload } payload
@@ -33,12 +33,24 @@ function error_on_client(payload, message) {
33
33
}
34
34
35
35
/**
36
- * @param {string } file
36
+ * @param {string | null } file
37
37
*/
38
38
function print_file ( file ) {
39
39
return file ? `(${ file } )` : '' ;
40
40
}
41
41
42
+ /**
43
+ * @param {import('#server').Payload } payload
44
+ * @param {Element } parent
45
+ * @param {Element } child
46
+ */
47
+ function print_error ( payload , parent , child ) {
48
+ error_on_client (
49
+ payload ,
50
+ `<${ child . tag } > ${ print_file ( child . filename ) } is not a valid child element of <${ parent . tag } > ${ print_file ( parent . filename ) } `
51
+ ) ;
52
+ }
53
+
42
54
/**
43
55
* @param {import('#server').Payload } payload
44
56
* @param {string } tag
@@ -47,47 +59,37 @@ function print_file(file) {
47
59
*/
48
60
export function push_element ( payload , tag , line , column ) {
49
61
var filename = /** @type {import('#server').Component } */ ( current_component ) . function . filename ;
62
+ var child = { tag, parent, filename } ;
50
63
51
- if ( current_element !== null && ! is_tag_valid_with_parent ( tag , current_element . tag ) ) {
52
- error_on_client (
53
- payload ,
54
- `<${ tag } > ${ print_file ( filename ) } is not a valid child element of <${ current_element . tag } > ${ print_file ( current_element . filename ) } `
55
- ) ;
64
+ if ( parent !== null && ! is_tag_valid_with_parent ( tag , parent . tag ) ) {
65
+ print_error ( payload , parent , child ) ;
56
66
}
57
67
58
68
if ( interactive_elements . has ( tag ) ) {
59
- let element = current_element ;
69
+ let element = parent ;
60
70
while ( element !== null ) {
61
71
if ( interactive_elements . has ( element . tag ) ) {
62
- error_on_client (
63
- payload ,
64
- `<${ tag } > ${ print_file ( filename ) } is not a valid child element of <${ element . tag } > ${ print_file ( element . filename ) } `
65
- ) ;
72
+ print_error ( payload , element , child ) ;
73
+ break ;
66
74
}
67
75
element = element . parent ;
68
76
}
69
77
}
70
78
71
79
if ( disallowed_paragraph_contents . includes ( tag ) ) {
72
- let element = current_element ;
80
+ let element = parent ;
73
81
while ( element !== null ) {
74
82
if ( element . tag === 'p' ) {
75
- error_on_client (
76
- payload ,
77
- `<${ tag } > ${ print_file ( filename ) } is not a valid child element of <p> ${ print_file ( element . filename ) } `
78
- ) ;
83
+ print_error ( payload , element , child ) ;
84
+ break ;
79
85
}
80
86
element = element . parent ;
81
87
}
82
88
}
83
89
84
- current_element = {
85
- tag,
86
- parent : current_element ,
87
- filename
88
- } ;
90
+ parent = child ;
89
91
}
90
92
91
93
export function pop_element ( ) {
92
- current_element = /** @type {Element } */ ( current_element ) . parent ;
94
+ parent = /** @type {Element } */ ( parent ) . parent ;
93
95
}
0 commit comments