argous 1.2.203 → 1.2.205
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare type CallbackFn = () => void;
|
|
2
|
+
export interface ScriptItem {
|
|
3
|
+
src: string;
|
|
4
|
+
async?: boolean;
|
|
5
|
+
defer?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const ScriptLoader: {
|
|
8
|
+
loadList: (doc: Document, items: ScriptItem[], delay: number, success: () => void, failure?: ((err: unknown) => void) | undefined) => void;
|
|
9
|
+
reinitialize: () => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ScriptLoader = void 0;
|
|
15
|
+
var Utils_1 = require("./Utils");
|
|
16
|
+
var injectScriptTag = function (doc, item, handler) {
|
|
17
|
+
var _a, _b;
|
|
18
|
+
var scriptTag = doc.createElement('script');
|
|
19
|
+
scriptTag.referrerPolicy = 'origin';
|
|
20
|
+
scriptTag.type = 'application/javascript';
|
|
21
|
+
scriptTag.id = item.id;
|
|
22
|
+
scriptTag.src = item.src;
|
|
23
|
+
scriptTag.async = (_a = item.async) !== null && _a !== void 0 ? _a : false;
|
|
24
|
+
scriptTag.defer = (_b = item.defer) !== null && _b !== void 0 ? _b : false;
|
|
25
|
+
var loadHandler = function () {
|
|
26
|
+
scriptTag.removeEventListener('load', loadHandler);
|
|
27
|
+
scriptTag.removeEventListener('error', errorHandler);
|
|
28
|
+
handler(item.src);
|
|
29
|
+
};
|
|
30
|
+
var errorHandler = function (err) {
|
|
31
|
+
scriptTag.removeEventListener('load', loadHandler);
|
|
32
|
+
scriptTag.removeEventListener('error', errorHandler);
|
|
33
|
+
handler(item.src, err);
|
|
34
|
+
};
|
|
35
|
+
scriptTag.addEventListener('load', loadHandler);
|
|
36
|
+
scriptTag.addEventListener('error', errorHandler);
|
|
37
|
+
if (doc.head) {
|
|
38
|
+
doc.head.appendChild(scriptTag);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
var createDocumentScriptLoader = function (doc) {
|
|
42
|
+
var lookup = {};
|
|
43
|
+
var scriptLoadOrErrorHandler = function (src, err) {
|
|
44
|
+
var item = lookup[src];
|
|
45
|
+
item.done = true;
|
|
46
|
+
item.error = err;
|
|
47
|
+
for (var _i = 0, _a = item.handlers; _i < _a.length; _i++) {
|
|
48
|
+
var h = _a[_i];
|
|
49
|
+
h(src, err);
|
|
50
|
+
}
|
|
51
|
+
item.handlers = [];
|
|
52
|
+
};
|
|
53
|
+
var loadScripts = function (items, success, failure) {
|
|
54
|
+
// eslint-disable-next-line no-console
|
|
55
|
+
var failureOrLog = function (err) { return failure !== undefined ? failure(err) : console.error(err); };
|
|
56
|
+
if (items.length === 0) {
|
|
57
|
+
failureOrLog(new Error('At least one script must be provided'));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
var successCount = 0;
|
|
61
|
+
var failed = false;
|
|
62
|
+
var loaded = function (_src, err) {
|
|
63
|
+
if (failed) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (err) {
|
|
67
|
+
failed = true;
|
|
68
|
+
failureOrLog(err);
|
|
69
|
+
}
|
|
70
|
+
else if (++successCount === items.length) {
|
|
71
|
+
success();
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
|
|
75
|
+
var item = items_1[_i];
|
|
76
|
+
var existing = lookup[item.src];
|
|
77
|
+
if (existing) {
|
|
78
|
+
if (existing.done) {
|
|
79
|
+
loaded(item.src, existing.error);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
existing.handlers.push(loaded);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// create a new entry
|
|
87
|
+
var id = Utils_1.uuid('tiny-');
|
|
88
|
+
lookup[item.src] = {
|
|
89
|
+
id: id,
|
|
90
|
+
src: item.src,
|
|
91
|
+
done: false,
|
|
92
|
+
error: null,
|
|
93
|
+
handlers: [loaded],
|
|
94
|
+
};
|
|
95
|
+
injectScriptTag(doc, __assign({ id: id }, item), scriptLoadOrErrorHandler);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
var deleteScripts = function () {
|
|
100
|
+
var _a;
|
|
101
|
+
for (var _i = 0, _b = Object.values(lookup); _i < _b.length; _i++) {
|
|
102
|
+
var item = _b[_i];
|
|
103
|
+
var scriptTag = doc.getElementById(item.id);
|
|
104
|
+
if (scriptTag != null && scriptTag.tagName === 'SCRIPT') {
|
|
105
|
+
(_a = scriptTag.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(scriptTag);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
lookup = {};
|
|
109
|
+
};
|
|
110
|
+
var getDocument = function () { return doc; };
|
|
111
|
+
return {
|
|
112
|
+
loadScripts: loadScripts,
|
|
113
|
+
deleteScripts: deleteScripts,
|
|
114
|
+
getDocument: getDocument
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
var createScriptLoader = function () {
|
|
118
|
+
var cache = [];
|
|
119
|
+
var getDocumentScriptLoader = function (doc) {
|
|
120
|
+
var loader = cache.find(function (l) { return l.getDocument() === doc; });
|
|
121
|
+
if (loader === undefined) {
|
|
122
|
+
loader = createDocumentScriptLoader(doc);
|
|
123
|
+
cache.push(loader);
|
|
124
|
+
}
|
|
125
|
+
return loader;
|
|
126
|
+
};
|
|
127
|
+
var loadList = function (doc, items, delay, success, failure) {
|
|
128
|
+
var doLoad = function () { return getDocumentScriptLoader(doc).loadScripts(items, success, failure); };
|
|
129
|
+
if (delay > 0) {
|
|
130
|
+
setTimeout(doLoad, delay);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
doLoad();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
var reinitialize = function () {
|
|
137
|
+
for (var loader = cache.pop(); loader != null; loader = cache.pop()) {
|
|
138
|
+
loader.deleteScripts();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
loadList: loadList,
|
|
143
|
+
reinitialize: reinitialize
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
exports.ScriptLoader = createScriptLoader();
|