feat: fork drizzle-typebox as @alkdev/drizzlebox
- Rebrand package from drizzle-typebox to @alkdev/drizzlebox - Replace @sinclair/typebox with @alkdev/typebox in all source and test files - Replace @sinclair/typebox with @alkdev/typebox in rollup externals - Convert tsconfig.json from monorepo extends to standalone config - Fix build script monorepo remnant (dist.new -> dist) - Add missing devDependencies (recast, tsx, typescript, resolve-tspaths) - Replace monorepo link dependency for drizzle-orm with ^0.38.4 - Add .gitignore, LICENSE (Apache-2.0 with attribution), and README - Initialize git repo with remote at git.alk.dev:alkdev/drizzlebox
This commit is contained in:
50
src/utils.ts
Normal file
50
src/utils.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import type { Kind, Static, TSchema } from '@alkdev/typebox';
|
||||
import type { Column, SelectedFieldsFlat, Table, View } from 'drizzle-orm';
|
||||
import type { PgEnum } from 'drizzle-orm/pg-core';
|
||||
import type { literalSchema } from './column.ts';
|
||||
|
||||
export function isColumnType<T extends Column>(column: Column, columnTypes: string[]): column is T {
|
||||
return columnTypes.includes(column.columnType);
|
||||
}
|
||||
|
||||
export function isWithEnum(column: Column): column is typeof column & { enumValues: [string, ...string[]] } {
|
||||
return 'enumValues' in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
|
||||
}
|
||||
|
||||
export const isPgEnum: (entity: any) => entity is PgEnum<[string, ...string[]]> = isWithEnum as any;
|
||||
|
||||
type Literal = Static<typeof literalSchema>;
|
||||
export type Json = Literal | { [key: string]: Json } | Json[];
|
||||
export interface JsonSchema extends TSchema {
|
||||
[Kind]: 'Union';
|
||||
static: Json;
|
||||
anyOf: Json;
|
||||
}
|
||||
export interface BufferSchema extends TSchema {
|
||||
[Kind]: 'Buffer';
|
||||
static: Buffer;
|
||||
type: 'buffer';
|
||||
}
|
||||
|
||||
export type IsNever<T> = [T] extends [never] ? true : false;
|
||||
|
||||
export type ArrayHasAtLeastOneValue<TEnum extends [any, ...any[]] | undefined> = TEnum extends [infer TString, ...any[]]
|
||||
? TString extends `${infer TLiteral}` ? TLiteral extends any ? true
|
||||
: false
|
||||
: false
|
||||
: false;
|
||||
|
||||
export type ColumnIsGeneratedAlwaysAs<TColumn extends Column> = TColumn['_']['identity'] extends 'always' ? true
|
||||
: TColumn['_']['generated'] extends undefined ? false
|
||||
: TColumn['_']['generated'] extends infer TGenerated extends { type: string }
|
||||
? TGenerated['type'] extends 'byDefault' ? false
|
||||
: true
|
||||
: true;
|
||||
|
||||
export type RemoveNever<T> = {
|
||||
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
||||
};
|
||||
|
||||
export type GetSelection<T extends SelectedFieldsFlat<Column> | Table | View> = T extends Table ? T['_']['columns']
|
||||
: T extends View ? T['_']['selectedFields']
|
||||
: T;
|
||||
Reference in New Issue
Block a user