Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 538b108

Browse files
authored
Merge pull request #84 from lgarron/lgarron/cached-data-types
Fix up types for cached and returned data.
2 parents a887e13 + 5c26363 commit 538b108

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/index.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
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

37
function 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

Comments
 (0)