import { buildClient } from "npm:@xata.io/client@latest";
import type { BaseClientOptions, SchemaInference, XataRecord } from "npm:@xata.io/client@latest";
const tables = [
{
name: "Posts",
columns: [
{ name: "title", type: "string" },
{ name: "labels", type: "multiple" },
{ name: "slug", type: "string" },
{ name: "text", type: "text" },
{ name: "author", type: "link", link: { table: "Users" } },
{ name: "createdAt", type: "datetime" },
{ name: "views", type: "int" },
],
},
{
name: "Users",
columns: [
{ name: "name", type: "string" },
{ name: "email", type: "email" },
{ name: "bio", type: "text" },
],
revLinks: [{ column: "author", table: "Posts" }],
},
] as const;
export type SchemaTables = typeof tables;
export type InferredTypes = SchemaInference<SchemaTables>;
export type Posts = InferredTypes["Posts"];
export type PostsRecord = Posts & XataRecord;
export type Users = InferredTypes["Users"];
export type UsersRecord = Users & XataRecord;
export type DatabaseSchema = {
Posts: PostsRecord;
Users: UsersRecord;
};
const DatabaseClient = buildClient();
const defaultOptions = {
databaseURL: "https://Nico-Baier-s-workspace-1rbjms.us-east-1.xata.sh/db/valtown",
};
export class XataClient extends DatabaseClient<DatabaseSchema> {
constructor(options?: BaseClientOptions) {
super({ ...defaultOptions, ...options }, tables);
}
}
let instance: XataClient | undefined = undefined;
export const getXataClient = (options?: BaseClientOptions) => {
if (instance) return instance;
instance = new XataClient();
return instance;
};