aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-04-29 13:26:09 -0400
committerXe Iaso <me@xeiaso.net>2023-04-29 13:26:09 -0400
commit042d4fa9523edb9b0613902d67452df10078c836 (patch)
tree377a856295cdefa79ff5f807b1370c975e899e7a /src
parent9d9614ad8a4a1d00f7df1b0e37ec32d324151335 (diff)
downloadxesite-yarn.tar.xz
xesite-yarn.zip
fucking horrible typescript garbageyarn
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'src')
-rw-r--r--src/frontend/.gitignore3
-rw-r--r--src/frontend/build.mjs12
-rw-r--r--src/frontend/build.ts19
-rw-r--r--src/frontend/components/ConvSnippet.tsx3
-rw-r--r--src/frontend/components/MastodonShareButton.tsx32
-rw-r--r--src/frontend/components/NoFunAllowed.tsx7
-rw-r--r--src/frontend/components/Video.tsx22
-rw-r--r--src/frontend/components/WASITerm.tsx18
-rw-r--r--src/frontend/package-lock.json161
-rw-r--r--src/frontend/package.json37
-rw-r--r--src/frontend/tsconfig.json19
-rw-r--r--src/frontend/types/xeact.d.ts76
-rw-r--r--src/frontend/yarn.lock81
13 files changed, 424 insertions, 66 deletions
diff --git a/src/frontend/.gitignore b/src/frontend/.gitignore
index 5f98501..a3edb6a 100644
--- a/src/frontend/.gitignore
+++ b/src/frontend/.gitignore
@@ -1 +1,2 @@
-dist/*.js
+dist/*
+node_modules
diff --git a/src/frontend/build.mjs b/src/frontend/build.mjs
new file mode 100644
index 0000000..488e30f
--- /dev/null
+++ b/src/frontend/build.mjs
@@ -0,0 +1,12 @@
+import * as esbuild from "esbuild";
+
+const result = await esbuild.build({
+ entryPoints: process.argv,
+ outdir: process.env.WRITE_TO
+ ? process.env.WRITE_TO
+ : "../../static/xeact",
+ bundle: true,
+ splitting: true,
+ format: "esm",
+ minifyWhitespace: !!process.env.MINIFY,
+});
diff --git a/src/frontend/build.ts b/src/frontend/build.ts
deleted file mode 100644
index ed36e2e..0000000
--- a/src/frontend/build.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import * as esbuild from "@esbuild";
-import { denoPlugin } from "@esbuild/deno";
-
-const result = await esbuild.build({
- plugins: [denoPlugin({
- importMapURL: new URL("./import_map.json", import.meta.url),
- })],
- entryPoints: Deno.args,
- outdir: Deno.env.get("WRITE_TO")
- ? Deno.env.get("WRITE_TO")
- : "../../static/xeact",
- bundle: true,
- splitting: true,
- format: "esm",
- minifyWhitespace: !!Deno.env.get("MINIFY"),
-});
-console.log(result.outputFiles);
-
-esbuild.stop();
diff --git a/src/frontend/components/ConvSnippet.tsx b/src/frontend/components/ConvSnippet.tsx
index 9644333..99c254e 100644
--- a/src/frontend/components/ConvSnippet.tsx
+++ b/src/frontend/components/ConvSnippet.tsx
@@ -1,6 +1,3 @@
-// @jsxImportSource xeact
-// @jsxRuntime automatic
-
export interface ConvSnippetProps {
name: string;
mood: string;
diff --git a/src/frontend/components/MastodonShareButton.tsx b/src/frontend/components/MastodonShareButton.tsx
index d809ee9..a0d56f0 100644
--- a/src/frontend/components/MastodonShareButton.tsx
+++ b/src/frontend/components/MastodonShareButton.tsx
@@ -1,17 +1,15 @@
-// @jsxImportSource xeact
-// @jsxRuntime automatic
-
-import { u, useState } from "xeact";
+import { u } from "@xeserv/xeact";
+import { useState } from 'preact/hooks';
export interface MastodonShareButtonProps {
title: string;
url: string;
series?: string;
- tags: string;
+ tags: string[];
}
export default function MastodonShareButton(
- { title, url = u(), series, tags }: MastodonShareButtonProps,
+ { title, url = u("", {}), series, tags }: MastodonShareButtonProps,
) {
let defaultURL = localStorage["mastodon_instance"];
@@ -27,8 +25,8 @@ ${series ? "#" + series + " " : ""}${
tags ? tags.map((x) => "#" + x).join(" ") : ""
} @cadey@pony.social`;
- const [getURL, setURL] = useState(defaultURL);
- const [getToot, setToot] = useState(tootTemplate);
+ const [theURL, setURL] = useState(defaultURL);
+ const [toot, setToot] = useState(tootTemplate);
return (
<div>
@@ -40,27 +38,33 @@ ${series ? "#" + series + " " : ""}${
type="text"
placeholder="https://pony.social"
value={defaultURL}
- oninput={(e) => setURL(e.target.value)}
+ onInput={(e) => {
+ const target = e.target as HTMLInputElement;
+ setURL(target.value);
+ }}
/>
<br />
<textarea
rows={6}
cols={40}
- oninput={(e) => setToot(e.target.value)}
+ onInput={(e) => {
+ const target = e.target as HTMLTextAreaElement;
+ setToot(target.value)
+ }}
>
- {getToot()}
+ {toot}
</textarea>
<br />
<button
- onclick={() => {
- let instanceURL = getURL();
+ onClick={() => {
+ let instanceURL = theURL;
if (!instanceURL.startsWith("https://")) {
instanceURL = `https://${instanceURL}`;
}
localStorage["mastodon_instance"] = instanceURL;
- const text = getToot();
+ const text = toot;
const mastodonURL = u(instanceURL + "/share", {
text,
visibility: "public",
diff --git a/src/frontend/components/NoFunAllowed.tsx b/src/frontend/components/NoFunAllowed.tsx
index 9f5c5f5..249bcbf 100644
--- a/src/frontend/components/NoFunAllowed.tsx
+++ b/src/frontend/components/NoFunAllowed.tsx
@@ -1,7 +1,4 @@
-// @jsxImportSource xeact
-// @jsxRuntime automatic
-
-import { c } from "xeact";
+import { c } from "@xeserv/xeact";
const onclick = () => {
Array.from(c("xeblog-slides-fluff")).forEach((el) =>
@@ -13,7 +10,7 @@ export default function NoFunAllowed() {
const button = (
<button
class=""
- onclick={() => onclick()}
+ onClick={() => onclick()}
>
No fun allowed
</button>
diff --git a/src/frontend/components/Video.tsx b/src/frontend/components/Video.tsx
index 812e6bd..1d83319 100644
--- a/src/frontend/components/Video.tsx
+++ b/src/frontend/components/Video.tsx
@@ -1,7 +1,5 @@
-// @jsxImportSource xeact
-// @jsxRuntime automatic
-
-import Hls from "@hls.js";
+import Hls from "hls.js";
+import { h } from "@xeserv/xeact";
export interface VideoProps {
path: string;
@@ -9,16 +7,12 @@ export interface VideoProps {
export default function Video({ path }: VideoProps) {
const streamURL =
- `https://cdn.xeiaso.net/file/christine-static/${path}/index.m3u8`;
- const video = (
- <video style="width:100%" controls>
- <source src={streamURL} type="application/vnd.apple.mpegurl" />
- <source
- src="https://cdn.xeiaso.net/file/christine-static/blog/HLSBROKE.mp4"
- type="video/mp4"
- />
- </video>
- );
+ `https://cdn.xeiaso.net/file/christine-static/${path}/index.m3u8`;
+ const video: HTMLVideoElement =
+ h("video", {style: "width:100%", controls: true}, [
+ h("source", {src: streamURL, type: "application/vnd.apple.mpegurl"}, []),
+ h("source", {src: "https://cdn.xeiaso.net/file/christine-static/blog/HLSBROKE.mp4", type: "video/mp4"}, [])
+ ]) as unknown as HTMLVideoElement;
if (Hls.isSupported()) {
const hls = new Hls();
diff --git a/src/frontend/components/WASITerm.tsx b/src/frontend/components/WASITerm.tsx
index 5f7e7f9..644f293 100644
--- a/src/frontend/components/WASITerm.tsx
+++ b/src/frontend/components/WASITerm.tsx
@@ -1,9 +1,6 @@
-// @jsxImportSource xeact
-// @jsxRuntime automatic
-
-import { t, x } from "xeact";
-import Terminal from "@xterm";
-import * as fitAdd from "@xterm/addon-fit";
+import { t, x, h } from "@xeserv/xeact";
+import { Terminal } from "xterm";
+import { FitAddon } from 'xterm-addon-fit';
import { Fd, File, PreopenDirectory, WASI } from "@bjorn3/browser_wasi_shim";
class XtermStdio extends Fd {
@@ -41,16 +38,17 @@ export interface WASITermProps {
}
export default function WASITerm({ href, env, args }: WASITermProps) {
- const root = <div style="max-width:80ch;max-height:20ch"></div>;
+ const root = h("div", {style:"max-width:80ch;max-height:20ch"}, []);
const term = new Terminal({
convertEol: true,
fontFamily: "Iosevka Curly Iaso",
});
- const fit = new fitAdd.default();
- term.loadAddon(fit);
- fit.fit();
+ const fitAddon = new FitAddon();
+ term.loadAddon(fitAddon);
+ term.open(root);
+ fitAddon.fit();
return (
<div>
diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json
new file mode 100644
index 0000000..0415190
--- /dev/null
+++ b/src/frontend/package-lock.json
@@ -0,0 +1,161 @@
+{
+ "name": "xesite-frontend",
+ "version": "2.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "xesite-frontend",
+ "version": "2.0.0",
+ "license": "Zlib",
+ "dependencies": {
+ "@bjorn3/browser_wasi_shim": "^0.2.8",
+ "@xeserv/xeact": "0.71.1",
+ "hls.js": "^1.4.0",
+ "preact": "^10.13.2",
+ "xterm": "^5.1.0",
+ "xterm-addon-fit": "^0.7.0"
+ },
+ "devDependencies": {
+ "@types/node": "^18.16.3",
+ "esbuild": "0.17.13",
+ "prettier": "^2.8.8",
+ "typescript": "^5.0.4"
+ }
+ },
+ "node_modules/@bjorn3/browser_wasi_shim": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@bjorn3/browser_wasi_shim/-/browser_wasi_shim-0.2.8.tgz",
+ "integrity": "sha512-omPjmPH2Yk/VM7739/BYtaU9JKuzHlmr6GwyGreaefIbhDgwJxO+NjjBZaEZ8/GjtC8dZXshJGfghJ/ZOPEuqg==",
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.17.13",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.13.tgz",
+ "integrity": "sha512-eFLQhJq98qijGRcv9je/9M4Mz1suZ+pOtj62ArsLd0gubNGhhQDz6T30X2X3f1KZ8lkKkr+zN5vtZzx1GAMoFw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "18.16.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz",
+ "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@xeserv/xeact": {
+ "version": "0.71.1",
+ "resolved": "https://registry.npmjs.org/@xeserv/xeact/-/xeact-0.71.1.tgz",
+ "integrity": "sha512-5q3mvoVsx+AieAIGKbawXtAcPl/DDe+z69rUr3kZbL4BfwWMQAw3ttAJ4h5nORllrsV+2u2jElJg50TOI8FiVQ==",
+ "license": "mit"
+ },
+ "node_modules/esbuild": {
+ "version": "0.17.13",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.13.tgz",
+ "integrity": "sha512-4ixMwdErBcQHgTBeoxnowENCPKWFAGxgTyKHMK8gqn9sZaC7ZNWFKtim16g2rzQ2b/FYyy3lIUUJboFtjolhqg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.17.13",
+ "@esbuild/android-arm64": "0.17.13",
+ "@esbuild/android-x64": "0.17.13",
+ "@esbuild/darwin-arm64": "0.17.13",
+ "@esbuild/darwin-x64": "0.17.13",
+ "@esbuild/freebsd-arm64": "0.17.13",
+ "@esbuild/freebsd-x64": "0.17.13",
+ "@esbuild/linux-arm": "0.17.13",
+ "@esbuild/linux-arm64": "0.17.13",
+ "@esbuild/linux-ia32": "0.17.13",
+ "@esbuild/linux-loong64": "0.17.13",
+ "@esbuild/linux-mips64el": "0.17.13",
+ "@esbuild/linux-ppc64": "0.17.13",
+ "@esbuild/linux-riscv64": "0.17.13",
+ "@esbuild/linux-s390x": "0.17.13",
+ "@esbuild/linux-x64": "0.17.13",
+ "@esbuild/netbsd-x64": "0.17.13",
+ "@esbuild/openbsd-x64": "0.17.13",
+ "@esbuild/sunos-x64": "0.17.13",
+ "@esbuild/win32-arm64": "0.17.13",
+ "@esbuild/win32-ia32": "0.17.13",
+ "@esbuild/win32-x64": "0.17.13"
+ }
+ },
+ "node_modules/hls.js": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.4.0.tgz",
+ "integrity": "sha512-VEjg7Rx5FlE9TB3MIn0HPgq3J+vR7EoQnjaqMCk/ISEaCOSZlAFh4g867f1QkSxZiq9kHeUZo+iH16X7VS3jKA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/preact": {
+ "version": "10.13.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.13.2.tgz",
+ "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
+ "node_modules/xterm": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.1.0.tgz",
+ "integrity": "sha512-LovENH4WDzpwynj+OTkLyZgJPeDom9Gra4DMlGAgz6pZhIDCQ+YuO7yfwanY+gVbn/mmZIStNOnVRU/ikQuAEQ==",
+ "license": "MIT"
+ },
+ "node_modules/xterm-addon-fit": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.7.0.tgz",
+ "integrity": "sha512-tQgHGoHqRTgeROPnvmtEJywLKoC/V9eNs4bLLz7iyJr1aW/QFzRwfd3MGiJ6odJd9xEfxcW36/xRU47JkD5NKQ==",
+ "peerDependencies": {
+ "xterm": "^5.0.0"
+ }
+ }
+ }
+}
diff --git a/src/frontend/package.json b/src/frontend/package.json
new file mode 100644
index 0000000..ef9a646
--- /dev/null
+++ b/src/frontend/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "xesite-frontend",
+ "version": "2.0.0",
+ "description": "The frontend for Xesite, now in node.js",
+ "main": "index.js",
+ "scripts": {
+ "test": "mocha"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Xe/site.git"
+ },
+ "keywords": [
+ "frontend",
+ "xeact"
+ ],
+ "author": "Xe Iaso <xesite@xeserv.us>",
+ "license": "Zlib",
+ "bugs": {
+ "url": "https://github.com/Xe/site/issues"
+ },
+ "homepage": "https://github.com/Xe/site#readme",
+ "devDependencies": {
+ "@types/node": "^18.16.3",
+ "esbuild": "0.17.13",
+ "prettier": "^2.8.8",
+ "typescript": "^5.0.4"
+ },
+ "dependencies": {
+ "@bjorn3/browser_wasi_shim": "^0.2.8",
+ "@xeserv/xeact": "0.71.1",
+ "hls.js": "^1.4.0",
+ "preact": "^10.13.2",
+ "xterm": "^5.1.0",
+ "xterm-addon-fit": "^0.7.0"
+ }
+}
diff --git a/src/frontend/tsconfig.json b/src/frontend/tsconfig.json
new file mode 100644
index 0000000..0b3041c
--- /dev/null
+++ b/src/frontend/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ // https://www.typescriptlang.org/tsconfig#compilerOptions
+ "compilerOptions": {
+ "esModuleInterop": true,
+ "lib": ["es2020", "es2022", "dom"],
+ "module": "es2022",
+ "preserveConstEnums": true,
+ "moduleResolution": "node",
+ "strict": true,
+ "sourceMap": true,
+ "target": "es2022",
+ "types": ["node"],
+ "outDir": "dist",
+ "jsx": "react-jsx",
+ "jsxImportSource": "preact"
+ },
+ "include": ["components/**/*.tsx", "src/**/*", "tests/**/*", "types/**/*"],
+ "exclude": ["node_modules"]
+}
diff --git a/src/frontend/types/xeact.d.ts b/src/frontend/types/xeact.d.ts
new file mode 100644
index 0000000..4b7656f
--- /dev/null
+++ b/src/frontend/types/xeact.d.ts
@@ -0,0 +1,76 @@
+declare module "@xeserv/xeact" {
+/**
+ * Creates a DOM element, assigns the properties of `data` to it, and appends all `children`.
+ *
+ * @type{function(string|Function, Object=, Node|Array.<Node|string>=)}
+ */
+export const h: (arg0: string | Function, arg1: any | undefined, arg2: (Node | Array<Node | string>) | undefined) => any;
+/**
+ * Create a text node.
+ *
+ * Equivalent to `document.createTextNode(text)`
+ *
+ * @type{function(string): Text}
+ */
+export const t: (arg0: string) => Text;
+/**
+ * Remove all child nodes from a DOM element.
+ *
+ * @type{function(Node)}
+ */
+export const x: (arg0: Node) => any;
+/**
+ * Get all elements with the given ID.
+ *
+ * Equivalent to `document.getElementById(name)`
+ *
+ * @type{function(string): HTMLElement}
+ */
+export const g: (arg0: string) => HTMLElement;
+/**
+ * Get all elements with the given class name.
+ *
+ * Equivalent to `document.getElementsByClassName(name)`
+ *
+ * @type{function(string): HTMLCollectionOf.<Element>}
+ */
+export const c: (arg0: string) => HTMLCollectionOf<Element>;
+/** @type{function(string): HTMLCollectionOf.<Element>} */
+export const n: (arg0: string) => HTMLCollectionOf<Element>;
+/**
+ * Generate a relative URL from `url`, appending all key-value pairs from `params` as URL-encoded parameters.
+ *
+ * @type{function(string=, Object=): string}
+ */
+export const u: (arg0: string | undefined, arg1: any | undefined) => string;
+/**
+ * Get all elements matching the given HTML selector.
+ *
+ * Matches selectors with `document.querySelectorAll(selector)`
+ *
+ * @type{function(string): Array.<HTMLElement>}
+ */
+export const s: (arg0: string) => Array<HTMLElement>;
+/**
+ * Takes a callback to run when all DOM content is loaded.
+ *
+ * Equivalent to `window.addEventListener('DOMContentLoaded', callback)`
+ *
+ * @type{function(function())}
+ */
+export const r: (arg0: () => any) => any;
+/**
+ * Allows a stateful value to be tracked by consumers.
+ *
+ * This is the Xeact version of the React useState hook.
+ *
+ * @type{function(any): [function(): any, function(any): void]}
+ */
+export const useState: (arg0: any) => [() => any, (arg0: any) => void];
+/**
+ * Debounce an action for up to ms milliseconds.
+ *
+ * @type{function(number): function(function(any): void)}
+ */
+ export const d: (arg0: number) => (arg0: (arg0: any) => void) => any;
+}
diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock
new file mode 100644
index 0000000..9a95370
--- /dev/null
+++ b/src/frontend/yarn.lock
@@ -0,0 +1,81 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@bjorn3/browser_wasi_shim@^0.2.8":
+ version "0.2.8"
+ resolved "https://registry.npmjs.org/@bjorn3/browser_wasi_shim/-/browser_wasi_shim-0.2.8.tgz"
+ integrity sha512-omPjmPH2Yk/VM7739/BYtaU9JKuzHlmr6GwyGreaefIbhDgwJxO+NjjBZaEZ8/GjtC8dZXshJGfghJ/ZOPEuqg==
+
+"@esbuild/linux-x64@0.17.13":
+ version "0.17.13"
+ resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.13.tgz"
+ integrity sha512-eFLQhJq98qijGRcv9je/9M4Mz1suZ+pOtj62ArsLd0gubNGhhQDz6T30X2X3f1KZ8lkKkr+zN5vtZzx1GAMoFw==
+
+"@types/node@^18.16.3":
+ version "18.16.3"
+ resolved "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz"
+ integrity sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==
+
+"@xeserv/xeact@0.71.1":
+ version "0.71.1"
+ resolved "https://registry.npmjs.org/@xeserv/xeact/-/xeact-0.71.1.tgz"
+ integrity sha512-5q3mvoVsx+AieAIGKbawXtAcPl/DDe+z69rUr3kZbL4BfwWMQAw3ttAJ4h5nORllrsV+2u2jElJg50TOI8FiVQ==
+
+esbuild@0.17.13:
+ version "0.17.13"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.13.tgz"
+ integrity sha512-4ixMwdErBcQHgTBeoxnowENCPKWFAGxgTyKHMK8gqn9sZaC7ZNWFKtim16g2rzQ2b/FYyy3lIUUJboFtjolhqg==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.17.13"
+ "@esbuild/android-arm64" "0.17.13"
+ "@esbuild/android-x64" "0.17.13"
+ "@esbuild/darwin-arm64" "0.17.13"
+ "@esbuild/darwin-x64" "0.17.13"
+ "@esbuild/freebsd-arm64" "0.17.13"
+ "@esbuild/freebsd-x64" "0.17.13"
+ "@esbuild/linux-arm" "0.17.13"
+ "@esbuild/linux-arm64" "0.17.13"
+ "@esbuild/linux-ia32" "0.17.13"
+ "@esbuild/linux-loong64" "0.17.13"
+ "@esbuild/linux-mips64el" "0.17.13"
+ "@esbuild/linux-ppc64" "0.17.13"
+ "@esbuild/linux-riscv64" "0.17.13"
+ "@esbuild/linux-s390x" "0.17.13"
+ "@esbuild/linux-x64" "0.17.13"
+ "@esbuild/netbsd-x64" "0.17.13"
+ "@esbuild/openbsd-x64" "0.17.13"
+ "@esbuild/sunos-x64" "0.17.13"
+ "@esbuild/win32-arm64" "0.17.13"
+ "@esbuild/win32-ia32" "0.17.13"
+ "@esbuild/win32-x64" "0.17.13"
+
+hls.js@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/hls.js/-/hls.js-1.4.0.tgz"
+ integrity sha512-VEjg7Rx5FlE9TB3MIn0HPgq3J+vR7EoQnjaqMCk/ISEaCOSZlAFh4g867f1QkSxZiq9kHeUZo+iH16X7VS3jKA==
+
+preact@^10.13.2:
+ version "10.13.2"
+ resolved "https://registry.npmjs.org/preact/-/preact-10.13.2.tgz"
+ integrity sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==
+
+prettier@^2.8.8:
+ version "2.8.8"
+ resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz"
+ integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
+
+typescript@^5.0.4:
+ version "5.0.4"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz"
+ integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
+
+xterm-addon-fit@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.7.0.tgz"
+ integrity sha512-tQgHGoHqRTgeROPnvmtEJywLKoC/V9eNs4bLLz7iyJr1aW/QFzRwfd3MGiJ6odJd9xEfxcW36/xRU47JkD5NKQ==
+
+xterm@^5.0.0, xterm@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/xterm/-/xterm-5.1.0.tgz"
+ integrity sha512-LovENH4WDzpwynj+OTkLyZgJPeDom9Gra4DMlGAgz6pZhIDCQ+YuO7yfwanY+gVbn/mmZIStNOnVRU/ikQuAEQ==