cleanup project

This commit is contained in:
2025-10-14 12:02:14 +02:00
parent 63929c2dce
commit 2e1157616f
68 changed files with 1377 additions and 10425 deletions

14
assets/env.d.ts vendored Normal file
View File

@@ -0,0 +1,14 @@
import type { TypedPocketbase } from "../../../src/lib/pocketbase/schemas";
import type { helpersFrom } from "astro-pocketbase-continue";
declare global {
namespace App {
interface Locals {
pocketbase: TypedPocketbase;
getRecord: ReturnType<typeof helpersFrom>["getRecord"];
getRecords: ReturnType<typeof helpersFrom>["getRecords"];
}
}
}
export {};

58
assets/loader.ts Normal file
View File

@@ -0,0 +1,58 @@
// This file was automatically generated by Astro PocketBase.
import type { Collection, TypedPocketbase } from "./schemas";
import type { LoaderContext } from "astro/loaders";
import Pocketbase from "pocketbase";
import type AdminAuthResponse from "pocketbase";
let pocketbase: TypedPocketbase;
let auth: Promise<AdminAuthResponse>;
let isAuthenticating = false;
export function pocketbaseLoader({ collection }: PocketbaseLoaderOptions) {
return {
name: "pocketbase-loader",
load: async ({ store, logger, meta, parseData }: LoaderContext) => {
const { ASTRO_POCKETBASE_ADMIN_EMAIL, ASTRO_POCKETBASE_ADMIN_PASSWORD, PUBLIC_ASTRO_POCKETBASE_URL } = import.meta.env;
if (!ASTRO_POCKETBASE_ADMIN_EMAIL || !ASTRO_POCKETBASE_ADMIN_PASSWORD || !PUBLIC_ASTRO_POCKETBASE_URL)
return logger.error("Environment variables not set");
logger.info(`Loading ${collection}`);
if (!pocketbase) pocketbase = new Pocketbase(PUBLIC_ASTRO_POCKETBASE_URL);
try {
if (!isAuthenticating && !pocketbase.authStore.isValid) {
isAuthenticating = true;
auth = pocketbase.collection("_superusers").authWithPassword(ASTRO_POCKETBASE_ADMIN_EMAIL, ASTRO_POCKETBASE_ADMIN_PASSWORD);
}
await auth;
const lastUpdatedItems = await pocketbase
.collection(collection)
.getList(1, 1, { fields: "updated", skipTotal: true, sort: "updated", order: "desc" });
const lastUpdated = lastUpdatedItems.items[0]?.updated;
if (lastUpdated !== meta.get("last-updated")) {
logger.info(`Refreshing ${collection}`);
meta.set("last-updated", lastUpdated);
const items = await pocketbase.collection(collection).getFullList();
for (const { id, updated, ...rest } of items) {
const data = await parseData({ id, data: { id, updated, ...rest } });
store.set({ data, digest: updated, id });
}
}
logger.info(`Loaded ${collection}`);
} catch (error) {
logger.error(`Error fetching ${collection}: ${error}`);
return;
}
},
};
}
export type PocketbaseLoaderOptions = {
collection: Collection;
};

17
assets/middleware.ts Normal file
View File

@@ -0,0 +1,17 @@
// This file was automatically generated by Astro PocketBase.
import { defineMiddleware } from "astro:middleware";
import { helpersFrom } from "astro-pocketbase-continue";
import PocketBase from "pocketbase";
const middleware = defineMiddleware((context, next) => {
const pocketbase = new PocketBase(import.meta.env.PUBLIC_ASTRO_POCKETBASE_URL);
const { getRecord, getRecords } = helpersFrom({ pocketbase });
context.locals.pocketbase = pocketbase;
context.locals.getRecord = getRecord;
context.locals.getRecords = getRecords;
return next();
});
// You should NOT change the exported name as it is used by the Astro PocketBase integration.
export { middleware as onRequest };

17
assets/toolbar.ts Normal file
View File

@@ -0,0 +1,17 @@
import { defineToolbarApp } from "astro/toolbar";
export default defineToolbarApp({
init(_canvas, app, server) {
let pending = false;
// const button = document.querySelector("astro-dev-toolbar")?.shadowRoot.querySelector("button[data-app-id='astro-pocketbase-continue']");
app.onToggled(({ state }) => {
if (!state) return;
app.toggleNotification({ level: "error", state: true });
if (pending) return;
pending = true;
server.send("astro-pocketbase-continue:refresh", undefined);
});
},
});