[frontend] Web client groundwork

This commit is contained in:
Laura Hausmann 2023-12-08 20:22:16 +01:00
parent b6523bc87f
commit e2a56a0061
Signed by: zotan
GPG key ID: D044E84C5BE01605
66 changed files with 1301 additions and 297 deletions

614
.pnp.cjs generated

File diff suppressed because it is too large Load diff

Binary file not shown.

BIN
.yarn/cache/@esbuild-darwin-arm64-npm-0.19.8-b1920f84ba-10.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
.yarn/cache/@esbuild-darwin-x64-npm-0.19.8-36f500fc51-10.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
.yarn/cache/@esbuild-linux-arm64-npm-0.19.8-2687227d41-10.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
.yarn/cache/@esbuild-linux-x64-npm-0.19.8-231d24e5e4-10.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/@polka-url-npm-1.0.0-next.24-058e984602-00baec4458.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/@volar-language-core-npm-1.11.1-e30e50203f-2fef58727b.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/@volar-source-map-npm-1.11.1-19e27a8f3b-b90c32b23b.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/@volar-typescript-npm-1.11.1-9a11b85d7c-714eeb3472.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/@vue-devtools-api-npm-6.5.1-a00bfbc22f-e94443ce37.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/@vue-language-core-npm-1.8.25-60dd634fe2-680d233742.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/computeds-npm-0.0.1-bef3a1eb28-738625ccec.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/de-indent-npm-1.0.2-66cccde30f-30bf43744d.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
.yarn/cache/esbuild-npm-0.19.8-209f9c6f87-8c440db468.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/koa-connect-npm-2.1.0-6088d6d945-71ab70c306.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/mrmime-npm-1.0.1-d0aa4f5ddf-a157e833ff.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/muggle-string-npm-0.3.1-417964904f-f2357f906e.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/path-browserify-npm-1.0.1-f975d99a99-7e7368a520.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
.yarn/cache/sass-npm-1.69.5-3f0210c9f9-b320ab2206.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/sirv-npm-2.0.3-775c1726af-dbfbff7355.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/totalist-npm-3.0.1-91e71f3baa-5132d562cf.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
.yarn/cache/typescript-npm-5.3.3-6b23a5da18-6e4e6a14a5.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/typescript-patch-4778c7998b-c93786fcc9.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/typescript-patch-97a611e52a-f5481fa3ba.zip (Stored with Git LFS) vendored

Binary file not shown.

BIN
.yarn/cache/vite-npm-5.0.2-e1256a9c0b-74f1a6d49a.zip (Stored with Git LFS) vendored

Binary file not shown.

BIN
.yarn/cache/vite-npm-5.0.7-583fea8b6f-27186e5b90.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/vue-router-npm-4.2.5-3479f41e41-491ebb273c.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/vue-template-compiler-npm-2.7.15-28e79f8ad6-450634ed5b.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/vue-tsc-npm-1.8.25-981d5060ca-a2be9afcc2.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

View file

@ -37,6 +37,7 @@
},
"workspaces": [
"packages/backend",
"packages/frontend",
"packages/client",
"packages/sw",
"packages/iceshrimp-js"
@ -68,7 +69,7 @@
"gulp-terser": "2.1.0",
"install-peers": "^1.0.4",
"start-server-and-test": "1.15.2",
"typescript": "5.1.6",
"typescript": "^5.1.6",
"yaml": "^2.3.4"
},
"packageManager": "yarn@4.0.2",

View file

@ -82,6 +82,7 @@
"koa": "2.14.2",
"koa-body": "^6.0.1",
"koa-bodyparser": "4.4.1",
"koa-connect": "^2.1.0",
"koa-favicon": "2.1.0",
"koa-json-body": "5.3.0",
"koa-logger": "3.2.1",
@ -124,6 +125,7 @@
"seedrandom": "^3.0.5",
"semver": "7.5.4",
"sharp": "0.32.1",
"sirv": "^2.0.3",
"stringz": "2.1.0",
"summaly": "2.7.0",
"syslog-pro": "1.0.0",
@ -136,6 +138,7 @@
"typeorm": "0.3.17",
"ulid": "2.3.0",
"uuid": "9.0.0",
"vite": "^5.0.7",
"web-push": "3.6.3",
"websocket": "1.0.34",
"xev": "3.0.2"
@ -200,7 +203,7 @@
"ts-loader": "9.4.4",
"ts-node": "10.9.1",
"tsconfig-paths": "4.2.0",
"typescript": "5.1.6",
"typescript": "^5.1.6",
"webpack": "^5.88.1",
"ws": "8.13.0"
}

View file

@ -0,0 +1,18 @@
import { Controller, CurrentUser, Get } from "@iceshrimp/koa-openapi";
import type { ILocalUser } from "@/models/entities/user.js";
import { UserHandler } from "@/server/api/web/handlers/user.js";
import { AuthResponse } from "@/server/api/web/entities/auth.js";
@Controller('/auth')
export class AuthController {
@Get('/')
async getAuth(
@CurrentUser() me: ILocalUser | null,
): Promise<AuthResponse> {
const user = me ? await UserHandler.getUser(me, me.id) : null;
return {
authenticated: !!me,
user: user,
};
}
}

View file

@ -0,0 +1,6 @@
import { UserResponse } from "@/server/api/web/entities/user.js";
export type AuthResponse = {
authenticated: boolean;
user: UserResponse | null;
}

View file

@ -7,6 +7,7 @@ import { UserController } from "@/server/api/web/controllers/user.js";
import { RatelimitMiddleware } from "@/server/api/web/middleware/rate-limit.js";
import { AuthenticationMiddleware } from "@/server/api/web/middleware/auth.js";
import { ErrorHandlingMiddleware } from "@/server/api/web/middleware/error-handling.js";
import { AuthController } from "@/server/api/web/controllers/auth.js";
export type WebRouter = Router<WebState, WebContext>;
export type WebMiddleware = Middleware<WebState, WebContext>;
@ -33,6 +34,7 @@ export class WebAPI {
errorHandler: ErrorHandlingMiddleware,
controllers: [
UserController,
AuthController,
],
flow: [
AuthenticationMiddleware,

View file

@ -28,6 +28,7 @@ import apiServer from "./api/index.js";
import fileServer from "./file/index.js";
import proxyServer from "./proxy/index.js";
import webServer from "./web/index.js";
import webRewriteServer from "./web-rewrite/index.js";
import { initializeStreamingServer } from "./api/streaming.js";
import removeTrailingSlash from "koa-remove-trailing-slashes";
import { koaBody } from "koa-body";
@ -142,6 +143,7 @@ setupEndpointsAuthRoot(mastoRouter);
app.use(router.routes());
app.use(mastoRouter.routes());
app.use(mount('/rewrite', webRewriteServer));
app.use(mount(webServer));
function createServer() {

View file

@ -0,0 +1,32 @@
import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
import Koa from "koa";
import Router from "@koa/router";
import c2k from "koa-connect";
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const app = new Koa();
const router = new Router();
const isProduction = false;
if (isProduction) {
const { default: sirv } = await import('sirv');
app.use(c2k(sirv(`${_dirname}/../../../../frontend/dist`)));
} else {
const { createServer } = await import('vite');
const server = await createServer({
root: `${_dirname}/../../../../frontend`,
server: { middlewareMode: true },
base: '/rewrite'
});
app.use(c2k(server.middlewares));
}
app.use(router.routes());
app.use(router.allowedMethods());
export default app;

View file

@ -87,11 +87,11 @@
"tsc-alias": "1.8.7",
"tsconfig-paths": "4.2.0",
"twemoji-parser": "14.0.0",
"typescript": "5.1.6",
"typescript": "^5.1.6",
"unicode-emoji-json": "^0.4.0",
"uuid": "9.0.0",
"vanilla-tilt": "1.8.0",
"vite": "5.0.2",
"vite": "^5.0.2",
"vite-plugin-compression": "^0.5.1",
"vue": "^3.3.11",
"vue-draggable-plus": "^0.2.2",

24
packages/frontend/.gitignore vendored Normal file
View file

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View file

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

View file

@ -0,0 +1,18 @@
# Vue 3 + TypeScript + Vite
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
## Recommended IDE Setup
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
## Type Support For `.vue` Imports in TS
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
1. Disable the built-in TypeScript Extension
1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.

View file

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/src/assets/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Iceshrimp</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View file

@ -0,0 +1,21 @@
{
"name": "frontend",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc && vite build",
"preview": "vite preview"
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.5.0",
"idb-keyval": "^6.2.1",
"sass": "^1.69.5",
"typescript": "^5.2.2",
"vite": "^5.0.0",
"vue": "^3.3.8",
"vue-router": "^4.2.5",
"vue-tsc": "^1.8.22"
}
}

View file

@ -0,0 +1,13 @@
<script setup lang="ts">
</script>
<template>
<router-view>
</router-view>
</template>
<style scoped>
</style>

BIN
packages/frontend/src/assets/vite.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
packages/frontend/src/assets/vue.svg (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,30 @@
<script setup lang="ts">
import { onMounted, ref } from "vue";
import { KvAccount } from "../entities/keyval.ts";
import { get as kvGet } from "idb-keyval";
const test = ref<string[]>([]);
const aref = ref<HTMLSelectElement>();
onMounted(async () => {
const accounts = await kvGet<KvAccount[] | null>("accounts");
console.log(accounts);
if (!accounts) return;
test.value.push(...accounts.map(p => p.id));
});
async function submit() {
localStorage.setItem('accountId', aref.value!.value);
}
</script>
<template>
<select ref="aref">
<option v-for="item in test">{{ item }}</option>
</select>
<button @click="submit">Submit</button>
</template>
<style scoped lang="scss">
</style>

View file

@ -0,0 +1,24 @@
<script setup lang="ts">
import { api } from "../helpers/api.ts";
import { onMounted, ref } from "vue";
const field = ref<HTMLElement>();
onMounted(() => {
api('/api/iceshrimp/v1/auth').then(res => {
field.value!.textContent = JSON.stringify(res, null, 2);
});
});
</script>
<template>
<pre class="auth" ref="field">
</pre>
</template>
<style scoped lang="scss">
.auth {
text-align: left;
}
</style>

View file

@ -0,0 +1,38 @@
<script setup lang="ts">
import { ref } from 'vue'
defineProps<{ msg: string }>()
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Install
<a href="https://github.com/vuejs/language-tools" target="_blank">Volar</a>
in your IDE for a better DX
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>

View file

@ -0,0 +1,4 @@
export type KvAccount = {
id: string;
token: string;
}

View file

@ -0,0 +1,22 @@
import { get as kvGet } from "idb-keyval";
import { KvAccount } from "../entities/keyval.ts";
export async function api(endpoint: string, body?: object) {
const token = (await getCurrentAccount())?.token ?? null;
const request = {
method: body ? 'POST' : 'GET',
headers: token ? { authorization: `Bearer ${token}` } : undefined,
body: body ? JSON.stringify(body) : undefined
};
return fetch(endpoint, request).then(res => res.json());
}
//FIXME: cache this somewhere?
async function getCurrentAccount(): Promise<KvAccount | null> {
const currentAccountId = localStorage.getItem('accountId');
if (currentAccountId === null) return null;
const accounts = await kvGet<KvAccount[] | null>("accounts");
if (!accounts) return null;
return accounts.find(p => p.id === currentAccountId) ?? null;
}

View file

@ -0,0 +1,18 @@
import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import './style.css';
import AppSkeleton from "./App.vue";
import AuthPage from "./pages/auth.vue";
const routes = [
{ path: '/', component: AuthPage }
];
const router = createRouter({
history: createWebHistory('/rewrite'),
routes,
})
const app = createApp(AppSkeleton);
app.use(router);
app.mount('#app')

View file

@ -0,0 +1,14 @@
<script setup lang="ts">
import AuthDebug from "../components/AuthDebug.vue";
import AccountPicker from "../components/AccountPicker.vue";
</script>
<template>
<AccountPicker/>
<AuthDebug/>
</template>
<style scoped lang="scss">
</style>

View file

@ -0,0 +1,79 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
.card {
padding: 2em;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}

6
packages/frontend/src/vite-env.d.ts vendored Normal file
View file

@ -0,0 +1,6 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import type { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
}

View file

@ -0,0 +1,25 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }]
}

View file

@ -0,0 +1,10 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}

View file

@ -0,0 +1,7 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
})

View file

@ -35,7 +35,7 @@
"ts-jest": "^27.1.2",
"ts-node": "10.4.0",
"tsd": "^0.28.1",
"typescript": "5.1.6"
"typescript": "^5.1.6"
},
"files": [
"built"

430
yarn.lock
View file

@ -800,156 +800,156 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/android-arm64@npm:0.19.7"
"@esbuild/android-arm64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/android-arm64@npm:0.19.8"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/android-arm@npm:0.19.7"
"@esbuild/android-arm@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/android-arm@npm:0.19.8"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/android-x64@npm:0.19.7"
"@esbuild/android-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/android-x64@npm:0.19.8"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/darwin-arm64@npm:0.19.7"
"@esbuild/darwin-arm64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/darwin-arm64@npm:0.19.8"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/darwin-x64@npm:0.19.7"
"@esbuild/darwin-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/darwin-x64@npm:0.19.8"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/freebsd-arm64@npm:0.19.7"
"@esbuild/freebsd-arm64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/freebsd-arm64@npm:0.19.8"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/freebsd-x64@npm:0.19.7"
"@esbuild/freebsd-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/freebsd-x64@npm:0.19.8"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-arm64@npm:0.19.7"
"@esbuild/linux-arm64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-arm64@npm:0.19.8"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-arm@npm:0.19.7"
"@esbuild/linux-arm@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-arm@npm:0.19.8"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-ia32@npm:0.19.7"
"@esbuild/linux-ia32@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-ia32@npm:0.19.8"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-loong64@npm:0.19.7"
"@esbuild/linux-loong64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-loong64@npm:0.19.8"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-mips64el@npm:0.19.7"
"@esbuild/linux-mips64el@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-mips64el@npm:0.19.8"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-ppc64@npm:0.19.7"
"@esbuild/linux-ppc64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-ppc64@npm:0.19.8"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-riscv64@npm:0.19.7"
"@esbuild/linux-riscv64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-riscv64@npm:0.19.8"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-s390x@npm:0.19.7"
"@esbuild/linux-s390x@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-s390x@npm:0.19.8"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/linux-x64@npm:0.19.7"
"@esbuild/linux-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/linux-x64@npm:0.19.8"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/netbsd-x64@npm:0.19.7"
"@esbuild/netbsd-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/netbsd-x64@npm:0.19.8"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/openbsd-x64@npm:0.19.7"
"@esbuild/openbsd-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/openbsd-x64@npm:0.19.8"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/sunos-x64@npm:0.19.7"
"@esbuild/sunos-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/sunos-x64@npm:0.19.8"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/win32-arm64@npm:0.19.7"
"@esbuild/win32-arm64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/win32-arm64@npm:0.19.8"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/win32-ia32@npm:0.19.7"
"@esbuild/win32-ia32@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/win32-ia32@npm:0.19.8"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.19.7":
version: 0.19.7
resolution: "@esbuild/win32-x64@npm:0.19.7"
"@esbuild/win32-x64@npm:0.19.8":
version: 0.19.8
resolution: "@esbuild/win32-x64@npm:0.19.8"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@ -2051,6 +2051,13 @@ __metadata:
languageName: node
linkType: hard
"@polka/url@npm:^1.0.0-next.20":
version: 1.0.0-next.24
resolution: "@polka/url@npm:1.0.0-next.24"
checksum: 00baec4458ac86ca27edf7ce807ccfad97cd1d4b67bdedaf3401a9e755757588f3331e891290d1deea52d88df2bf2387caf8d94a6835b614d5b37b638a688273
languageName: node
linkType: hard
"@redis/bloom@npm:1.2.0":
version: 1.2.0
resolution: "@redis/bloom@npm:1.2.0"
@ -3906,6 +3913,34 @@ __metadata:
languageName: node
linkType: hard
"@volar/language-core@npm:1.11.1, @volar/language-core@npm:~1.11.1":
version: 1.11.1
resolution: "@volar/language-core@npm:1.11.1"
dependencies:
"@volar/source-map": "npm:1.11.1"
checksum: 2fef58727bb3058b7bbd350fea6c38ded6608c65f7f672ffd825f0ba48307e4c5eded634e0c3b37d2ebbdd2e7ab32bc974eeb54f455c0390f85971ebeef3a6ca
languageName: node
linkType: hard
"@volar/source-map@npm:1.11.1, @volar/source-map@npm:~1.11.1":
version: 1.11.1
resolution: "@volar/source-map@npm:1.11.1"
dependencies:
muggle-string: "npm:^0.3.1"
checksum: b90c32b23bbb86a3c47a20a9f7e6293c01b2e65390973e0c849c80ee0ff740ffa76b4d547fdb9b76b2b91a7bdeb2d8d0b1772d4f4d70e2a85784abe0385672f1
languageName: node
linkType: hard
"@volar/typescript@npm:~1.11.1":
version: 1.11.1
resolution: "@volar/typescript@npm:1.11.1"
dependencies:
"@volar/language-core": "npm:1.11.1"
path-browserify: "npm:^1.0.1"
checksum: 714eeb3472902617555b9b4959722a215b391160fe4fdf2f8f4abcb075edbd24a5a633db0c36acd175daeddac5f1b35c33f5fc8788e1e251d91385aad27deda9
languageName: node
linkType: hard
"@vue/compiler-core@npm:3.3.11":
version: 3.3.11
resolution: "@vue/compiler-core@npm:3.3.11"
@ -3930,7 +3965,7 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-dom@npm:3.3.11":
"@vue/compiler-dom@npm:3.3.11, @vue/compiler-dom@npm:^3.3.0":
version: 3.3.11
resolution: "@vue/compiler-dom@npm:3.3.11"
dependencies:
@ -4017,6 +4052,35 @@ __metadata:
languageName: node
linkType: hard
"@vue/devtools-api@npm:^6.5.0":
version: 6.5.1
resolution: "@vue/devtools-api@npm:6.5.1"
checksum: e94443ce376ebecd279bfddaff6d2756cf1725e9f6f94cc41ffba48bf0e2ee17f29f194b8b81eef1c4d3743608e3079b5aab940fcf10de7df7cc9dbad6d2942d
languageName: node
linkType: hard
"@vue/language-core@npm:1.8.25":
version: 1.8.25
resolution: "@vue/language-core@npm:1.8.25"
dependencies:
"@volar/language-core": "npm:~1.11.1"
"@volar/source-map": "npm:~1.11.1"
"@vue/compiler-dom": "npm:^3.3.0"
"@vue/shared": "npm:^3.3.0"
computeds: "npm:^0.0.1"
minimatch: "npm:^9.0.3"
muggle-string: "npm:^0.3.1"
path-browserify: "npm:^1.0.1"
vue-template-compiler: "npm:^2.7.14"
peerDependencies:
typescript: "*"
peerDependenciesMeta:
typescript:
optional: true
checksum: 680d2337423a2a2f0cbe70c1c6663c3498fcec6bae7688e83d21d3c1f2a6785fb4a71492fdb318f1f4ef962d0ea985dd22978140dff7f90ac1e1d0dfed2d17ba
languageName: node
linkType: hard
"@vue/reactivity-transform@npm:3.3.11":
version: 3.3.11
resolution: "@vue/reactivity-transform@npm:3.3.11"
@ -4085,7 +4149,7 @@ __metadata:
languageName: node
linkType: hard
"@vue/shared@npm:3.3.11":
"@vue/shared@npm:3.3.11, @vue/shared@npm:^3.3.0":
version: 3.3.11
resolution: "@vue/shared@npm:3.3.11"
checksum: 78ec6715c7e51fe8a1805f4e7ab4a7ce6d14568a10e9d8bf332e63d9770cc36210fc4763b8935eadb5349e984d3ff276f481fd2e75c9a6ab69a0c96f3aedff9c
@ -5425,6 +5489,7 @@ __metadata:
koa: "npm:2.14.2"
koa-body: "npm:^6.0.1"
koa-bodyparser: "npm:4.4.1"
koa-connect: "npm:^2.1.0"
koa-favicon: "npm:2.1.0"
koa-json-body: "npm:5.3.0"
koa-logger: "npm:3.2.1"
@ -5469,6 +5534,7 @@ __metadata:
seedrandom: "npm:^3.0.5"
semver: "npm:7.5.4"
sharp: "npm:0.32.1"
sirv: "npm:^2.0.3"
strict-event-emitter-types: "npm:2.0.0"
stringz: "npm:2.1.0"
summaly: "npm:2.7.0"
@ -5484,9 +5550,10 @@ __metadata:
tsconfig-paths: "npm:4.2.0"
twemoji-parser: "npm:14.0.0"
typeorm: "npm:0.3.17"
typescript: "npm:5.1.6"
typescript: "npm:^5.1.6"
ulid: "npm:2.3.0"
uuid: "npm:9.0.0"
vite: "npm:^5.0.7"
web-push: "npm:3.6.3"
webpack: "npm:^5.88.1"
websocket: "npm:1.0.34"
@ -6637,11 +6704,11 @@ __metadata:
tsc-alias: "npm:1.8.7"
tsconfig-paths: "npm:4.2.0"
twemoji-parser: "npm:14.0.0"
typescript: "npm:5.1.6"
typescript: "npm:^5.1.6"
unicode-emoji-json: "npm:^0.4.0"
uuid: "npm:9.0.0"
vanilla-tilt: "npm:1.8.0"
vite: "npm:5.0.2"
vite: "npm:^5.0.2"
vite-plugin-compression: "npm:^0.5.1"
vue: "npm:^3.3.11"
vue-draggable-plus: "npm:^0.2.2"
@ -7048,6 +7115,13 @@ __metadata:
languageName: node
linkType: hard
"computeds@npm:^0.0.1":
version: 0.0.1
resolution: "computeds@npm:0.0.1"
checksum: 738625ccec6e483124d0ac79ec5474ab5c9df103ea05afc1fd840eed7d9004e3d6009b7bc806df564d66ad915c1ee1fb017bd91b2b32606a252ea9870b6a4026
languageName: node
linkType: hard
"concat-map@npm:0.0.1":
version: 0.0.1
resolution: "concat-map@npm:0.0.1"
@ -7559,6 +7633,13 @@ __metadata:
languageName: node
linkType: hard
"de-indent@npm:^1.0.2":
version: 1.0.2
resolution: "de-indent@npm:1.0.2"
checksum: 30bf43744dca005f9252dbb34ed95dcb3c30dfe52bfed84973b89c29eccff04e27769f222a34c61a93354acf47457785e9032e6184be390ed1d324fb9ab3f427
languageName: node
linkType: hard
"debug@npm:2, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.5.2":
version: 2.6.9
resolution: "debug@npm:2.6.9"
@ -8510,31 +8591,31 @@ __metadata:
linkType: hard
"esbuild@npm:^0.19.3":
version: 0.19.7
resolution: "esbuild@npm:0.19.7"
version: 0.19.8
resolution: "esbuild@npm:0.19.8"
dependencies:
"@esbuild/android-arm": "npm:0.19.7"
"@esbuild/android-arm64": "npm:0.19.7"
"@esbuild/android-x64": "npm:0.19.7"
"@esbuild/darwin-arm64": "npm:0.19.7"
"@esbuild/darwin-x64": "npm:0.19.7"
"@esbuild/freebsd-arm64": "npm:0.19.7"
"@esbuild/freebsd-x64": "npm:0.19.7"
"@esbuild/linux-arm": "npm:0.19.7"
"@esbuild/linux-arm64": "npm:0.19.7"
"@esbuild/linux-ia32": "npm:0.19.7"
"@esbuild/linux-loong64": "npm:0.19.7"
"@esbuild/linux-mips64el": "npm:0.19.7"
"@esbuild/linux-ppc64": "npm:0.19.7"
"@esbuild/linux-riscv64": "npm:0.19.7"
"@esbuild/linux-s390x": "npm:0.19.7"
"@esbuild/linux-x64": "npm:0.19.7"
"@esbuild/netbsd-x64": "npm:0.19.7"
"@esbuild/openbsd-x64": "npm:0.19.7"
"@esbuild/sunos-x64": "npm:0.19.7"
"@esbuild/win32-arm64": "npm:0.19.7"
"@esbuild/win32-ia32": "npm:0.19.7"
"@esbuild/win32-x64": "npm:0.19.7"
"@esbuild/android-arm": "npm:0.19.8"
"@esbuild/android-arm64": "npm:0.19.8"
"@esbuild/android-x64": "npm:0.19.8"
"@esbuild/darwin-arm64": "npm:0.19.8"
"@esbuild/darwin-x64": "npm:0.19.8"
"@esbuild/freebsd-arm64": "npm:0.19.8"
"@esbuild/freebsd-x64": "npm:0.19.8"
"@esbuild/linux-arm": "npm:0.19.8"
"@esbuild/linux-arm64": "npm:0.19.8"
"@esbuild/linux-ia32": "npm:0.19.8"
"@esbuild/linux-loong64": "npm:0.19.8"
"@esbuild/linux-mips64el": "npm:0.19.8"
"@esbuild/linux-ppc64": "npm:0.19.8"
"@esbuild/linux-riscv64": "npm:0.19.8"
"@esbuild/linux-s390x": "npm:0.19.8"
"@esbuild/linux-x64": "npm:0.19.8"
"@esbuild/netbsd-x64": "npm:0.19.8"
"@esbuild/openbsd-x64": "npm:0.19.8"
"@esbuild/sunos-x64": "npm:0.19.8"
"@esbuild/win32-arm64": "npm:0.19.8"
"@esbuild/win32-ia32": "npm:0.19.8"
"@esbuild/win32-x64": "npm:0.19.8"
dependenciesMeta:
"@esbuild/android-arm":
optional: true
@ -8582,7 +8663,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
checksum: 326b9d98a77c5f2fb9a535b292bdc67c88bdfb4a19d29a221d65fd69f4800faea1f34947e8e6bc25ca3bd5db01f61c6968fec91f8c335e21e29b50330d90bd89
checksum: 8c440db4689948626dbc4122a03575c378e86e630e5de3789464504cd474bf3a1fd7c9402ed79eb8aa2f83e5cfd75872c8607d6255a05e540065b42750e89afe
languageName: node
linkType: hard
@ -10096,6 +10177,21 @@ __metadata:
languageName: node
linkType: hard
"frontend@workspace:packages/frontend":
version: 0.0.0-use.local
resolution: "frontend@workspace:packages/frontend"
dependencies:
"@vitejs/plugin-vue": "npm:^4.5.0"
idb-keyval: "npm:^6.2.1"
sass: "npm:^1.69.5"
typescript: "npm:^5.2.2"
vite: "npm:^5.0.0"
vue: "npm:^3.3.8"
vue-router: "npm:^4.2.5"
vue-tsc: "npm:^1.8.22"
languageName: unknown
linkType: soft
"fs-constants@npm:^1.0.0":
version: 1.0.0
resolution: "fs-constants@npm:1.0.0"
@ -11014,7 +11110,7 @@ __metadata:
languageName: node
linkType: hard
"he@npm:1.2.0":
"he@npm:1.2.0, he@npm:^1.2.0":
version: 1.2.0
resolution: "he@npm:1.2.0"
bin:
@ -11370,7 +11466,7 @@ __metadata:
ts-jest: "npm:^27.1.2"
ts-node: "npm:10.4.0"
tsd: "npm:^0.28.1"
typescript: "npm:5.1.6"
typescript: "npm:^5.1.6"
dependenciesMeta:
"@swc/core-android-arm64":
optional: true
@ -11402,7 +11498,7 @@ __metadata:
js-yaml: "npm:4.1.0"
seedrandom: "npm:^3.0.5"
start-server-and-test: "npm:1.15.2"
typescript: "npm:5.1.6"
typescript: "npm:^5.1.6"
yaml: "npm:^2.3.4"
dependenciesMeta:
"@discordapp/twemoji@14.1.2":
@ -13628,6 +13724,13 @@ __metadata:
languageName: node
linkType: hard
"koa-connect@npm:^2.1.0":
version: 2.1.0
resolution: "koa-connect@npm:2.1.0"
checksum: 71ab70c30612518fa915a77fde8bcc7f3ac59d38d419cb780c4dc5ba5954a4ce6332d738d0d15b0b73d792957bbacd9fbcabdea13def6865db2bd47a55604132
languageName: node
linkType: hard
"koa-convert@npm:^2.0.0":
version: 2.0.0
resolution: "koa-convert@npm:2.0.0"
@ -14725,7 +14828,7 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^9.0.1":
"minimatch@npm:^9.0.1, minimatch@npm:^9.0.3":
version: 9.0.3
resolution: "minimatch@npm:9.0.3"
dependencies:
@ -14944,6 +15047,13 @@ __metadata:
languageName: node
linkType: hard
"mrmime@npm:^1.0.0":
version: 1.0.1
resolution: "mrmime@npm:1.0.1"
checksum: a157e833ffe76648ab2107319deeff024b80b136ec66c60fae9d339009a1bb72c57ec1feecfd6a905dfd3df29e2299e850bff84b69cad790cc9bd9ab075834d1
languageName: node
linkType: hard
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@ -15008,6 +15118,13 @@ __metadata:
languageName: node
linkType: hard
"muggle-string@npm:^0.3.1":
version: 0.3.1
resolution: "muggle-string@npm:0.3.1"
checksum: f2357f906e0160b7df0179c77838cf859f3ca23cb74eca7c043b9fc9e1e416d91497c80fbe2f3c9aeb003c14ad15857fc4e94f1631e8a6695b07e4135626d305
languageName: node
linkType: hard
"multer@npm:1.4.4-lts.1":
version: 1.4.4-lts.1
resolution: "multer@npm:1.4.4-lts.1"
@ -16089,6 +16206,13 @@ __metadata:
languageName: node
linkType: hard
"path-browserify@npm:^1.0.1":
version: 1.0.1
resolution: "path-browserify@npm:1.0.1"
checksum: 7e7368a5207e7c6b9051ef045711d0dc3c2b6203e96057e408e6e74d09f383061010d2be95cb8593fe6258a767c3e9fc6b2bfc7ce8d48ae8c3d9f6994cca9ad8
languageName: node
linkType: hard
"path-dirname@npm:^1.0.0":
version: 1.0.2
resolution: "path-dirname@npm:1.0.2"
@ -16838,17 +16962,6 @@ __metadata:
languageName: node
linkType: hard
"postcss@npm:^8.4.31":
version: 8.4.31
resolution: "postcss@npm:8.4.31"
dependencies:
nanoid: "npm:^3.3.6"
picocolors: "npm:^1.0.0"
source-map-js: "npm:^1.0.2"
checksum: 1a6653e72105907377f9d4f2cd341d8d90e3fde823a5ddea1e2237aaa56933ea07853f0f2758c28892a1d70c53bbaca200eb8b80f8ed55f13093003dbec5afa0
languageName: node
linkType: hard
"postcss@npm:^8.4.32":
version: 8.4.32
resolution: "postcss@npm:8.4.32"
@ -18404,6 +18517,19 @@ __metadata:
languageName: node
linkType: hard
"sass@npm:^1.69.5":
version: 1.69.5
resolution: "sass@npm:1.69.5"
dependencies:
chokidar: "npm:>=3.0.0 <4.0.0"
immutable: "npm:^4.0.0"
source-map-js: "npm:>=0.6.2 <2.0.0"
bin:
sass: sass.js
checksum: b320ab22061b3c7fe8cee43b13329b281dd7d86691b8b7c55dec3e47d3ede988989dac56db4dff57ee847d10252a26b611be1b0a5f7c3a0f6a6405ef37a6d018
languageName: node
linkType: hard
"sax@npm:1.2.1":
version: 1.2.1
resolution: "sax@npm:1.2.1"
@ -18717,6 +18843,17 @@ __metadata:
languageName: node
linkType: hard
"sirv@npm:^2.0.3":
version: 2.0.3
resolution: "sirv@npm:2.0.3"
dependencies:
"@polka/url": "npm:^1.0.0-next.20"
mrmime: "npm:^1.0.0"
totalist: "npm:^3.0.0"
checksum: dbfbff7355c1433df4f18683b5efe3b22eebac745e7ae30e38ba9d2bf468765a8a81993b78198dfd9bc809330fce85c67e74bccd262ca5871ecb92046fcf4560
languageName: node
linkType: hard
"sisteransi@npm:^1.0.5":
version: 1.0.5
resolution: "sisteransi@npm:1.0.5"
@ -20010,6 +20147,13 @@ __metadata:
languageName: node
linkType: hard
"totalist@npm:^3.0.0":
version: 3.0.1
resolution: "totalist@npm:3.0.1"
checksum: 5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a
languageName: node
linkType: hard