Skip to content

Commit a2d99fb

Browse files
committed
fix(effect-schema): preserve services for $type overrides
1 parent c89992e commit a2d99fb

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

drizzle-orm/src/effect-schema/column.types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ type IsPgArrayColumn<TColumn extends Column<any>, TType extends ColumnTypeData>
3131
: GetArrayDepth<TColumn['_']['data']> extends 0 ? false
3232
: true;
3333

34+
type OverrideSchemaType<TSchema extends SchemaTop, TData> = Omit<TSchema, 'Type' | '~rebuild.out'> & Schema<TData>;
35+
3436
type ApplyTypeOverride<TSchema extends SchemaTop, TData> = Equal<TSchema['Type'], TData> extends true ? TSchema
35-
: Schema<TData>;
37+
: OverrideSchemaType<TSchema, TData>;
3638

3739
export type GetEffectSchemaType<
3840
TColumn extends Column<any>,

drizzle-orm/tests/effect-schema.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ test('createSelectSchema preserves $type overrides', () => {
1919
expect(s.make(result.ast).toString()).toStrictEqual(s.make(expected.ast).toString());
2020

2121
type _ = Expect<Equal<s.Schema.Type<typeof result>['id'], MyBrandedId>>;
22+
type _Services = Expect<Equal<typeof result['DecodingServices'], never>>;
23+
type _FieldServices = Expect<Equal<typeof result.fields.id['DecodingServices'], never>>;
2224
});
2325

2426
test('createSelectSchema preserves literal string $type overrides', () => {
@@ -35,4 +37,7 @@ test('createSelectSchema preserves literal string $type overrides', () => {
3537
expect(s.make(result.ast).toString()).toStrictEqual(s.make(expected.ast).toString());
3638

3739
type _ = Expect<Equal<s.Schema.Type<typeof result>['id'], Foo>>;
40+
type _Field = Expect<Equal<s.Schema.Type<typeof result.fields.id>, Foo>>;
41+
type _Services = Expect<Equal<typeof result['DecodingServices'], never>>;
42+
type _FieldServices = Expect<Equal<typeof result.fields.id['DecodingServices'], never>>;
3843
});

0 commit comments

Comments
 (0)