I like .bind() more
This commit is contained in:
parent
b34b24e783
commit
702bc64bc3
3 changed files with 49 additions and 25 deletions
|
|
@ -8,7 +8,7 @@ import Layout from "@layouts/Layout.astro";
|
||||||
</Layout-->
|
</Layout-->
|
||||||
<script>
|
<script>
|
||||||
import { EventHandler } from "@utils/events";
|
import { EventHandler } from "@utils/events";
|
||||||
import { createBareMuxConn, createProxyScripts, SW } from "@utils/serviceWorker";
|
import { checkProxyScripts, createBareMuxConn, createProxyScripts, SW } from "@utils/serviceWorker";
|
||||||
import { navigate } from "astro:transitions/client";
|
import { navigate } from "astro:transitions/client";
|
||||||
function isComingFromIframe() {
|
function isComingFromIframe() {
|
||||||
try {
|
try {
|
||||||
|
|
@ -25,24 +25,12 @@ import { createBareMuxConn, createProxyScripts, SW } from "@utils/serviceWorker"
|
||||||
const isIframe = isComingFromIframe();
|
const isIframe = isComingFromIframe();
|
||||||
if (!isIframe) {
|
if (!isIframe) {
|
||||||
console.log("Assuming request isn't coming from iframe. Redirecting...");
|
console.log("Assuming request isn't coming from iframe. Redirecting...");
|
||||||
//navigate("/");
|
navigate("/");
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
"DOMContentLoaded": (async () => {
|
|
||||||
for (let item of createProxyScripts()) {
|
|
||||||
document.body.appendChild(item);
|
|
||||||
}
|
|
||||||
const checkScript = setInterval(async () => {
|
|
||||||
if (typeof __uv$config !== "undefined" && typeof ScramjetController !== "undefined") {
|
|
||||||
clearInterval(checkScript);
|
|
||||||
const conn = await createBareMuxConn("/baremux/worker.js");
|
|
||||||
window.sw = new SW(conn);
|
|
||||||
}
|
|
||||||
}, 100);
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
logging: false
|
logging: false
|
||||||
});
|
});
|
||||||
//Handle the events.
|
//Handle the events
|
||||||
eHandle.handleEvents();
|
eHandle.bind();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ interface Events {
|
||||||
* logging: false // Set this to true to enable logging when things go wrong.
|
* logging: false // Set this to true to enable logging when things go wrong.
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* eventHandler.handleEvents(); // Attaches every event you passed.
|
* eventHandler.bind(); // Attaches every event you passed.
|
||||||
*/
|
*/
|
||||||
class EventHandler {
|
class EventHandler {
|
||||||
#eventItems: Events;
|
#eventItems: Events;
|
||||||
|
|
@ -37,7 +37,7 @@ class EventHandler {
|
||||||
/**
|
/**
|
||||||
* Attatches the events you passed when creating the class. If none are passed, an error is thrown.
|
* Attatches the events you passed when creating the class. If none are passed, an error is thrown.
|
||||||
*/
|
*/
|
||||||
handleEvents() {
|
bind(): void | Error {
|
||||||
const events = Object.entries(this.#eventItems.events);
|
const events = Object.entries(this.#eventItems.events);
|
||||||
if (!events || events.length === 0) throw new Error('No events added!');
|
if (!events || events.length === 0) throw new Error('No events added!');
|
||||||
events.map((event) => {
|
events.map((event) => {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,25 @@ function* createProxyScripts() {
|
||||||
yield sj;
|
yield sj;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that resolves ONLY when uv and Scramjet are not undefined. This prevents us from using these values before they are added and executed.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* await checkProxyScripts();
|
||||||
|
* @example
|
||||||
|
* checkProxyScripts().then(() => { // Do something });
|
||||||
|
*/
|
||||||
|
const checkProxyScripts = (): Promise<void> => {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const checkScript = setInterval(() => {
|
||||||
|
if (typeof __uv$config !== "undefined" && typeof ScramjetController !== "undefined") {
|
||||||
|
clearInterval(checkScript);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a bareMux connection an returns it the instantiated instance as a promise.
|
* Creates a bareMux connection an returns it the instantiated instance as a promise.
|
||||||
*
|
*
|
||||||
|
|
@ -79,6 +98,7 @@ type SWInit = {
|
||||||
*/
|
*/
|
||||||
class SW {
|
class SW {
|
||||||
#init!: SWInit;
|
#init!: SWInit;
|
||||||
|
#ready: boolean = false;
|
||||||
constructor(conn: BareMuxConnection) {
|
constructor(conn: BareMuxConnection) {
|
||||||
const sj = (): ScramjetController => {
|
const sj = (): ScramjetController => {
|
||||||
const sj = new ScramjetController({
|
const sj = new ScramjetController({
|
||||||
|
|
@ -98,7 +118,8 @@ class SW {
|
||||||
(async () => await scram.init())();
|
(async () => await scram.init())();
|
||||||
navigator.serviceWorker.ready.then(async (reg) => {
|
navigator.serviceWorker.ready.then(async (reg) => {
|
||||||
console.log("Service worker ready and active!");
|
console.log("Service worker ready and active!");
|
||||||
this.#init = { serviceWorker: reg, sj: scram, bareMuxConn: conn }
|
this.#init = { serviceWorker: reg, sj: scram, bareMuxConn: conn };
|
||||||
|
this.#ready = true;
|
||||||
});
|
});
|
||||||
navigator.serviceWorker.register("/sw.js", { scope: '/' });
|
navigator.serviceWorker.register("/sw.js", { scope: '/' });
|
||||||
}
|
}
|
||||||
|
|
@ -111,16 +132,31 @@ class SW {
|
||||||
* Allows you to overrid the items set. Should be used sparingly or never.
|
* Allows you to overrid the items set. Should be used sparingly or never.
|
||||||
*/
|
*/
|
||||||
setSWInfo(items: SWInit): void {
|
setSWInfo(items: SWInit): void {
|
||||||
this.#init = { serviceWorker: items.serviceWorker, sj: items.sj, bareMuxConn: items.bareMuxConn }
|
this.#init = { serviceWorker: items.serviceWorker, sj: items.sj, bareMuxConn: items.bareMuxConn };
|
||||||
|
this.#ready = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an object with the service worker, scramjet controller and baremux connection all in one method.
|
* Returns a promise that resolves to the serviceWorker, scramjet controller and bareMux Connection ONLY when these values are ready.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const sw = new SW(conn); // "conn" must be a baremux connection that you created.
|
||||||
|
* const swInfo = await sw.getSWInfo();
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const sw = new SW(conn); // "conn" must be a baremux connection that you created
|
||||||
|
* sw.getInfo().then((info) => { // Do something with said info }
|
||||||
*/
|
*/
|
||||||
getSWInfo(): SWInit | Error {
|
getSWInfo(): Promise<SWInit> {
|
||||||
if (this.#init !== undefined) return this.#init;
|
return new Promise((resolve) => {
|
||||||
return new Error("this object is undefined!");
|
const checkState = setInterval(() => {
|
||||||
|
if (this.#ready) {
|
||||||
|
clearInterval(checkState);
|
||||||
|
resolve(this.#init);
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { createScript, createProxyScripts, createBareMuxConn, setTransport, SW };
|
export { createScript, createProxyScripts, checkProxyScripts, createBareMuxConn, setTransport, SW };
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue