1- const privateData = new WeakMap ( )
1+ interface CachedData {
2+ src : string
3+ data : Promise < string | Error >
4+ }
5+ const privateData = new WeakMap < IncludeFragmentElement , CachedData > ( )
26
37function isWildcard ( accept : string | null ) {
48 return accept && ! ! accept . split ( ',' ) . find ( x => x . match ( / ^ \s * \* \/ \* / ) )
@@ -41,7 +45,7 @@ export default class IncludeFragmentElement extends HTMLElement {
4145 this . setAttribute ( 'accept' , val )
4246 }
4347
44- get data ( ) : Promise < string > {
48+ get data ( ) : Promise < string | Error > {
4549 return this . #getData( )
4650 }
4751
@@ -97,7 +101,7 @@ export default class IncludeFragmentElement extends HTMLElement {
97101 } )
98102 }
99103
100- load ( ) : Promise < string > {
104+ load ( ) : Promise < string | Error > {
101105 return this . #getData( )
102106 }
103107
@@ -133,11 +137,14 @@ export default class IncludeFragmentElement extends HTMLElement {
133137 this . #busy = true
134138 this . #observer. unobserve ( this )
135139 try {
136- const html = await this . #getData( )
140+ const data = await this . #getData( )
141+ if ( data instanceof Error ) {
142+ throw data
143+ }
137144
138145 const template = document . createElement ( 'template' )
139146 // eslint-disable-next-line github/no-inner-html
140- template . innerHTML = html
147+ template . innerHTML = data
141148 const fragment = document . importNode ( template . content , true )
142149 const canceled = ! this . dispatchEvent (
143150 new CustomEvent ( 'include-fragment-replace' , { cancelable : true , detail : { fragment} } )
@@ -150,12 +157,13 @@ export default class IncludeFragmentElement extends HTMLElement {
150157 }
151158 }
152159
153- #getData( ) : Promise < string > {
160+ async #getData( ) : Promise < string | Error > {
154161 const src = this . src
155- let data = privateData . get ( this )
156- if ( data && data . src === src ) {
157- return data . data
162+ const cachedData = privateData . get ( this )
163+ if ( cachedData && cachedData . src === src ) {
164+ return cachedData . data
158165 } else {
166+ let data : Promise < string | Error >
159167 if ( src ) {
160168 data = this . #fetchDataWithEvents( )
161169 } else {
0 commit comments