framo
Version:
Glorious media processing right in your browser with Typescript support
63 lines • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScriptService = exports.LoadStatus = void 0;
const scripts_1 = require("../stores/scripts");
var LoadStatus;
(function (LoadStatus) {
LoadStatus["AlreadyLoaded"] = "Already Loaded";
LoadStatus["Loaded"] = "Loaded";
})(LoadStatus = exports.LoadStatus || (exports.LoadStatus = {}));
class ScriptService {
constructor() {
this.scripts = {};
scripts_1.ScriptStore.forEach((script) => {
this.scripts[script.name] = {
loaded: false,
src: script.src,
};
});
}
load(...scripts) {
const promises = [];
scripts.forEach((script) => promises.push(this.loadScript(script)));
return Promise.all(promises);
}
loadScript(name) {
return new Promise((resolve) => {
if (this.scripts[name].loaded) {
const response = {
script: name,
loaded: true,
status: LoadStatus.AlreadyLoaded,
};
resolve(response);
}
else {
const script = document.createElement("script");
script.type = "text/javascript";
script.src = this.scripts[name].src;
script.onload = () => {
this.scripts[name].loaded = true;
const response = {
script: name,
loaded: true,
status: LoadStatus.Loaded,
};
resolve(response);
};
script.onerror = (error) => {
console.error(error);
const response = {
script: name,
loaded: false,
status: LoadStatus.Loaded,
};
resolve(response);
};
document.getElementsByTagName("head")[0].appendChild(script);
}
});
}
}
exports.ScriptService = ScriptService;
//# sourceMappingURL=script-loader.service.js.map