mirror of
https://github.com/withastro/astro.git
synced 2025-02-03 22:29:08 -05:00
fix: just infer insert keys for now
This commit is contained in:
parent
efafea2a96
commit
285244e3d4
2 changed files with 20 additions and 6 deletions
|
@ -8,7 +8,9 @@ import {
|
||||||
type collectionSchema,
|
type collectionSchema,
|
||||||
collectionsSchema,
|
collectionsSchema,
|
||||||
type MaybePromise,
|
type MaybePromise,
|
||||||
|
type MaybeArray,
|
||||||
type Table,
|
type Table,
|
||||||
|
type DBField,
|
||||||
} from './types.js';
|
} from './types.js';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { type SqliteDB } from './internal.js';
|
import { type SqliteDB } from './internal.js';
|
||||||
|
@ -61,17 +63,28 @@ type ResolvedCollectionConfig<
|
||||||
Writable extends boolean,
|
Writable extends boolean,
|
||||||
> = CollectionConfig<TFields, Writable> & {
|
> = CollectionConfig<TFields, Writable> & {
|
||||||
writable: Writable;
|
writable: Writable;
|
||||||
set(data: SQLiteInsertValue<Table<string, TFields>>): Promise<any> /** TODO: type output */;
|
set(
|
||||||
|
data: MaybeArray<
|
||||||
|
SQLiteInsertValue<
|
||||||
|
Table<
|
||||||
|
string,
|
||||||
|
/** TODO: true type inference */ Record<Extract<keyof TFields, string>, DBField>
|
||||||
|
>
|
||||||
|
>
|
||||||
|
>
|
||||||
|
): Promise<any> /** TODO: type output */;
|
||||||
};
|
};
|
||||||
type SetData<TFields extends z.input<typeof collectionSchema>['fields']> = SQLiteInsertValue<
|
|
||||||
Table<string, TFields>
|
|
||||||
>;
|
|
||||||
|
|
||||||
export function defineCollection<TFields extends z.input<typeof collectionSchema>['fields']>(
|
export function defineCollection<TFields extends z.input<typeof collectionSchema>['fields']>(
|
||||||
userConfig: CollectionConfig<TFields, false>
|
userConfig: CollectionConfig<TFields, false>
|
||||||
): ResolvedCollectionConfig<TFields, false> {
|
): ResolvedCollectionConfig<TFields, false> {
|
||||||
let db: SqliteDB | undefined;
|
let db: SqliteDB | undefined;
|
||||||
let table: Table<string, TFields> | undefined;
|
let table:
|
||||||
|
| Table<
|
||||||
|
string,
|
||||||
|
/** TODO: true type inference */ Record<Extract<keyof TFields, string>, DBField>
|
||||||
|
>
|
||||||
|
| undefined;
|
||||||
function _setEnv(env: { db: SqliteDB; table: Table<string, TFields> }) {
|
function _setEnv(env: { db: SqliteDB; table: Table<string, TFields> }) {
|
||||||
db = env.db;
|
db = env.db;
|
||||||
table = env.table;
|
table = env.table;
|
||||||
|
@ -81,7 +94,7 @@ export function defineCollection<TFields extends z.input<typeof collectionSchema
|
||||||
writable: false,
|
writable: false,
|
||||||
// @ts-expect-error keep private
|
// @ts-expect-error keep private
|
||||||
_setEnv,
|
_setEnv,
|
||||||
set: async (values: SetData<TFields>) => {
|
set: async (values) => {
|
||||||
if (!db || !table) {
|
if (!db || !table) {
|
||||||
throw new Error('Collection `.set()` can only be called during `data()` seeding.');
|
throw new Error('Collection `.set()` can only be called during `data()` seeding.');
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,6 +177,7 @@ export type AstroId<T extends Pick<GeneratedConfig<'string'>, 'tableName'>> = SQ
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type MaybePromise<T> = T | Promise<T>;
|
export type MaybePromise<T> = T | Promise<T>;
|
||||||
|
export type MaybeArray<T> = T | T[];
|
||||||
|
|
||||||
export type Column<T extends DBField['type'], S extends GeneratedConfig> = T extends 'boolean'
|
export type Column<T extends DBField['type'], S extends GeneratedConfig> = T extends 'boolean'
|
||||||
? AstroBoolean<S>
|
? AstroBoolean<S>
|
||||||
|
|
Loading…
Add table
Reference in a new issue