Updates to fix errors for CC

This commit is contained in:
MathMan05 2024-08-21 14:51:34 -05:00
parent 3ccb7e63e1
commit 274c165357
22 changed files with 731 additions and 926 deletions

View file

@ -1,4 +1,3 @@
export { Dialog };
class Dialog { class Dialog {
layout; layout;
onclose; onclose;
@ -245,3 +244,4 @@ class Dialog {
document.body.removeChild(this.html); document.body.removeChild(this.html);
} }
} }
export { Dialog };

View file

@ -1,247 +0,0 @@
export { Dialog };
class Dialog {
layout;
onclose;
onopen;
html;
background;
constructor(layout, onclose = _ => { }, onopen = _ => { }) {
this.layout = layout;
this.onclose = onclose;
this.onopen = onopen;
const div = document.createElement("div");
div.appendChild(this.tohtml(layout));
this.html = div;
this.html.classList.add("centeritem");
if (!(layout[0] === "img")) {
this.html.classList.add("nonimagecenter");
}
}
tohtml(array) {
switch (array[0]) {
case "img":
const img = document.createElement("img");
img.src = array[1];
if (array[2] != undefined) {
if (array[2].length == 2) {
img.width = array[2][0];
img.height = array[2][1];
}
else if (array[2][0] == "fit") {
img.classList.add("imgfit");
}
}
return img;
case "hdiv":
const hdiv = document.createElement("table");
const tr = document.createElement("tr");
hdiv.appendChild(tr);
for (const thing of array) {
if (thing === "hdiv") {
continue;
}
const td = document.createElement("td");
td.appendChild(this.tohtml(thing));
tr.appendChild(td);
}
return hdiv;
case "vdiv":
const vdiv = document.createElement("table");
for (const thing of array) {
if (thing === "vdiv") {
continue;
}
const tr = document.createElement("tr");
tr.appendChild(this.tohtml(thing));
vdiv.appendChild(tr);
}
return vdiv;
case "checkbox":
{
const div = document.createElement("div");
const checkbox = document.createElement('input');
div.appendChild(checkbox);
const label = document.createElement("span");
checkbox.checked = array[2];
label.textContent = array[1];
div.appendChild(label);
checkbox.addEventListener("change", array[3]);
checkbox.type = "checkbox";
return div;
}
case "button":
{
const div = document.createElement("div");
const input = document.createElement('button');
const label = document.createElement("span");
input.textContent = array[2];
label.textContent = array[1];
div.appendChild(label);
div.appendChild(input);
input.addEventListener("click", array[3]);
return div;
}
case "mdbox":
{
const div = document.createElement("div");
const input = document.createElement("textarea");
input.value = array[2];
const label = document.createElement("span");
label.textContent = array[1];
input.addEventListener("input", array[3]);
div.appendChild(label);
div.appendChild(document.createElement("br"));
div.appendChild(input);
return div;
}
case "textbox":
{
const div = document.createElement("div");
const input = document.createElement("input");
input.value = array[2];
input.type = "text";
const label = document.createElement("span");
label.textContent = array[1];
console.log(array[3]);
input.addEventListener("input", array[3]);
div.appendChild(label);
div.appendChild(input);
return div;
}
case "fileupload":
{
const div = document.createElement("div");
const input = document.createElement("input");
input.type = "file";
const label = document.createElement("span");
label.textContent = array[1];
div.appendChild(label);
div.appendChild(input);
input.addEventListener("change", array[2]);
console.log(array);
return div;
}
case "text": {
const span = document.createElement("span");
span.textContent = array[1];
return span;
}
case "title": {
const span = document.createElement("span");
span.classList.add("title");
span.textContent = array[1];
return span;
}
case "radio": {
const div = document.createElement("div");
const fieldset = document.createElement("fieldset");
fieldset.addEventListener("change", function () {
let i = -1;
for (const thing of fieldset.children) {
i++;
if (i === 0) {
continue;
}
const checkbox = thing.children[0].children[0];
if (checkbox.checked) {
array[3](checkbox.value);
}
}
});
const legend = document.createElement("legend");
legend.textContent = array[1];
fieldset.appendChild(legend);
let i = 0;
for (const thing of array[2]) {
const div = document.createElement("div");
const input = document.createElement("input");
input.classList.add("radio");
input.type = "radio";
input.name = array[1];
input.value = thing;
if (i === array[4]) {
input.checked = true;
}
const label = document.createElement("label");
label.appendChild(input);
const span = document.createElement("span");
span.textContent = thing;
label.appendChild(span);
div.appendChild(label);
fieldset.appendChild(div);
i++;
}
div.appendChild(fieldset);
return div;
}
case "html": {
return array[1];
}
case "select": {
const div = document.createElement("div");
const label = document.createElement("label");
const select = document.createElement("select");
label.textContent = array[1];
div.append(label);
div.appendChild(select);
for (const thing of array[2]) {
const option = document.createElement("option");
option.textContent = thing;
select.appendChild(option);
}
select.selectedIndex = array[4];
select.addEventListener("change", array[3]);
return div;
}
case "tabs": {
const table = document.createElement("table");
const tabs = document.createElement("tr");
tabs.classList.add("tabbed-head");
table.appendChild(tabs);
const td = document.createElement("td");
tabs.appendChild(td);
const content = document.createElement("tr");
content.classList.add("tabbed-content");
table.appendChild(content);
let shown;
for (const thing of array[1]) {
const button = document.createElement("button");
button.textContent = thing[0];
td.appendChild(button);
const tdcontent = document.createElement("td");
tdcontent.colSpan = array[1].length;
tdcontent.appendChild(this.tohtml(thing[1]));
content.appendChild(tdcontent);
if (!shown) {
shown = tdcontent;
}
else {
tdcontent.hidden = true;
}
button.addEventListener("click", _ => {
shown.hidden = true;
tdcontent.hidden = false;
shown = tdcontent;
});
}
return table;
}
default:
console.error("can't find element:" + array[0], " full element:" + array);
return;
}
}
show() {
this.onopen();
console.log("fullscreen");
this.background = document.createElement("div");
this.background.classList.add("background");
document.body.appendChild(this.background);
document.body.appendChild(this.html);
this.background.onclick = function () { this.hide(); }.bind(this);
}
hide() {
document.body.removeChild(this.background);
document.body.removeChild(this.html);
}
}

View file

@ -1,20 +1,23 @@
import { Localuser } from "./localuser.js"; import { Localuser } from "./localuser.js";
import { Contextmenu } from "./contextmenu.js"; import { Contextmenu } from "./contextmenu.js";
import { mobile, getBulkUsers, setTheme } from "./login.js"; import { mobile, getBulkUsers, setTheme } from "./login.js";
async function waitforload() { import { MarkDown } from "./markdown.js";
import { File } from "./file.js";
(async () => {
async function waitforload() {
let res; let res;
new Promise(r => { res = r; }); new Promise(r => { res = r; });
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {
res(); res();
}); });
await res; await res;
} }
await waitforload(); await waitforload();
const users = getBulkUsers(); const users = getBulkUsers();
if (!users.currentuser) { if (!users.currentuser) {
window.location.href = '/login.html'; window.location.href = '/login.html';
} }
function showAccountSwitcher() { function showAccountSwitcher() {
const table = document.createElement("div"); const table = document.createElement("div");
for (const thing of Object.values(users.users)) { for (const thing of Object.values(users.users)) {
const specialuser = thing; const specialuser = thing;
@ -70,8 +73,8 @@ function showAccountSwitcher() {
Contextmenu.currentmenu = table; Contextmenu.currentmenu = table;
console.log(table); console.log(table);
document.body.append(table); document.body.append(table);
} }
{ {
const userinfo = document.getElementById("userinfo"); const userinfo = document.getElementById("userinfo");
userinfo.addEventListener("click", _ => { userinfo.addEventListener("click", _ => {
_.stopImmediatePropagation(); _.stopImmediatePropagation();
@ -83,9 +86,9 @@ function showAccountSwitcher() {
showAccountSwitcher(); showAccountSwitcher();
}); });
console.log("this ran"); console.log("this ran");
} }
let thisuser; let thisuser;
try { try {
console.log(users.users, users.currentuser); console.log(users.users, users.currentuser);
thisuser = new Localuser(users.users[users.currentuser]); thisuser = new Localuser(users.users[users.currentuser]);
thisuser.initwebsocket().then(_ => { thisuser.initwebsocket().then(_ => {
@ -96,13 +99,13 @@ try {
loading.classList.remove("loading"); loading.classList.remove("loading");
console.log("done loading"); console.log("done loading");
}); });
} }
catch (e) { catch (e) {
console.error(e); console.error(e);
document.getElementById("load-desc").textContent = "Account unable to start"; document.getElementById("load-desc").textContent = "Account unable to start";
thisuser = new Localuser(-1); thisuser = new Localuser(-1);
} }
{ {
const menu = new Contextmenu("create rightclick"); //Really should go into the localuser class, but that's a later thing const menu = new Contextmenu("create rightclick"); //Really should go into the localuser class, but that's a later thing
menu.addbutton("Create channel", function () { menu.addbutton("Create channel", function () {
if (thisuser.lookingguild) { if (thisuser.lookingguild) {
@ -115,10 +118,10 @@ catch (e) {
} }
}, null, _ => { return thisuser.isAdmin(); }); }, null, _ => { return thisuser.isAdmin(); });
menu.bindContextmenu(document.getElementById("channels"), 0, 0); menu.bindContextmenu(document.getElementById("channels"), 0, 0);
} }
const pasteimage = document.getElementById("pasteimage"); const pasteimage = document.getElementById("pasteimage");
let replyingto = null; let replyingto = null;
async function enter(event) { async function enter(event) {
const channel = thisuser.channelfocus; const channel = thisuser.channelfocus;
if (!channel || !thisuser.channelfocus) if (!channel || !thisuser.channelfocus)
return; return;
@ -150,30 +153,28 @@ async function enter(event) {
typebox.innerHTML = ""; typebox.innerHTML = "";
return; return;
} }
} }
const typebox = document.getElementById("typebox"); const typebox = document.getElementById("typebox");
const markdown = new MarkDown("", thisuser); const markdown = new MarkDown("", thisuser);
markdown.giveBox(typebox); markdown.giveBox(typebox);
typebox["markdown"] = markdown; typebox["markdown"] = markdown;
typebox.addEventListener("keyup", enter); typebox.addEventListener("keyup", enter);
typebox.addEventListener("keydown", event => { typebox.addEventListener("keydown", event => {
if (event.key === "Enter" && !event.shiftKey) if (event.key === "Enter" && !event.shiftKey)
event.preventDefault(); event.preventDefault();
}); });
console.log(typebox); console.log(typebox);
typebox.onclick = console.log; typebox.onclick = console.log;
/* /*
function getguildinfo(){ function getguildinfo(){
const path=window.location.pathname.split("/"); const path=window.location.pathname.split("/");
const channel=path[3]; const channel=path[3];
this.ws.send(JSON.stringify({op: 14, d: {guild_id: path[2], channels: {[channel]: [[0, 99]]}}})); this.ws.send(JSON.stringify({op: 14, d: {guild_id: path[2], channels: {[channel]: [[0, 99]]}}}));
} }
*/ */
const images = []; const images = [];
const imageshtml = []; const imageshtml = [];
import { File } from "./file.js"; document.addEventListener('paste', async (e) => {
import { MarkDown } from "./markdown.js";
document.addEventListener('paste', async (e) => {
if (!e.clipboardData) if (!e.clipboardData)
return; return;
Array.from(e.clipboardData.files).forEach(async (f) => { Array.from(e.clipboardData.files).forEach(async (f) => {
@ -184,13 +185,13 @@ document.addEventListener('paste', async (e) => {
images.push(f); images.push(f);
imageshtml.push(html); imageshtml.push(html);
}); });
}); });
setTheme(); setTheme();
function userSettings() { function userSettings() {
thisuser.showusersettings(); thisuser.showusersettings();
} }
document.getElementById("settings").onclick = userSettings; document.getElementById("settings").onclick = userSettings;
if (mobile) { if (mobile) {
document.getElementById("channelw").onclick = () => { document.getElementById("channelw").onclick = () => {
document.getElementById("channels").parentNode.classList.add("collapse"); document.getElementById("channels").parentNode.classList.add("collapse");
document.getElementById("servertd").classList.add("collapse"); document.getElementById("servertd").classList.add("collapse");
@ -202,4 +203,5 @@ if (mobile) {
document.getElementById("servertd").classList.remove("collapse"); document.getElementById("servertd").classList.remove("collapse");
document.getElementById("servers").classList.remove("collapse"); document.getElementById("servers").classList.remove("collapse");
}; };
} }
})();

View file

@ -209,7 +209,7 @@ class InfiniteScroller {
return await this.changePromise; return await this.changePromise;
} }
else { else {
return true; return false;
} }
} }
else { else {
@ -244,8 +244,8 @@ class InfiniteScroller {
throw e; throw e;
} }
finally { finally {
this.changePromise = undefined;
setTimeout(_ => { setTimeout(_ => {
this.changePromise = undefined;
this.currrunning = false; this.currrunning = false;
if (this.watchtime) { if (this.watchtime) {
this.watchForChange(); this.watchForChange();

View file

@ -1,16 +1,17 @@
import { getBulkUsers, getapiurls } from "./login.js"; import { getBulkUsers, getapiurls } from "./login.js";
const users = getBulkUsers(); (async () => {
const well = new URLSearchParams(window.location.search).get("instance"); const users = getBulkUsers();
const joinable = []; const well = new URLSearchParams(window.location.search).get("instance");
for (const thing in users.users) { const joinable = [];
for (const thing in users.users) {
const user = users.users[thing]; const user = users.users[thing];
if (user.serverurls.wellknown.includes(well)) { if (user.serverurls.wellknown.includes(well)) {
joinable.push(user); joinable.push(user);
} }
console.log(users.users[thing]); console.log(users.users[thing]);
} }
let urls; let urls;
if (!joinable.length) { if (!joinable.length) {
const out = await getapiurls(well); const out = await getapiurls(well);
if (out) { if (out) {
urls = out; urls = out;
@ -25,18 +26,18 @@ if (!joinable.length) {
else { else {
throw Error("someone needs to handle the case where the servers don't exist"); throw Error("someone needs to handle the case where the servers don't exist");
} }
} }
else { else {
urls = joinable[0].serverurls; urls = joinable[0].serverurls;
} }
if (!joinable.length) { if (!joinable.length) {
document.getElementById("AcceptInvite").textContent = "Create an account to accept the invite"; document.getElementById("AcceptInvite").textContent = "Create an account to accept the invite";
} }
const code = window.location.pathname.split("/")[2]; const code = window.location.pathname.split("/")[2];
let guildinfo; let guildinfo;
fetch(`${urls.api}/invites/${code}`, { fetch(`${urls.api}/invites/${code}`, {
method: "GET" method: "GET"
}).then(_ => _.json()).then(json => { }).then(_ => _.json()).then(json => {
const guildjson = json.guild; const guildjson = json.guild;
guildinfo = guildjson; guildinfo = guildjson;
document.getElementById("invitename").textContent = guildjson.name; document.getElementById("invitename").textContent = guildjson.name;
@ -55,8 +56,8 @@ fetch(`${urls.api}/invites/${code}`, {
div.classList.add("inviteGuild"); div.classList.add("inviteGuild");
document.getElementById("inviteimg").append(div); document.getElementById("inviteimg").append(div);
} }
}); });
function showAccounts() { function showAccounts() {
const table = document.createElement("dialog"); const table = document.createElement("dialog");
for (const thing of Object.values(joinable)) { for (const thing of Object.values(joinable)) {
const specialuser = thing; const specialuser = thing;
@ -112,5 +113,6 @@ function showAccounts() {
table.classList.add("accountSwitcher"); table.classList.add("accountSwitcher");
console.log(table); console.log(table);
document.body.append(table); document.body.append(table);
} }
document.getElementById("AcceptInvite").addEventListener("click", showAccounts); document.getElementById("AcceptInvite").addEventListener("click", showAccounts);
});

View file

@ -1,6 +1,5 @@
import { Dialog } from "./dialog.js"; import { Dialog } from "./dialog.js";
const mobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); const mobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
export { mobile, getBulkUsers, getBulkInfo, setTheme, Specialuser, getapiurls, adduser };
function setTheme() { function setTheme() {
let name = localStorage.getItem("theme"); let name = localStorage.getItem("theme");
if (!name) { if (!name) {
@ -387,3 +386,4 @@ if (switchurl) {
} }
export { checkInstance }; export { checkInstance };
trimswitcher(); trimswitcher();
export { mobile, getBulkUsers, getBulkInfo, setTheme, Specialuser, getapiurls, adduser };

View file

@ -1,6 +1,5 @@
import { Channel } from "./channel.js"; import { Channel } from "./channel.js";
import { Emoji } from "./emoji.js"; import { Emoji } from "./emoji.js";
export { MarkDown };
class MarkDown { class MarkDown {
txt; txt;
keep; keep;
@ -565,3 +564,4 @@ function getTextNodeAtPosition(root, index) {
position: index position: index
}; };
} }
export { MarkDown };

View file

@ -1,4 +1,3 @@
export { Permissions };
class Permissions { class Permissions {
allow; allow;
deny; deny;
@ -326,3 +325,4 @@ class Permissions {
} }
} }
Permissions.makeMap(); Permissions.makeMap();
export { Permissions };

View file

@ -1,4 +1,3 @@
export { Role };
import { Permissions } from "./permissions.js"; import { Permissions } from "./permissions.js";
import { SnowFlake } from "./snowflake.js"; import { SnowFlake } from "./snowflake.js";
class Role { class Role {
@ -43,3 +42,4 @@ class Role {
return `#${this.color.toString(16)}`; return `#${this.color.toString(16)}`;
} }
} }
export { Role };

1
.gitignore vendored
View file

@ -131,3 +131,4 @@ dist
#Data file for tomoato #Data file for tomoato
testAccount.json testAccount.json
CC

View file

@ -6,12 +6,6 @@ const fs = require('fs');
const app = express(); const app = express();
app.use(compression()) app.use(compression())
const tsNode = require('ts-node');
tsNode.register({
transpileOnly: true,
files: true
});
app.use("/getupdates",(req, res) => { app.use("/getupdates",(req, res) => {
const out=fs.statSync(`${__dirname}/webpage`); const out=fs.statSync(`${__dirname}/webpage`);

101
package-lock.json generated
View file

@ -9,7 +9,9 @@
"version": "0.1.0", "version": "0.1.0",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"express": "^4.19.2" "compression": "^1.7.4",
"express": "^4.19.2",
"ts-to-jsdoc": "^2.2.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.7.0", "@eslint/js": "^9.7.0",
@ -17,7 +19,6 @@
"@html-eslint/parser": "^0.25.0", "@html-eslint/parser": "^0.25.0",
"@stylistic/eslint-plugin": "^2.3.0", "@stylistic/eslint-plugin": "^2.3.0",
"@types/eslint__js": "^8.42.3", "@types/eslint__js": "^8.42.3",
"compression": "^1.7.4",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-plugin-html": "^8.1.1", "eslint-plugin-html": "^8.1.1",
"eslint-plugin-sonarjs": "^1.0.4", "eslint-plugin-sonarjs": "^1.0.4",
@ -423,7 +424,6 @@
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.stat": "2.0.5", "@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9" "run-parallel": "^1.1.9"
@ -436,7 +436,6 @@
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"
} }
@ -445,7 +444,6 @@
"version": "1.2.8", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.scandir": "2.1.5", "@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0" "fastq": "^1.6.0"
@ -539,6 +537,18 @@
"eslint": ">=8.40.0" "eslint": ">=8.40.0"
} }
}, },
"node_modules/@ts-morph/common": {
"version": "0.22.0",
"resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.22.0.tgz",
"integrity": "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==",
"license": "MIT",
"dependencies": {
"fast-glob": "^3.3.2",
"minimatch": "^9.0.3",
"mkdirp": "^3.0.1",
"path-browserify": "^1.0.1"
}
},
"node_modules/@tsconfig/node10": { "node_modules/@tsconfig/node10": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
@ -1006,8 +1016,7 @@
"node_modules/balanced-match": { "node_modules/balanced-match": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
"dev": true
}, },
"node_modules/body-parser": { "node_modules/body-parser": {
"version": "1.20.2", "version": "1.20.2",
@ -1037,7 +1046,6 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": { "dependencies": {
"balanced-match": "^1.0.0" "balanced-match": "^1.0.0"
} }
@ -1046,7 +1054,6 @@
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.1.1" "fill-range": "^7.1.1"
}, },
@ -1207,6 +1214,12 @@
"node": ">=0.8.0" "node": ">=0.8.0"
} }
}, },
"node_modules/code-block-writer": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
"license": "MIT"
},
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@ -1229,7 +1242,6 @@
"version": "2.0.18", "version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"mime-db": ">= 1.43.0 < 2" "mime-db": ">= 1.43.0 < 2"
@ -1242,7 +1254,6 @@
"version": "1.7.4", "version": "1.7.4",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"accepts": "~1.3.5", "accepts": "~1.3.5",
@ -1261,7 +1272,6 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
"dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 0.8" "node": ">= 0.8"
@ -1271,7 +1281,6 @@
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/concat-map": { "node_modules/concat-map": {
@ -1941,7 +1950,6 @@
"version": "3.3.2", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3", "@nodelib/fs.walk": "^1.2.3",
@ -1957,7 +1965,6 @@
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": { "dependencies": {
"is-glob": "^4.0.1" "is-glob": "^4.0.1"
}, },
@ -1981,7 +1988,6 @@
"version": "1.17.1", "version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dev": true,
"dependencies": { "dependencies": {
"reusify": "^1.0.4" "reusify": "^1.0.4"
} }
@ -2002,7 +2008,6 @@
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@ -2443,7 +2448,6 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -2452,7 +2456,6 @@
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": { "dependencies": {
"is-extglob": "^2.1.1" "is-extglob": "^2.1.1"
}, },
@ -2464,7 +2467,6 @@
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": { "engines": {
"node": ">=0.12.0" "node": ">=0.12.0"
} }
@ -2613,7 +2615,6 @@
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"
} }
@ -2631,7 +2632,6 @@
"version": "4.0.7", "version": "4.0.7",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
"integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true,
"dependencies": { "dependencies": {
"braces": "^3.0.3", "braces": "^3.0.3",
"picomatch": "^2.3.1" "picomatch": "^2.3.1"
@ -2644,7 +2644,6 @@
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": { "engines": {
"node": ">=8.6" "node": ">=8.6"
}, },
@ -2698,7 +2697,6 @@
"version": "9.0.5", "version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": { "dependencies": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
}, },
@ -2709,6 +2707,21 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/mkdirp": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
"integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
"license": "MIT",
"bin": {
"mkdirp": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -2785,7 +2798,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 0.8" "node": ">= 0.8"
@ -2895,6 +2907,12 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"license": "MIT"
},
"node_modules/path-exists": { "node_modules/path-exists": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -3020,7 +3038,6 @@
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -3222,7 +3239,6 @@
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
"engines": { "engines": {
"iojs": ">=1.0.0", "iojs": ">=1.0.0",
"node": ">=0.10.0" "node": ">=0.10.0"
@ -3248,7 +3264,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -3532,7 +3547,6 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": { "dependencies": {
"is-number": "^7.0.0" "is-number": "^7.0.0"
}, },
@ -3561,6 +3575,16 @@
"typescript": ">=4.2.0" "typescript": ">=4.2.0"
} }
}, },
"node_modules/ts-morph": {
"version": "21.0.1",
"resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-21.0.1.tgz",
"integrity": "sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==",
"license": "MIT",
"dependencies": {
"@ts-morph/common": "~0.22.0",
"code-block-writer": "^12.0.0"
}
},
"node_modules/ts-node": { "node_modules/ts-node": {
"version": "10.9.2", "version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
@ -3605,6 +3629,25 @@
} }
} }
}, },
"node_modules/ts-to-jsdoc": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ts-to-jsdoc/-/ts-to-jsdoc-2.2.0.tgz",
"integrity": "sha512-5miE85Iy8Hwo3KU4QpoXxSYbTyA7cUitgUAMZF6cQgvOzRmonNFWbxiYE5JcREqV5uvb0DGT/2BTwemlgyV3UQ==",
"license": "MIT",
"dependencies": {
"arg": "^5.0.1",
"ts-morph": "^21.0.1"
},
"bin": {
"ts-to-jsdoc": "bin/ts-to-jsdoc"
}
},
"node_modules/ts-to-jsdoc/node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
"license": "MIT"
},
"node_modules/type-check": { "node_modules/type-check": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",

View file

@ -10,8 +10,9 @@
"author": "MathMan05", "author": "MathMan05",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"compression": "^1.7.4",
"express": "^4.19.2", "express": "^4.19.2",
"compression":"^1.7.4" "ts-to-jsdoc": "^2.2.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.7.0", "@eslint/js": "^9.7.0",

View file

@ -1,4 +1,4 @@
export {Dialog};
class Dialog{ class Dialog{
layout; layout;
onclose: Function; onclose: Function;
@ -248,3 +248,4 @@ class Dialog{
document.body.removeChild(this.html); document.body.removeChild(this.html);
} }
} }
export {Dialog};

View file

@ -1,26 +1,29 @@
import { Localuser } from "./localuser.js"; import { Localuser } from "./localuser.js";
import {Contextmenu} from "./contextmenu.js"; import {Contextmenu} from "./contextmenu.js";
import {mobile, getBulkUsers,setTheme, Specialuser} from "./login.js"; import {mobile, getBulkUsers,setTheme, Specialuser} from "./login.js";
import { MarkDown } from "./markdown.js";
async function waitforload(){ import { Message } from "./message.js";
import { File } from "./file.js";
(async()=>{
async function waitforload(){
let res; let res;
new Promise(r=>{res=r}); new Promise(r=>{res=r});
document.addEventListener("DOMContentLoaded", function(){ document.addEventListener("DOMContentLoaded", function(){
res(); res();
}); });
await res; await res;
} }
await waitforload(); await waitforload();
const users=getBulkUsers(); const users=getBulkUsers();
if(!users.currentuser){ if(!users.currentuser){
window.location.href = '/login.html'; window.location.href = '/login.html';
} }
function showAccountSwitcher(){ function showAccountSwitcher(){
const table=document.createElement("div"); const table=document.createElement("div");
for(const thing of Object.values(users.users)){ for(const thing of Object.values(users.users)){
const specialuser=thing as Specialuser; const specialuser=thing as Specialuser;
@ -80,8 +83,8 @@ function showAccountSwitcher(){
Contextmenu.currentmenu=table; Contextmenu.currentmenu=table;
console.log(table); console.log(table);
document.body.append(table); document.body.append(table);
} }
{ {
const userinfo=document.getElementById("userinfo") as HTMLDivElement; const userinfo=document.getElementById("userinfo") as HTMLDivElement;
userinfo.addEventListener("click",_=>{ userinfo.addEventListener("click",_=>{
_.stopImmediatePropagation(); _.stopImmediatePropagation();
@ -93,9 +96,9 @@ function showAccountSwitcher(){
showAccountSwitcher(); showAccountSwitcher();
}) })
console.log("this ran") console.log("this ran")
} }
let thisuser:Localuser; let thisuser:Localuser;
try{ try{
console.log(users.users,users.currentuser) console.log(users.users,users.currentuser)
thisuser=new Localuser(users.users[users.currentuser]); thisuser=new Localuser(users.users[users.currentuser]);
thisuser.initwebsocket().then(_=>{ thisuser.initwebsocket().then(_=>{
@ -106,14 +109,14 @@ try{
loading.classList.remove("loading"); loading.classList.remove("loading");
console.log("done loading") console.log("done loading")
}); });
}catch(e){ }catch(e){
console.error(e); console.error(e);
(document.getElementById("load-desc") as HTMLSpanElement).textContent="Account unable to start"; (document.getElementById("load-desc") as HTMLSpanElement).textContent="Account unable to start";
thisuser=new Localuser(-1); thisuser=new Localuser(-1);
} }
{ {
const menu=new Contextmenu("create rightclick");//Really should go into the localuser class, but that's a later thing const menu=new Contextmenu("create rightclick");//Really should go into the localuser class, but that's a later thing
menu.addbutton("Create channel",function(){ menu.addbutton("Create channel",function(){
if(thisuser.lookingguild){ if(thisuser.lookingguild){
@ -127,11 +130,11 @@ try{
} }
},null,_=>{return thisuser.isAdmin()}) },null,_=>{return thisuser.isAdmin()})
menu.bindContextmenu(document.getElementById("channels") as HTMLDivElement,0,0) menu.bindContextmenu(document.getElementById("channels") as HTMLDivElement,0,0)
} }
const pasteimage=document.getElementById("pasteimage") as HTMLDivElement; const pasteimage=document.getElementById("pasteimage") as HTMLDivElement;
let replyingto:Message|null=null; let replyingto:Message|null=null;
async function enter(event){ async function enter(event){
const channel=thisuser.channelfocus const channel=thisuser.channelfocus
if(!channel||!thisuser.channelfocus) return; if(!channel||!thisuser.channelfocus) return;
channel.typingstart(); channel.typingstart();
@ -161,34 +164,33 @@ async function enter(event){
typebox.innerHTML=""; typebox.innerHTML="";
return; return;
} }
} }
const typebox=document.getElementById("typebox") as HTMLDivElement; const typebox=document.getElementById("typebox") as HTMLDivElement;
const markdown=new MarkDown("",thisuser); const markdown=new MarkDown("",thisuser);
markdown.giveBox(typebox); markdown.giveBox(typebox);
typebox["markdown"]=markdown; typebox["markdown"]=markdown;
typebox.addEventListener("keyup",enter); typebox.addEventListener("keyup",enter);
typebox.addEventListener("keydown",event=>{ typebox.addEventListener("keydown",event=>{
if(event.key === "Enter"&&!event.shiftKey) event.preventDefault(); if(event.key === "Enter"&&!event.shiftKey) event.preventDefault();
}); });
console.log(typebox) console.log(typebox)
typebox.onclick=console.log; typebox.onclick=console.log;
/* /*
function getguildinfo(){ function getguildinfo(){
const path=window.location.pathname.split("/"); const path=window.location.pathname.split("/");
const channel=path[3]; const channel=path[3];
this.ws.send(JSON.stringify({op: 14, d: {guild_id: path[2], channels: {[channel]: [[0, 99]]}}})); this.ws.send(JSON.stringify({op: 14, d: {guild_id: path[2], channels: {[channel]: [[0, 99]]}}}));
} }
*/ */
const images:Blob[]=[]; const images:Blob[]=[];
const imageshtml:HTMLElement[]=[]; const imageshtml:HTMLElement[]=[];
import { File } from "./file.js";
import { MarkDown } from "./markdown.js";
import { Message } from "./message.js"; document.addEventListener('paste', async (e) => {
document.addEventListener('paste', async (e) => {
if(!e.clipboardData) return; if(!e.clipboardData) return;
Array.from(e.clipboardData.files).forEach(async (f) => { Array.from(e.clipboardData.files).forEach(async (f) => {
const file=File.initFromBlob(f); const file=File.initFromBlob(f);
@ -198,16 +200,16 @@ document.addEventListener('paste', async (e) => {
images.push(f) images.push(f)
imageshtml.push(html); imageshtml.push(html);
}); });
}); });
setTheme(); setTheme();
function userSettings(){ function userSettings(){
thisuser.showusersettings(); thisuser.showusersettings();
} }
(document.getElementById("settings") as HTMLImageElement).onclick=userSettings; (document.getElementById("settings") as HTMLImageElement).onclick=userSettings;
if(mobile){ if(mobile){
(document.getElementById("channelw") as HTMLDivElement).onclick=()=>{ (document.getElementById("channelw") as HTMLDivElement).onclick=()=>{
((document.getElementById("channels") as HTMLDivElement).parentNode as HTMLElement).classList.add("collapse"); ((document.getElementById("channels") as HTMLDivElement).parentNode as HTMLElement).classList.add("collapse");
(document.getElementById("servertd") as HTMLDivElement).classList.add("collapse"); (document.getElementById("servertd") as HTMLDivElement).classList.add("collapse");
@ -219,6 +221,5 @@ if(mobile){
(document.getElementById("servertd") as HTMLDivElement).classList.remove("collapse"); (document.getElementById("servertd") as HTMLDivElement).classList.remove("collapse");
(document.getElementById("servers") as HTMLDivElement).classList.remove("collapse"); (document.getElementById("servers") as HTMLDivElement).classList.remove("collapse");
} }
} }
})()

View file

@ -208,7 +208,7 @@ class InfiniteScroller{
if(this.changePromise){ if(this.changePromise){
return await this.changePromise; return await this.changePromise;
}else{ }else{
return true; return false;
} }
}else{ }else{
this.watchtime=false; this.watchtime=false;
@ -239,8 +239,9 @@ class InfiniteScroller{
throw e; throw e;
}finally{ }finally{
this.changePromise=undefined;
setTimeout(_=>{ setTimeout(_=>{
this.changePromise=undefined;
this.currrunning=false; this.currrunning=false;
if(this.watchtime){ if(this.watchtime){
this.watchForChange(); this.watchForChange();

View file

@ -1,16 +1,17 @@
import {getBulkUsers, Specialuser, getapiurls} from "./login.js"; import {getBulkUsers, Specialuser, getapiurls} from "./login.js";
const users=getBulkUsers(); (async()=>{
const well=new URLSearchParams(window.location.search).get("instance"); const users=getBulkUsers();
const joinable:Specialuser[]=[]; const well=new URLSearchParams(window.location.search).get("instance");
for(const thing in users.users){ const joinable:Specialuser[]=[];
for(const thing in users.users){
const user:Specialuser = users.users[thing] const user:Specialuser = users.users[thing]
if(user.serverurls.wellknown.includes(well)){ if(user.serverurls.wellknown.includes(well)){
joinable.push(user); joinable.push(user);
} }
console.log(users.users[thing]); console.log(users.users[thing]);
} }
let urls:{api:string,cdn:string}; let urls:{api:string,cdn:string};
if(!joinable.length){ if(!joinable.length){
const out=await getapiurls(well); const out=await getapiurls(well);
if(out){ if(out){
urls=out; urls=out;
@ -25,17 +26,17 @@ if(!joinable.length){
throw Error("someone needs to handle the case where the servers don't exist") throw Error("someone needs to handle the case where the servers don't exist")
} }
}else{ }else{
urls=joinable[0].serverurls; urls=joinable[0].serverurls;
} }
if(!joinable.length){ if(!joinable.length){
document.getElementById("AcceptInvite").textContent="Create an account to accept the invite" document.getElementById("AcceptInvite").textContent="Create an account to accept the invite"
} }
const code=window.location.pathname.split("/")[2]; const code=window.location.pathname.split("/")[2];
let guildinfo; let guildinfo;
fetch(`${urls.api}/invites/${code}`,{ fetch(`${urls.api}/invites/${code}`,{
method:"GET" method:"GET"
}).then(_=>_.json()).then(json=>{ }).then(_=>_.json()).then(json=>{
const guildjson=json.guild; const guildjson=json.guild;
guildinfo=guildjson; guildinfo=guildjson;
document.getElementById("invitename").textContent=guildjson.name; document.getElementById("invitename").textContent=guildjson.name;
@ -54,8 +55,8 @@ fetch(`${urls.api}/invites/${code}`,{
document.getElementById("inviteimg").append(div); document.getElementById("inviteimg").append(div);
} }
}) })
function showAccounts(){ function showAccounts(){
const table=document.createElement("dialog"); const table=document.createElement("dialog");
for(const thing of Object.values(joinable)){ for(const thing of Object.values(joinable)){
const specialuser=thing as Specialuser; const specialuser=thing as Specialuser;
@ -114,5 +115,6 @@ function showAccounts(){
table.classList.add("accountSwitcher"); table.classList.add("accountSwitcher");
console.log(table); console.log(table);
document.body.append(table); document.body.append(table);
} }
document.getElementById("AcceptInvite").addEventListener("click",showAccounts); document.getElementById("AcceptInvite").addEventListener("click",showAccounts);
})

View file

@ -1,7 +1,7 @@
import { Dialog } from "./dialog.js"; import { Dialog } from "./dialog.js";
const mobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); const mobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
export {mobile, getBulkUsers,getBulkInfo,setTheme,Specialuser,getapiurls,adduser}
function setTheme(){ function setTheme(){
let name=localStorage.getItem("theme"); let name=localStorage.getItem("theme");
if(!name){ if(!name){
@ -379,3 +379,4 @@ if(switchurl){
} }
export {checkInstance}; export {checkInstance};
trimswitcher(); trimswitcher();
export {mobile, getBulkUsers,getBulkInfo,setTheme,Specialuser,getapiurls,adduser}

View file

@ -2,7 +2,7 @@ import { Channel } from "./channel.js";
import { Emoji } from "./emoji.js"; import { Emoji } from "./emoji.js";
import { Localuser } from "./localuser.js"; import { Localuser } from "./localuser.js";
export {MarkDown};
class MarkDown{ class MarkDown{
txt : string[]; txt : string[];
keep:boolean; keep:boolean;
@ -530,3 +530,4 @@ function getTextNodeAtPosition(root, index){
position: index position: index
}; };
} }
export {MarkDown};

View file

@ -1,4 +1,3 @@
export {Permissions};
class Permissions{ class Permissions{
allow:bigint; allow:bigint;
deny:bigint; deny:bigint;
@ -321,3 +320,4 @@ class Permissions{
} }
} }
Permissions.makeMap(); Permissions.makeMap();
export {Permissions};

View file

@ -1,4 +1,4 @@
export {Role};
import {Permissions} from "./permissions.js"; import {Permissions} from "./permissions.js";
import {Localuser} from "./localuser.js"; import {Localuser} from "./localuser.js";
import {Guild} from "./guild.js"; import {Guild} from "./guild.js";
@ -43,3 +43,4 @@ class Role{
return `#${this.color.toString(16)}`; return `#${this.color.toString(16)}`;
} }
} }
export {Role};

View file

@ -1920,6 +1920,7 @@ form div{
padding-left: .45in; padding-left: .45in;
cursor: pointer; cursor: pointer;
font-weight: bold; font-weight: bold;
font-style: italic;
} }
.zeroheight{ .zeroheight{
height: 0px; height: 0px;