aboutsummaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/apng-canvas.js1168
-rw-r--r--src/utils/dependencies.ts35
-rw-r--r--src/utils/web-metadata.ts14
3 files changed, 1199 insertions, 18 deletions
diff --git a/src/utils/apng-canvas.js b/src/utils/apng-canvas.js
new file mode 100644
index 0000000..5149dcc
--- /dev/null
+++ b/src/utils/apng-canvas.js
@@ -0,0 +1,1168 @@
+/* eslint-disable */
+
+const self = module.exports;
+/**
+ * apng-canvas v2.1.2
+ *
+ * @copyright 2011-2019 David Mzareulyan
+ * @link https://github.com/davidmz/apng-canvas
+ * @license MIT
+ */
+!(function i(o, a, s) {
+ function u(n, t) {
+ if (!a[n]) {
+ if (!o[n]) {
+ var e = "function" == typeof require && require;
+ if (!t && e) return e(n, !0);
+ if (c) return c(n, !0);
+ throw new Error("Cannot find module '" + n + "'");
+ }
+ var r = (a[n] = { exports: {} });
+ o[n][0].call(
+ r.exports,
+ function (t) {
+ var e = o[n][1][t];
+ return u(e || t);
+ },
+ r,
+ r.exports,
+ i,
+ o,
+ a,
+ s
+ );
+ }
+ return a[n].exports;
+ }
+ for (
+ var c = "function" == typeof require && require, t = 0;
+ t < s.length;
+ t++
+ )
+ u(s[t]);
+ return u;
+})(
+ {
+ 1: [
+ function (Y, n, r) {
+ (function (G, q) {
+ var t, e;
+ (t = this),
+ (e = function () {
+ "use strict";
+ function u(t) {
+ return "function" == typeof t;
+ }
+ var n = Array.isArray
+ ? Array.isArray
+ : function (t) {
+ return (
+ "[object Array]" ===
+ Object.prototype.toString.call(t)
+ );
+ },
+ r = 0,
+ e = void 0,
+ i = void 0,
+ a = function (t, e) {
+ (l[r] = t),
+ (l[r + 1] = e),
+ 2 === (r += 2) && (i ? i(d) : g());
+ };
+ var t =
+ "undefined" != typeof window
+ ? window
+ : void 0,
+ o = t || {},
+ s =
+ o.MutationObserver ||
+ o.WebKitMutationObserver,
+ c =
+ "undefined" == typeof self &&
+ void 0 !== G &&
+ "[object process]" === {}.toString.call(G),
+ f =
+ "undefined" != typeof Uint8ClampedArray &&
+ "undefined" != typeof importScripts &&
+ "undefined" != typeof MessageChannel;
+ function h() {
+ var t = setTimeout;
+ return function () {
+ return t(d, 1);
+ };
+ }
+ var l = new Array(1e3);
+ function d() {
+ for (var t = 0; t < r; t += 2) {
+ (0, l[t])(l[t + 1]),
+ (l[t] = void 0),
+ (l[t + 1] = void 0);
+ }
+ r = 0;
+ }
+ var p,
+ v,
+ A,
+ m,
+ g = void 0;
+ function w(t, e) {
+ var n = this,
+ r = new this.constructor(b);
+ void 0 === r[_] && j(r);
+ var i = n._state;
+ if (i) {
+ var o = arguments[i - 1];
+ a(function () {
+ return L(i, r, o, n._result);
+ });
+ } else U(n, r, t, e);
+ return r;
+ }
+ function y(t) {
+ if (
+ t &&
+ "object" == typeof t &&
+ t.constructor === this
+ )
+ return t;
+ var e = new this(b);
+ return T(e, t), e;
+ }
+ g = c
+ ? function () {
+ return G.nextTick(d);
+ }
+ : s
+ ? ((v = 0),
+ (A = new s(d)),
+ (m = document.createTextNode("")),
+ A.observe(m, { characterData: !0 }),
+ function () {
+ m.data = v = ++v % 2;
+ })
+ : f
+ ? (((p = new MessageChannel()).port1.onmessage =
+ d),
+ function () {
+ return p.port2.postMessage(0);
+ })
+ : void 0 === t && "function" == typeof Y
+ ? (function () {
+ try {
+ var t =
+ Function("return this")().require(
+ "vertx"
+ );
+ return void 0 !==
+ (e =
+ t.runOnLoop || t.runOnContext)
+ ? function () {
+ e(d);
+ }
+ : h();
+ } catch (t) {
+ return h();
+ }
+ })()
+ : h();
+ var _ = Math.random().toString(36).substring(2);
+ function b() { }
+ var E = void 0,
+ P = 1,
+ x = 2;
+ function N(t, r, i) {
+ a(function (e) {
+ var n = !1,
+ t = (function (t, e, n, r) {
+ try {
+ t.call(e, n, r);
+ } catch (t) {
+ return t;
+ }
+ })(
+ i,
+ r,
+ function (t) {
+ n ||
+ ((n = !0),
+ r !== t
+ ? T(e, t)
+ : O(e, t));
+ },
+ function (t) {
+ n || ((n = !0), R(e, t));
+ },
+ e._label
+ );
+ !n && t && ((n = !0), R(e, t));
+ }, t);
+ }
+ function C(t, e, n) {
+ e.constructor === t.constructor &&
+ n === w &&
+ e.constructor.resolve === y
+ ? (function (e, t) {
+ t._state === P
+ ? O(e, t._result)
+ : t._state === x
+ ? R(e, t._result)
+ : U(
+ t,
+ void 0,
+ function (t) {
+ return T(e, t);
+ },
+ function (t) {
+ return R(e, t);
+ }
+ );
+ })(t, e)
+ : void 0 === n
+ ? O(t, e)
+ : u(n)
+ ? N(t, e, n)
+ : O(t, e);
+ }
+ function T(e, t) {
+ if (e === t)
+ R(
+ e,
+ new TypeError(
+ "You cannot resolve a promise with itself"
+ )
+ );
+ else if (
+ (function (t) {
+ var e = typeof t;
+ return (
+ null !== t &&
+ ("object" == e || "function" == e)
+ );
+ })(t)
+ ) {
+ var n = void 0;
+ try {
+ n = t.then;
+ } catch (t) {
+ return void R(e, t);
+ }
+ C(e, t, n);
+ } else O(e, t);
+ }
+ function B(t) {
+ t._onerror && t._onerror(t._result), I(t);
+ }
+ function O(t, e) {
+ t._state === E &&
+ ((t._result = e),
+ (t._state = P),
+ 0 !== t._subscribers.length && a(I, t));
+ }
+ function R(t, e) {
+ t._state === E &&
+ ((t._state = x), (t._result = e), a(B, t));
+ }
+ function U(t, e, n, r) {
+ var i = t._subscribers,
+ o = i.length;
+ (t._onerror = null),
+ (i[o] = e),
+ (i[o + P] = n),
+ (i[o + x] = r),
+ 0 === o && t._state && a(I, t);
+ }
+ function I(t) {
+ var e = t._subscribers,
+ n = t._state;
+ if (0 !== e.length) {
+ for (
+ var r = void 0,
+ i = void 0,
+ o = t._result,
+ a = 0;
+ a < e.length;
+ a += 3
+ )
+ (r = e[a]),
+ (i = e[a + n]),
+ r ? L(n, r, i, o) : i(o);
+ t._subscribers.length = 0;
+ }
+ }
+ function L(t, e, n, r) {
+ var i = u(n),
+ o = void 0,
+ a = void 0,
+ s = !0;
+ if (i) {
+ try {
+ o = n(r);
+ } catch (t) {
+ (s = !1), (a = t);
+ }
+ if (e === o)
+ return void R(
+ e,
+ new TypeError(
+ "A promises callback cannot return that same promise."
+ )
+ );
+ } else o = r;
+ e._state !== E ||
+ (i && s
+ ? T(e, o)
+ : !1 === s
+ ? R(e, a)
+ : t === P
+ ? O(e, o)
+ : t === x && R(e, o));
+ }
+ var D = 0;
+ function j(t) {
+ (t[_] = D++),
+ (t._state = void 0),
+ (t._result = void 0),
+ (t._subscribers = []);
+ }
+ var k =
+ ((F.prototype._enumerate = function (t) {
+ for (
+ var e = 0;
+ this._state === E && e < t.length;
+ e++
+ )
+ this._eachEntry(t[e], e);
+ }),
+ (F.prototype._eachEntry = function (e, t) {
+ var n = this._instanceConstructor,
+ r = n.resolve;
+ if (r === y) {
+ var i = void 0,
+ o = void 0,
+ a = !1;
+ try {
+ i = e.then;
+ } catch (t) {
+ (a = !0), (o = t);
+ }
+ if (i === w && e._state !== E)
+ this._settledAt(
+ e._state,
+ t,
+ e._result
+ );
+ else if ("function" != typeof i)
+ this._remaining--,
+ (this._result[t] = e);
+ else if (n === S) {
+ var s = new n(b);
+ a ? R(s, o) : C(s, e, i),
+ this._willSettleAt(s, t);
+ } else
+ this._willSettleAt(
+ new n(function (t) {
+ return t(e);
+ }),
+ t
+ );
+ } else this._willSettleAt(r(e), t);
+ }),
+ (F.prototype._settledAt = function (t, e, n) {
+ var r = this.promise;
+ r._state === E &&
+ (this._remaining--,
+ t === x
+ ? R(r, n)
+ : (this._result[e] = n)),
+ 0 === this._remaining &&
+ O(r, this._result);
+ }),
+ (F.prototype._willSettleAt = function (t, e) {
+ var n = this;
+ U(
+ t,
+ void 0,
+ function (t) {
+ return n._settledAt(P, e, t);
+ },
+ function (t) {
+ return n._settledAt(x, e, t);
+ }
+ );
+ }),
+ F);
+ function F(t, e) {
+ (this._instanceConstructor = t),
+ (this.promise = new t(b)),
+ this.promise[_] || j(this.promise),
+ n(e)
+ ? ((this.length = e.length),
+ (this._remaining = e.length),
+ (this._result = new Array(
+ this.length
+ )),
+ 0 === this.length
+ ? O(this.promise, this._result)
+ : ((this.length =
+ this.length || 0),
+ this._enumerate(e),
+ 0 === this._remaining &&
+ O(
+ this.promise,
+ this._result
+ )))
+ : R(
+ this.promise,
+ new Error(
+ "Array Methods must be provided an Array"
+ )
+ );
+ }
+ var S =
+ ((M.prototype.catch = function (t) {
+ return this.then(null, t);
+ }),
+ (M.prototype.finally = function (e) {
+ var n = this.constructor;
+ return u(e)
+ ? this.then(
+ function (t) {
+ return n
+ .resolve(e())
+ .then(function () {
+ return t;
+ });
+ },
+ function (t) {
+ return n
+ .resolve(e())
+ .then(function () {
+ throw t;
+ });
+ }
+ )
+ : this.then(e, e);
+ }),
+ M);
+ function M(t) {
+ (this[_] = D++),
+ (this._result = this._state = void 0),
+ (this._subscribers = []),
+ b !== t &&
+ ("function" != typeof t &&
+ (function () {
+ throw new TypeError(
+ "You must pass a resolver function as the first argument to the promise constructor"
+ );
+ })(),
+ this instanceof M
+ ? (function (e, t) {
+ try {
+ t(
+ function (t) {
+ T(e, t);
+ },
+ function (t) {
+ R(e, t);
+ }
+ );
+ } catch (t) {
+ R(e, t);
+ }
+ })(this, t)
+ : (function () {
+ throw new TypeError(
+ "Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."
+ );
+ })());
+ }
+ return (
+ (S.prototype.then = w),
+ (S.all = function (t) {
+ return new k(this, t).promise;
+ }),
+ (S.race = function (i) {
+ var o = this;
+ return n(i)
+ ? new o(function (t, e) {
+ for (
+ var n = i.length, r = 0;
+ r < n;
+ r++
+ )
+ o.resolve(i[r]).then(t, e);
+ })
+ : new o(function (t, e) {
+ return e(
+ new TypeError(
+ "You must pass an array to race."
+ )
+ );
+ });
+ }),
+ (S.resolve = y),
+ (S.reject = function (t) {
+ var e = new this(b);
+ return R(e, t), e;
+ }),
+ (S._setScheduler = function (t) {
+ i = t;
+ }),
+ (S._setAsap = function (t) {
+ a = t;
+ }),
+ (S._asap = a),
+ (S.polyfill = function () {
+ var t = void 0;
+ if (void 0 !== q) t = q;
+ else if ("undefined" != typeof self)
+ t = self;
+ else
+ try {
+ t = Function("return this")();
+ } catch (t) {
+ throw new Error(
+ "polyfill failed because global object is unavailable in this environment"
+ );
+ }
+ var e = t.Promise;
+ if (e) {
+ var n = null;
+ try {
+ n = Object.prototype.toString.call(
+ e.resolve()
+ );
+ } catch (t) { }
+ if ("[object Promise]" === n && !e.cast)
+ return;
+ }
+ t.Promise = S;
+ }),
+ (S.Promise = S)
+ );
+ }),
+ "object" == typeof r && void 0 !== n
+ ? (n.exports = e())
+ : "function" == typeof define && define.amd
+ ? define(e)
+ : (t.ES6Promise = e());
+ }).call(
+ this,
+ Y("VCmEsw"),
+ "undefined" != typeof self
+ ? self
+ : "undefined" != typeof window
+ ? window
+ : {}
+ );
+ },
+ { VCmEsw: 2 },
+ ],
+ 2: [
+ function (t, e, n) {
+ var r = (e.exports = {});
+ function i() { }
+ (r.nextTick = (function () {
+ var t = "undefined" != typeof window && window.setImmediate,
+ e =
+ "undefined" != typeof window &&
+ window.postMessage &&
+ window.addEventListener;
+ if (t)
+ return function (t) {
+ return window.setImmediate(t);
+ };
+ if (e) {
+ var n = [];
+ return (
+ window.addEventListener(
+ "message",
+ function (t) {
+ var e = t.source;
+ (e !== window && null !== e) ||
+ "process-tick" !== t.data ||
+ (t.stopPropagation(),
+ 0 < n.length && n.shift()());
+ },
+ !0
+ ),
+ function (t) {
+ n.push(t),
+ window.postMessage("process-tick", "*");
+ }
+ );
+ }
+ return function (t) {
+ setTimeout(t, 0);
+ };
+ })()),
+ (r.title = "browser"),
+ (r.browser = !0),
+ (r.env = {}),
+ (r.argv = []),
+ (r.on = i),
+ (r.addListener = i),
+ (r.once = i),
+ (r.off = i),
+ (r.removeListener = i),
+ (r.removeAllListeners = i),
+ (r.emit = i),
+ (r.binding = function (t) {
+ throw new Error("process.binding is not supported");
+ }),
+ (r.cwd = function () {
+ return "/";
+ }),
+ (r.chdir = function (t) {
+ throw new Error("process.chdir is not supported");
+ });
+ },
+ {},
+ ],
+ 3: [
+ function (t, e, n) {
+ "use strict";
+ e.exports = function () {
+ (this.width = 0),
+ (this.height = 0),
+ (this.numPlays = 0),
+ (this.playTime = 0),
+ (this.frames = []),
+ (this.play = function () {
+ s ||
+ u ||
+ (this.rewind(),
+ (s = !0),
+ requestAnimationFrame(e));
+ }),
+ (this.rewind = function () {
+ (o = i = 0), (a = null), (u = s = !1);
+ }),
+ (this.addContext = function (t) {
+ if (0 < c.length) {
+ var e = c[0].getImageData(
+ 0,
+ 0,
+ this.width,
+ this.height
+ );
+ t.putImageData(e, 0, 0);
+ }
+ c.push(t), (t._apng_animation = this);
+ }),
+ (this.removeContext = function (t) {
+ var e = c.indexOf(t);
+ -1 !== e &&
+ (c.splice(e, 1),
+ 0 === c.length && this.rewind(),
+ "_apng_animation" in t &&
+ delete t._apng_animation);
+ }),
+ (this.isPlayed = function () {
+ return s;
+ }),
+ (this.isFinished = function () {
+ return u;
+ });
+ var r = this,
+ i = 0,
+ o = 0,
+ a = null,
+ s = !1,
+ u = !1,
+ c = [],
+ e = function (t) {
+ for (; s && i <= t;) n(t);
+ s && requestAnimationFrame(e);
+ },
+ n = function (t) {
+ var e = o++ % r.frames.length,
+ n = r.frames[e];
+ if (
+ 0 == r.numPlays ||
+ o / r.frames.length <= r.numPlays
+ ) {
+ for (
+ 0 == e &&
+ (c.forEach(function (t) {
+ t.clearRect(
+ 0,
+ 0,
+ r.width,
+ r.height
+ );
+ }),
+ (a = null),
+ 2 == n.disposeOp && (n.disposeOp = 1)),
+ a && 1 == a.disposeOp
+ ? c.forEach(function (t) {
+ t.clearRect(
+ a.left,
+ a.top,
+ a.width,
+ a.height
+ );
+ })
+ : a &&
+ 2 == a.disposeOp &&
+ c.forEach(function (t) {
+ t.putImageData(
+ a.iData,
+ a.left,
+ a.top
+ );
+ }),
+ (a = n).iData = null,
+ 2 == a.disposeOp &&
+ (a.iData = c[0].getImageData(
+ n.left,
+ n.top,
+ n.width,
+ n.height
+ )),
+ 0 == n.blendOp &&
+ c.forEach(function (t) {
+ t.clearRect(
+ n.left,
+ n.top,
+ n.width,
+ n.height
+ );
+ }),
+ c.forEach(function (t) {
+ t.drawImage(n.img, n.left, n.top);
+ }),
+ 0 == i && (i = t);
+ t > i + r.playTime;
+
+ )
+ i += r.playTime;
+ i += n.delay;
+ } else u = !(s = !1);
+ };
+ };
+ },
+ {},
+ ],
+ 4: [
+ function (t, e, n) {
+ "use strict";
+ for (var a = new Uint32Array(256), r = 0; r < 256; r++) {
+ for (var i = r, o = 0; o < 8; o++)
+ i = 1 & i ? 3988292384 ^ (i >>> 1) : i >>> 1;
+ a[r] = i;
+ }
+ e.exports = function (t, e, n) {
+ for (
+ var r = -1,
+ i = (e = e || 0),
+ o = e + (n = n || t.length - e);
+ i < o;
+ i++
+ )
+ r = (r >>> 8) ^ a[255 & (r ^ t[i])];
+ return -1 ^ r;
+ };
+ },
+ {},
+ ],
+ 5: [
+ function (a, t, e) {
+ (function (t) {
+ "use strict";
+ var e = a("./support-test"),
+ n = a("./parser"),
+ r = a("./loader"),
+ i = (t.APNG = {});
+ (i.checkNativeFeatures = e.checkNativeFeatures),
+ (i.ifNeeded = e.ifNeeded),
+ (i.parseBuffer = function (t) {
+ return n(t);
+ });
+ var o = {};
+ (i.parseURL = function (t) {
+ return t in o || (o[t] = r(t).then(n)), o[t];
+ }),
+ (i.animateContext = function (t, e) {
+ return i.parseURL(t).then(function (t) {
+ return t.addContext(e), t.play(), t;
+ });
+ }),
+ (i.animateImage = function (s) {
+ return (
+ s.setAttribute("data-is-apng", "progress"),
+ i.parseURL(s.src).then(
+ function (t) {
+ s.setAttribute("data-is-apng", "yes");
+ var e =
+ document.createElement("canvas");
+ (e.width = t.width),
+ (e.height = t.height),
+ Array.prototype.slice
+ .call(s.attributes)
+ .forEach(function (t) {
+ -1 ==
+ [
+ "alt",
+ "src",
+ "usemap",
+ "ismap",
+ "data-is-apng",
+ "width",
+ "height",
+ ].indexOf(t.nodeName) &&
+ e.setAttributeNode(
+ t.cloneNode(!1)
+ );
+ }),
+ e.setAttribute(
+ "data-apng-src",
+ s.src
+ ),
+ "" != s.alt &&
+ e.appendChild(
+ document.createTextNode(
+ s.alt
+ )
+ );
+ var n = "",
+ r = "",
+ i = 0,
+ o = "";
+ "" != s.style.width &&
+ "auto" != s.style.width
+ ? (n = s.style.width)
+ : s.hasAttribute("width") &&
+ (n =
+ s.getAttribute("width") +
+ "px"),
+ "" != s.style.height &&
+ "auto" != s.style.height
+ ? (r = s.style.height)
+ : s.hasAttribute("height") &&
+ (r =
+ s.getAttribute("height") +
+ "px"),
+ "" != n &&
+ "" == r &&
+ ((i = parseFloat(n)),
+ (o = n.match(/\D+$/)[0]),
+ (r =
+ Math.round(
+ (e.height * i) / e.width
+ ) + o)),
+ "" != r &&
+ "" == n &&
+ ((i = parseFloat(r)),
+ (o = r.match(/\D+$/)[0]),
+ (n =
+ Math.round(
+ (e.width * i) / e.height
+ ) + o)),
+ (e.style.width = n),
+ (e.style.height = r);
+ var a = s.parentNode;
+ a.insertBefore(e, s),
+ a.removeChild(s),
+ t.addContext(e.getContext("2d")),
+ t.play();
+ },
+ function () {
+ s.setAttribute("data-is-apng", "no");
+ }
+ )
+ );
+ }),
+ (i.releaseCanvas = function (t) {
+ var e = t.getContext("2d");
+ "_apng_animation" in e &&
+ e._apng_animation.removeContext(e);
+ });
+ }).call(
+ this,
+ "undefined" != typeof self
+ ? self
+ : "undefined" != typeof window
+ ? window
+ : {}
+ );
+ },
+ { "./loader": 6, "./parser": 7, "./support-test": 8 },
+ ],
+ 6: [
+ function (t, e, n) {
+ "use strict";
+ var i = i || t("es6-promise").Promise;
+ e.exports = function (r) {
+ return new i(function (t, e) {
+ var n = new XMLHttpRequest();
+ n.open("GET", r),
+ (n.responseType = "arraybuffer"),
+ (n.onload = function () {
+ 200 == this.status ? t(this.response) : e(this);
+ }),
+ n.send();
+ });
+ };
+ },
+ { "es6-promise": 1 },
+ ],
+ 7: [
+ function (t, e, n) {
+ "use strict";
+ var r = r || t("es6-promise").Promise,
+ m = t("./animation"),
+ o = t("./crc32"),
+ g = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
+ e.exports = function (t) {
+ var A = new Uint8Array(t);
+ return new r(function (t, e) {
+ for (var n = 0; n < g.length; n++)
+ if (g[n] != A[n])
+ return void e(
+ "Not a PNG file (invalid file signature)"
+ );
+ var r = !1;
+ if (
+ (w(A, function (t) {
+ return "acTL" != t || !(r = !0);
+ }),
+ r)
+ ) {
+ var a = [],
+ s = [],
+ u = null,
+ c = null,
+ f = new m();
+ if (
+ (w(A, function (t, e, n, r) {
+ switch (t) {
+ case "IHDR":
+ (u = e.subarray(n + 8, n + 8 + r)),
+ (f.width = y(e, n + 8)),
+ (f.height = y(e, n + 12));
+ break;
+ case "acTL":
+ f.numPlays = y(e, n + 8 + 4);
+ break;
+ case "fcTL":
+ c && f.frames.push(c),
+ ((c = {}).width = y(
+ e,
+ n + 8 + 4
+ )),
+ (c.height = y(e, n + 8 + 8)),
+ (c.left = y(e, n + 8 + 12)),
+ (c.top = y(e, n + 8 + 16));
+ var i = _(e, n + 8 + 20),
+ o = _(e, n + 8 + 22);
+ 0 == o && (o = 100),
+ (c.delay = (1e3 * i) / o),
+ c.delay <= 10 &&
+ (c.delay = 100),
+ (f.playTime += c.delay),
+ (c.disposeOp = b(
+ e,
+ n + 8 + 24
+ )),
+ (c.blendOp = b(e, n + 8 + 25)),
+ (c.dataParts = []);
+ break;
+ case "fdAT":
+ c &&
+ c.dataParts.push(
+ e.subarray(
+ n + 8 + 4,
+ n + 8 + r
+ )
+ );
+ break;
+ case "IDAT":
+ c &&
+ c.dataParts.push(
+ e.subarray(n + 8, n + 8 + r)
+ );
+ break;
+ case "IEND":
+ s.push(E(e, n, 12 + r));
+ break;
+ default:
+ a.push(E(e, n, 12 + r));
+ }
+ }),
+ c && f.frames.push(c),
+ 0 != f.frames.length)
+ )
+ for (
+ var i = 0,
+ o = new Blob(a),
+ h = new Blob(s),
+ l = 0;
+ l < f.frames.length;
+ l++
+ ) {
+ c = f.frames[l];
+ var d = [];
+ d.push(g),
+ u.set(P(c.width), 0),
+ u.set(P(c.height), 4),
+ d.push(x("IHDR", u)),
+ d.push(o);
+ for (var p = 0; p < c.dataParts.length; p++)
+ d.push(x("IDAT", c.dataParts[p]));
+ d.push(h);
+ var v = URL.createObjectURL(
+ new Blob(d, { type: "image/png" })
+ );
+ delete c.dataParts,
+ (d = null),
+ (c.img = document.createElement("img")),
+ (c.img.onload = function () {
+ URL.revokeObjectURL(this.src),
+ ++i == f.frames.length && t(f);
+ }),
+ (c.img.onerror = function () {
+ e("Image creation error");
+ }),
+ (c.img.src = v);
+ }
+ else e("Not an animated PNG");
+ } else e("Not an animated PNG");
+ });
+ };
+ var w = function (t, e) {
+ var n = 8;
+ do {
+ var r = y(t, n),
+ i = a(t, n + 4, 4),
+ o = e(i, t, n, r);
+ n += 12 + r;
+ } while (!1 !== o && "IEND" != i && n < t.length);
+ },
+ y = function (t, e) {
+ var n = 0;
+ n += (t[0 + e] << 24) >>> 0;
+ for (var r = 1; r < 4; r++)
+ n += t[r + e] << (8 * (3 - r));
+ return n;
+ },
+ _ = function (t, e) {
+ for (var n = 0, r = 0; r < 2; r++)
+ n += t[r + e] << (8 * (1 - r));
+ return n;
+ },
+ b = function (t, e) {
+ return t[e];
+ },
+ E = function (t, e, n) {
+ var r = new Uint8Array(n);
+ return r.set(t.subarray(e, e + n)), r;
+ },
+ a = function (t, e, n) {
+ var r = Array.prototype.slice.call(
+ t.subarray(e, e + n)
+ );
+ return String.fromCharCode.apply(String, r);
+ },
+ P = function (t) {
+ return [
+ (t >>> 24) & 255,
+ (t >>> 16) & 255,
+ (t >>> 8) & 255,
+ 255 & t,
+ ];
+ },
+ x = function (t, e) {
+ var n = t.length + e.length,
+ r = new Uint8Array(new ArrayBuffer(n + 8));
+ r.set(P(e.length), 0),
+ r.set(
+ (function (t) {
+ for (var e = [], n = 0; n < t.length; n++)
+ e.push(t.charCodeAt(n));
+ return e;
+ })(t),
+ 4
+ ),
+ r.set(e, 8);
+ var i = o(r, 4, n);
+ return r.set(P(i), n + 4), r;
+ };
+ },
+ { "./animation": 3, "./crc32": 4, "es6-promise": 1 },
+ ],
+ 8: [
+ function (o, a, t) {
+ (function (t) {
+ "use strict";
+ var e,
+ n,
+ r = r || o("es6-promise").Promise,
+ i =
+ ((e = function (e) {
+ var n = document.createElement("canvas"),
+ r = {
+ TypedArrays: "ArrayBuffer" in t,
+ BlobURLs: "URL" in t,
+ requestAnimationFrame:
+ "requestAnimationFrame" in t,
+ pageProtocol:
+ "http:" == location.protocol ||
+ "https:" == location.protocol,
+ canvas:
+ "getContext" in
+ document.createElement("canvas"),
+ APNG: !1,
+ };
+ if (r.canvas) {
+ var i = new Image();
+ (i.onload = function () {
+ var t = n.getContext("2d");
+ t.drawImage(i, 0, 0),
+ (r.APNG =
+ 0 ===
+ t.getImageData(0, 0, 1, 1)
+ .data[3]),
+ e(r);
+ }),
+ (i.src =
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==");
+ } else e(r);
+ }),
+ (n = null),
+ function (t) {
+ return (n = n || new r(e)), t && n.then(t), n;
+ });
+ a.exports = {
+ checkNativeFeatures: i,
+ ifNeeded: function (r) {
+ return (
+ void 0 === r && (r = !1),
+ i().then(function (t) {
+ if (t.APNG && !r) reject();
+ else {
+ var e = !0;
+ for (var n in t)
+ t.hasOwnProperty(n) &&
+ "APNG" != n &&
+ (e = e && t[n]);
+ }
+ })
+ );
+ },
+ };
+ }).call(
+ this,
+ "undefined" != typeof self
+ ? self
+ : "undefined" != typeof window
+ ? window
+ : {}
+ );
+ },
+ { "es6-promise": 1 },
+ ],
+ },
+ {},
+ [5]
+);
diff --git a/src/utils/dependencies.ts b/src/utils/dependencies.ts
index f1a5c26..f05900e 100644
--- a/src/utils/dependencies.ts
+++ b/src/utils/dependencies.ts
@@ -17,23 +17,15 @@
*/
import { makeLazy } from "./lazy";
+import { EXTENSION_BASE_URL } from "./web-metadata";
/*
Add dynamically loaded dependencies for plugins here.
*/
-// https://github.com/mattdesl/gifenc
-// this lib is way better than gif.js and all other libs, they're all so terrible but this one is nice
-// @ts-ignore ts mad
-export const getGifEncoder = makeLazy(() => import("https://unpkg.com/gifenc@1.0.3/dist/gifenc.esm.js"));
-
// needed to parse APNGs in the nitroBypass plugin
-export const importApngJs = makeLazy(async () => {
- const exports = {};
- const winProxy = new Proxy(window, { set: (_, k, v) => exports[k] = v });
- Function("self", await fetch("https://cdnjs.cloudflare.com/ajax/libs/apng-canvas/2.1.1/apng-canvas.min.js").then(r => r.text()))(winProxy);
- // @ts-ignore
- return exports.APNG as { parseURL(url: string): Promise<ApngFrameData>; };
+export const importApngJs = makeLazy(() => {
+ return require("./apng-canvas").APNG as { parseURL(url: string): Promise<ApngFrameData>; };
});
// https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk
@@ -75,13 +67,20 @@ export interface ApngFrameData {
playTime: number;
}
-const shikiWorkerDist = "https://unpkg.com/@vap/shiki-worker@0.0.8/dist";
-export const shikiWorkerSrc = `${shikiWorkerDist}/${IS_DEV ? "index.js" : "index.min.js"}`;
-export const shikiOnigasmSrc = "https://unpkg.com/@vap/shiki@0.10.3/dist/onig.wasm";
-
-export const rnnoiseDist = "https://unpkg.com/@sapphi-red/web-noise-suppressor@0.3.3/dist";
+// On web (extensions), use extension uri as basepath (load files from extension)
+// On desktop (electron), load from cdn
+export const rnnoiseDist = IS_EXTENSION
+ ? new URL("/third-party/rnnoise", EXTENSION_BASE_URL).toString()
+ : "https://unpkg.com/@sapphi-red/web-noise-suppressor@0.3.3/dist";
export const rnnoiseWasmSrc = (simd = false) => `${rnnoiseDist}/rnnoise${simd ? "_simd" : ""}.wasm`;
export const rnnoiseWorkletSrc = `${rnnoiseDist}/rnnoise/workletProcessor.js`;
-// @ts-expect-error SHUT UP
-export const getStegCloak = makeLazy(() => import("https://unpkg.com/stegcloak-dist@1.0.0/index.js"));
+
+// The below code is only used on the Desktop (electron) build of Vencord.
+// Browser (extension) builds do not contain these remote imports.
+
+export const shikiWorkerSrc = `https://unpkg.com/@vap/shiki-worker@0.0.8/dist/${IS_DEV ? "index.js" : "index.min.js"}`;
+export const shikiOnigasmSrc = "https://unpkg.com/@vap/shiki@0.10.3/dist/onig.wasm";
+
+// @ts-expect-error
+export const getStegCloak = /* #__PURE__*/ makeLazy(() => import("https://unpkg.com/stegcloak-dist@1.0.0/index.js"));
diff --git a/src/utils/web-metadata.ts b/src/utils/web-metadata.ts
new file mode 100644
index 0000000..26409a2
--- /dev/null
+++ b/src/utils/web-metadata.ts
@@ -0,0 +1,14 @@
+/*
+ * Vencord, a Discord client mod
+ * Copyright (c) 2023 Vendicated and contributors
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+export let EXTENSION_BASE_URL: string;
+export let EXTENSION_VERSION: string;
+
+if (IS_EXTENSION) {
+ const script = document.querySelector("#vencord-script") as HTMLScriptElement;
+ EXTENSION_BASE_URL = script.dataset.extensionBaseUrl!;
+ EXTENSION_VERSION = script.dataset.version!;
+}