@schibsted/niche-utils
Advanced tools
Comparing version 0.4.1 to 0.4.2
@@ -1,36 +0,35 @@ | ||
const state = {}; | ||
import { getEventTarget } from '../eventTarget'; | ||
const isLoading = {}; | ||
const loadScriptEventTarget = getEventTarget(); | ||
export function loadScript(url, id) { | ||
var _a, _b, _c; | ||
if (((_a = state[id]) === null || _a === void 0 ? void 0 : _a.state) === 'loaded') { | ||
return Promise.resolve(); | ||
} | ||
if (((_b = state[id]) === null || _b === void 0 ? void 0 : _b.state) === 'error') { | ||
return Promise.reject(); | ||
} | ||
if (((_c = state[id]) === null || _c === void 0 ? void 0 : _c.state) === 'loading') { | ||
return state[id].payload; | ||
} | ||
const promise = new Promise((resolve, reject) => { | ||
state[id] = { | ||
state: 'loading', | ||
payload: promise, | ||
}; | ||
const script = document.createElement('script'); | ||
script.src = url; | ||
script.id = id; | ||
script.onerror = (err) => { | ||
state[id] = { | ||
state: 'error', | ||
payload: err, | ||
return new Promise((resolve, reject) => { | ||
if (document.querySelector(`#${id}`)) { | ||
if (isLoading[id]) { | ||
loadScriptEventTarget.addEventListener(id, () => { | ||
resolve(); | ||
}); | ||
} | ||
else { | ||
resolve(); | ||
} | ||
} | ||
else { | ||
isLoading[id] = true; | ||
const script = document.createElement('script'); | ||
script.src = url; | ||
script.id = id; | ||
script.onerror = (err) => { | ||
isLoading[id] = false; | ||
reject(err); | ||
loadScriptEventTarget.dispatchEvent(new CustomEvent(id)); | ||
}; | ||
reject(err); | ||
}; | ||
script.onload = () => { | ||
state[id] = { state: 'loaded' }; | ||
resolve(); | ||
}; | ||
script.async = true; | ||
document.body.appendChild(script); | ||
script.onload = () => { | ||
isLoading[id] = false; | ||
resolve(); | ||
loadScriptEventTarget.dispatchEvent(new CustomEvent(id)); | ||
}; | ||
script.async = true; | ||
document.body.appendChild(script); | ||
} | ||
}); | ||
return promise; | ||
} |
{ | ||
"name": "@schibsted/niche-utils", | ||
"version": "0.4.1", | ||
"version": "0.4.2", | ||
"license": "Apache-2.0", | ||
@@ -23,3 +23,3 @@ "main": "lib/index.js", | ||
}, | ||
"gitHead": "02b3fc2061b49da2a7f823ffa4c28770113abacb" | ||
"gitHead": "ae51183e8bb79ff2bd5bcbf30510a8e0fe8ed643" | ||
} |
@@ -1,44 +0,37 @@ | ||
const state: Record< | ||
string, | ||
{ | ||
state: string; | ||
payload?: unknown; | ||
} | ||
> = {}; | ||
import { getEventTarget } from '../eventTarget'; | ||
const isLoading: Record<string, boolean> = {}; | ||
const loadScriptEventTarget = getEventTarget(); | ||
export function loadScript(url: string, id: string): Promise<void> { | ||
if (state[id]?.state === 'loaded') { | ||
return Promise.resolve(); | ||
} | ||
if (state[id]?.state === 'error') { | ||
return Promise.reject(); | ||
} | ||
if (state[id]?.state === 'loading') { | ||
return state[id].payload as Promise<void>; | ||
} | ||
const promise = new Promise<void>((resolve, reject) => { | ||
state[id] = { | ||
state: 'loading', | ||
payload: promise, | ||
}; | ||
const script = document.createElement('script'); | ||
script.src = url; | ||
script.id = id; | ||
script.onerror = (err) => { | ||
state[id] = { | ||
state: 'error', | ||
payload: err, | ||
return new Promise<void>((resolve, reject) => { | ||
if (document.querySelector(`#${id}`)) { | ||
if (isLoading[id]) { | ||
loadScriptEventTarget.addEventListener(id, () => { | ||
resolve(); | ||
}); | ||
} else { | ||
resolve(); | ||
} | ||
} else { | ||
isLoading[id] = true; | ||
const script = document.createElement('script'); | ||
script.src = url; | ||
script.id = id; | ||
script.onerror = (err) => { | ||
isLoading[id] = false; | ||
reject(err); | ||
loadScriptEventTarget.dispatchEvent(new CustomEvent(id)); | ||
}; | ||
reject(err); | ||
}; | ||
script.onload = () => { | ||
state[id] = { state: 'loaded' }; | ||
resolve(); | ||
}; | ||
script.async = true; | ||
script.onload = () => { | ||
isLoading[id] = false; | ||
resolve(); | ||
loadScriptEventTarget.dispatchEvent(new CustomEvent(id)); | ||
}; | ||
script.async = true; | ||
document.body.appendChild(script); | ||
document.body.appendChild(script); | ||
} | ||
}); | ||
return promise; | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
17110
452