From a8e9682d2916b5a0987a974ab011937b6bee17e7 Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Fri, 2 Feb 2024 15:58:39 -0500 Subject: [PATCH] wip: defineData --- packages/db/config-augment.d.ts | 1 + packages/db/src/runtime/types.ts | 14 ++++++++++++++ packages/db/test/fixtures/recipes/astro.data.ts | 10 ++++++++++ 3 files changed, 25 insertions(+) create mode 100644 packages/db/test/fixtures/recipes/astro.data.ts diff --git a/packages/db/config-augment.d.ts b/packages/db/config-augment.d.ts index 4550343a4c..673b8aee16 100644 --- a/packages/db/config-augment.d.ts +++ b/packages/db/config-augment.d.ts @@ -6,6 +6,7 @@ declare namespace Config { declare module 'astro:db' { export const db: import('./dist/runtime/index.js').SqliteDB; export const dbUrl: string; + export const defineData: typeof import('./dist/runtime/types.js').defineData; export { sql, diff --git a/packages/db/src/runtime/types.ts b/packages/db/src/runtime/types.ts index e3090950cc..baa3f8f040 100644 --- a/packages/db/src/runtime/types.ts +++ b/packages/db/src/runtime/types.ts @@ -2,6 +2,7 @@ import type { ColumnDataType, ColumnBaseConfig } from 'drizzle-orm'; import type { SQLiteColumn, SQLiteInsertValue, + SQLiteTable, SQLiteTableWithColumns, } from 'drizzle-orm/sqlite-core'; import type { DBField, FieldsConfig, MaybeArray, MaybePromise } from '../core/types.js'; @@ -102,3 +103,16 @@ export type Table< >; }; }>; + +export type DBDataContext = { + db: SqliteDB; + seed( + collection: TTable, + data: MaybeArray> + ): Promise /** TODO: type output */; + mode: 'dev' | 'build'; +}; + +export function defineData(callback: (ctx: DBDataContext) => MaybePromise) { + return callback; +} diff --git a/packages/db/test/fixtures/recipes/astro.data.ts b/packages/db/test/fixtures/recipes/astro.data.ts new file mode 100644 index 0000000000..975ba12a13 --- /dev/null +++ b/packages/db/test/fixtures/recipes/astro.data.ts @@ -0,0 +1,10 @@ +/// +import { db, defineData, Ingredient, Recipe } from 'astro:db'; + +export default defineData(async ({ seed }) => { + await seed(Recipe, { + title: 'Pancakes', + description: 'A delicious breakfast', + }); + await db.insert(Recipe).values({}); +});