@schibsted/niche-utils
Advanced tools
Comparing version 0.3.0 to 0.4.0
@@ -5,1 +5,3 @@ export * as eventTarget from './eventTarget'; | ||
export * as fetch from './fetch'; | ||
export * as array from './array'; | ||
export * as url from './url'; |
@@ -5,1 +5,3 @@ export * as eventTarget from './eventTarget'; | ||
export * as fetch from './fetch'; | ||
export * as array from './array'; | ||
export * as url from './url'; |
@@ -0,16 +1,36 @@ | ||
const state = {}; | ||
export function loadScript(url, id) { | ||
return new Promise((resolve, reject) => { | ||
if (document.querySelector(`#${id}`)) { | ||
var _a, _b; | ||
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 (state[id].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, | ||
}; | ||
reject(err); | ||
}; | ||
script.onload = () => { | ||
state[id] = { state: 'loaded' }; | ||
resolve(); | ||
} | ||
else { | ||
const script = document.createElement('script'); | ||
script.src = url; | ||
script.id = id; | ||
script.onerror = (err) => reject(err); | ||
script.onload = () => resolve(); | ||
script.async = true; | ||
document.body.appendChild(script); | ||
} | ||
}; | ||
script.async = true; | ||
document.body.appendChild(script); | ||
}); | ||
return promise; | ||
} |
{ | ||
"name": "@schibsted/niche-utils", | ||
"version": "0.3.0", | ||
"version": "0.4.0", | ||
"license": "Apache-2.0", | ||
@@ -20,5 +20,6 @@ "main": "lib/index.js", | ||
"lint": "eslint --ext .js,.ts,.tsx ./src", | ||
"test": "jest ./src", | ||
"typecheck": "tsc --noEmit" | ||
}, | ||
"gitHead": "c2d0ccf243362b1c0d6532ad79df3fbef47ddcb3" | ||
"gitHead": "5fc4cb80aaac17c0b9de081f407b4be24933ef0e" | ||
} |
@@ -5,1 +5,3 @@ export * as eventTarget from './eventTarget'; | ||
export * as fetch from './fetch'; | ||
export * as array from './array'; | ||
export * as url from './url'; |
@@ -0,16 +1,44 @@ | ||
const state: Record< | ||
string, | ||
{ | ||
state: string; | ||
payload?: unknown; | ||
} | ||
> = {}; | ||
export function loadScript(url: string, id: string): Promise<void> { | ||
return new Promise((resolve, reject) => { | ||
if (document.querySelector(`#${id}`)) { | ||
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, | ||
}; | ||
reject(err); | ||
}; | ||
script.onload = () => { | ||
state[id] = { state: 'loaded' }; | ||
resolve(); | ||
} else { | ||
const script = document.createElement('script'); | ||
script.src = url; | ||
script.id = id; | ||
script.onerror = (err) => reject(err); | ||
script.onload = () => resolve(); | ||
script.async = true; | ||
}; | ||
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
16914
56
461