From 5c2636376ec67be2044209b0228f15619aa7a357 Mon Sep 17 00:00:00 2001 From: Lucas Garron Date: Wed, 16 Nov 2022 12:53:44 -0800 Subject: [PATCH] Fix up types for cached and returned data. --- src/index.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9f582c3..ac4af23 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,8 @@ -const privateData = new WeakMap() +interface CachedData { + src: string + data: Promise +} +const privateData = new WeakMap() function isWildcard(accept: string | null) { return accept && !!accept.split(',').find(x => x.match(/^\s*\*\/\*/)) @@ -41,7 +45,7 @@ export default class IncludeFragmentElement extends HTMLElement { this.setAttribute('accept', val) } - get data(): Promise { + get data(): Promise { return this.#getData() } @@ -97,7 +101,7 @@ export default class IncludeFragmentElement extends HTMLElement { }) } - load(): Promise { + load(): Promise { return this.#getData() } @@ -133,11 +137,14 @@ export default class IncludeFragmentElement extends HTMLElement { this.#busy = true this.#observer.unobserve(this) try { - const html = await this.#getData() + const data = await this.#getData() + if (data instanceof Error) { + throw data + } const template = document.createElement('template') // eslint-disable-next-line github/no-inner-html - template.innerHTML = html + template.innerHTML = data const fragment = document.importNode(template.content, true) const canceled = !this.dispatchEvent( new CustomEvent('include-fragment-replace', {cancelable: true, detail: {fragment}}) @@ -150,12 +157,13 @@ export default class IncludeFragmentElement extends HTMLElement { } } - #getData(): Promise { + async #getData(): Promise { const src = this.src - let data = privateData.get(this) - if (data && data.src === src) { - return data.data + const cachedData = privateData.get(this) + if (cachedData && cachedData.src === src) { + return cachedData.data } else { + let data: Promise if (src) { data = this.#fetchDataWithEvents() } else {