// This file was automatically generated by Astro PocketBase. import type { LoaderContext } from 'astro/loaders' import type Client from 'pocketbase' import type { RecordAuthResponse } from 'pocketbase' import Pocketbase from 'pocketbase' import type { Collection, TypedPocketbase } from './schemas' let pocketbase: TypedPocketbase let auth: Promise> 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 }