114 lines · 2.8 KB · TypeScript
RawDownload
import { cancel, confirm, isCancel } from "@clack/prompts";import { fumadb } from "../src";import { kyselyAdapter } from "../src/adapters/kysely";import { createCli } from "../src/cli";import { column, idColumn, schema, table, variantSchema } from "../src/schema";import { kyselyTests, resetDB } from "./shared"; const v1 = schema({  version: "1.0.0",  tables: {    users: table("users", {      id: idColumn("id", "varchar(255)").defaultTo$("auto"),      name: column("name", "string"),    }),    messages: table("messages", {      id: idColumn("id", "varchar(255)").defaultTo$("auto"),      user: column("user", "varchar(255)"),      content: column("content", "string"),      parent: column("parent", "varchar(255)").nullable(),    }),  },  relations: {    users: ({ many }) => ({      messages: many("messages"),    }),    messages: ({ one }) => ({      author: one("users", ["user", "id"]).foreignKey(),    }),  },}); const v1Roles = variantSchema("role", v1, {  tables: {    roles: table("roles", {      id: idColumn("id", "varchar(255)"),      userId: column("user_id", "varchar(255)").unique(),    }),  },  relations: {    roles: (b) => ({      user: b.one("users", ["userId", "id"]).foreignKey(),    }),    users: (b) => ({      role: b.one("roles"),    }),  },}); const v2 = schema({  version: "2.0.0",  tables: {    users: table("users", {      id: idColumn("id", "varchar(255)").defaultTo$("auto"),      name: column("name", "string"),      image: column("image", "binary").nullable(),    }),    messages: table("messages", {      id: idColumn("id", "varchar(255)").defaultTo$("auto"),      user: column("user", "varchar(255)"),      content: column("content", "string"),      parent: column("parent", "varchar(255)").nullable(),    }),  },  relations: {    users: ({ many }) => ({      messages: many("messages"),    }),    messages: ({ one }) => ({      author: one("users", ["user", "id"]).foreignKey(),    }),  },}); const v2Roles = variantSchema("role", v2, {  tables: {    roles: table("roles", {      id: idColumn("id", "varchar(255)"),      userId: column("user_id", "varchar(255)").unique(),    }),  },  relations: {    roles: (b) => ({      user: b.one("users", ["userId", "id"]).foreignKey(),    }),    users: (b) => ({      role: b.one("roles"),    }),  },}); const db = fumadb({  schemas: [v1, v1Roles, v2, v2Roles],  namespace: "test",}).names.prefix("test_"); const test = kyselyTests[0]!;const { main } = createCli({  db: db.client(kyselyAdapter(test)),  command: "my-lib",  version: "0.0.0",}); const isReset = await confirm({  message: "reset db?",}); if (isCancel(isReset)) {  cancel("skipped cli testing");  process.exit(0);} if (isReset) await resetDB(test.provider); void main();