From 08c127f6376df938df3c793bee88bf99965c4c61 Mon Sep 17 00:00:00 2001 From: Niki Wix Skaarup Date: Sat, 12 Apr 2025 21:14:09 +0200 Subject: [PATCH] restructured and simplified favicon --- Dockerfile | 3 +- bun.lock | 36 +++--- bunfig.toml | 2 + image-plugin.ts | 29 +++++ package.json | 14 +-- src/client/.gitkeep | 0 src/images.d.ts | 25 ++++ src/index.html | 112 ----------------- src/index.ts | 110 +++++++++++++++++ src/{ => routes}/index.css | 0 src/routes/index.html | 108 +++++++++++++++++ src/server.ts | 113 ------------------ src/server/.gitkeep | 0 src/{ => server}/build.ts | 4 +- src/{ => server}/types/configuration-ui.d.ts | 0 src/{ => server}/types/greasemonkey.d.ts | 0 src/{ => server}/types/manga-reading.d.ts | 0 src/{ => server}/types/violentmonkey.d.ts | 0 .../manga-reading-overrides.user.css | 0 .../manga-reading/manga-reading.user.css | 0 .../manga-reading/manga-reading.user.ts | 0 .../templates/manga-reading-config.html | 0 .../templates/manga-reading-lib-frame.html | 0 .../manga-reading-notification-button.html | 0 .../manga-reading-notification-container.html | 0 .../templates/manga-reading-notification.html | 0 src/static/favicon.base64.txt | 1 - tsconfig.json | 23 +++- 28 files changed, 320 insertions(+), 260 deletions(-) create mode 100644 image-plugin.ts create mode 100644 src/client/.gitkeep create mode 100644 src/images.d.ts delete mode 100644 src/index.html rename src/{ => routes}/index.css (100%) create mode 100644 src/routes/index.html delete mode 100644 src/server.ts create mode 100644 src/server/.gitkeep rename src/{ => server}/build.ts (95%) rename src/{ => server}/types/configuration-ui.d.ts (100%) rename src/{ => server}/types/greasemonkey.d.ts (100%) rename src/{ => server}/types/manga-reading.d.ts (100%) rename src/{ => server}/types/violentmonkey.d.ts (100%) rename src/{ => server}/userscripts/manga-reading/manga-reading-overrides.user.css (100%) rename src/{ => server}/userscripts/manga-reading/manga-reading.user.css (100%) rename src/{ => server}/userscripts/manga-reading/manga-reading.user.ts (100%) rename src/{ => server}/userscripts/manga-reading/templates/manga-reading-config.html (100%) rename src/{ => server}/userscripts/manga-reading/templates/manga-reading-lib-frame.html (100%) rename src/{ => server}/userscripts/manga-reading/templates/manga-reading-notification-button.html (100%) rename src/{ => server}/userscripts/manga-reading/templates/manga-reading-notification-container.html (100%) rename src/{ => server}/userscripts/manga-reading/templates/manga-reading-notification.html (100%) delete mode 100644 src/static/favicon.base64.txt diff --git a/Dockerfile b/Dockerfile index 76aee88..749bf3e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,5 +35,4 @@ COPY --from=install /temp/prod/node_modules node_modules COPY --from=prerelease /app/ . # run the app - -ENTRYPOINT [ "bun", "run", "start" ] +ENTRYPOINT [ "bun", "start" ] diff --git a/bun.lock b/bun.lock index ac1b0fc..89e95d0 100644 --- a/bun.lock +++ b/bun.lock @@ -4,7 +4,7 @@ "": { "name": "userscripts", "dependencies": { - "@tailwindcss/cli": "4.1.1", + "@tailwindcss/cli": "4.1.3", "bun-plugin-svelte": "^0.0.6", "bun-plugin-tailwind": "^0.0.15", "tailwindcss": "^4.1.3", @@ -19,7 +19,7 @@ "prettier-plugin-tailwindcss": "^0.6.11", }, "peerDependencies": { - "typescript": "^5.8.2", + "typescript": "^5.8.3", }, }, }, @@ -94,33 +94,33 @@ "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.5", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ=="], - "@tailwindcss/cli": ["@tailwindcss/cli@4.1.1", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "4.1.1", "@tailwindcss/oxide": "4.1.1", "enhanced-resolve": "^5.18.1", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.1.1" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "sha512-e+k52zGEjaClimmt/85UwF43NIvB0r0PLXRId2QYUwmbExuU3XPhfBzitdrEKZOTM1goH1Vs4wrNxnqDn8ITQA=="], + "@tailwindcss/cli": ["@tailwindcss/cli@4.1.3", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "4.1.3", "@tailwindcss/oxide": "4.1.3", "enhanced-resolve": "^5.18.1", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.1.3" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "sha512-irQW1LhBCi8O7OPrDVTyo6IZFqUDukGkcqOIxoU9d7zSOxU5LZQ1EB1KA981xmZpPIIfaowgdia8FSxaQrBonQ=="], - "@tailwindcss/node": ["@tailwindcss/node@4.1.1", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.29.2", "tailwindcss": "4.1.1" } }, "sha512-xvlh4pvfG/bkv0fEtJDABAm1tjtSmSyi2QmS4zyj1EKNI1UiOYiUq1IphSwDsNJ5vJ9cWEGs4rJXpUdCN2kujQ=="], + "@tailwindcss/node": ["@tailwindcss/node@4.1.3", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.29.2", "tailwindcss": "4.1.3" } }, "sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.1", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.1", "@tailwindcss/oxide-darwin-arm64": "4.1.1", "@tailwindcss/oxide-darwin-x64": "4.1.1", "@tailwindcss/oxide-freebsd-x64": "4.1.1", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.1", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.1", "@tailwindcss/oxide-linux-arm64-musl": "4.1.1", "@tailwindcss/oxide-linux-x64-gnu": "4.1.1", "@tailwindcss/oxide-linux-x64-musl": "4.1.1", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.1", "@tailwindcss/oxide-win32-x64-msvc": "4.1.1" } }, "sha512-7+YBgnPQ4+jv6B6WVOerJ6WOzDzNJXrRKDts674v6TKAqFqYRr9+EBtSziO7nNcwQ8JtoZNMeqA+WJDjtCM/7w=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.3", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.3", "@tailwindcss/oxide-darwin-arm64": "4.1.3", "@tailwindcss/oxide-darwin-x64": "4.1.3", "@tailwindcss/oxide-freebsd-x64": "4.1.3", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.3", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.3", "@tailwindcss/oxide-linux-arm64-musl": "4.1.3", "@tailwindcss/oxide-linux-x64-gnu": "4.1.3", "@tailwindcss/oxide-linux-x64-musl": "4.1.3", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.3", "@tailwindcss/oxide-win32-x64-msvc": "4.1.3" } }, "sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.1", "", { "os": "android", "cpu": "arm64" }, "sha512-gTyRzfdParpoCU1yyUC/iN6XK6T0Ra4bDlF8Aeul5NP9cLzKEZDogdNVNGv5WZmCDkVol7qlex7TMmcfytMmmw=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.3", "", { "os": "android", "cpu": "arm64" }, "sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dI0QbdMWBvLB3MtaTKetzUKG9CUUQow8JSP4Nm+OxVokeZ+N+f1OmZW/hW1LzMxpx9RQCBgSRL+IIvKRat5Wdg=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-2Y+NPQOTRBCItshPgY/CWg4bKi7E9evMg4bgdb6h9iZObCZLOe3doPcuSxGS3DB0dKyMFKE8pTdWtFUbxZBMSA=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-N97NGMsB/7CHShbc5ube4dcsW/bYENkBrg8yWi8ieN9boYVRdw3cZviVryV/Nfu9bKbBV9kUvduFF2qBI7rEqg=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.1", "", { "os": "linux", "cpu": "arm" }, "sha512-33Lk6KbHnUZbXqza6RWNFo9wqPQ4+H5BAn1CkUUfC1RZ1vYbyDN6+iJPj53wmnWJ3mhRI8jWt3Jt1fO02IVdUQ=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3", "", { "os": "linux", "cpu": "arm" }, "sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-LyW35RzSUy+80WYScv03HKasAUmMFDaSbNpWfk1gG5gEE9kuRGnDzSrqMoLAmY/kzMCYP/1kqmUiAx8EFLkI2A=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-1KPnDMlHdqjPTUSFjx55pafvs8RZXRgxfeRgUrukwDKkuj7gFk28vW3Mx65YdiugAc9NWs3VgueZWaM1Po6uGw=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-4WdzA+MRlsinEEE6yxNMLJxpw0kE9XVipbAKdTL8BeUpyC2TdA3TL46lBulXzKp3BIxh3nqyR/UCqzl5o+3waQ=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-q7Ugbw3ARcjCW2VMUYrcMbJ6aMQuWPArBBE2EqC/swPZTdGADvMQSlvR0VKusUM4HoSsO7ZbvcZ53YwR57+AKw=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-0KpqsovgHcIzm7eAGzzEZsEs0/nPYXnRBv+aPq/GehpNQuE/NAQu+YgZXIIof+VflDFuyXOEnaFr7T5MZ1INhA=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-B1mjeXNS26kBOHv5sXARf6Wd0PWHV9x1TDlW0ummrBUOUAxAy5wcy4Nii1wzNvCdvC448hgiL06ylhwAbNthmg=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.3", "", { "os": "win32", "cpu": "x64" }, "sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA=="], "@types/bun": ["@types/bun@1.2.9", "", { "dependencies": { "bun-types": "1.2.9" } }, "sha512-epShhLGQYc4Bv/aceHbmBhOz1XgUnuTZgcxjxk+WXwNyDXavv5QHD1QEFV0FwbTSQtNq6g4ZcV6y0vZakTjswg=="], @@ -466,10 +466,6 @@ "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], - "@tailwindcss/cli/tailwindcss": ["tailwindcss@4.1.1", "", {}, "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw=="], - - "@tailwindcss/node/tailwindcss": ["tailwindcss@4.1.1", "", {}, "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw=="], - "lightningcss/detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="], "promise-make-counter/promise-make-naked": ["promise-make-naked@3.0.2", "", {}, "sha512-B+b+kQ1YrYS7zO7P7bQcoqqMUizP06BOyNSBEnB5VJKDSWo8fsVuDkfSmwdjF0JsRtaNh83so5MMFJ95soH5jg=="], diff --git a/bunfig.toml b/bunfig.toml index 331faab..0a06033 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1,3 +1,5 @@ +preload = ["./image-plugin.ts"] + [install.scopes] "@jsr" = "https://npm.jsr.io" diff --git a/image-plugin.ts b/image-plugin.ts new file mode 100644 index 0000000..29a9b9c --- /dev/null +++ b/image-plugin.ts @@ -0,0 +1,29 @@ +import { plugin, type BunPlugin } from "bun"; + +const imageLoaderPlugin: BunPlugin = { + name: "image-loader", + setup(builder) { + builder.onLoad({ filter: /\.(png|jpg|jpeg|webp)/ }, async ({ path }) => { + try { + const file = Bun.file(path); + const bytes = await file.bytes(); + return { + exports: { default: bytes }, + loader: "object", + } + } catch (err) { + console.error(err); + if (err instanceof Error) { + throw new Error(`Failed to load file: ${err.message}`); + } else if (typeof err === 'string') { + throw new Error(`Failed to load file: ${err}`); + } + throw new Error("Failed to load file"); + } + }); + } +}; + +plugin(imageLoaderPlugin); + +export default imageLoaderPlugin; diff --git a/package.json b/package.json index 8504b5e..8e10e16 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "userscripts", - "module": "src/server.ts", + "module": "src/index.ts", "type": "module", "private": true, "scripts": { - "start": "bun run src/server.ts", - "dev": "bun --watch run src/server.ts", + "start": "bun run src/index.ts", + "dev": "bun --watch run src/index.ts", "dev:userscripts": "bun --watch run src/build.ts", - "hot": "bun --hot run src/server.ts", - "build": "bun build src/server.ts --compile --minify --sourcemap --target=bun-linux-x64-modern --outfile server", + "hot": "bun --hot run src/index.ts", + "build": "bun build src/index.ts --compile --minify --sourcemap --target=bun-linux-x64-modern --outfile dist/app", "build:userscripts": "bun run src/build.ts" }, "devDependencies": { @@ -21,12 +21,12 @@ "prettier-plugin-tailwindcss": "^0.6.11" }, "dependencies": { - "@tailwindcss/cli": "4.1.1", + "@tailwindcss/cli": "4.1.3", "bun-plugin-svelte": "^0.0.6", "bun-plugin-tailwind": "^0.0.15", "tailwindcss": "^4.1.3" }, "peerDependencies": { - "typescript": "^5.8.2" + "typescript": "^5.8.3" } } diff --git a/src/client/.gitkeep b/src/client/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/images.d.ts b/src/images.d.ts new file mode 100644 index 0000000..790fdbc --- /dev/null +++ b/src/images.d.ts @@ -0,0 +1,25 @@ + +declare module '*.png' { + const value: Uint8Array; + // const file: Bun.BunFile; + // export { file }; + export default value; +} +declare module '*.jpeg' { + const value: Uint8Array; + // const file: Bun.BunFile; + // export { file }; + export default value; +} +declare module '*.jpg' { + const value: Uint8Array; + // const file: Bun.BunFile; + // export { file }; + export default value; +} +declare module '*.webp' { + const value: Uint8Array; + // const file: Bun.BunFile; + // export { file }; + export default value; +} diff --git a/src/index.html b/src/index.html deleted file mode 100644 index 1b7e3a3..0000000 --- a/src/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - Userscripts - skaarup.dev - - - - - - - - - - Skip to main content - -
- -
- -
- -
- - diff --git a/src/index.ts b/src/index.ts index e69de29..1d67d80 100644 --- a/src/index.ts +++ b/src/index.ts @@ -0,0 +1,110 @@ +import homepage from "@routes/index.html"; +import favicon from "@static/favicon.png"; +import robotsTxt from "@static/robots.txt"; +import sitemapTxt from "@static/sitemap.txt"; +import { env } from "bun"; +import path from "path"; + +const development = env.NODE_ENV !== "production"; + +const faviconInit = { headers: new Headers({ 'Content-Type': 'image/png' }) }; + +let htmlFiles: Set; +let scriptFiles: Set; +let cssFiles: Set; + +const globScanOptions: Bun.GlobScanOptions = { + absolute: true, +}; + +async function load() { + await Bun.$`bun run src/server/build.ts`; + const tempHtml: Set = new Set(); + const userHtml = new Bun.Glob("./build/*.html"); + for await (const filePath of userHtml.scan(globScanOptions)) { + tempHtml.add(path.parse(filePath).base); + } + htmlFiles = tempHtml; + + const tempScripts: Set = new Set(); + const userJs = new Bun.Glob("./build/*.user.js"); + for await (const filePath of userJs.scan(globScanOptions)) { + tempScripts.add(path.parse(filePath).base); + } + scriptFiles = tempScripts; + + const tempStyles: Set = new Set(); + const css = new Bun.Glob("./build/*.user.css"); + for await (const filePath of css.scan(globScanOptions)) { + tempStyles.add(path.parse(filePath).base); + } + cssFiles = tempStyles; +} +await load(); + +Bun.serve({ + routes: { + "/": homepage, + "/robots.txt": new Response(robotsTxt, { + headers: { "Content-Type": "text/plain" }, + }), + "/sitemap.txt": new Response(sitemapTxt, { + headers: { "Content-Type": "text/plain" }, + }), + "/favicon.ico": new Response(favicon, faviconInit), + "/health": new Response("OK"), + "/html/:html": async (req) => { + const html = req.params.html.toLocaleLowerCase(); + + if (!htmlFiles.has(html)) { + return new Response("Not found", { status: 404 }); + } + + const file = Bun.file(`./build/${html}`); + + return new Response(file, { + headers: { "Content-Type": "text/css" }, + }); + }, + "/scripts/:script": async (req) => { + const script = req.params.script.toLocaleLowerCase(); + + if (!scriptFiles.has(script)) { + return new Response("Not found", { status: 404 }); + } + + const file = Bun.file(`./build/${script}`); + + return new Response(file, { + headers: { "Content-Type": "application/javascript" }, + }); + }, + "/styles/:style": async (req) => { + const style = req.params.style.toLocaleLowerCase(); + + if (!cssFiles.has(style)) { + return new Response("Not found", { status: 404 }); + } + + const file = Bun.file(`./build/${style}`); + + return new Response(file, { + headers: { "Content-Type": "text/css" }, + }); + }, + }, + development, + // async fetch(req, server) { + // return new Response("Not found", { status: 404 }); + // }, +}); + +if (development) { + setInterval(async () => { + try { + await load(); + } catch (e) { + console.error(e); + } + }, 2500); +} diff --git a/src/index.css b/src/routes/index.css similarity index 100% rename from src/index.css rename to src/routes/index.css diff --git a/src/routes/index.html b/src/routes/index.html new file mode 100644 index 0000000..5a587d5 --- /dev/null +++ b/src/routes/index.html @@ -0,0 +1,108 @@ + + + + Userscripts - skaarup.dev + + + + + + + + + Skip to main content + +
+ +
+ +
+ +
+ + diff --git a/src/server.ts b/src/server.ts deleted file mode 100644 index a624571..0000000 --- a/src/server.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { env } from "bun"; -import homepage from "./index.html"; -import robotsTxt from "./static/robots.txt"; -import sitemapTxt from "./static/sitemap.txt"; -// @ts-ignore ts2307 -import icon from "./static/favicon.png" with { type: "file" }; -import path from "path"; - -const favicon = await Bun.file(icon).bytes(); - -let htmlFiles: Set; -let scriptFiles: Set; -let cssFiles: Set; - -const development = env.NODE_ENV !== "production"; - -const globScanOptions: Bun.GlobScanOptions = { - absolute: true, -}; - -async function load() { - await Bun.$`bun run src/build.ts`; - const tempHtml: Set = new Set(); - const userHtml = new Bun.Glob("./build/*.html"); - for await (const filePath of userHtml.scan(globScanOptions)) { - tempHtml.add(path.parse(filePath).base); - } - htmlFiles = tempHtml; - - const tempScripts: Set = new Set(); - const userJs = new Bun.Glob("./build/*.user.js"); - for await (const filePath of userJs.scan(globScanOptions)) { - tempScripts.add(path.parse(filePath).base); - } - scriptFiles = tempScripts; - - const tempStyles: Set = new Set(); - const css = new Bun.Glob("./build/*.user.css"); - for await (const filePath of css.scan(globScanOptions)) { - tempStyles.add(path.parse(filePath).base); - } - cssFiles = tempStyles; -} -await load(); - -Bun.serve({ - routes: { - "/": homepage, - "/robots.txt": new Response(robotsTxt, { - headers: { "Content-Type": "text/plain" }, - }), - "/sitemap.txt": new Response(sitemapTxt, { - headers: { "Content-Type": "text/plain" }, - }), - "/favicon.ico": new Response(favicon, { - headers: { "Content-Type": "image/png" }, - }), - "/health": new Response("OK"), - "/html/:html": async (req) => { - const html = req.params.html.toLocaleLowerCase(); - - if (!htmlFiles.has(html)) { - return new Response("Not found", { status: 404 }); - } - - const file = Bun.file(`./build/${html}`); - - return new Response(file, { - headers: { "Content-Type": "text/css" }, - }); - }, - "/scripts/:script": async (req) => { - const script = req.params.script.toLocaleLowerCase(); - - if (!scriptFiles.has(script)) { - return new Response("Not found", { status: 404 }); - } - - const file = Bun.file(`./build/${script}`); - - return new Response(file, { - headers: { "Content-Type": "application/javascript" }, - }); - }, - "/styles/:style": async (req) => { - const style = req.params.style.toLocaleLowerCase(); - - if (!cssFiles.has(style)) { - return new Response("Not found", { status: 404 }); - } - - const file = Bun.file(`./build/${style}`); - - return new Response(file, { - headers: { "Content-Type": "text/css" }, - }); - }, - }, - development, - // async fetch(req, server) { - // return new Response("Not found", { status: 404 }); - // }, -}); - -if (development) { - setInterval(async () => { - try { - await load(); - } catch (e) { - console.error(e); - } - }, 2500); -} diff --git a/src/server/.gitkeep b/src/server/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/build.ts b/src/server/build.ts similarity index 95% rename from src/build.ts rename to src/server/build.ts index a8c269c..2265d1b 100644 --- a/src/build.ts +++ b/src/server/build.ts @@ -26,7 +26,7 @@ const globScanOptions: Bun.GlobScanOptions = { absolute: true, }; -const userscripts = new Bun.Glob("./src/userscripts/*/*.user.ts"); +const userscripts = new Bun.Glob("./src/server/userscripts/*/*.user.ts"); for await (const absPath of userscripts.scan(globScanOptions)) { const parsed = path.parse(absPath); console.log(`Building ${parsed.base}...`); @@ -63,7 +63,7 @@ for await (const absPath of userscripts.scan(globScanOptions)) { await swapHtmlImports(fileText, `./build/${parsed.name}.js`); } -const styles = new Bun.Glob("./src/userscripts/*/*.user.css"); +const styles = new Bun.Glob("./src/server/userscripts/*/*.user.css"); for await (const absPath of styles.scan(globScanOptions)) { const name = path.parse(absPath).base; diff --git a/src/types/configuration-ui.d.ts b/src/server/types/configuration-ui.d.ts similarity index 100% rename from src/types/configuration-ui.d.ts rename to src/server/types/configuration-ui.d.ts diff --git a/src/types/greasemonkey.d.ts b/src/server/types/greasemonkey.d.ts similarity index 100% rename from src/types/greasemonkey.d.ts rename to src/server/types/greasemonkey.d.ts diff --git a/src/types/manga-reading.d.ts b/src/server/types/manga-reading.d.ts similarity index 100% rename from src/types/manga-reading.d.ts rename to src/server/types/manga-reading.d.ts diff --git a/src/types/violentmonkey.d.ts b/src/server/types/violentmonkey.d.ts similarity index 100% rename from src/types/violentmonkey.d.ts rename to src/server/types/violentmonkey.d.ts diff --git a/src/userscripts/manga-reading/manga-reading-overrides.user.css b/src/server/userscripts/manga-reading/manga-reading-overrides.user.css similarity index 100% rename from src/userscripts/manga-reading/manga-reading-overrides.user.css rename to src/server/userscripts/manga-reading/manga-reading-overrides.user.css diff --git a/src/userscripts/manga-reading/manga-reading.user.css b/src/server/userscripts/manga-reading/manga-reading.user.css similarity index 100% rename from src/userscripts/manga-reading/manga-reading.user.css rename to src/server/userscripts/manga-reading/manga-reading.user.css diff --git a/src/userscripts/manga-reading/manga-reading.user.ts b/src/server/userscripts/manga-reading/manga-reading.user.ts similarity index 100% rename from src/userscripts/manga-reading/manga-reading.user.ts rename to src/server/userscripts/manga-reading/manga-reading.user.ts diff --git a/src/userscripts/manga-reading/templates/manga-reading-config.html b/src/server/userscripts/manga-reading/templates/manga-reading-config.html similarity index 100% rename from src/userscripts/manga-reading/templates/manga-reading-config.html rename to src/server/userscripts/manga-reading/templates/manga-reading-config.html diff --git a/src/userscripts/manga-reading/templates/manga-reading-lib-frame.html b/src/server/userscripts/manga-reading/templates/manga-reading-lib-frame.html similarity index 100% rename from src/userscripts/manga-reading/templates/manga-reading-lib-frame.html rename to src/server/userscripts/manga-reading/templates/manga-reading-lib-frame.html diff --git a/src/userscripts/manga-reading/templates/manga-reading-notification-button.html b/src/server/userscripts/manga-reading/templates/manga-reading-notification-button.html similarity index 100% rename from src/userscripts/manga-reading/templates/manga-reading-notification-button.html rename to src/server/userscripts/manga-reading/templates/manga-reading-notification-button.html diff --git a/src/userscripts/manga-reading/templates/manga-reading-notification-container.html b/src/server/userscripts/manga-reading/templates/manga-reading-notification-container.html similarity index 100% rename from src/userscripts/manga-reading/templates/manga-reading-notification-container.html rename to src/server/userscripts/manga-reading/templates/manga-reading-notification-container.html diff --git a/src/userscripts/manga-reading/templates/manga-reading-notification.html b/src/server/userscripts/manga-reading/templates/manga-reading-notification.html similarity index 100% rename from src/userscripts/manga-reading/templates/manga-reading-notification.html rename to src/server/userscripts/manga-reading/templates/manga-reading-notification.html diff --git a/src/static/favicon.base64.txt b/src/static/favicon.base64.txt deleted file mode 100644 index e227f8a..0000000 --- a/src/static/favicon.base64.txt +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b049027..7e9f16c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ // Environment setup & latest features "lib": [ "ESNext", - "DOM" + "DOM", ], "target": "ESNext", "module": "ESNext", @@ -23,6 +23,23 @@ // Some stricter flags (disabled by default) "noUnusedLocals": false, "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - } + "noPropertyAccessFromIndexSignature": false, + "paths": { + "@client/*": [ + "./src/client/*" + ], + "@server/*": [ + "./src/server/*" + ], + "@routes/*": [ + "./src/routes/*" + ], + "@static/*": [ + "./src/static/*" + ], + } + }, + "exclude": [ + "node_modules" + ] }