summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2024-11-05 02:59:06 -0500
committerLLLL Colonq <llll@colonq>2024-11-05 02:59:06 -0500
commitc8e4f88739d52717de9e5faea4e752918e6457b3 (patch)
treecae66186cbb569026ddc90e4d6573e020435c08a
parente1a38bb1fa9bd08633c4e760997ee5571a962505 (diff)
Move frontend out of repo
-rw-r--r--fig-frontend-client/.gitignore5
-rw-r--r--fig-frontend-client/Makefile54
-rw-r--r--fig-frontend-client/assets/icon.pngbin983 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/iosevka-comfy-regular.ttfbin7811628 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/mrblue.pngbin771 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/mrgreen.pngbin714 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/0.wavbin26334 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/1.wavbin27102 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/2.wavbin27102 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/3.wavbin26334 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/4.wavbin24030 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/5.wavbin28642 -> 0 bytes
-rw-r--r--fig-frontend-client/assets/voice/6.wavbin27874 -> 0 bytes
-rw-r--r--fig-frontend-client/config-deploy.m44
-rw-r--r--fig-frontend-client/config-extension.js2
-rw-r--r--fig-frontend-client/config-test.m46
-rw-r--r--fig-frontend-client/extension/background.js23
-rw-r--r--fig-frontend-client/extension/main.css0
-rw-r--r--fig-frontend-client/extension/manifest.dhall30
-rw-r--r--fig-frontend-client/main.css115
-rw-r--r--fig-frontend-client/main.js3538
-rw-r--r--fig-frontend-client/src/Audio.js30
-rw-r--r--fig-frontend-client/src/Audio.purs10
-rw-r--r--fig-frontend-client/src/Auth.js45
-rw-r--r--fig-frontend-client/src/Auth.purs29
-rw-r--r--fig-frontend-client/src/Config.js4
-rw-r--r--fig-frontend-client/src/Config.purs6
-rw-r--r--fig-frontend-client/src/Main.purs156
-rw-r--r--fig-frontend-client/src/Model.js108
-rw-r--r--fig-frontend-client/src/Model.purs10
-rw-r--r--fig-frontend-client/src/UI.js2
-rw-r--r--fig-frontend-client/src/UI.purs13
-rw-r--r--fig-frontend-client/templates/index.html40
-rw-r--r--fig-frontend-client/templates/obs.html18
34 files changed, 0 insertions, 4248 deletions
diff --git a/fig-frontend-client/.gitignore b/fig-frontend-client/.gitignore
deleted file mode 100644
index 5562972..0000000
--- a/fig-frontend-client/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-dist/*
-main.js
-.psc-ide-port
-.psci_modules
-.purs-repl \ No newline at end of file
diff --git a/fig-frontend-client/Makefile b/fig-frontend-client/Makefile
deleted file mode 100644
index 88295f0..0000000
--- a/fig-frontend-client/Makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-.PHONY: all dist deploy extension clean
-
-TEMPLATES=$(shell ls templates)
-
-all: dist $(addprefix dist/test/,$(TEMPLATES)) dist/test/assets dist/test/main.js dist/test/main.css
-
-deploy: dist $(addprefix dist/deploy/,$(TEMPLATES)) dist/deploy/assets dist/deploy/main.js dist/deploy/main.css
- rsync -av dist/deploy/ "pub.colonq.computer:~/public_html/"
-
-dist:
- mkdir -p dist/test
- mkdir -p dist/deploy
-
-main.js: $(shell find src)
- purs-nix bundle
-
-dist/%/assets: $(shell find assets) dist
- rm -rf $@
- mkdir -p $@
- cp -r assets/* $@
-
-dist/%/main.js: main.js dist
- cp $< $@
-
-dist/extension/main.css: extension/main.css dist
- cp $< $@
-
-dist/%/main.css: main.css dist
- cp $< $@
-
-dist/%/index.html: config-%.m4 dist index-template.html
- sh -c "m4 $< >$@"
-
-
-define GEN_RULE
-dist/%/$(template): config-%.m4 templates/$(template)
- sh -c "m4 $$^ >$$@"
-endef
-$(foreach template,$(TEMPLATES), $(eval $(GEN_RULE)))
-
-extension: dist dist/extension/assets dist/extension/manifest.json dist/extension/background.js dist/extension/main.js dist/extension/main.css dist/extension/config.js
-
-dist/extension/manifest.json: extension/manifest.dhall
- dhall-to-json <$< >$@
-
-dist/extension/config.js: config-extension.js
- cp $< $@
-
-dist/extension/%: extension/%
- cp $< $@
-
-clean:
- rm main.js
- rm -r dist/
diff --git a/fig-frontend-client/assets/icon.png b/fig-frontend-client/assets/icon.png
deleted file mode 100644
index 0431e3f..0000000
--- a/fig-frontend-client/assets/icon.png
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/iosevka-comfy-regular.ttf b/fig-frontend-client/assets/iosevka-comfy-regular.ttf
deleted file mode 100644
index b474adc..0000000
--- a/fig-frontend-client/assets/iosevka-comfy-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/mrblue.png b/fig-frontend-client/assets/mrblue.png
deleted file mode 100644
index 8cf2a0b..0000000
--- a/fig-frontend-client/assets/mrblue.png
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/mrgreen.png b/fig-frontend-client/assets/mrgreen.png
deleted file mode 100644
index 1f1edca..0000000
--- a/fig-frontend-client/assets/mrgreen.png
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/0.wav b/fig-frontend-client/assets/voice/0.wav
deleted file mode 100644
index 3b4884d..0000000
--- a/fig-frontend-client/assets/voice/0.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/1.wav b/fig-frontend-client/assets/voice/1.wav
deleted file mode 100644
index 7701e71..0000000
--- a/fig-frontend-client/assets/voice/1.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/2.wav b/fig-frontend-client/assets/voice/2.wav
deleted file mode 100644
index 619c442..0000000
--- a/fig-frontend-client/assets/voice/2.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/3.wav b/fig-frontend-client/assets/voice/3.wav
deleted file mode 100644
index bccbcbf..0000000
--- a/fig-frontend-client/assets/voice/3.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/4.wav b/fig-frontend-client/assets/voice/4.wav
deleted file mode 100644
index 503c30c..0000000
--- a/fig-frontend-client/assets/voice/4.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/5.wav b/fig-frontend-client/assets/voice/5.wav
deleted file mode 100644
index a0288ec..0000000
--- a/fig-frontend-client/assets/voice/5.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/assets/voice/6.wav b/fig-frontend-client/assets/voice/6.wav
deleted file mode 100644
index 11aceee..0000000
--- a/fig-frontend-client/assets/voice/6.wav
+++ /dev/null
Binary files differ
diff --git a/fig-frontend-client/config-deploy.m4 b/fig-frontend-client/config-deploy.m4
deleted file mode 100644
index 97fc61f..0000000
--- a/fig-frontend-client/config-deploy.m4
+++ /dev/null
@@ -1,4 +0,0 @@
-define(`CONFIG_SUBST', `
-globalThis.mode = 0;
-globalThis.apiServer = "https://api.colonq.computer/api";
-')
diff --git a/fig-frontend-client/config-extension.js b/fig-frontend-client/config-extension.js
deleted file mode 100644
index 44b69d3..0000000
--- a/fig-frontend-client/config-extension.js
+++ /dev/null
@@ -1,2 +0,0 @@
-globalThis.mode = 1;
-globalThis.apiServer = "https://api.colonq.computer/api";
diff --git a/fig-frontend-client/config-test.m4 b/fig-frontend-client/config-test.m4
deleted file mode 100644
index 6d41963..0000000
--- a/fig-frontend-client/config-test.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-define(`CONFIG_SUBST', `
-globalThis.mode = 0;
-globalThis.apiServer = "http://localhost:8000/api";
-globalThis.clientID = "q486jugzn2my4iw6l181o006ugye4j"
-globalThis.authRedirectURL = "http://localhost:8000";
-')
diff --git a/fig-frontend-client/extension/background.js b/fig-frontend-client/extension/background.js
deleted file mode 100644
index a0f4c91..0000000
--- a/fig-frontend-client/extension/background.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Retrieve any previously set cookie and send to content script */
-
-function getActiveTab() {
- return browser.tabs.query({active: true, currentWindow: true});
-}
-
-function cookieUpdate() {
- getActiveTab().then((tabs) => {
- // get any previously set cookie for the current tab
- let gettingCookies = browser.cookies.get({
- url: tabs[0].url,
- name: "name"
- });
- gettingCookies.then((cookie) => {
- browser.tabs.sendMessage(tabs[0].id, cookie.value);
- });
- });
-}
-
-// update when the tab is updated
-browser.tabs.onUpdated.addListener(cookieUpdate);
-// update when the tab is activated
-browser.tabs.onActivated.addListener(cookieUpdate);
diff --git a/fig-frontend-client/extension/main.css b/fig-frontend-client/extension/main.css
deleted file mode 100644
index e69de29..0000000
--- a/fig-frontend-client/extension/main.css
+++ /dev/null
diff --git a/fig-frontend-client/extension/manifest.dhall b/fig-frontend-client/extension/manifest.dhall
deleted file mode 100644
index cf9e7a1..0000000
--- a/fig-frontend-client/extension/manifest.dhall
+++ /dev/null
@@ -1,30 +0,0 @@
-{ manifest_version = 2
-, name = "computerspotting"
-, version = "1.0"
-, description = "spot the computer"
-, icons =
- [ { mapKey = "48", mapValue = "assets/mrgreen.png" }
- ]
-, web_accessible_resources =
- [ "mrgreen.png"
- , "mrblue.png"
- ]
-, permissions =
- [ "webRequest"
- , "webRequestBlocking"
- , "tabs"
- , "cookies"
- , "*://*.twitch.tv/*"
- , "*://api.colonq.computer/*"
- ]
-, background =
- { scripts = ["background.js"]
- }
-, content_scripts =
- [ { matches = ["*://*.twitch.tv/*"]
- , js = ["config.js", "main.js"]
- , css = ["main.css"]
- , run_at = "document_end"
- }
- ]
-} \ No newline at end of file
diff --git a/fig-frontend-client/main.css b/fig-frontend-client/main.css
deleted file mode 100644
index 7714273..0000000
--- a/fig-frontend-client/main.css
+++ /dev/null
@@ -1,115 +0,0 @@
-@font-face {
- font-family: "Iosevka Comfy";
- src: url("assets/iosevka-comfy-regular.ttf") format("truetype");
-}
-
-html {
- font-family: "Iosevka Comfy";
- font-size: 16pt;
-}
-
-html, body {
- overflow: hidden;
- margin: 0 !important;
- padding: 0 !important;
- height: 100%;
- width: 100%;
-}
-
-body.lcolonq-index {
- font-family: "Iosevka Comfy";
- font-weight: bold;
- color: black;
- user-select: none;
- image-rendering: pixelated;
- background-color: #eeeeee;
- background-size: 40px 40px;
- background-image:
- linear-gradient(to right, grey 1px, transparent 1px),
- linear-gradient(to bottom, grey 1px, transparent 1px);
-}
-
-body.lcolonq-obs {
- background-color: rbga(0,0,0,0);
-}
-
-#lcolonq-title {
- position: absolute;
- top: 2rem;
- bottom: 0px;
- left: 0px;
- right: 0px;
- text-align: center;
- font-size: 20vw;
-}
-
-.lcolonq-letter {
- display: inline-block;
-}
-
-.lcolonq-letter:hover {
- color: #333333;
-}
-
-#lcolonq-subtitle {
- font-size: 5vw;
- margin-top: -5vw;
- margin-right: 12vw;
- text-align: right;
-}
-
-#lcolonq-header {
- background-color: #cccccf;
- position: absolute;
- left: 0px;
- right: 0px;
- top: 0px;
- height: 2rem;
- border-bottom: 0.2rem ridge;
-}
-
-#lcolonq-header a {
- color: black;
-}
-
-#lcolonq-header marquee {
- color: black;
- padding-top: 0.4rem;
-}
-
-#lcolonq-footer {
- background-color: #cccccf;
- position: absolute;
- left: 0px;
- right: 0px;
- bottom: 0px;
- height: 2rem;
- border-top: 0.2rem groove;
-}
-
-#lcolonq-footer a {
- display: inline-block;
- color: black;
- margin-top: 0.2rem;
- margin-left: 0.1rem;
- margin-right: 0.1rem;
- padding: 0.1rem;
- text-decoration: none;
- border: 0.1rem outset;
-}
-
-#lcolonq-footer a:active {
- border: 0.1rem inset;
-}
-
-#lcolonq-canvas {
- position: absolute;
- bottom: 2rem;
- left: 0px;
- width: 832px;
- height: 832px;
-}
-
-.right {
- float: right;
-}
diff --git a/fig-frontend-client/main.js b/fig-frontend-client/main.js
deleted file mode 100644
index abd21de..0000000
--- a/fig-frontend-client/main.js
+++ /dev/null
@@ -1,3538 +0,0 @@
-// output/Audio/foreign.js
-var initialized = false;
-var ctx = null;
-var voiceTracks = null;
-function initializeCtx() {
- if (!initialized) {
- try {
- initialized = true;
- ctx = new window.AudioContext();
- voiceTracks = [
- document.getElementById("lcolonq-audio-voice-0"),
- document.getElementById("lcolonq-audio-voice-1"),
- document.getElementById("lcolonq-audio-voice-2"),
- document.getElementById("lcolonq-audio-voice-3"),
- document.getElementById("lcolonq-audio-voice-4"),
- document.getElementById("lcolonq-audio-voice-5"),
- document.getElementById("lcolonq-audio-voice-6")
- ];
- } catch (e) {
- initialized = false;
- }
- }
-}
-var _playVoice = (b) => (i) => () => {
- if (b)
- initializeCtx();
- try {
- if (initialized)
- voiceTracks[i].play();
- } catch (e) {
- }
-};
-
-// output/Control.Semigroupoid/index.js
-var semigroupoidFn = {
- compose: function(f) {
- return function(g) {
- return function(x) {
- return f(g(x));
- };
- };
- }
-};
-
-// output/Control.Category/index.js
-var identity = function(dict) {
- return dict.identity;
-};
-var categoryFn = {
- identity: function(x) {
- return x;
- },
- Semigroupoid0: function() {
- return semigroupoidFn;
- }
-};
-
-// output/Effect/foreign.js
-var pureE = function(a) {
- return function() {
- return a;
- };
-};
-var bindE = function(a) {
- return function(f) {
- return function() {
- return f(a())();
- };
- };
-};
-
-// output/Data.Boolean/index.js
-var otherwise = true;
-
-// output/Data.Function/index.js
-var flip = function(f) {
- return function(b) {
- return function(a) {
- return f(a)(b);
- };
- };
-};
-var $$const = function(a) {
- return function(v) {
- return a;
- };
-};
-
-// output/Data.Functor/foreign.js
-var arrayMap = function(f) {
- return function(arr) {
- var l = arr.length;
- var result = new Array(l);
- for (var i = 0; i < l; i++) {
- result[i] = f(arr[i]);
- }
- return result;
- };
-};
-
-// output/Data.Unit/foreign.js
-var unit = void 0;
-
-// output/Type.Proxy/index.js
-var $$Proxy = /* @__PURE__ */ function() {
- function $$Proxy2() {
- }
- ;
- $$Proxy2.value = new $$Proxy2();
- return $$Proxy2;
-}();
-
-// output/Data.Functor/index.js
-var map = function(dict) {
- return dict.map;
-};
-var $$void = function(dictFunctor) {
- return map(dictFunctor)($$const(unit));
-};
-var voidRight = function(dictFunctor) {
- var map13 = map(dictFunctor);
- return function(x) {
- return map13($$const(x));
- };
-};
-var functorArray = {
- map: arrayMap
-};
-
-// output/Control.Apply/index.js
-var identity2 = /* @__PURE__ */ identity(categoryFn);
-var apply = function(dict) {
- return dict.apply;
-};
-var applySecond = function(dictApply) {
- var apply1 = apply(dictApply);
- var map7 = map(dictApply.Functor0());
- return function(a) {
- return function(b) {
- return apply1(map7($$const(identity2))(a))(b);
- };
- };
-};
-
-// output/Control.Applicative/index.js
-var pure = function(dict) {
- return dict.pure;
-};
-var liftA1 = function(dictApplicative) {
- var apply2 = apply(dictApplicative.Apply0());
- var pure12 = pure(dictApplicative);
- return function(f) {
- return function(a) {
- return apply2(pure12(f))(a);
- };
- };
-};
-
-// output/Control.Bind/index.js
-var discard = function(dict) {
- return dict.discard;
-};
-var bind = function(dict) {
- return dict.bind;
-};
-var bindFlipped = function(dictBind) {
- return flip(bind(dictBind));
-};
-var discardUnit = {
- discard: function(dictBind) {
- return bind(dictBind);
- }
-};
-
-// output/Control.Monad/index.js
-var ap = function(dictMonad) {
- var bind5 = bind(dictMonad.Bind1());
- var pure4 = pure(dictMonad.Applicative0());
- return function(f) {
- return function(a) {
- return bind5(f)(function(f$prime) {
- return bind5(a)(function(a$prime) {
- return pure4(f$prime(a$prime));
- });
- });
- };
- };
-};
-
-// output/Data.Symbol/index.js
-var reflectSymbol = function(dict) {
- return dict.reflectSymbol;
-};
-
-// output/Record.Unsafe/foreign.js
-var unsafeGet = function(label4) {
- return function(rec) {
- return rec[label4];
- };
-};
-var unsafeSet = function(label4) {
- return function(value12) {
- return function(rec) {
- var copy = {};
- for (var key in rec) {
- if ({}.hasOwnProperty.call(rec, key)) {
- copy[key] = rec[key];
- }
- }
- copy[label4] = value12;
- return copy;
- };
- };
-};
-var unsafeDelete = function(label4) {
- return function(rec) {
- var copy = {};
- for (var key in rec) {
- if (key !== label4 && {}.hasOwnProperty.call(rec, key)) {
- copy[key] = rec[key];
- }
- }
- return copy;
- };
-};
-
-// output/Data.Eq/foreign.js
-var refEq = function(r1) {
- return function(r2) {
- return r1 === r2;
- };
-};
-var eqStringImpl = refEq;
-
-// output/Data.Eq/index.js
-var eqString = {
- eq: eqStringImpl
-};
-
-// output/Data.Ordering/index.js
-var LT = /* @__PURE__ */ function() {
- function LT2() {
- }
- ;
- LT2.value = new LT2();
- return LT2;
-}();
-var GT = /* @__PURE__ */ function() {
- function GT2() {
- }
- ;
- GT2.value = new GT2();
- return GT2;
-}();
-var EQ = /* @__PURE__ */ function() {
- function EQ2() {
- }
- ;
- EQ2.value = new EQ2();
- return EQ2;
-}();
-
-// output/Data.Semigroup/foreign.js
-var concatString = function(s1) {
- return function(s2) {
- return s1 + s2;
- };
-};
-var concatArray = function(xs) {
- return function(ys) {
- if (xs.length === 0)
- return ys;
- if (ys.length === 0)
- return xs;
- return xs.concat(ys);
- };
-};
-
-// output/Data.Semigroup/index.js
-var semigroupString = {
- append: concatString
-};
-var semigroupArray = {
- append: concatArray
-};
-var append = function(dict) {
- return dict.append;
-};
-
-// output/Data.Monoid/index.js
-var monoidString = {
- mempty: "",
- Semigroup0: function() {
- return semigroupString;
- }
-};
-var monoidArray = {
- mempty: [],
- Semigroup0: function() {
- return semigroupArray;
- }
-};
-var mempty = function(dict) {
- return dict.mempty;
-};
-
-// output/Effect/index.js
-var $runtime_lazy = function(name15, moduleName, init2) {
- var state3 = 0;
- var val;
- return function(lineNumber) {
- if (state3 === 2)
- return val;
- if (state3 === 1)
- throw new ReferenceError(name15 + " was needed before it finished initializing (module " + moduleName + ", line " + lineNumber + ")", moduleName, lineNumber);
- state3 = 1;
- val = init2();
- state3 = 2;
- return val;
- };
-};
-var monadEffect = {
- Applicative0: function() {
- return applicativeEffect;
- },
- Bind1: function() {
- return bindEffect;
- }
-};
-var bindEffect = {
- bind: bindE,
- Apply0: function() {
- return $lazy_applyEffect(0);
- }
-};
-var applicativeEffect = {
- pure: pureE,
- Apply0: function() {
- return $lazy_applyEffect(0);
- }
-};
-var $lazy_functorEffect = /* @__PURE__ */ $runtime_lazy("functorEffect", "Effect", function() {
- return {
- map: liftA1(applicativeEffect)
- };
-});
-var $lazy_applyEffect = /* @__PURE__ */ $runtime_lazy("applyEffect", "Effect", function() {
- return {
- apply: ap(monadEffect),
- Functor0: function() {
- return $lazy_functorEffect(0);
- }
- };
-});
-var functorEffect = /* @__PURE__ */ $lazy_functorEffect(20);
-
-// output/Effect.Class/index.js
-var monadEffectEffect = {
- liftEffect: /* @__PURE__ */ identity(categoryFn),
- Monad0: function() {
- return monadEffect;
- }
-};
-var liftEffect = function(dict) {
- return dict.liftEffect;
-};
-
-// output/Audio/index.js
-var playVoice = function(dictMonadEffect) {
- var liftEffect6 = liftEffect(dictMonadEffect);
- return function(b) {
- return function(i) {
- return liftEffect6(_playVoice(b)(i));
- };
- };
-};
-
-// output/Auth/foreign.js
-function generateNonce() {
- var arr = new Uint8Array(20);
- window.crypto.getRandomValues(arr);
- return Array.from(arr, (b) => b.toString(16).padStart(2, "0")).join("");
-}
-var _startTwitchAuth = (clientID2) => (redirectURL) => () => {
- const nonce = generateNonce();
- document.cookie = `authnonce=${nonce}; path=/; max-age=3000`;
- window.location.href = `https://id.twitch.tv/oauth2/authorize?response_type=id_token&client_id=${clientID2}&redirect_uri=${redirectURL}&scope=openid&nonce=${nonce}&claims=${JSON.stringify({ id_token: { preferred_username: null } })}`;
-};
-function getFragmentQuery() {
- let query2 = /* @__PURE__ */ new Map();
- const hashQuery = document.location.hash.slice(1).split("&");
- for (let equals of hashQuery) {
- const pair = equals.split("=");
- query2.set(decodeURIComponent(pair[0]), decodeURIComponent(pair[1]));
- }
- return query2;
-}
-var _getToken = (Just2) => (Nothing2) => (pair) => () => {
- const frag = getFragmentQuery();
- const token = frag.get("id_token");
- if (token) {
- document.cookie = `id_token=${token}; path=/; SameSite=Strict`;
- }
- let id_token = null;
- let authnonce = null;
- for (let c of document.cookie.split("; ")) {
- const [k, v] = c.split("=");
- if (k === "id_token")
- id_token = v;
- else if (k === "authnonce")
- authnonce = v;
- }
- if (id_token && authnonce)
- return Just2(pair(id_token)(authnonce));
- return Nothing2;
-};
-
-// output/Config/foreign.js
-var mode = globalThis.mode;
-var apiServer = globalThis.apiServer;
-var clientID = globalThis.clientID;
-var authRedirectURL = globalThis.authRedirectURL;
-
-// output/Data.Array/foreign.js
-var rangeImpl = function(start2, end) {
- var step2 = start2 > end ? -1 : 1;
- var result = new Array(step2 * (end - start2) + 1);
- var i = start2, n = 0;
- while (i !== end) {
- result[n++] = i;
- i += step2;
- }
- result[n] = i;
- return result;
-};
-var replicateFill = function(count, value12) {
- if (count < 1) {
- return [];
- }
- var result = new Array(count);
- return result.fill(value12);
-};
-var replicatePolyfill = function(count, value12) {
- var result = [];
- var n = 0;
- for (var i = 0; i < count; i++) {
- result[n++] = value12;
- }
- return result;
-};
-var replicateImpl = typeof Array.prototype.fill === "function" ? replicateFill : replicatePolyfill;
-var indexImpl = function(just, nothing, xs, i) {
- return i < 0 || i >= xs.length ? nothing : just(xs[i]);
-};
-
-// output/Control.Alt/index.js
-var alt = function(dict) {
- return dict.alt;
-};
-
-// output/Data.Bounded/foreign.js
-var topChar = String.fromCharCode(65535);
-var bottomChar = String.fromCharCode(0);
-var topNumber = Number.POSITIVE_INFINITY;
-var bottomNumber = Number.NEGATIVE_INFINITY;
-
-// output/Data.Ord/foreign.js
-var unsafeCompareImpl = function(lt) {
- return function(eq2) {
- return function(gt) {
- return function(x) {
- return function(y) {
- return x < y ? lt : x === y ? eq2 : gt;
- };
- };
- };
- };
-};
-var ordStringImpl = unsafeCompareImpl;
-
-// output/Data.Ord/index.js
-var ordString = /* @__PURE__ */ function() {
- return {
- compare: ordStringImpl(LT.value)(EQ.value)(GT.value),
- Eq0: function() {
- return eqString;
- }
- };
-}();
-var compare = function(dict) {
- return dict.compare;
-};
-
-// output/Data.Show/foreign.js
-var showIntImpl = function(n) {
- return n.toString();
-};
-
-// output/Data.Show/index.js
-var showInt = {
- show: showIntImpl
-};
-var show = function(dict) {
- return dict.show;
-};
-
-// output/Data.Maybe/index.js
-var identity3 = /* @__PURE__ */ identity(categoryFn);
-var Nothing = /* @__PURE__ */ function() {
- function Nothing2() {
- }
- ;
- Nothing2.value = new Nothing2();
- return Nothing2;
-}();
-var Just = /* @__PURE__ */ function() {
- function Just2(value0) {
- this.value0 = value0;
- }
- ;
- Just2.create = function(value0) {
- return new Just2(value0);
- };
- return Just2;
-}();
-var maybe$prime = function(v) {
- return function(v1) {
- return function(v2) {
- if (v2 instanceof Nothing) {
- return v(unit);
- }
- ;
- if (v2 instanceof Just) {
- return v1(v2.value0);
- }
- ;
- throw new Error("Failed pattern match at Data.Maybe (line 250, column 1 - line 250, column 62): " + [v.constructor.name, v1.constructor.name, v2.constructor.name]);
- };
- };
-};
-var functorMaybe = {
- map: function(v) {
- return function(v1) {
- if (v1 instanceof Just) {
- return new Just(v(v1.value0));
- }
- ;
- return Nothing.value;
- };
- }
-};
-var fromMaybe$prime = function(a) {
- return maybe$prime(a)(identity3);
-};
-var altMaybe = {
- alt: function(v) {
- return function(v1) {
- if (v instanceof Nothing) {
- return v1;
- }
- ;
- return v;
- };
- },
- Functor0: function() {
- return functorMaybe;
- }
-};
-
-// output/Data.Either/index.js
-var Left = /* @__PURE__ */ function() {
- function Left2(value0) {
- this.value0 = value0;
- }
- ;
- Left2.create = function(value0) {
- return new Left2(value0);
- };
- return Left2;
-}();
-var Right = /* @__PURE__ */ function() {
- function Right2(value0) {
- this.value0 = value0;
- }
- ;
- Right2.create = function(value0) {
- return new Right2(value0);
- };
- return Right2;
-}();
-var functorEither = {
- map: function(f) {
- return function(m) {
- if (m instanceof Left) {
- return new Left(m.value0);
- }
- ;
- if (m instanceof Right) {
- return new Right(f(m.value0));
- }
- ;
- throw new Error("Failed pattern match at Data.Either (line 0, column 0 - line 0, column 0): " + [m.constructor.name]);
- };
- }
-};
-var either = function(v) {
- return function(v1) {
- return function(v2) {
- if (v2 instanceof Left) {
- return v(v2.value0);
- }
- ;
- if (v2 instanceof Right) {
- return v1(v2.value0);
- }
- ;
- throw new Error("Failed pattern match at Data.Either (line 208, column 1 - line 208, column 64): " + [v.constructor.name, v1.constructor.name, v2.constructor.name]);
- };
- };
-};
-var hush = /* @__PURE__ */ function() {
- return either($$const(Nothing.value))(Just.create);
-}();
-
-// output/Data.Identity/index.js
-var Identity = function(x) {
- return x;
-};
-var functorIdentity = {
- map: function(f) {
- return function(m) {
- return f(m);
- };
- }
-};
-var applyIdentity = {
- apply: function(v) {
- return function(v1) {
- return v(v1);
- };
- },
- Functor0: function() {
- return functorIdentity;
- }
-};
-var bindIdentity = {
- bind: function(v) {
- return function(f) {
- return f(v);
- };
- },
- Apply0: function() {
- return applyIdentity;
- }
-};
-var applicativeIdentity = {
- pure: Identity,
- Apply0: function() {
- return applyIdentity;
- }
-};
-var monadIdentity = {
- Applicative0: function() {
- return applicativeIdentity;
- },
- Bind1: function() {
- return bindIdentity;
- }
-};
-
-// output/Data.Foldable/foreign.js
-var foldrArray = function(f) {
- return function(init2) {
- return function(xs) {
- var acc = init2;
- var len = xs.length;
- for (var i = len - 1; i >= 0; i--) {
- acc = f(xs[i])(acc);
- }
- return acc;
- };
- };
-};
-var foldlArray = function(f) {
- return function(init2) {
- return function(xs) {
- var acc = init2;
- var len = xs.length;
- for (var i = 0; i < len; i++) {
- acc = f(acc)(xs[i]);
- }
- return acc;
- };
- };
-};
-
-// output/Control.Plus/index.js
-var empty = function(dict) {
- return dict.empty;
-};
-
-// output/Data.Tuple/index.js
-var Tuple = /* @__PURE__ */ function() {
- function Tuple2(value0, value1) {
- this.value0 = value0;
- this.value1 = value1;
- }
- ;
- Tuple2.create = function(value0) {
- return function(value1) {
- return new Tuple2(value0, value1);
- };
- };
- return Tuple2;
-}();
-
-// output/Data.Bifunctor/index.js
-var identity4 = /* @__PURE__ */ identity(categoryFn);
-var bimap = function(dict) {
- return dict.bimap;
-};
-var lmap = function(dictBifunctor) {
- var bimap1 = bimap(dictBifunctor);
- return function(f) {
- return bimap1(f)(identity4);
- };
-};
-var bifunctorTuple = {
- bimap: function(f) {
- return function(g) {
- return function(v) {
- return new Tuple(f(v.value0), g(v.value1));
- };
- };
- }
-};
-
-// output/Unsafe.Coerce/foreign.js
-var unsafeCoerce2 = function(x) {
- return x;
-};
-
-// output/Safe.Coerce/index.js
-var coerce = function() {
- return unsafeCoerce2;
-};
-
-// output/Data.Newtype/index.js
-var coerce2 = /* @__PURE__ */ coerce();
-var unwrap = function() {
- return coerce2;
-};
-
-// output/Data.Foldable/index.js
-var identity5 = /* @__PURE__ */ identity(categoryFn);
-var foldr = function(dict) {
- return dict.foldr;
-};
-var traverse_ = function(dictApplicative) {
- var applySecond2 = applySecond(dictApplicative.Apply0());
- var pure4 = pure(dictApplicative);
- return function(dictFoldable) {
- var foldr22 = foldr(dictFoldable);
- return function(f) {
- return foldr22(function($454) {
- return applySecond2(f($454));
- })(pure4(unit));
- };
- };
-};
-var for_ = function(dictApplicative) {
- var traverse_1 = traverse_(dictApplicative);
- return function(dictFoldable) {
- return flip(traverse_1(dictFoldable));
- };
-};
-var foldl = function(dict) {
- return dict.foldl;
-};
-var foldMapDefaultR = function(dictFoldable) {
- var foldr22 = foldr(dictFoldable);
- return function(dictMonoid) {
- var append2 = append(dictMonoid.Semigroup0());
- var mempty3 = mempty(dictMonoid);
- return function(f) {
- return foldr22(function(x) {
- return function(acc) {
- return append2(f(x))(acc);
- };
- })(mempty3);
- };
- };
-};
-var foldableArray = {
- foldr: foldrArray,
- foldl: foldlArray,
- foldMap: function(dictMonoid) {
- return foldMapDefaultR(foldableArray)(dictMonoid);
- }
-};
-var foldMap = function(dict) {
- return dict.foldMap;
-};
-var fold = function(dictFoldable) {
- var foldMap2 = foldMap(dictFoldable);
- return function(dictMonoid) {
- return foldMap2(dictMonoid)(identity5);
- };
-};
-
-// output/Data.Function.Uncurried/foreign.js
-var runFn2 = function(fn) {
- return function(a) {
- return function(b) {
- return fn(a, b);
- };
- };
-};
-var runFn3 = function(fn) {
- return function(a) {
- return function(b) {
- return function(c) {
- return fn(a, b, c);
- };
- };
- };
-};
-var runFn4 = function(fn) {
- return function(a) {
- return function(b) {
- return function(c) {
- return function(d) {
- return fn(a, b, c, d);
- };
- };
- };
- };
-};
-
-// output/Data.Array/index.js
-var fold1 = /* @__PURE__ */ fold(foldableArray);
-var range2 = /* @__PURE__ */ runFn2(rangeImpl);
-var index = /* @__PURE__ */ function() {
- return runFn4(indexImpl)(Just.create)(Nothing.value);
-}();
-var head = function(xs) {
- return index(xs)(0);
-};
-var fold2 = function(dictMonoid) {
- return fold1(dictMonoid);
-};
-
-// output/Auth/index.js
-var fold3 = /* @__PURE__ */ fold2(monoidString);
-var startTwitchAuth = function(dictMonadEffect) {
- return liftEffect(dictMonadEffect)(_startTwitchAuth(clientID)(authRedirectURL));
-};
-var getToken = function(dictMonadEffect) {
- return liftEffect(dictMonadEffect)(_getToken(Just.create)(Nothing.value)(Tuple.create));
-};
-var authHeader = function(v) {
- return fold3(['FIG-TWITCH token="', v.value0, '", nonce="', v.value1, '"']);
-};
-
-// output/Effect.Aff/foreign.js
-var Aff = function() {
- var EMPTY = {};
- var PURE = "Pure";
- var THROW = "Throw";
- var CATCH = "Catch";
- var SYNC = "Sync";
- var ASYNC = "Async";
- var BIND = "Bind";
- var BRACKET = "Bracket";
- var FORK = "Fork";
- var SEQ = "Sequential";
- var MAP = "Map";
- var APPLY = "Apply";
- var ALT = "Alt";
- var CONS = "Cons";
- var RESUME = "Resume";
- var RELEASE = "Release";
- var FINALIZER = "Finalizer";
- var FINALIZED = "Finalized";
- var FORKED = "Forked";
- var FIBER = "Fiber";
- var THUNK = "Thunk";
- function Aff2(tag, _1, _2, _3) {
- this.tag = tag;
- this._1 = _1;
- this._2 = _2;
- this._3 = _3;
- }
- function AffCtr(tag) {
- var fn = function(_1, _2, _3) {
- return new Aff2(tag, _1, _2, _3);
- };
- fn.tag = tag;
- return fn;
- }
- function nonCanceler2(error3) {
- return new Aff2(PURE, void 0);
- }
- function runEff(eff) {
- try {
- eff();
- } catch (error3) {
- setTimeout(function() {
- throw error3;
- }, 0);
- }
- }
- function runSync(left, right, eff) {
- try {
- return right(eff());
- } catch (error3) {
- return left(error3);
- }
- }
- function runAsync(left, eff, k) {
- try {
- return eff(k)();
- } catch (error3) {
- k(left(error3))();
- return nonCanceler2;
- }
- }
- var Scheduler = function() {
- var limit = 1024;
- var size3 = 0;
- var ix = 0;
- var queue = new Array(limit);
- var draining = false;
- function drain() {
- var thunk;
- draining = true;
- while (size3 !== 0) {
- size3--;
- thunk = queue[ix];
- queue[ix] = void 0;
- ix = (ix + 1) % limit;
- thunk();
- }
- draining = false;
- }
- return {
- isDraining: function() {
- return draining;
- },
- enqueue: function(cb) {
- var i, tmp;
- if (size3 === limit) {
- tmp = draining;
- drain();
- draining = tmp;
- }
- queue[(ix + size3) % limit] = cb;
- size3++;
- if (!draining) {
- drain();
- }
- }
- };
- }();
- function Supervisor(util) {
- var fibers = {};
- var fiberId = 0;
- var count = 0;
- return {
- register: function(fiber) {
- var fid = fiberId++;
- fiber.onComplete({
- rethrow: true,
- handler: function(result) {
- return function() {
- count--;
- delete fibers[fid];
- };
- }
- })();
- fibers[fid] = fiber;
- count++;
- },
- isEmpty: function() {
- return count === 0;
- },
- killAll: function(killError, cb) {
- return function() {
- if (count === 0) {
- return cb();
- }
- var killCount = 0;
- var kills = {};
- function kill(fid) {
- kills[fid] = fibers[fid].kill(killError, function(result) {
- return function() {
- delete kills[fid];
- killCount--;
- if (util.isLeft(result) && util.fromLeft(result)) {
- setTimeout(function() {
- throw util.fromLeft(result);
- }, 0);
- }
- if (killCount === 0) {
- cb();
- }
- };
- })();
- }
- for (var k in fibers) {
- if (fibers.hasOwnProperty(k)) {
- killCount++;
- kill(k);
- }
- }
- fibers = {};
- fiberId = 0;
- count = 0;
- return function(error3) {
- return new Aff2(SYNC, function() {
- for (var k2 in kills) {
- if (kills.hasOwnProperty(k2)) {
- kills[k2]();
- }
- }
- });
- };
- };
- }
- };
- }
- var SUSPENDED = 0;
- var CONTINUE = 1;
- var STEP_BIND = 2;
- var STEP_RESULT = 3;
- var PENDING = 4;
- var RETURN = 5;
- var COMPLETED = 6;
- function Fiber(util, supervisor, aff) {
- var runTick = 0;
- var status2 = SUSPENDED;
- var step2 = aff;
- var fail2 = null;
- var interrupt = null;
- var bhead = null;
- var btail = null;
- var attempts = null;
- var bracketCount = 0;
- var joinId = 0;
- var joins = null;
- var rethrow = true;
- function run3(localRunTick) {
- var tmp, result, attempt;
- while (true) {
- tmp = null;
- result = null;
- attempt = null;
- switch (status2) {
- case STEP_BIND:
- status2 = CONTINUE;
- try {
- step2 = bhead(step2);
- if (btail === null) {
- bhead = null;
- } else {
- bhead = btail._1;
- btail = btail._2;
- }
- } catch (e) {
- status2 = RETURN;
- fail2 = util.left(e);
- step2 = null;
- }
- break;
- case STEP_RESULT:
- if (util.isLeft(step2)) {
- status2 = RETURN;
- fail2 = step2;
- step2 = null;
- } else if (bhead === null) {
- status2 = RETURN;
- } else {
- status2 = STEP_BIND;
- step2 = util.fromRight(step2);
- }
- break;
- case CONTINUE:
- switch (step2.tag) {
- case BIND:
- if (bhead) {
- btail = new Aff2(CONS, bhead, btail);
- }
- bhead = step2._2;
- status2 = CONTINUE;
- step2 = step2._1;
- break;
- case PURE:
- if (bhead === null) {
- status2 = RETURN;
- step2 = util.right(step2._1);
- } else {
- status2 = STEP_BIND;
- step2 = step2._1;
- }
- break;
- case SYNC:
- status2 = STEP_RESULT;
- step2 = runSync(util.left, util.right, step2._1);
- break;
- case ASYNC:
- status2 = PENDING;
- step2 = runAsync(util.left, step2._1, function(result2) {
- return function() {
- if (runTick !== localRunTick) {
- return;
- }
- runTick++;
- Scheduler.enqueue(function() {
- if (runTick !== localRunTick + 1) {
- return;
- }
- status2 = STEP_RESULT;
- step2 = result2;
- run3(runTick);
- });
- };
- });
- return;
- case THROW:
- status2 = RETURN;
- fail2 = util.left(step2._1);
- step2 = null;
- break;
- case CATCH:
- if (bhead === null) {
- attempts = new Aff2(CONS, step2, attempts, interrupt);
- } else {
- attempts = new Aff2(CONS, step2, new Aff2(CONS, new Aff2(RESUME, bhead, btail), attempts, interrupt), interrupt);
- }
- bhead = null;
- btail = null;
- status2 = CONTINUE;
- step2 = step2._1;
- break;
- case BRACKET:
- bracketCount++;
- if (bhead === null) {
- attempts = new Aff2(CONS, step2, attempts, interrupt);
- } else {
- attempts = new Aff2(CONS, step2, new Aff2(CONS, new Aff2(RESUME, bhead, btail), attempts, interrupt), interrupt);
- }
- bhead = null;
- btail = null;
- status2 = CONTINUE;
- step2 = step2._1;
- break;
- case FORK:
- status2 = STEP_RESULT;
- tmp = Fiber(util, supervisor, step2._2);
- if (supervisor) {
- supervisor.register(tmp);
- }
- if (step2._1) {
- tmp.run();
- }
- step2 = util.right(tmp);
- break;
- case SEQ:
- status2 = CONTINUE;
- step2 = sequential2(util, supervisor, step2._1);
- break;
- }
- break;
- case RETURN:
- bhead = null;
- btail = null;
- if (attempts === null) {
- status2 = COMPLETED;
- step2 = interrupt || fail2 || step2;
- } else {
- tmp = attempts._3;
- attempt = attempts._1;
- attempts = attempts._2;
- switch (attempt.tag) {
- case CATCH:
- if (interrupt && interrupt !== tmp && bracketCount === 0) {
- status2 = RETURN;
- } else if (fail2) {
- status2 = CONTINUE;
- step2 = attempt._2(util.fromLeft(fail2));
- fail2 = null;
- }
- break;
- case RESUME:
- if (interrupt && interrupt !== tmp && bracketCount === 0 || fail2) {
- status2 = RETURN;
- } else {
- bhead = attempt._1;
- btail = attempt._2;
- status2 = STEP_BIND;
- step2 = util.fromRight(step2);
- }
- break;
- case BRACKET:
- bracketCount--;
- if (fail2 === null) {
- result = util.fromRight(step2);
- attempts = new Aff2(CONS, new Aff2(RELEASE, attempt._2, result), attempts, tmp);
- if (interrupt === tmp || bracketCount > 0) {
- status2 = CONTINUE;
- step2 = attempt._3(result);
- }
- }
- break;
- case RELEASE:
- attempts = new Aff2(CONS, new Aff2(FINALIZED, step2, fail2), attempts, interrupt);
- status2 = CONTINUE;
- if (interrupt && interrupt !== tmp && bracketCount === 0) {
- step2 = attempt._1.killed(util.fromLeft(interrupt))(attempt._2);
- } else if (fail2) {
- step2 = attempt._1.failed(util.fromLeft(fail2))(attempt._2);
- } else {
- step2 = attempt._1.completed(util.fromRight(step2))(attempt._2);
- }
- fail2 = null;
- bracketCount++;
- break;
- case FINALIZER:
- bracketCount++;
- attempts = new Aff2(CONS, new Aff2(FINALIZED, step2, fail2), attempts, interrupt);
- status2 = CONTINUE;
- step2 = attempt._1;
- break;
- case FINALIZED:
- bracketCount--;
- status2 = RETURN;
- step2 = attempt._1;
- fail2 = attempt._2;
- break;
- }
- }
- break;
- case COMPLETED:
- for (var k in joins) {
- if (joins.hasOwnProperty(k)) {
- rethrow = rethrow && joins[k].rethrow;
- runEff(joins[k].handler(step2));
- }
- }
- joins = null;
- if (interrupt && fail2) {
- setTimeout(function() {
- throw util.fromLeft(fail2);
- }, 0);
- } else if (util.isLeft(step2) && rethrow) {
- setTimeout(function() {
- if (rethrow) {
- throw util.fromLeft(step2);
- }
- }, 0);
- }
- return;
- case SUSPENDED:
- status2 = CONTINUE;
- break;
- case PENDING:
- return;
- }
- }
- }
- function onComplete(join3) {
- return function() {
- if (status2 === COMPLETED) {
- rethrow = rethrow && join3.rethrow;
- join3.handler(step2)();
- return function() {
- };
- }
- var jid = joinId++;
- joins = joins || {};
- joins[jid] = join3;
- return function() {
- if (joins !== null) {
- delete joins[jid];
- }
- };
- };
- }
- function kill(error3, cb) {
- return function() {
- if (status2 === COMPLETED) {
- cb(util.right(void 0))();
- return function() {
- };
- }
- var canceler = onComplete({
- rethrow: false,
- handler: function() {
- return cb(util.right(void 0));
- }
- })();
- switch (status2) {
- case SUSPENDED:
- interrupt = util.left(error3);
- status2 = COMPLETED;
- step2 = interrupt;
- run3(runTick);
- break;
- case PENDING:
- if (interrupt === null) {
- interrupt = util.left(error3);
- }
- if (bracketCount === 0) {
- if (status2 === PENDING) {
- attempts = new Aff2(CONS, new Aff2(FINALIZER, step2(error3)), attempts, interrupt);
- }
- status2 = RETURN;
- step2 = null;
- fail2 = null;
- run3(++runTick);
- }
- break;
- default:
- if (interrupt === null) {
- interrupt = util.left(error3);
- }
- if (bracketCount === 0) {
- status2 = RETURN;
- step2 = null;
- fail2 = null;
- }
- }
- return canceler;
- };
- }
- function join2(cb) {
- return function() {
- var canceler = onComplete({
- rethrow: false,
- handler: cb
- })();
- if (status2 === SUSPENDED) {
- run3(runTick);
- }
- return canceler;
- };
- }
- return {
- kill,
- join: join2,
- onComplete,
- isSuspended: function() {
- return status2 === SUSPENDED;
- },
- run: function() {
- if (status2 === SUSPENDED) {
- if (!Scheduler.isDraining()) {
- Scheduler.enqueue(function() {
- run3(runTick);
- });
- } else {
- run3(runTick);
- }
- }
- }
- };
- }
- function runPar(util, supervisor, par, cb) {
- var fiberId = 0;
- var fibers = {};
- var killId = 0;
- var kills = {};
- var early = new Error("[ParAff] Early exit");
- var interrupt = null;
- var root = EMPTY;
- function kill(error3, par2, cb2) {
- var step2 = par2;
- var head2 = null;
- var tail = null;
- var count = 0;
- var kills2 = {};
- var tmp, kid;
- loop:
- while (true) {
- tmp = null;
- switch (step2.tag) {
- case FORKED:
- if (step2._3 === EMPTY) {
- tmp = fibers[step2._1];
- kills2[count++] = tmp.kill(error3, function(result) {
- return function() {
- count--;
- if (count === 0) {
- cb2(result)();
- }
- };
- });
- }
- if (head2 === null) {
- break loop;
- }
- step2 = head2._2;
- if (tail === null) {
- head2 = null;
- } else {
- head2 = tail._1;
- tail = tail._2;
- }
- break;
- case MAP:
- step2 = step2._2;
- break;
- case APPLY:
- case ALT:
- if (head2) {
- tail = new Aff2(CONS, head2, tail);
- }
- head2 = step2;
- step2 = step2._1;
- break;
- }
- }
- if (count === 0) {
- cb2(util.right(void 0))();
- } else {
- kid = 0;
- tmp = count;
- for (; kid < tmp; kid++) {
- kills2[kid] = kills2[kid]();
- }
- }
- return kills2;
- }
- function join2(result, head2, tail) {
- var fail2, step2, lhs, rhs, tmp, kid;
- if (util.isLeft(result)) {
- fail2 = result;
- step2 = null;
- } else {
- step2 = result;
- fail2 = null;
- }
- loop:
- while (true) {
- lhs = null;
- rhs = null;
- tmp = null;
- kid = null;
- if (interrupt !== null) {
- return;
- }
- if (head2 === null) {
- cb(fail2 || step2)();
- return;
- }
- if (head2._3 !== EMPTY) {
- return;
- }
- switch (head2.tag) {
- case MAP:
- if (fail2 === null) {
- head2._3 = util.right(head2._1(util.fromRight(step2)));
- step2 = head2._3;
- } else {
- head2._3 = fail2;
- }
- break;
- case APPLY:
- lhs = head2._1._3;
- rhs = head2._2._3;
- if (fail2) {
- head2._3 = fail2;
- tmp = true;
- kid = killId++;
- kills[kid] = kill(early, fail2 === lhs ? head2._2 : head2._1, function() {
- return function() {
- delete kills[kid];
- if (tmp) {
- tmp = false;
- } else if (tail === null) {
- join2(fail2, null, null);
- } else {
- join2(fail2, tail._1, tail._2);
- }
- };
- });
- if (tmp) {
- tmp = false;
- return;
- }
- } else if (lhs === EMPTY || rhs === EMPTY) {
- return;
- } else {
- step2 = util.right(util.fromRight(lhs)(util.fromRight(rhs)));
- head2._3 = step2;
- }
- break;
- case ALT:
- lhs = head2._1._3;
- rhs = head2._2._3;
- if (lhs === EMPTY && util.isLeft(rhs) || rhs === EMPTY && util.isLeft(lhs)) {
- return;
- }
- if (lhs !== EMPTY && util.isLeft(lhs) && rhs !== EMPTY && util.isLeft(rhs)) {
- fail2 = step2 === lhs ? rhs : lhs;
- step2 = null;
- head2._3 = fail2;
- } else {
- head2._3 = step2;
- tmp = true;
- kid = killId++;
- kills[kid] = kill(early, step2 === lhs ? head2._2 : head2._1, function() {
- return function() {
- delete kills[kid];
- if (tmp) {
- tmp = false;
- } else if (tail === null) {
- join2(step2, null, null);
- } else {
- join2(step2, tail._1, tail._2);
- }
- };
- });
- if (tmp) {
- tmp = false;
- return;
- }
- }
- break;
- }
- if (tail === null) {
- head2 = null;
- } else {
- head2 = tail._1;
- tail = tail._2;
- }
- }
- }
- function resolve5(fiber) {
- return function(result) {
- return function() {
- delete fibers[fiber._1];
- fiber._3 = result;
- join2(result, fiber._2._1, fiber._2._2);
- };
- };
- }
- function run3() {
- var status2 = CONTINUE;
- var step2 = par;
- var head2 = null;
- var tail = null;
- var tmp, fid;
- loop:
- while (true) {
- tmp = null;
- fid = null;
- switch (status2) {
- case CONTINUE:
- switch (step2.tag) {
- case MAP:
- if (head2) {
- tail = new Aff2(CONS, head2, tail);
- }
- head2 = new Aff2(MAP, step2._1, EMPTY, EMPTY);
- step2 = step2._2;
- break;
- case APPLY:
- if (head2) {
- tail = new Aff2(CONS, head2, tail);
- }
- head2 = new Aff2(APPLY, EMPTY, step2._2, EMPTY);
- step2 = step2._1;
- break;
- case ALT:
- if (head2) {
- tail = new Aff2(CONS, head2, tail);
- }
- head2 = new Aff2(ALT, EMPTY, step2._2, EMPTY);
- step2 = step2._1;
- break;
- default:
- fid = fiberId++;
- status2 = RETURN;
- tmp = step2;
- step2 = new Aff2(FORKED, fid, new Aff2(CONS, head2, tail), EMPTY);
- tmp = Fiber(util, supervisor, tmp);
- tmp.onComplete({
- rethrow: false,
- handler: resolve5(step2)
- })();
- fibers[fid] = tmp;
- if (supervisor) {
- supervisor.register(tmp);
- }
- }
- break;
- case RETURN:
- if (head2 === null) {
- break loop;
- }
- if (head2._1 === EMPTY) {
- head2._1 = step2;
- status2 = CONTINUE;
- step2 = head2._2;
- head2._2 = EMPTY;
- } else {
- head2._2 = step2;
- step2 = head2;
- if (tail === null) {
- head2 = null;
- } else {
- head2 = tail._1;
- tail = tail._2;
- }
- }
- }
- }
- root = step2;
- for (fid = 0; fid < fiberId; fid++) {
- fibers[fid].run();
- }
- }
- function cancel(error3, cb2) {
- interrupt = util.left(error3);
- var innerKills;
- for (var kid in kills) {
- if (kills.hasOwnProperty(kid)) {
- innerKills = kills[kid];
- for (kid in innerKills) {
- if (innerKills.hasOwnProperty(kid)) {
- innerKills[kid]();
- }
- }
- }
- }
- kills = null;
- var newKills = kill(error3, root, cb2);
- return function(killError) {
- return new Aff2(ASYNC, function(killCb) {
- return function() {
- for (var kid2 in newKills) {
- if (newKills.hasOwnProperty(kid2)) {
- newKills[kid2]();
- }
- }
- return nonCanceler2;
- };
- });
- };
- }
- run3();
- return function(killError) {
- return new Aff2(ASYNC, function(killCb) {
- return function() {
- return cancel(killError, killCb);
- };
- });
- };
- }
- function sequential2(util, supervisor, par) {
- return new Aff2(ASYNC, function(cb) {
- return function() {
- return runPar(util, supervisor, par, cb);
- };
- });
- }
- Aff2.EMPTY = EMPTY;
- Aff2.Pure = AffCtr(PURE);
- Aff2.Throw = AffCtr(THROW);
- Aff2.Catch = AffCtr(CATCH);
- Aff2.Sync = AffCtr(SYNC);
- Aff2.Async = AffCtr(ASYNC);
- Aff2.Bind = AffCtr(BIND);
- Aff2.Bracket = AffCtr(BRACKET);
- Aff2.Fork = AffCtr(FORK);
- Aff2.Seq = AffCtr(SEQ);
- Aff2.ParMap = AffCtr(MAP);
- Aff2.ParApply = AffCtr(APPLY);
- Aff2.ParAlt = AffCtr(ALT);
- Aff2.Fiber = Fiber;
- Aff2.Supervisor = Supervisor;
- Aff2.Scheduler = Scheduler;
- Aff2.nonCanceler = nonCanceler2;
- return Aff2;
-}();
-var _pure = Aff.Pure;
-var _throwError = Aff.Throw;
-function _map(f) {
- return function(aff) {
- if (aff.tag === Aff.Pure.tag) {
- return Aff.Pure(f(aff._1));
- } else {
- return Aff.Bind(aff, function(value12) {
- return Aff.Pure(f(value12));
- });
- }
- };
-}
-function _bind(aff) {
- return function(k) {
- return Aff.Bind(aff, k);
- };
-}
-var _liftEffect = Aff.Sync;
-function _parAffMap(f) {
- return function(aff) {
- return Aff.ParMap(f, aff);
- };
-}
-function _parAffApply(aff1) {
- return function(aff2) {
- return Aff.ParApply(aff1, aff2);
- };
-}
-var makeAff = Aff.Async;
-function _makeFiber(util, aff) {
- return function() {
- return Aff.Fiber(util, null, aff);
- };
-}
-var _sequential = Aff.Seq;
-
-// output/Effect.Exception/foreign.js
-function error(msg) {
- return new Error(msg);
-}
-function throwException(e) {
- return function() {
- throw e;
- };
-}
-
-// output/Effect.Exception/index.js
-var $$throw = function($4) {
- return throwException(error($4));
-};
-
-// output/Control.Monad.Error.Class/index.js
-var throwError = function(dict) {
- return dict.throwError;
-};
-
-// output/Control.Monad.Except.Trans/index.js
-var map2 = /* @__PURE__ */ map(functorEither);
-var ExceptT = function(x) {
- return x;
-};
-var runExceptT = function(v) {
- return v;
-};
-var mapExceptT = function(f) {
- return function(v) {
- return f(v);
- };
-};
-var functorExceptT = function(dictFunctor) {
- var map13 = map(dictFunctor);
- return {
- map: function(f) {
- return mapExceptT(map13(map2(f)));
- }
- };
-};
-var monadExceptT = function(dictMonad) {
- return {
- Applicative0: function() {
- return applicativeExceptT(dictMonad);
- },
- Bind1: function() {
- return bindExceptT(dictMonad);
- }
- };
-};
-var bindExceptT = function(dictMonad) {
- var bind5 = bind(dictMonad.Bind1());
- var pure4 = pure(dictMonad.Applicative0());
- return {
- bind: function(v) {
- return function(k) {
- return bind5(v)(either(function($187) {
- return pure4(Left.create($187));
- })(function(a) {
- var v1 = k(a);
- return v1;
- }));
- };
- },
- Apply0: function() {
- return applyExceptT(dictMonad);
- }
- };
-};
-var applyExceptT = function(dictMonad) {
- var functorExceptT1 = functorExceptT(dictMonad.Bind1().Apply0().Functor0());
- return {
- apply: ap(monadExceptT(dictMonad)),
- Functor0: function() {
- return functorExceptT1;
- }
- };
-};
-var applicativeExceptT = function(dictMonad) {
- return {
- pure: function() {
- var $188 = pure(dictMonad.Applicative0());
- return function($189) {
- return ExceptT($188(Right.create($189)));
- };
- }(),
- Apply0: function() {
- return applyExceptT(dictMonad);
- }
- };
-};
-var monadThrowExceptT = function(dictMonad) {
- var monadExceptT1 = monadExceptT(dictMonad);
- return {
- throwError: function() {
- var $198 = pure(dictMonad.Applicative0());
- return function($199) {
- return ExceptT($198(Left.create($199)));
- };
- }(),
- Monad0: function() {
- return monadExceptT1;
- }
- };
-};
-
-// output/Control.Parallel.Class/index.js
-var sequential = function(dict) {
- return dict.sequential;
-};
-var parallel = function(dict) {
- return dict.parallel;
-};
-
-// output/Control.Parallel/index.js
-var identity6 = /* @__PURE__ */ identity(categoryFn);
-var parTraverse_ = function(dictParallel) {
- var sequential2 = sequential(dictParallel);
- var parallel3 = parallel(dictParallel);
- return function(dictApplicative) {
- var traverse_2 = traverse_(dictApplicative);
- return function(dictFoldable) {
- var traverse_1 = traverse_2(dictFoldable);
- return function(f) {
- var $51 = traverse_1(function($53) {
- return parallel3(f($53));
- });
- return function($52) {
- return sequential2($51($52));
- };
- };
- };
- };
-};
-var parSequence_ = function(dictParallel) {
- var parTraverse_1 = parTraverse_(dictParallel);
- return function(dictApplicative) {
- var parTraverse_2 = parTraverse_1(dictApplicative);
- return function(dictFoldable) {
- return parTraverse_2(dictFoldable)(identity6);
- };
- };
-};
-
-// output/Partial.Unsafe/foreign.js
-var _unsafePartial = function(f) {
- return f();
-};
-
-// output/Partial/foreign.js
-var _crashWith = function(msg) {
- throw new Error(msg);
-};
-
-// output/Partial/index.js
-var crashWith = function() {
- return _crashWith;
-};
-
-// output/Partial.Unsafe/index.js
-var crashWith2 = /* @__PURE__ */ crashWith();
-var unsafePartial = _unsafePartial;
-var unsafeCrashWith = function(msg) {
- return unsafePartial(function() {
- return crashWith2(msg);
- });
-};
-
-// output/Effect.Aff/index.js
-var $runtime_lazy2 = function(name15, moduleName, init2) {
- var state3 = 0;
- var val;
- return function(lineNumber) {
- if (state3 === 2)
- return val;
- if (state3 === 1)
- throw new ReferenceError(name15 + " was needed before it finished initializing (module " + moduleName + ", line " + lineNumber + ")", moduleName, lineNumber);
- state3 = 1;
- val = init2();
- state3 = 2;
- return val;
- };
-};
-var $$void2 = /* @__PURE__ */ $$void(functorEffect);
-var Canceler = function(x) {
- return x;
-};
-var functorParAff = {
- map: _parAffMap
-};
-var functorAff = {
- map: _map
-};
-var ffiUtil = /* @__PURE__ */ function() {
- var unsafeFromRight = function(v) {
- if (v instanceof Right) {
- return v.value0;
- }
- ;
- if (v instanceof Left) {
- return unsafeCrashWith("unsafeFromRight: Left");
- }
- ;
- throw new Error("Failed pattern match at Effect.Aff (line 412, column 21 - line 414, column 54): " + [v.constructor.name]);
- };
- var unsafeFromLeft = function(v) {
- if (v instanceof Left) {
- return v.value0;
- }
- ;
- if (v instanceof Right) {
- return unsafeCrashWith("unsafeFromLeft: Right");
- }
- ;
- throw new Error("Failed pattern match at Effect.Aff (line 407, column 20 - line 409, column 55): " + [v.constructor.name]);
- };
- var isLeft = function(v) {
- if (v instanceof Left) {
- return true;
- }
- ;
- if (v instanceof Right) {
- return false;
- }
- ;
- throw new Error("Failed pattern match at Effect.Aff (line 402, column 12 - line 404, column 21): " + [v.constructor.name]);
- };
- return {
- isLeft,
- fromLeft: unsafeFromLeft,
- fromRight: unsafeFromRight,
- left: Left.create,
- right: Right.create
- };
-}();
-var makeFiber = function(aff) {
- return _makeFiber(ffiUtil, aff);
-};
-var launchAff = function(aff) {
- return function __do() {
- var fiber = makeFiber(aff)();
- fiber.run();
- return fiber;
- };
-};
-var launchAff_ = function($75) {
- return $$void2(launchAff($75));
-};
-var applyParAff = {
- apply: _parAffApply,
- Functor0: function() {
- return functorParAff;
- }
-};
-var monadAff = {
- Applicative0: function() {
- return applicativeAff;
- },
- Bind1: function() {
- return bindAff;
- }
-};
-var bindAff = {
- bind: _bind,
- Apply0: function() {
- return $lazy_applyAff(0);
- }
-};
-var applicativeAff = {
- pure: _pure,
- Apply0: function() {
- return $lazy_applyAff(0);
- }
-};
-var $lazy_applyAff = /* @__PURE__ */ $runtime_lazy2("applyAff", "Effect.Aff", function() {
- return {
- apply: ap(monadAff),
- Functor0: function() {
- return functorAff;
- }
- };
-});
-var applyAff = /* @__PURE__ */ $lazy_applyAff(73);
-var pure2 = /* @__PURE__ */ pure(applicativeAff);
-var parallelAff = {
- parallel: unsafeCoerce2,
- sequential: _sequential,
- Apply0: function() {
- return applyAff;
- },
- Apply1: function() {
- return applyParAff;
- }
-};
-var parallel2 = /* @__PURE__ */ parallel(parallelAff);
-var applicativeParAff = {
- pure: function($76) {
- return parallel2(pure2($76));
- },
- Apply0: function() {
- return applyParAff;
- }
-};
-var parSequence_2 = /* @__PURE__ */ parSequence_(parallelAff)(applicativeParAff)(foldableArray);
-var semigroupCanceler = {
- append: function(v) {
- return function(v1) {
- return function(err) {
- return parSequence_2([v(err), v1(err)]);
- };
- };
- }
-};
-var monadEffectAff = {
- liftEffect: _liftEffect,
- Monad0: function() {
- return monadAff;
- }
-};
-var liftEffect2 = /* @__PURE__ */ liftEffect(monadEffectAff);
-var effectCanceler = function($77) {
- return Canceler($$const(liftEffect2($77)));
-};
-var nonCanceler = /* @__PURE__ */ $$const(/* @__PURE__ */ pure2(unit));
-var monoidCanceler = {
- mempty: nonCanceler,
- Semigroup0: function() {
- return semigroupCanceler;
- }
-};
-
-// output/Effect.Console/foreign.js
-var log = function(s) {
- return function() {
- console.log(s);
- };
-};
-
-// output/Data.String.Common/foreign.js
-var toLower = function(s) {
- return s.toLowerCase();
-};
-
-// output/Data.NonEmpty/index.js
-var NonEmpty = /* @__PURE__ */ function() {
- function NonEmpty2(value0, value1) {
- this.value0 = value0;
- this.value1 = value1;
- }
- ;
- NonEmpty2.create = function(value0) {
- return function(value1) {
- return new NonEmpty2(value0, value1);
- };
- };
- return NonEmpty2;
-}();
-var singleton2 = function(dictPlus) {
- var empty4 = empty(dictPlus);
- return function(a) {
- return new NonEmpty(a, empty4);
- };
-};
-
-// output/Data.List.Types/index.js
-var Nil = /* @__PURE__ */ function() {
- function Nil2() {
- }
- ;
- Nil2.value = new Nil2();
- return Nil2;
-}();
-var Cons = /* @__PURE__ */ function() {
- function Cons2(value0, value1) {
- this.value0 = value0;
- this.value1 = value1;
- }
- ;
- Cons2.create = function(value0) {
- return function(value1) {
- return new Cons2(value0, value1);
- };
- };
- return Cons2;
-}();
-var NonEmptyList = function(x) {
- return x;
-};
-var listMap = function(f) {
- var chunkedRevMap = function($copy_v) {
- return function($copy_v1) {
- var $tco_var_v = $copy_v;
- var $tco_done = false;
- var $tco_result;
- function $tco_loop(v, v1) {
- if (v1 instanceof Cons && (v1.value1 instanceof Cons && v1.value1.value1 instanceof Cons)) {
- $tco_var_v = new Cons(v1, v);
- $copy_v1 = v1.value1.value1.value1;
- return;
- }
- ;
- var unrolledMap = function(v2) {
- if (v2 instanceof Cons && (v2.value1 instanceof Cons && v2.value1.value1 instanceof Nil)) {
- return new Cons(f(v2.value0), new Cons(f(v2.value1.value0), Nil.value));
- }
- ;
- if (v2 instanceof Cons && v2.value1 instanceof Nil) {
- return new Cons(f(v2.value0), Nil.value);
- }
- ;
- return Nil.value;
- };
- var reverseUnrolledMap = function($copy_v2) {
- return function($copy_v3) {
- var $tco_var_v2 = $copy_v2;
- var $tco_done1 = false;
- var $tco_result2;
- function $tco_loop2(v2, v3) {
- if (v2 instanceof Cons && (v2.value0 instanceof Cons && (v2.value0.value1 instanceof Cons && v2.value0.value1.value1 instanceof Cons))) {
- $tco_var_v2 = v2.value1;
- $copy_v3 = new Cons(f(v2.value0.value0), new Cons(f(v2.value0.value1.value0), new Cons(f(v2.value0.value1.value1.value0), v3)));
- return;
- }
- ;
- $tco_done1 = true;
- return v3;
- }
- ;
- while (!$tco_done1) {
- $tco_result2 = $tco_loop2($tco_var_v2, $copy_v3);
- }
- ;
- return $tco_result2;
- };
- };
- $tco_done = true;
- return reverseUnrolledMap(v)(unrolledMap(v1));
- }
- ;
- while (!$tco_done) {
- $tco_result = $tco_loop($tco_var_v, $copy_v1);
- }
- ;
- return $tco_result;
- };
- };
- return chunkedRevMap(Nil.value);
-};
-var functorList = {
- map: listMap
-};
-var foldableList = {
- foldr: function(f) {
- return function(b) {
- var rev3 = function() {
- var go2 = function($copy_v) {
- return function($copy_v1) {
- var $tco_var_v = $copy_v;
- var $tco_done = false;
- var $tco_result;
- function $tco_loop(v, v1) {
- if (v1 instanceof Nil) {
- $tco_done = true;
- return v;
- }
- ;
- if (v1 instanceof Cons) {
- $tco_var_v = new Cons(v1.value0, v);
- $copy_v1 = v1.value1;
- return;
- }
- ;
- throw new Error("Failed pattern match at Data.List.Types (line 107, column 7 - line 107, column 23): " + [v.constructor.name, v1.constructor.name]);
- }
- ;
- while (!$tco_done) {
- $tco_result = $tco_loop($tco_var_v, $copy_v1);
- }
- ;
- return $tco_result;
- };
- };
- return go2(Nil.value);
- }();
- var $284 = foldl(foldableList)(flip(f))(b);
- return function($285) {
- return $284(rev3($285));
- };
- };
- },
- foldl: function(f) {
- var go2 = function($copy_b) {
- return function($copy_v) {
- var $tco_var_b = $copy_b;
- var $tco_done1 = false;
- var $tco_result;
- function $tco_loop(b, v) {
- if (v instanceof Nil) {
- $tco_done1 = true;
- return b;
- }
- ;
- if (v instanceof Cons) {
- $tco_var_b = f(b)(v.value0);
- $copy_v = v.value1;
- return;
- }
- ;
- throw new Error("Failed pattern match at Data.List.Types (line 111, column 12 - line 113, column 30): " + [v.constructor.name]);
- }
- ;
- while (!$tco_done1) {
- $tco_result = $tco_loop($tco_var_b, $copy_v);
- }
- ;
- return $tco_result;
- };
- };
- return go2;
- },
- foldMap: function(dictMonoid) {
- var append2 = append(dictMonoid.Semigroup0());
- var mempty3 = mempty(dictMonoid);
- return function(f) {
- return foldl(foldableList)(function(acc) {
- var $286 = append2(acc);
- return function($287) {
- return $286(f($287));
- };
- })(mempty3);
- };
- }
-};
-var foldr2 = /* @__PURE__ */ foldr(foldableList);
-var semigroupList = {
- append: function(xs) {
- return function(ys) {
- return foldr2(Cons.create)(ys)(xs);
- };
- }
-};
-var append1 = /* @__PURE__ */ append(semigroupList);
-var altList = {
- alt: append1,
- Functor0: function() {
- return functorList;
- }
-};
-var plusList = /* @__PURE__ */ function() {
- return {
- empty: Nil.value,
- Alt0: function() {
- return altList;
- }
- };
-}();
-
-// output/Data.Map.Internal/index.js
-var Leaf = /* @__PURE__ */ function() {
- function Leaf2() {
- }
- ;
- Leaf2.value = new Leaf2();
- return Leaf2;
-}();
-var Node = /* @__PURE__ */ function() {
- function Node2(value0, value1, value22, value32, value42, value52) {
- this.value0 = value0;
- this.value1 = value1;
- this.value2 = value22;
- this.value3 = value32;
- this.value4 = value42;
- this.value5 = value52;
- }
- ;
- Node2.create = function(value0) {
- return function(value1) {
- return function(value22) {
- return function(value32) {
- return function(value42) {
- return function(value52) {
- return new Node2(value0, value1, value22, value32, value42, value52);
- };
- };
- };
- };
- };
- };
- return Node2;
-}();
-var unsafeNode = function(k, v, l, r) {
- if (l instanceof Leaf) {
- if (r instanceof Leaf) {
- return new Node(1, 1, k, v, l, r);
- }
- ;
- if (r instanceof Node) {
- return new Node(1 + r.value0 | 0, 1 + r.value1 | 0, k, v, l, r);
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 680, column 5 - line 684, column 39): " + [r.constructor.name]);
- }
- ;
- if (l instanceof Node) {
- if (r instanceof Leaf) {
- return new Node(1 + l.value0 | 0, 1 + l.value1 | 0, k, v, l, r);
- }
- ;
- if (r instanceof Node) {
- return new Node(1 + function() {
- var $277 = l.value0 > r.value0;
- if ($277) {
- return l.value0;
- }
- ;
- return r.value0;
- }() | 0, (1 + l.value1 | 0) + r.value1 | 0, k, v, l, r);
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 686, column 5 - line 690, column 68): " + [r.constructor.name]);
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 678, column 32 - line 690, column 68): " + [l.constructor.name]);
-};
-var singleton3 = function(k) {
- return function(v) {
- return new Node(1, 1, k, v, Leaf.value, Leaf.value);
- };
-};
-var unsafeBalancedNode = /* @__PURE__ */ function() {
- var height8 = function(v) {
- if (v instanceof Leaf) {
- return 0;
- }
- ;
- if (v instanceof Node) {
- return v.value0;
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 735, column 12 - line 737, column 26): " + [v.constructor.name]);
- };
- var rotateLeft = function(k, v, l, rk, rv, rl, rr) {
- if (rl instanceof Node && rl.value0 > height8(rr)) {
- return unsafeNode(rl.value2, rl.value3, unsafeNode(k, v, l, rl.value4), unsafeNode(rk, rv, rl.value5, rr));
- }
- ;
- return unsafeNode(rk, rv, unsafeNode(k, v, l, rl), rr);
- };
- var rotateRight = function(k, v, lk, lv, ll, lr, r) {
- if (lr instanceof Node && height8(ll) <= lr.value0) {
- return unsafeNode(lr.value2, lr.value3, unsafeNode(lk, lv, ll, lr.value4), unsafeNode(k, v, lr.value5, r));
- }
- ;
- return unsafeNode(lk, lv, ll, unsafeNode(k, v, lr, r));
- };
- return function(k, v, l, r) {
- if (l instanceof Leaf) {
- if (r instanceof Leaf) {
- return singleton3(k)(v);
- }
- ;
- if (r instanceof Node && r.value0 > 1) {
- return rotateLeft(k, v, l, r.value2, r.value3, r.value4, r.value5);
- }
- ;
- return unsafeNode(k, v, l, r);
- }
- ;
- if (l instanceof Node) {
- if (r instanceof Node) {
- if (r.value0 > (l.value0 + 1 | 0)) {
- return rotateLeft(k, v, l, r.value2, r.value3, r.value4, r.value5);
- }
- ;
- if (l.value0 > (r.value0 + 1 | 0)) {
- return rotateRight(k, v, l.value2, l.value3, l.value4, l.value5, r);
- }
- ;
- }
- ;
- if (r instanceof Leaf && l.value0 > 1) {
- return rotateRight(k, v, l.value2, l.value3, l.value4, l.value5, r);
- }
- ;
- return unsafeNode(k, v, l, r);
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 695, column 40 - line 716, column 34): " + [l.constructor.name]);
- };
-}();
-var insert = function(dictOrd) {
- var compare3 = compare(dictOrd);
- return function(k) {
- return function(v) {
- var go2 = function(v1) {
- if (v1 instanceof Leaf) {
- return singleton3(k)(v);
- }
- ;
- if (v1 instanceof Node) {
- var v2 = compare3(k)(v1.value2);
- if (v2 instanceof LT) {
- return unsafeBalancedNode(v1.value2, v1.value3, go2(v1.value4), v1.value5);
- }
- ;
- if (v2 instanceof GT) {
- return unsafeBalancedNode(v1.value2, v1.value3, v1.value4, go2(v1.value5));
- }
- ;
- if (v2 instanceof EQ) {
- return new Node(v1.value0, v1.value1, k, v, v1.value4, v1.value5);
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 469, column 7 - line 472, column 35): " + [v2.constructor.name]);
- }
- ;
- throw new Error("Failed pattern match at Data.Map.Internal (line 466, column 8 - line 472, column 35): " + [v1.constructor.name]);
- };
- return go2;
- };
- };
-};
-var empty2 = /* @__PURE__ */ function() {
- return Leaf.value;
-}();
-var fromFoldable = function(dictOrd) {
- var insert1 = insert(dictOrd);
- return function(dictFoldable) {
- return foldl(dictFoldable)(function(m) {
- return function(v) {
- return insert1(v.value0)(v.value1)(m);
- };
- })(empty2);
- };
-};
-
-// output/Data.String.CaseInsensitive/index.js
-var compare2 = /* @__PURE__ */ compare(ordString);
-var CaseInsensitiveString = function(x) {
- return x;
-};
-var eqCaseInsensitiveString = {
- eq: function(v) {
- return function(v1) {
- return toLower(v) === toLower(v1);
- };
- }
-};
-var ordCaseInsensitiveString = {
- compare: function(v) {
- return function(v1) {
- return compare2(toLower(v))(toLower(v1));
- };
- },
- Eq0: function() {
- return eqCaseInsensitiveString;
- }
-};
-
-// output/JS.Fetch.Headers/foreign.js
-function unsafeFromRecord(r) {
- return new Headers(r);
-}
-function _toArray(tuple, headers2) {
- return Array.from(headers2.entries(), function(pair) {
- return tuple(pair[0])(pair[1]);
- });
-}
-
-// output/JS.Fetch.Headers/index.js
-var toArray = /* @__PURE__ */ function() {
- return runFn2(_toArray)(Tuple.create);
-}();
-var fromRecord = function() {
- return unsafeFromRecord;
-};
-
-// output/Fetch.Internal.Headers/index.js
-var toHeaders = /* @__PURE__ */ function() {
- var $7 = fromFoldable(ordCaseInsensitiveString)(foldableArray);
- var $8 = map(functorArray)(lmap(bifunctorTuple)(CaseInsensitiveString));
- return function($9) {
- return $7($8(toArray($9)));
- };
-}();
-
-// output/JS.Fetch.Request/foreign.js
-function _unsafeNew(url3, options2) {
- try {
- return new Request(url3, options2);
- } catch (e) {
- console.error(e);
- throw e;
- }
-}
-
-// output/Effect.Uncurried/foreign.js
-var mkEffectFn1 = function mkEffectFn12(fn) {
- return function(x) {
- return fn(x)();
- };
-};
-var runEffectFn2 = function runEffectFn22(fn) {
- return function(a) {
- return function(b) {
- return function() {
- return fn(a, b);
- };
- };
- };
-};
-
-// output/Record/index.js
-var insert2 = function(dictIsSymbol) {
- var reflectSymbol2 = reflectSymbol(dictIsSymbol);
- return function() {
- return function() {
- return function(l) {
- return function(a) {
- return function(r) {
- return unsafeSet(reflectSymbol2(l))(a)(r);
- };
- };
- };
- };
- };
-};
-var get = function(dictIsSymbol) {
- var reflectSymbol2 = reflectSymbol(dictIsSymbol);
- return function() {
- return function(l) {
- return function(r) {
- return unsafeGet(reflectSymbol2(l))(r);
- };
- };
- };
-};
-var $$delete = function(dictIsSymbol) {
- var reflectSymbol2 = reflectSymbol(dictIsSymbol);
- return function() {
- return function() {
- return function(l) {
- return function(r) {
- return unsafeDelete(reflectSymbol2(l))(r);
- };
- };
- };
- };
-};
-
-// output/Fetch.Internal.Request/index.js
-var fromRecord2 = /* @__PURE__ */ fromRecord();
-var toCoreRequestOptionsHelpe = {
- convertHelper: function(v) {
- return function(v1) {
- return {};
- };
- }
-};
-var toCoreRequestOptionsConve8 = function() {
- return {
- convertImpl: function(v) {
- return fromRecord2;
- }
- };
-};
-var $$new2 = function() {
- return function(url3) {
- return function(options2) {
- return function() {
- return _unsafeNew(url3, options2);
- };
- };
- };
-};
-var convertImpl = function(dict) {
- return dict.convertImpl;
-};
-var convertHelper = function(dict) {
- return dict.convertHelper;
-};
-var toCoreRequestOptionsHelpe1 = function(dictToCoreRequestOptionsConverter) {
- var convertImpl1 = convertImpl(dictToCoreRequestOptionsConverter);
- return function() {
- return function() {
- return function() {
- return function(dictIsSymbol) {
- var $$delete2 = $$delete(dictIsSymbol)()();
- var get2 = get(dictIsSymbol)();
- var insert3 = insert2(dictIsSymbol)()();
- return function(dictToCoreRequestOptionsHelper) {
- var convertHelper1 = convertHelper(dictToCoreRequestOptionsHelper);
- return function() {
- return function() {
- return {
- convertHelper: function(v) {
- return function(r) {
- var tail = convertHelper1($$Proxy.value)($$delete2($$Proxy.value)(r));
- var head2 = convertImpl1($$Proxy.value)(get2($$Proxy.value)(r));
- return insert3($$Proxy.value)(head2)(tail);
- };
- }
- };
- };
- };
- };
- };
- };
- };
- };
-};
-var toCoreRequestOptionsRowRo = function() {
- return function() {
- return function(dictToCoreRequestOptionsHelper) {
- return {
- convert: convertHelper(dictToCoreRequestOptionsHelper)($$Proxy.value)
- };
- };
- };
-};
-var convert = function(dict) {
- return dict.convert;
-};
-
-// output/JS.Fetch.Response/foreign.js
-function headers(resp) {
- return resp.headers;
-}
-function ok(resp) {
- return resp.ok;
-}
-function redirected(resp) {
- return resp.redirected;
-}
-function status(resp) {
- return resp.status;
-}
-function statusText(resp) {
- return resp.statusText;
-}
-function url(resp) {
- return resp.url;
-}
-function body(resp) {
- return function() {
- return resp.body;
- };
-}
-function arrayBuffer(resp) {
- return function() {
- return resp.arrayBuffer();
- };
-}
-function blob(resp) {
- return function() {
- return resp.blob();
- };
-}
-function text(resp) {
- return function() {
- return resp.text();
- };
-}
-function json(resp) {
- return function() {
- return resp.json();
- };
-}
-
-// output/Control.Monad.Except/index.js
-var unwrap2 = /* @__PURE__ */ unwrap();
-var runExcept = function($3) {
- return unwrap2(runExceptT($3));
-};
-
-// output/Foreign/foreign.js
-function tagOf(value12) {
- return Object.prototype.toString.call(value12).slice(8, -1);
-}
-var isArray = Array.isArray || function(value12) {
- return Object.prototype.toString.call(value12) === "[object Array]";
-};
-
-// output/Data.List.NonEmpty/index.js
-var singleton4 = /* @__PURE__ */ function() {
- var $200 = singleton2(plusList);
- return function($201) {
- return NonEmptyList($200($201));
- };
-}();
-
-// output/Foreign/index.js
-var TypeMismatch = /* @__PURE__ */ function() {
- function TypeMismatch2(value0, value1) {
- this.value0 = value0;
- this.value1 = value1;
- }
- ;
- TypeMismatch2.create = function(value0) {
- return function(value1) {
- return new TypeMismatch2(value0, value1);
- };
- };
- return TypeMismatch2;
-}();
-var unsafeToForeign = unsafeCoerce2;
-var unsafeFromForeign = unsafeCoerce2;
-var fail = function(dictMonad) {
- var $153 = throwError(monadThrowExceptT(dictMonad));
- return function($154) {
- return $153(singleton4($154));
- };
-};
-var unsafeReadTagged = function(dictMonad) {
- var pure12 = pure(applicativeExceptT(dictMonad));
- var fail1 = fail(dictMonad);
- return function(tag) {
- return function(value12) {
- if (tagOf(value12) === tag) {
- return pure12(unsafeFromForeign(value12));
- }
- ;
- if (otherwise) {
- return fail1(new TypeMismatch(tag, tagOf(value12)));
- }
- ;
- throw new Error("Failed pattern match at Foreign (line 123, column 1 - line 123, column 104): " + [tag.constructor.name, value12.constructor.name]);
- };
- };
-};
-var readString = function(dictMonad) {
- return unsafeReadTagged(dictMonad)("String");
-};
-
-// output/Promise.Internal/foreign.js
-function thenOrCatch(k, c, p) {
- return p.then(k, c);
-}
-function resolve(a) {
- return Promise.resolve(a);
-}
-
-// output/Promise.Rejection/foreign.js
-function _toError(just, nothing, ref) {
- if (ref instanceof Error) {
- return just(ref);
- }
- return nothing;
-}
-
-// output/Promise.Rejection/index.js
-var toError = /* @__PURE__ */ function() {
- return runFn3(_toError)(Just.create)(Nothing.value);
-}();
-
-// output/Promise/index.js
-var thenOrCatch2 = function() {
- return function(k) {
- return function(c) {
- return function(p) {
- return function() {
- return thenOrCatch(mkEffectFn1(k), mkEffectFn1(c), p);
- };
- };
- };
- };
-};
-var resolve2 = function() {
- return resolve;
-};
-
-// output/Promise.Aff/index.js
-var voidRight2 = /* @__PURE__ */ voidRight(functorEffect);
-var mempty2 = /* @__PURE__ */ mempty(monoidCanceler);
-var thenOrCatch3 = /* @__PURE__ */ thenOrCatch2();
-var map3 = /* @__PURE__ */ map(functorEffect);
-var resolve3 = /* @__PURE__ */ resolve2();
-var alt2 = /* @__PURE__ */ alt(altMaybe);
-var map1 = /* @__PURE__ */ map(functorMaybe);
-var readString2 = /* @__PURE__ */ readString(monadIdentity);
-var bind2 = /* @__PURE__ */ bind(bindAff);
-var liftEffect3 = /* @__PURE__ */ liftEffect(monadEffectAff);
-var toAff$prime = function(customCoerce) {
- return function(p) {
- return makeAff(function(cb) {
- return voidRight2(mempty2)(thenOrCatch3(function(a) {
- return map3(resolve3)(cb(new Right(a)));
- })(function(e) {
- return map3(resolve3)(cb(new Left(customCoerce(e))));
- })(p));
- });
- };
-};
-var coerce3 = function(rej) {
- return fromMaybe$prime(function(v) {
- return error("Promise failed, couldn't extract JS Error or String");
- })(alt2(toError(rej))(map1(error)(hush(runExcept(readString2(unsafeToForeign(rej)))))));
-};
-var toAff = /* @__PURE__ */ toAff$prime(coerce3);
-var toAffE = function(f) {
- return bind2(liftEffect3(f))(toAff);
-};
-
-// output/Fetch.Internal.Response/index.js
-var text2 = function(response) {
- return toAffE(text(response));
-};
-var json2 = function(response) {
- return toAffE(json(response));
-};
-var blob2 = function(response) {
- return toAffE(blob(response));
-};
-var arrayBuffer2 = function(response) {
- return toAffE(arrayBuffer(response));
-};
-var convert2 = function(response) {
- return {
- headers: toHeaders(headers(response)),
- ok: ok(response),
- redirected: redirected(response),
- status: status(response),
- statusText: statusText(response),
- url: url(response),
- text: text2(response),
- json: json2(response),
- body: body(response),
- arrayBuffer: arrayBuffer2(response),
- blob: blob2(response)
- };
-};
-
-// output/JS.Fetch/foreign.js
-function _fetch(a, b) {
- return fetch(a, b);
-}
-
-// output/JS.Fetch/index.js
-var fetchWithOptions = function() {
- return runEffectFn2(_fetch);
-};
-
-// output/JS.Fetch.AbortController/foreign.js
-var newImpl2 = function() {
- return new AbortController();
-};
-function abort(controller) {
- return function() {
- return controller.abort();
- };
-}
-function signal(controller) {
- return controller.signal;
-}
-
-// output/Fetch/index.js
-var $$void3 = /* @__PURE__ */ $$void(functorEffect);
-var thenOrCatch4 = /* @__PURE__ */ thenOrCatch2();
-var map4 = /* @__PURE__ */ map(functorEffect);
-var resolve4 = /* @__PURE__ */ resolve2();
-var bind3 = /* @__PURE__ */ bind(bindAff);
-var liftEffect4 = /* @__PURE__ */ liftEffect(monadEffectAff);
-var $$new4 = /* @__PURE__ */ $$new2();
-var bindFlipped2 = /* @__PURE__ */ bindFlipped(bindAff);
-var fetchWithOptions2 = /* @__PURE__ */ fetchWithOptions();
-var pure1 = /* @__PURE__ */ pure(applicativeAff);
-var toAbortableAff = function(abortController) {
- return function(p) {
- return makeAff(function(cb) {
- return function __do() {
- $$void3(thenOrCatch4(function(a) {
- return map4(resolve4)(cb(new Right(a)));
- })(function(e) {
- return map4(resolve4)(cb(new Left(coerce3(e))));
- })(p))();
- return effectCanceler(abort(abortController));
- };
- });
- };
-};
-var fetch2 = function() {
- return function() {
- return function(dictToCoreRequestOptions) {
- var convert3 = convert(dictToCoreRequestOptions);
- return function(url3) {
- return function(r) {
- return bind3(liftEffect4($$new4(url3)(convert3(r))))(function(request) {
- return bind3(liftEffect4(newImpl2))(function(abortController) {
- var signal2 = signal(abortController);
- return bind3(bindFlipped2(toAbortableAff(abortController))(liftEffect4(fetchWithOptions2(request)({
- signal: signal2
- }))))(function(cResponse) {
- return pure1(convert2(cResponse));
- });
- });
- });
- };
- };
- };
- };
-};
-
-// output/Model/foreign.js
-var canvas = document.getElementById("lcolonq-canvas");
-var socket = null;
-var currentFrame = null;
-async function decompress(blob3) {
- let ds = new DecompressionStream("gzip");
- let stream = blob3.stream();
- let out = await new Response(stream.pipeThrough(ds));
- return out.arrayBuffer();
-}
-function readCell(dv, base) {
- let cell = {};
- let o = base;
- if (dv.getUint8(o) == 0) {
- return [{ type: "bg" }, o + 1];
- } else {
- cell.type = "fg";
- cell.custom = dv.getUint8(o + 1);
- cell.r = dv.getUint8(o + 2);
- cell.g = dv.getUint8(o + 3);
- cell.b = dv.getUint8(o + 4);
- cell.g0 = dv.getUint32(o + 5);
- if (dv.getUint8(o + 9) == 0) {
- return [cell, o + 10];
- } else {
- cell.g1 = dv.getUint32(o + 10);
- return [cell, o + 14];
- }
- }
-}
-function readKeyframe(dv, base) {
- let ret = [];
- let o = base;
- for (let idx = 0; idx < 64 * 64; ++idx) {
- let res = readCell(dv, o);
- ret.push(res[0]);
- o = res[1];
- }
- currentFrame = ret;
-}
-function readDiff(dv, base) {
- if (currentFrame) {
- let len = dv.getUint32(base);
- let o = base + 4;
- for (let idx = 0; idx < len; ++idx) {
- let x = dv.getUint8(o);
- let y = dv.getUint8(o + 1);
- let c = readCell(dv, o + 2);
- currentFrame[x + y * 64] = c[0];
- o = c[1];
- }
- }
-}
-function readPacket(dv) {
- if (dv.getUint8(0) == 0) {
- readKeyframe(dv, 1);
- } else {
- readDiff(dv, 1);
- }
-}
-function renderCellCanvas(ctx2, x, y, c) {
- if (c && c.type === "fg") {
- let msg = c.g1 ? String.fromCodePoint(c.g0, c.g1) : String.fromCodePoint(c.g0);
- if (msg.trim().length) {
- ctx2.fillStyle = "black";
- ctx2.fillRect(13 * y, 13 * x, 13, 13);
- ctx2.fillStyle = `rgba(${c.r}, ${c.g}, ${c.b}, 1.0)`;
- ctx2.fillText(msg, 13 * y, 13 * x + 10);
- }
- }
-}
-function renderCanvas() {
- if (canvas.width != canvas.clientWidth) {
- canvas.width = canvas.clientWidth;
- }
- if (canvas.height != canvas.clientHeight) {
- canvas.height = canvas.clientHeight;
- }
- if (currentFrame) {
- let ctx2 = canvas.getContext("2d");
- ctx2.clearRect(0, 0, canvas.width, canvas.height);
- ctx2.font = "12px Iosevka Comfy";
- for (let y = 0; y < 64; ++y) {
- for (let x = 0; x < 64; ++x) {
- renderCellCanvas(ctx2, x, y, currentFrame[x * 64 + y]);
- }
- }
- }
-}
-var _startModel = () => {
- socket = new WebSocket("wss://colonq.computer/bullfrog/api/channel/listen/model");
- socket.addEventListener("open", (ev) => {
- console.log("connected");
- });
- socket.addEventListener("message", async (ev) => {
- let arr = await decompress(ev.data);
- let view = new DataView(arr);
- readPacket(view);
- renderCanvas();
- });
-};
-
-// output/Model/index.js
-var startModel = function(dictMonadEffect) {
- return liftEffect(dictMonadEffect)(_startModel);
-};
-
-// output/UI/foreign.js
-var _setInterval = (delay) => (f) => () => setInterval(f, delay);
-
-// output/UI/index.js
-var setInterval2 = function(dictMonadEffect) {
- var liftEffect6 = liftEffect(dictMonadEffect);
- return function(d) {
- return function(f) {
- return liftEffect6(_setInterval(d)(f));
- };
- };
-};
-
-// output/Web.DOM.DOMTokenList/foreign.js
-function add2(list) {
- return function(token) {
- return function() {
- return list.add(token);
- };
- };
-}
-
-// output/Data.Nullable/foreign.js
-function nullable(a, r, f) {
- return a == null ? r : f(a);
-}
-
-// output/Data.Nullable/index.js
-var toMaybe = function(n) {
- return nullable(n, Nothing.value, Just.create);
-};
-
-// output/Web.DOM.Document/foreign.js
-var getEffProp = function(name15) {
- return function(doc) {
- return function() {
- return doc[name15];
- };
- };
-};
-var url2 = getEffProp("URL");
-var documentURI = getEffProp("documentURI");
-var origin = getEffProp("origin");
-var compatMode = getEffProp("compatMode");
-var characterSet = getEffProp("characterSet");
-var contentType = getEffProp("contentType");
-var _documentElement = getEffProp("documentElement");
-function createElement(localName2) {
- return function(doc) {
- return function() {
- return doc.createElement(localName2);
- };
- };
-}
-function createTextNode(data) {
- return function(doc) {
- return function() {
- return doc.createTextNode(data);
- };
- };
-}
-
-// output/Web.Internal.FFI/foreign.js
-function _unsafeReadProtoTagged(nothing, just, name15, value12) {
- if (typeof window !== "undefined") {
- var ty = window[name15];
- if (ty != null && value12 instanceof ty) {
- return just(value12);
- }
- }
- var obj = value12;
- while (obj != null) {
- var proto = Object.getPrototypeOf(obj);
- var constructorName = proto.constructor.name;
- if (constructorName === name15) {
- return just(value12);
- } else if (constructorName === "Object") {
- return nothing;
- }
- obj = proto;
- }
- return nothing;
-}
-
-// output/Web.Internal.FFI/index.js
-var unsafeReadProtoTagged = function(name15) {
- return function(value12) {
- return _unsafeReadProtoTagged(Nothing.value, Just.create, name15, value12);
- };
-};
-
-// output/Web.DOM.Document/index.js
-var toParentNode = unsafeCoerce2;
-var toNonElementParentNode = unsafeCoerce2;
-
-// output/Web.DOM.Element/foreign.js
-var getProp = function(name15) {
- return function(doctype) {
- return doctype[name15];
- };
-};
-var _namespaceURI = getProp("namespaceURI");
-var _prefix = getProp("prefix");
-var localName = getProp("localName");
-var tagName = getProp("tagName");
-function classList(element) {
- return function() {
- return element.classList;
- };
-}
-
-// output/Web.DOM.ParentNode/foreign.js
-var getEffProp2 = function(name15) {
- return function(node) {
- return function() {
- return node[name15];
- };
- };
-};
-var children = getEffProp2("children");
-var _firstElementChild = getEffProp2("firstElementChild");
-var _lastElementChild = getEffProp2("lastElementChild");
-var childElementCount = getEffProp2("childElementCount");
-function querySelectorAll(selector) {
- return function(node) {
- return function() {
- return node.querySelectorAll(selector);
- };
- };
-}
-
-// output/Web.DOM.Element/index.js
-var toNode = unsafeCoerce2;
-var toEventTarget = unsafeCoerce2;
-var fromNode = /* @__PURE__ */ unsafeReadProtoTagged("Element");
-
-// output/Web.DOM.Node/foreign.js
-var getEffProp3 = function(name15) {
- return function(node) {
- return function() {
- return node[name15];
- };
- };
-};
-var baseURI = getEffProp3("baseURI");
-var _ownerDocument = getEffProp3("ownerDocument");
-var _parentNode = getEffProp3("parentNode");
-var _parentElement = getEffProp3("parentElement");
-var childNodes = getEffProp3("childNodes");
-var _firstChild = getEffProp3("firstChild");
-var _lastChild = getEffProp3("lastChild");
-var _previousSibling = getEffProp3("previousSibling");
-var _nextSibling = getEffProp3("nextSibling");
-var _nodeValue = getEffProp3("nodeValue");
-var textContent = getEffProp3("textContent");
-function setTextContent(value12) {
- return function(node) {
- return function() {
- node.textContent = value12;
- };
- };
-}
-function appendChild(node) {
- return function(parent2) {
- return function() {
- parent2.appendChild(node);
- };
- };
-}
-
-// output/Web.DOM.NodeList/foreign.js
-function toArray2(list) {
- return function() {
- return [].slice.call(list);
- };
-}
-
-// output/Web.DOM.NonElementParentNode/foreign.js
-function _getElementById(id2) {
- return function(node) {
- return function() {
- return node.getElementById(id2);
- };
- };
-}
-
-// output/Web.DOM.NonElementParentNode/index.js
-var map5 = /* @__PURE__ */ map(functorEffect);
-var getElementById = function(eid) {
- var $2 = map5(toMaybe);
- var $3 = _getElementById(eid);
- return function($4) {
- return $2($3($4));
- };
-};
-
-// output/Web.DOM.Text/index.js
-var toNode2 = unsafeCoerce2;
-
-// output/Web.Event.EventTarget/foreign.js
-function eventListener(fn) {
- return function() {
- return function(event) {
- return fn(event)();
- };
- };
-}
-function addEventListener(type) {
- return function(listener) {
- return function(useCapture) {
- return function(target5) {
- return function() {
- return target5.addEventListener(type, listener, useCapture);
- };
- };
- };
- };
-}
-
-// output/Web.HTML/foreign.js
-var windowImpl = function() {
- return window;
-};
-
-// output/Web.HTML.HTMLDocument/index.js
-var toDocument = unsafeCoerce2;
-
-// output/Web.HTML.Window/foreign.js
-function document2(window2) {
- return function() {
- return window2.document;
- };
-}
-
-// output/Main/index.js
-var map6 = /* @__PURE__ */ map(functorEffect);
-var fold4 = /* @__PURE__ */ fold(foldableArray)(monoidArray);
-var map12 = /* @__PURE__ */ map(functorArray);
-var startModel2 = /* @__PURE__ */ startModel(monadEffectAff);
-var bind4 = /* @__PURE__ */ bind(bindAff);
-var fetch3 = /* @__PURE__ */ fetch2()();
-var toCoreRequestOptionsRowRo2 = /* @__PURE__ */ toCoreRequestOptionsRowRo()();
-var fetch1 = /* @__PURE__ */ fetch3(/* @__PURE__ */ toCoreRequestOptionsRowRo2(/* @__PURE__ */ toCoreRequestOptionsHelpe1(/* @__PURE__ */ toCoreRequestOptionsConve8())()()()({
- reflectSymbol: function() {
- return "headers";
- }
-})(toCoreRequestOptionsHelpe)()()));
-var fetch22 = /* @__PURE__ */ fetch3(/* @__PURE__ */ toCoreRequestOptionsRowRo2(toCoreRequestOptionsHelpe));
-var discard2 = /* @__PURE__ */ discard(discardUnit);
-var discard1 = /* @__PURE__ */ discard2(bindAff);
-var liftEffect5 = /* @__PURE__ */ liftEffect(monadEffectAff);
-var getToken2 = /* @__PURE__ */ getToken(monadEffectAff);
-var pure3 = /* @__PURE__ */ pure(applicativeAff);
-var startTwitchAuth2 = /* @__PURE__ */ startTwitchAuth(monadEffectEffect);
-var for_2 = /* @__PURE__ */ for_(applicativeAff)(foldableArray);
-var show2 = /* @__PURE__ */ show(showInt);
-var playVoice2 = /* @__PURE__ */ playVoice(monadEffectEffect);
-var setInterval3 = /* @__PURE__ */ setInterval2(monadEffectAff);
-var setText5 = function(dictMonadEffect) {
- var liftEffect1 = liftEffect(dictMonadEffect);
- return function(e) {
- return function(s) {
- return liftEffect1(setTextContent(s)(toNode(e)));
- };
- };
-};
-var setText1 = /* @__PURE__ */ setText5(monadEffectAff);
-var maybeToArray = function(v) {
- if (v instanceof Just) {
- return [v.value0];
- }
- ;
- if (v instanceof Nothing) {
- return [];
- }
- ;
- throw new Error("Failed pattern match at Main (line 38, column 1 - line 38, column 45): " + [v.constructor.name]);
-};
-var queryAll = function(dictMonadEffect) {
- var Monad0 = dictMonadEffect.Monad0();
- var bind22 = bind(Monad0.Bind1());
- var liftEffect1 = liftEffect(dictMonadEffect);
- var pure12 = pure(Monad0.Applicative0());
- return function(q) {
- return bind22(liftEffect1(windowImpl))(function(w) {
- return bind22(liftEffect1(map6(toDocument)(document2(w))))(function(d) {
- return bind22(liftEffect1(querySelectorAll(q)(toParentNode(d))))(function(nl) {
- return bind22(liftEffect1(toArray2(nl)))(function(ns) {
- return pure12(fold4(map12(function($118) {
- return maybeToArray(fromNode($118));
- })(ns)));
- });
- });
- });
- });
- };
-};
-var query = function(dictMonadEffect) {
- var Monad0 = dictMonadEffect.Monad0();
- var bind22 = bind(Monad0.Bind1());
- var queryAll1 = queryAll(dictMonadEffect);
- var liftEffect1 = liftEffect(dictMonadEffect);
- var pure12 = pure(Monad0.Applicative0());
- return function(q) {
- return bind22(queryAll1(q))(function($119) {
- return function(v) {
- if (v instanceof Nothing) {
- return liftEffect1($$throw("could not find element matching query: " + q));
- }
- ;
- if (v instanceof Just) {
- return pure12(v.value0);
- }
- ;
- throw new Error("Failed pattern match at Main (line 60, column 27 - line 62, column 21): " + [v.constructor.name]);
- }(head($119));
- });
- };
-};
-var query1 = /* @__PURE__ */ query(monadEffectEffect);
-var mainObs = /* @__PURE__ */ launchAff_(startModel2);
-var listen2 = function(dictMonadEffect) {
- var bind22 = bind(dictMonadEffect.Monad0().Bind1());
- var liftEffect1 = liftEffect(dictMonadEffect);
- return function(e) {
- return function(ev) {
- return function(f) {
- return bind22(liftEffect1(eventListener(f)))(function(l) {
- return liftEffect1(addEventListener(ev)(l)(false)(toEventTarget(e)));
- });
- };
- };
- };
-};
-var listen1 = /* @__PURE__ */ listen2(monadEffectAff);
-var checkAuth = function(auth) {
- return bind4(fetch1(apiServer + "/check")({
- headers: {
- Authorization: authHeader(auth)
- }
- }))(function(v) {
- return v.text;
- });
-};
-var byId = function(dictMonadEffect) {
- var Monad0 = dictMonadEffect.Monad0();
- var bind22 = bind(Monad0.Bind1());
- var liftEffect1 = liftEffect(dictMonadEffect);
- var pure12 = pure(Monad0.Applicative0());
- return function(i) {
- return bind22(liftEffect1(windowImpl))(function(w) {
- return bind22(liftEffect1(map6(toDocument)(document2(w))))(function(d) {
- return bind22(liftEffect1(getElementById(i)(toNonElementParentNode(d))))(function(v) {
- if (v instanceof Nothing) {
- return liftEffect1($$throw("could not find element with id: " + i));
- }
- ;
- if (v instanceof Just) {
- return pure12(v.value0);
- }
- ;
- throw new Error("Failed pattern match at Main (line 46, column 80 - line 48, column 21): " + [v.constructor.name]);
- });
- });
- });
- };
-};
-var byId1 = /* @__PURE__ */ byId(monadEffectAff);
-var updateSubtitle = /* @__PURE__ */ bind4(/* @__PURE__ */ byId1("lcolonq-subtitle"))(function(subtitle) {
- return bind4(fetch22(apiServer + "/catchphrase")({}))(function(v) {
- return bind4(v.text)(setText1(subtitle));
- });
-});
-var mainHomepage = /* @__PURE__ */ launchAff_(/* @__PURE__ */ discard1(/* @__PURE__ */ liftEffect5(/* @__PURE__ */ log("hi")))(function() {
- return discard1(startModel2)(function() {
- return bind4(byId1("lcolonq-marquee"))(function(marq) {
- return bind4(fetch22(apiServer + "/motd")({}))(function(v) {
- return discard1(bind4(v.text)(setText1(marq)))(function() {
- return discard1(bind4(getToken2)(function(v1) {
- if (v1 instanceof Just) {
- return discard1(liftEffect5(log(v1.value0.value0)))(function() {
- return discard1(liftEffect5(log(v1.value0.value1)))(function() {
- return bind4(checkAuth(v1.value0))(function($120) {
- return liftEffect5(log($120));
- });
- });
- });
- }
- ;
- return pure3(unit);
- }))(function() {
- return discard1(updateSubtitle)(function() {
- return bind4(byId1("lcolonq-subtitle"))(function(subtitle) {
- return discard1(listen1(subtitle)("click")(function(_ev) {
- return function __do() {
- startTwitchAuth2();
- return launchAff_(updateSubtitle)();
- };
- }))(function() {
- return for_2(range2(0)(6))(function(i) {
- return bind4(byId1("lcolonq-letter-" + show2(i)))(function(letter) {
- return discard1(listen1(letter)("click")(function(_ev) {
- return playVoice2(true)(i);
- }))(function() {
- return listen1(letter)("mouseover")(function(_ev) {
- return playVoice2(false)(i);
- });
- });
- });
- });
- });
- });
- });
- });
- });
- });
- });
- });
-}));
-var appendText = function(dictMonadEffect) {
- var bind22 = bind(dictMonadEffect.Monad0().Bind1());
- var liftEffect1 = liftEffect(dictMonadEffect);
- return function(parent2) {
- return function(s) {
- return bind22(liftEffect1(windowImpl))(function(w) {
- return bind22(liftEffect1(map6(toDocument)(document2(w))))(function(d) {
- return bind22(liftEffect1(createTextNode(s)(d)))(function(n) {
- return liftEffect1(appendChild(toNode2(n))(toNode(parent2)));
- });
- });
- });
- };
- };
-};
-var appendText1 = /* @__PURE__ */ appendText(monadEffectEffect);
-var appendElement = function(dictMonadEffect) {
- var liftEffect1 = liftEffect(dictMonadEffect);
- return function(parent2) {
- return function(child) {
- return liftEffect1(appendChild(toNode(child))(toNode(parent2)));
- };
- };
-};
-var appendElement1 = /* @__PURE__ */ appendElement(monadEffectEffect);
-var create3 = function(dictMonadEffect) {
- var Monad0 = dictMonadEffect.Monad0();
- var Bind1 = Monad0.Bind1();
- var bind22 = bind(Bind1);
- var liftEffect1 = liftEffect(dictMonadEffect);
- var discard3 = discard2(Bind1);
- var Applicative0 = Monad0.Applicative0();
- var for_1 = for_(Applicative0)(foldableArray);
- var appendElement2 = appendElement(dictMonadEffect);
- var pure12 = pure(Applicative0);
- return function(tag) {
- return function(classes) {
- return function(children2) {
- return bind22(liftEffect1(windowImpl))(function(w) {
- return bind22(liftEffect1(map6(toDocument)(document2(w))))(function(d) {
- return bind22(liftEffect1(createElement(tag)(d)))(function(el) {
- return bind22(liftEffect1(classList(el)))(function(cl) {
- return discard3(for_1(classes)(function(c) {
- return liftEffect1(add2(cl)(c));
- }))(function() {
- return discard3(for_1(children2)(function(c) {
- return appendElement2(el)(c);
- }))(function() {
- return pure12(el);
- });
- });
- });
- });
- });
- });
- };
- };
- };
-};
-var create1 = /* @__PURE__ */ create3(monadEffectEffect);
-var mainExtension = /* @__PURE__ */ launchAff_(/* @__PURE__ */ discard1(/* @__PURE__ */ liftEffect5(/* @__PURE__ */ log("hello from extension")))(function() {
- return setInterval3(1e3)(function __do() {
- var e = query1(".chat-scrollable-area__message-container")();
- var $$new5 = create1("div")([".chat-line__message"])([])();
- appendText1($$new5)("test")();
- return appendElement1(e)($$new5)();
- });
-}));
-var main = /* @__PURE__ */ function() {
- if (mode === 0) {
- return mainHomepage;
- }
- ;
- if (mode === 1) {
- return mainExtension;
- }
- ;
- if (mode === 2) {
- return mainObs;
- }
- ;
- return $$throw("unknown mode");
-}();
-
-// <stdin>
-main();
diff --git a/fig-frontend-client/src/Audio.js b/fig-frontend-client/src/Audio.js
deleted file mode 100644
index 2a9ae54..0000000
--- a/fig-frontend-client/src/Audio.js
+++ /dev/null
@@ -1,30 +0,0 @@
-let initialized = false;
-let ctx = null;
-let voiceTracks = null;
-
-function initializeCtx() {
- if (!initialized) {
- try {
- initialized = true;
- ctx = new window.AudioContext();
- voiceTracks = [
- document.getElementById("lcolonq-audio-voice-0"),
- document.getElementById("lcolonq-audio-voice-1"),
- document.getElementById("lcolonq-audio-voice-2"),
- document.getElementById("lcolonq-audio-voice-3"),
- document.getElementById("lcolonq-audio-voice-4"),
- document.getElementById("lcolonq-audio-voice-5"),
- document.getElementById("lcolonq-audio-voice-6"),
- ];
- } catch (e) {
- initialized = false;
- }
- }
-}
-
-export const _playVoice = (b) => (i) => () => {
- if (b) initializeCtx();
- try {
- if (initialized) voiceTracks[i].play();
- } catch (e) {}
-};
diff --git a/fig-frontend-client/src/Audio.purs b/fig-frontend-client/src/Audio.purs
deleted file mode 100644
index 8f1f319..0000000
--- a/fig-frontend-client/src/Audio.purs
+++ /dev/null
@@ -1,10 +0,0 @@
-module Audio where
-
-import Prelude
-
-import Effect (Effect)
-import Effect.Class (class MonadEffect, liftEffect)
-
-foreign import _playVoice :: Boolean -> Int -> Effect Unit
-playVoice :: forall m. MonadEffect m => Boolean -> Int -> m Unit
-playVoice b i = liftEffect $ _playVoice b i
diff --git a/fig-frontend-client/src/Auth.js b/fig-frontend-client/src/Auth.js
deleted file mode 100644
index 7254c40..0000000
--- a/fig-frontend-client/src/Auth.js
+++ /dev/null
@@ -1,45 +0,0 @@
-function generateNonce() {
- var arr = new Uint8Array(20);
- window.crypto.getRandomValues(arr);
- return Array.from(arr, b => b.toString(16).padStart(2, "0")).join("");
-}
-
-export const _startTwitchAuth = (clientID) => (redirectURL) => () => {
- const nonce = generateNonce();
- document.cookie = `authnonce=${nonce}; path=/; max-age=3000`;
- window.location.href =
- `https://id.twitch.tv/oauth2/authorize?response_type=id_token`
- + `&client_id=${clientID}`
- + `&redirect_uri=${redirectURL}`
- + `&scope=openid`
- + `&nonce=${nonce}`
- + `&claims=${JSON.stringify({id_token: {preferred_username: null}})}`
- ;
-};
-
-function getFragmentQuery() {
- let query = new Map();
- const hashQuery = document.location.hash.slice(1).split("&");
- for (let equals of hashQuery) {
- const pair = equals.split("=");
- query.set(decodeURIComponent(pair[0]), decodeURIComponent(pair[1]));
- }
- return query;
-}
-
-export const _getToken = (Just) => (Nothing) => (pair) => () => {
- const frag = getFragmentQuery();
- const token = frag.get("id_token");
- if (token) {
- document.cookie = `id_token=${token}; path=/; SameSite=Strict`;
- }
- let id_token = null;
- let authnonce = null;
- for (let c of document.cookie.split("; ")) {
- const [k, v] = c.split("=");
- if (k === "id_token") id_token = v;
- else if (k === "authnonce") authnonce = v;
- }
- if (id_token && authnonce) return Just(pair(id_token)(authnonce));
- return Nothing;
-};
diff --git a/fig-frontend-client/src/Auth.purs b/fig-frontend-client/src/Auth.purs
deleted file mode 100644
index 2a53629..0000000
--- a/fig-frontend-client/src/Auth.purs
+++ /dev/null
@@ -1,29 +0,0 @@
-module Auth where
-
-import Prelude
-
-import Config (authRedirectURL, clientID)
-import Data.Array (fold)
-import Data.Maybe (Maybe(..))
-import Data.Tuple (Tuple(..))
-import Effect (Effect)
-import Effect.Class (class MonadEffect, liftEffect)
-
-foreign import _startTwitchAuth :: String -> String -> Effect Unit
-startTwitchAuth :: forall m. MonadEffect m => m Unit
-startTwitchAuth = liftEffect $ _startTwitchAuth clientID authRedirectURL
-
-type AuthInfo = Tuple String String
-foreign import _getToken :: forall a. (a -> Maybe a) -> Maybe a -> (a -> a -> Tuple a a) -> Effect (Maybe (Tuple String String))
-getToken :: forall m. MonadEffect m => m (Maybe AuthInfo)
-getToken = liftEffect $ _getToken Just Nothing Tuple
-
-authHeader :: AuthInfo -> String
-authHeader (Tuple t n) =
- fold
- [ "FIG-TWITCH token=\""
- , t
- , "\", nonce=\""
- , n
- , "\""
- ]
diff --git a/fig-frontend-client/src/Config.js b/fig-frontend-client/src/Config.js
deleted file mode 100644
index 25259c7..0000000
--- a/fig-frontend-client/src/Config.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export const mode = globalThis.mode;
-export const apiServer = globalThis.apiServer;
-export const clientID = globalThis.clientID;
-export const authRedirectURL = globalThis.authRedirectURL;
diff --git a/fig-frontend-client/src/Config.purs b/fig-frontend-client/src/Config.purs
deleted file mode 100644
index 536f163..0000000
--- a/fig-frontend-client/src/Config.purs
+++ /dev/null
@@ -1,6 +0,0 @@
-module Config where
-
-foreign import mode :: Int
-foreign import apiServer :: String
-foreign import clientID :: String
-foreign import authRedirectURL :: String
diff --git a/fig-frontend-client/src/Main.purs b/fig-frontend-client/src/Main.purs
deleted file mode 100644
index 48a6e9d..0000000
--- a/fig-frontend-client/src/Main.purs
+++ /dev/null
@@ -1,156 +0,0 @@
-module Main where
-
-import Prelude
-
-import Audio as Audio
-import Auth (AuthInfo, authHeader, getToken, startTwitchAuth)
-import Config as Config
-import Data.Array (head)
-import Data.Array as Array
-import Data.Foldable (fold)
-import Data.Maybe (Maybe(..))
-import Data.Traversable (for, for_)
-import Data.Tuple (Tuple(..))
-import Effect (Effect)
-import Effect.Aff (Aff, launchAff_)
-import Effect.Class (class MonadEffect, liftEffect)
-import Effect.Console (log)
-import Effect.Exception (throw)
-import Fetch (fetch)
-import Model (startModel)
-import UI as UI
-import Web.DOM as DOM
-import Web.DOM.DOMTokenList as DOM.DTL
-import Web.DOM.Document (doctype)
-import Web.DOM.Document as DOM.Doc
-import Web.DOM.Element as DOM.El
-import Web.DOM.Node as DOM.Node
-import Web.DOM.NodeList as DOM.NL
-import Web.DOM.NonElementParentNode as DOM.NEP
-import Web.DOM.ParentNode as DOM.P
-import Web.DOM.Text as DOM.Text
-import Web.Event.Event as Ev
-import Web.Event.EventTarget as Ev.Tar
-import Web.HTML as HTML
-import Web.HTML.HTMLDocument as HTML.Doc
-import Web.HTML.Window as HTML.Win
-
-maybeToArray :: forall a. Maybe a -> Array a
-maybeToArray (Just x) = [x]
-maybeToArray Nothing = []
-
-byId :: forall m. MonadEffect m => String -> m DOM.Element
-byId i = do
- w <- liftEffect HTML.window
- d <- liftEffect $ HTML.Doc.toDocument <$> HTML.Win.document w
- liftEffect (DOM.NEP.getElementById i (DOM.Doc.toNonElementParentNode d)) >>= case _ of
- Nothing -> liftEffect $ throw $ "could not find element with id: " <> i
- Just e -> pure e
-
-queryAll :: forall m. MonadEffect m => String -> m (Array DOM.Element)
-queryAll q = do
- w <- liftEffect HTML.window
- d <- liftEffect $ HTML.Doc.toDocument <$> HTML.Win.document w
- nl <- liftEffect (DOM.P.querySelectorAll (DOM.P.QuerySelector q) (DOM.Doc.toParentNode d))
- ns <- liftEffect $ DOM.NL.toArray nl
- pure $ fold $ (maybeToArray <<< DOM.El.fromNode) <$> ns
-
-query :: forall m . MonadEffect m => String -> m DOM.Element
-query q = do
- queryAll q >>= head >>> case _ of
- Nothing -> liftEffect $ throw $ "could not find element matching query: " <> q
- Just x -> pure x
-
-listen :: forall m. MonadEffect m => DOM.Element -> String -> (Ev.Event -> Effect Unit) -> m Unit
-listen e ev f = do
- l <- liftEffect $ Ev.Tar.eventListener f
- liftEffect $ Ev.Tar.addEventListener (Ev.EventType ev) l false $ DOM.El.toEventTarget e
-
-create :: forall m. MonadEffect m => String -> Array String -> Array DOM.Element -> m DOM.Element
-create tag classes children = do
- w <- liftEffect HTML.window
- d <- liftEffect $ HTML.Doc.toDocument <$> HTML.Win.document w
- el <- liftEffect $ DOM.Doc.createElement tag d
- cl <- liftEffect $ DOM.El.classList el
- for_ classes \c ->
- liftEffect $ DOM.DTL.add cl c
- for_ children \c ->
- appendElement el c
- pure el
-
-appendElement :: forall m. MonadEffect m => DOM.Element -> DOM.Element -> m Unit
-appendElement parent child = liftEffect $ DOM.Node.appendChild (DOM.El.toNode child) (DOM.El.toNode parent)
-
-appendText :: forall m. MonadEffect m => DOM.Element -> String -> m Unit
-appendText parent s = do
- w <- liftEffect HTML.window
- d <- liftEffect $ HTML.Doc.toDocument <$> HTML.Win.document w
- n <- liftEffect $ DOM.Doc.createTextNode s d
- liftEffect $ DOM.Node.appendChild (DOM.Text.toNode n) (DOM.El.toNode parent)
-
-setText :: forall m. MonadEffect m => DOM.Element -> String -> m Unit
-setText e s = liftEffect $ DOM.Node.setTextContent s $ DOM.El.toNode e
-
-updateSubtitle :: Aff Unit
-updateSubtitle = do
- subtitle <- byId "lcolonq-subtitle"
- { text: catchphrase } <- fetch (Config.apiServer <> "/catchphrase") {}
- catchphrase >>= setText subtitle
-
-checkAuth :: AuthInfo -> Aff String
-checkAuth auth = do
- { text: resp } <-
- fetch (Config.apiServer <> "/check")
- { headers:
- { "Authorization": authHeader auth
- }
- }
- resp
-
-mainHomepage :: Effect Unit
-mainHomepage = launchAff_ do
- liftEffect $ log "hi"
- startModel
- marq <- byId "lcolonq-marquee"
- { text: motd } <- fetch (Config.apiServer <> "/motd") {}
- motd >>= setText marq
-
- getToken >>= case _ of
- Just a@(Tuple t n) -> do
- liftEffect $ log t
- liftEffect $ log n
- checkAuth a >>= log >>> liftEffect
- _ -> pure unit
-
- updateSubtitle
- subtitle <- byId "lcolonq-subtitle"
- listen subtitle "click" \_ev -> do
- startTwitchAuth
- launchAff_ updateSubtitle
-
- for_ (Array.range 0 6) \i -> do
- letter <- byId $ "lcolonq-letter-" <> show i
- listen letter "click" \_ev -> do
- Audio.playVoice true i
- listen letter "mouseover" \_ev -> do
- Audio.playVoice false i
-
-mainExtension :: Effect Unit
-mainExtension = launchAff_ do
- liftEffect $ log "hello from extension"
- UI.setInterval 1000.0 do
- e <- query ".chat-scrollable-area__message-container"
- new <- create "div" [".chat-line__message"] []
- appendText new "test"
- appendElement e new
-
-mainObs :: Effect Unit
-mainObs = launchAff_ do
- startModel
-
-main :: Effect Unit
-main = case Config.mode of
- 0 -> mainHomepage
- 1 -> mainExtension
- 2 -> mainObs
- _ -> throw "unknown mode"
diff --git a/fig-frontend-client/src/Model.js b/fig-frontend-client/src/Model.js
deleted file mode 100644
index 797bae4..0000000
--- a/fig-frontend-client/src/Model.js
+++ /dev/null
@@ -1,108 +0,0 @@
-let canvas = document.getElementById("lcolonq-canvas");
-let socket = null;
-let currentFrame = null;
-
-async function decompress(blob) {
- let ds = new DecompressionStream("gzip");
- let stream = blob.stream();
- let out = await new Response(stream.pipeThrough(ds));
- return out.arrayBuffer();
-}
-
-function readCell(dv, base) {
- let cell = {};
- let o = base;
- if (dv.getUint8(o) == 0) {
- return [{type: "bg"}, o + 1];
- } else {
- cell.type = "fg";
- cell.custom = dv.getUint8(o + 1);
- cell.r = dv.getUint8(o + 2);
- cell.g = dv.getUint8(o + 3);
- cell.b = dv.getUint8(o + 4);
- cell.g0 = dv.getUint32(o + 5);
- if (dv.getUint8(o + 9) == 0) {
- return [cell, o + 10];
- } else {
- cell.g1 = dv.getUint32(o + 10);
- return [cell, o + 14];
- }
- }
-}
-
-function readKeyframe(dv, base) {
- let ret = [];
- let o = base;
- for (let idx = 0; idx < (64 * 64); ++idx) {
- let res = readCell(dv, o);
- ret.push(res[0]);
- o = res[1];
- }
- currentFrame = ret;
-}
-
-function readDiff(dv, base) {
- if (currentFrame) {
- let len = dv.getUint32(base);
- let o = base + 4;
- for (let idx = 0; idx < len; ++idx) {
- let x = dv.getUint8(o);
- let y = dv.getUint8(o + 1);
- let c = readCell(dv, o + 2);
- currentFrame[x + (y * 64)] = c[0];
- o = c[1];
- }
- }
-}
-
-function readPacket(dv) {
- if (dv.getUint8(0) == 0) {
- readKeyframe(dv, 1);
- } else {
- readDiff(dv, 1);
- }
-}
-
-function renderCellCanvas(ctx, x, y, c) {
- if (c && c.type === "fg") {
- let msg = c.g1 ? String.fromCodePoint(c.g0, c.g1) : String.fromCodePoint(c.g0);
- if (msg.trim().length) {
- ctx.fillStyle = "black";
- ctx.fillRect(13 * y, 13 * x, 13, 13);
- ctx.fillStyle = `rgba(${c.r}, ${c.g}, ${c.b}, 1.0)`;
- ctx.fillText(msg, 13 * y, 13 * x + 10);
- }
- }
-}
-
-function renderCanvas() {
- if (canvas.width != canvas.clientWidth) {
- canvas.width = canvas.clientWidth;
- }
- if (canvas.height != canvas.clientHeight) {
- canvas.height = canvas.clientHeight;
- }
- if (currentFrame) {
- let ctx = canvas.getContext("2d");
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.font = "12px Iosevka Comfy";
- for (let y = 0; y < 64; ++y) {
- for (let x = 0; x < 64; ++x) {
- renderCellCanvas(ctx, x, y, currentFrame[(x * 64) + y]);
- }
- }
- }
-}
-
-export const _startModel = () => {
- socket = new WebSocket("wss://colonq.computer/bullfrog/api/channel/listen/model");
- socket.addEventListener("open", (ev) => {
- console.log("connected");
- });
- socket.addEventListener("message", async (ev) => {
- let arr = await decompress(ev.data);
- let view = new DataView(arr);
- readPacket(view);
- renderCanvas();
- });
-};
diff --git a/fig-frontend-client/src/Model.purs b/fig-frontend-client/src/Model.purs
deleted file mode 100644
index a9f2888..0000000
--- a/fig-frontend-client/src/Model.purs
+++ /dev/null
@@ -1,10 +0,0 @@
-module Model where
-
-import Prelude
-
-import Effect (Effect)
-import Effect.Class (class MonadEffect, liftEffect)
-
-foreign import _startModel :: Effect Unit
-startModel :: forall m. MonadEffect m => m Unit
-startModel = liftEffect _startModel
diff --git a/fig-frontend-client/src/UI.js b/fig-frontend-client/src/UI.js
deleted file mode 100644
index 0b00e5d..0000000
--- a/fig-frontend-client/src/UI.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export const _cheatLog = (a) => () => console.log(a);
-export const _setInterval = (delay) => (f) => () => setInterval(f, delay);
diff --git a/fig-frontend-client/src/UI.purs b/fig-frontend-client/src/UI.purs
deleted file mode 100644
index 49d797a..0000000
--- a/fig-frontend-client/src/UI.purs
+++ /dev/null
@@ -1,13 +0,0 @@
-module UI where
-
-import Prelude
-import Effect (Effect)
-import Effect.Class (class MonadEffect, liftEffect)
-
-foreign import _cheatLog :: forall a. a -> Effect Unit
-cheatLog :: forall m a. MonadEffect m => a -> m Unit
-cheatLog x = liftEffect $ _cheatLog x
-
-foreign import _setInterval :: Number -> Effect Unit -> Effect Unit
-setInterval :: forall m. MonadEffect m => Number -> Effect Unit -> m Unit
-setInterval d f = liftEffect $ _setInterval d f
diff --git a/fig-frontend-client/templates/index.html b/fig-frontend-client/templates/index.html
deleted file mode 100644
index 8827694..0000000
--- a/fig-frontend-client/templates/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
- <title>LCOLONQ</title>
- <link rel="icon" href="./assets/mrgreen.png">
- <link rel="stylesheet" type="text/css" href="./main.css">
- <script type="module">
-CONFIG_SUBST
- </script>
- <script type="module" src="./main.js"></script>
- </head>
- <body class="lcolonq-index">
- <!-- RINGBEARER -->
- <canvas id="lcolonq-canvas"></canvas>
- <div id="lcolonq-title">
- <span class="lcolonq-letter" id="lcolonq-letter-0">L</span><span class="lcolonq-letter" id="lcolonq-letter-1">C</span><span class="lcolonq-letter" id="lcolonq-letter-2">O</span><span class="lcolonq-letter" id="lcolonq-letter-3">L</span><span class="lcolonq-letter" id="lcolonq-letter-4">O</span><span class="lcolonq-letter" id="lcolonq-letter-5">N</span><span class="lcolonq-letter" id="lcolonq-letter-6">Q</span>
- <div id="lcolonq-subtitle">
- </div>
- </div>
- <div id="lcolonq-header">
- <a href="https://twitch.tv/LCOLONQ">
- <marquee id="lcolonq-marquee">
- </marquee>
- </a>
- </div>
- <div id="lcolonq-footer">
- <a href="https://pub.colonq.computer/~llll/cgi-bin/ring?me=llll&offset=-1">back</a>
- <a class="right" href="https://pub.colonq.computer/~llll/cgi-bin/ring?me=llll&offset=1">next</a>
- </div>
- <audio id="lcolonq-audio-voice-0" src="assets/voice/0.wav"></audio>
- <audio id="lcolonq-audio-voice-1" src="assets/voice/1.wav"></audio>
- <audio id="lcolonq-audio-voice-2" src="assets/voice/2.wav"></audio>
- <audio id="lcolonq-audio-voice-3" src="assets/voice/3.wav"></audio>
- <audio id="lcolonq-audio-voice-4" src="assets/voice/4.wav"></audio>
- <audio id="lcolonq-audio-voice-5" src="assets/voice/5.wav"></audio>
- <audio id="lcolonq-audio-voice-6" src="assets/voice/6.wav"></audio>
- </body>
-</html>
diff --git a/fig-frontend-client/templates/obs.html b/fig-frontend-client/templates/obs.html
deleted file mode 100644
index 999035a..0000000
--- a/fig-frontend-client/templates/obs.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
- <title>LCOLONQ Browser Source</title>
- <link rel="icon" href="./assets/mrgreen.png">
- <link rel="stylesheet" type="text/css" href="./main.css">
- <script type="module">
-CONFIG_SUBST
- globalThis.mode = 2;
- </script>
- <script type="module" src="./main.js"></script>
- </head>
- <body class="lcolonq-obs">
- <canvas id="lcolonq-canvas"></canvas>
- </body>
-</html>