From ad195b22dbd17c59e9a2a1b818d113646fbbba1e Mon Sep 17 00:00:00 2001 From: rift <117926989+Riftriot@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:01:18 -0500 Subject: [PATCH] SSR and marketplace shit --- astro.config.mjs | 11 ++++++- package-lock.json | 18 ++++++++++ package.json | 1 + server.js | 20 ++++++++---- src/components/catalog/CatalogCard.svelte | 38 ++++++++++++++++------ src/pages/[lang]/catalog.astro | 13 +++++--- src/pages/[lang]/games.astro | 1 + src/pages/[lang]/index.astro | 2 +- src/pages/[lang]/settings/appearance.astro | 1 + src/pages/[lang]/settings/pr.astro | 1 + src/pages/[lang]/settings/tab.astro | 1 + src/pages/assets/[...package_name].astro | 38 ++++++++++++++++++++++ 12 files changed, 123 insertions(+), 22 deletions(-) create mode 100644 src/pages/assets/[...package_name].astro diff --git a/astro.config.mjs b/astro.config.mjs index 867d01c..bd8e9b5 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,9 +1,10 @@ import { defineConfig } from "astro/config"; import tailwind from "@astrojs/tailwind"; import icon from "astro-icon"; - import svelte from "@astrojs/svelte"; +import node from "@astrojs/node"; + // https://astro.build/config export default defineConfig({ integrations: [tailwind(), icon(), svelte()], @@ -19,7 +20,15 @@ export default defineConfig({ target: "http://localhost:8080", changeOrigin: true, }, + "/api/packages": { + target: "http://localhost:8080", + changeOrigin: true, + }, }, }, }, + output: "server", + adapter: node({ + mode: "hybrid", + }), }); diff --git a/package-lock.json b/package-lock.json index d54487b..3356288 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "dependencies": { "@astrojs/check": "^0.8.2", + "@astrojs/node": "^8.3.2", "@astrojs/svelte": "^5.7.0", "@astrojs/tailwind": "^5.1.0", "@fastify/compress": "^7.0.3", @@ -328,6 +329,18 @@ "vfile": "^6.0.2" } }, + "node_modules/@astrojs/node": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-8.3.2.tgz", + "integrity": "sha512-Upv0D+9b3RXp7XViQTtrijaDqihHWbVHLdJQ2sxtPOEtw2GDrVxuC6LmXIUew5YvJ9Ylmpst6KizVwO8d/K9/Q==", + "dependencies": { + "send": "^0.18.0", + "server-destroy": "^1.0.1" + }, + "peerDependencies": { + "astro": "^4.2.0" + } + }, "node_modules/@astrojs/prism": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz", @@ -8917,6 +8930,11 @@ "node": ">= 0.8.0" } }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", diff --git a/package.json b/package.json index fbf16ae..a284ffd 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@astrojs/check": "^0.8.2", + "@astrojs/node": "^8.3.2", "@astrojs/svelte": "^5.7.0", "@astrojs/tailwind": "^5.1.0", "@fastify/compress": "^7.0.3", diff --git a/server.js b/server.js index 14bf58a..1c6aad7 100644 --- a/server.js +++ b/server.js @@ -3,11 +3,12 @@ import { createServer } from "node:http"; import path from "path"; import { Sequelize, DataTypes } from "sequelize"; import { fileURLToPath } from "url"; +import { handler as ssrHandler } from "./dist/server/entry.mjs"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const app = express(); -const publicPath = "dist"; +const publicPath = "dist/client"; const sequelize = new Sequelize("database", "user", "password", { host: "localhost", dialect: "sqlite", @@ -27,6 +28,9 @@ const catalog_assets = sequelize.define("catalog_assets", { description: { type: DataTypes.TEXT, }, + author: { + type: DataTypes.TEXT, + }, image: { type: DataTypes.TEXT, }, @@ -53,10 +57,6 @@ const catalog_assets = sequelize.define("catalog_assets", { }, }); -app.use(express.static(publicPath)); -app.use("/images/", express.static("./database_assets/image")); -app.use("/videos/", express.static("./database_assets/video")); - app.get("/api", function (request, reply) { reply.send({ hello: "world" }); }); @@ -83,6 +83,7 @@ app.get("/api/catalog-assets", async (request, reply) => { acc[asset.package_name] = { title: asset.title, description: asset.description, + author: asset.author, image: asset.image, tags: asset.tags, version: asset.version, @@ -128,6 +129,7 @@ app.get("/api/packages/:package", async (request, reply) => { title: package_row.get("title"), description: package_row.get("description"), image: package_row.get("image"), + author: package_row.get("author"), tags: package_row.get("tags"), version: package_row.get("version"), background_image: package_row.get("background_image"), @@ -141,10 +143,16 @@ app.get("/api/packages/:package", async (request, reply) => { } }); +app.use("/images/", express.static("./database_assets/image")); +app.use("/videos/", express.static("./database_assets/video")); +app.use(ssrHandler); +app.use(express.static(publicPath)); + // await catalog_assets.create({ -// package_name: "koaku.fortnite.jpeg", +// package_name: "com.dababy.fortnite", // title: "fortnite.jpeg", // image: "fortnite.jpg", +// author: "DaBaby LETS GOOOOOOOOOOOOOOOOOOOOOOO" // version: "6.9.420", // description: "a man in a blessings shirt sticking his tounge out", // tags: ["Fortnite", "Shit out my ass"], diff --git a/src/components/catalog/CatalogCard.svelte b/src/components/catalog/CatalogCard.svelte index edc9a69..0a3c811 100644 --- a/src/components/catalog/CatalogCard.svelte +++ b/src/components/catalog/CatalogCard.svelte @@ -11,18 +11,36 @@ {#await assetPromise} Loading assets... {:then assets} - + {:catch someError} System error: {someError.message}. {/await} diff --git a/src/pages/[lang]/catalog.astro b/src/pages/[lang]/catalog.astro index 212b2fa..380dec6 100644 --- a/src/pages/[lang]/catalog.astro +++ b/src/pages/[lang]/catalog.astro @@ -8,12 +8,17 @@ export function getStaticPaths() { ]; return STATIC_PATHS; } +export const prerender = true; --- -
- The Nebula Catalog is a place for you to find user-created themes and - plugins. +
+
+ The Nebula Catalog is a place for you to find user-created themes and + plugins. +
+
- diff --git a/src/pages/[lang]/games.astro b/src/pages/[lang]/games.astro index 32ffeb0..49d208e 100644 --- a/src/pages/[lang]/games.astro +++ b/src/pages/[lang]/games.astro @@ -7,6 +7,7 @@ export function getStaticPaths() { ]; return STATIC_PATHS; } +export const prerender = true; --- diff --git a/src/pages/[lang]/index.astro b/src/pages/[lang]/index.astro index 1d2efac..a8ebb16 100644 --- a/src/pages/[lang]/index.astro +++ b/src/pages/[lang]/index.astro @@ -9,7 +9,7 @@ export function getStaticPaths() { ]; return STATIC_PATHS; } - +export const prerender = true; const lang = getLangFromUrl(Astro.url); const t = useTranslations(lang); --- diff --git a/src/pages/[lang]/settings/appearance.astro b/src/pages/[lang]/settings/appearance.astro index ea6ab37..6af8269 100644 --- a/src/pages/[lang]/settings/appearance.astro +++ b/src/pages/[lang]/settings/appearance.astro @@ -16,6 +16,7 @@ export function getStaticPaths() { ]; return STATIC_PATHS; } +export const prerender = true; --- diff --git a/src/pages/[lang]/settings/pr.astro b/src/pages/[lang]/settings/pr.astro index 10a4c44..ef0b6bd 100644 --- a/src/pages/[lang]/settings/pr.astro +++ b/src/pages/[lang]/settings/pr.astro @@ -13,6 +13,7 @@ export function getStaticPaths() { ]; return STATIC_PATHS; } +export const prerender = true; --- diff --git a/src/pages/[lang]/settings/tab.astro b/src/pages/[lang]/settings/tab.astro index 730042b..533a374 100644 --- a/src/pages/[lang]/settings/tab.astro +++ b/src/pages/[lang]/settings/tab.astro @@ -13,6 +13,7 @@ export function getStaticPaths() { ]; return STATIC_PATHS; } +export const prerender = true; --- diff --git a/src/pages/assets/[...package_name].astro b/src/pages/assets/[...package_name].astro new file mode 100644 index 0000000..89c8860 --- /dev/null +++ b/src/pages/assets/[...package_name].astro @@ -0,0 +1,38 @@ +--- +const { package_name } = Astro.params; +import Layout from "../../layouts/Layout.astro"; +const response = await fetch( + new URL("/api/packages/" + package_name, Astro.url) +); +const assets_json = await response.json(); +--- + + +
+ { + assets_json.error ? ( +

+ Unexpected error. Are you sure you typed the name right? +

+ ) : ( +
+ {assets_json.title} +
+
{assets_json.type}
+
{assets_json.title}
+
{assets_json.description}
+ +
+
+ ) + } +
+