Skip to content

Commit b0e5e23

Browse files
committed
f
1 parent 05345dd commit b0e5e23

File tree

6 files changed

+59
-360
lines changed

6 files changed

+59
-360
lines changed

src/packages/dumbo/src/core/schema/components/tableSchemaComponent.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import type {
2-
AnyForeignKeyDefinition,
3-
ForeignKeyDefinition,
4-
} from '../foreignKeys/foreignKeyTypes';
1+
import type { ForeignKeyDefinition } from '../foreignKeys/foreignKeyTypes';
52
import {
63
mapSchemaComponentsOfType,
74
schemaComponent,
@@ -27,17 +24,23 @@ export const TableURN = ({ name }: { name: string }): TableURN =>
2724

2825
export type TableColumns = Record<string, AnyColumnSchemaComponent>;
2926
export type TableForeignKeys<
30-
FKS extends AnyForeignKeyDefinition = AnyForeignKeyDefinition,
31-
> = Record<
32-
string,
27+
Columns extends string = string,
28+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
29+
FKS extends ForeignKeyDefinition<Columns, any> = ForeignKeyDefinition<
30+
Columns,
31+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
32+
any
33+
>,
34+
> =
3335
FKS extends ForeignKeyDefinition<infer C, infer R>
34-
? ForeignKeyDefinition<C, R>
35-
: never
36-
>;
36+
? readonly ForeignKeyDefinition<C, R>[]
37+
: never;
3738

3839
export type TableSchemaComponent<
3940
Columns extends TableColumns = TableColumns,
40-
ForeignKeys extends TableForeignKeys = TableForeignKeys,
41+
ForeignKeys extends TableForeignKeys<
42+
keyof Columns & string
43+
> = TableForeignKeys<keyof Columns & string>,
4144
> = SchemaComponent<
4245
TableURN,
4346
Readonly<{

src/packages/dumbo/src/core/schema/dumboSchema/dumboSchema.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ const dumboIndex = (
6161

6262
const dumboTable = <
6363
Columns extends TableColumns = TableColumns,
64-
const ForeignKeys extends TableForeignKeys = TableForeignKeys,
64+
const ForeignKeys extends TableForeignKeys<
65+
keyof Columns & string
66+
> = TableForeignKeys<keyof Columns & string>,
6567
>(
6668
name: string,
6769
definition: {

src/packages/dumbo/src/core/schema/dumboSchema/dumboSchema.unit.spec.ts

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,22 @@ const users = table('users', {
151151
email: column('email', Varchar('max'), { notNull: true }),
152152
name: column('name', Varchar('max')),
153153
},
154-
foreignKeys: {
155-
fk_profile: foreignKey(['sss'], ['public.profiles.user_id']),
156-
},
154+
foreignKeys: [foreignKey(['id'], ['public.profiles.user_id'])],
157155
});
158156

159-
const ttt = users.foreignKeys.fk_profile;
160-
161-
const id = users.columns.email;
157+
const _users2 = table('users', {
158+
columns: {
159+
id: column('id', Varchar('max'), { primaryKey: true, notNull: true }),
160+
email: column('email', Varchar('max'), { notNull: true }),
161+
name: column('name', Varchar('max')),
162+
},
163+
foreignKeys: [
164+
{
165+
columns: ['id'],
166+
references: ['public.profiles.user_id'],
167+
},
168+
],
169+
});
162170

163171
export const simpleDb = database(
164172
'myapp',
@@ -187,12 +195,12 @@ const multiSchemaDb = database('myapp', {
187195
userId: column('user_id', Varchar('max')),
188196
timestamp: column('timestamp', Varchar('max')),
189197
},
190-
foreignKeys: {
191-
userFk: {
198+
foreignKeys: [
199+
{
192200
columns: ['userId'],
193201
references: ['public.users.id'],
194202
},
195-
},
203+
],
196204
}),
197205
}),
198206
});
@@ -229,16 +237,16 @@ void describe('Foreign Key Validation', () => {
229237
id: column('id', Varchar('max')),
230238
user_id: column('user_id', Varchar('max')),
231239
},
232-
foreignKeys: {
233-
userFk: { columns: ['user_id'], references: ['public.users.id'] },
234-
},
240+
foreignKeys: [
241+
{ columns: ['user_id'], references: ['public.users.id'] },
242+
],
235243
}),
236244
}),
237245
});
238246

239247
assert.ok(db.schemas.public.tables.posts.foreignKeys);
240248
assert.deepStrictEqual(
241-
db.schemas.public.tables.posts.foreignKeys.userFk.columns,
249+
db.schemas.public.tables.posts.foreignKeys[0].columns,
242250
['user_id'],
243251
);
244252
});
@@ -258,18 +266,18 @@ void describe('Foreign Key Validation', () => {
258266
user_id: column('user_id', Varchar('max')),
259267
tenant_id: column('tenant_id', Varchar('max')),
260268
},
261-
foreignKeys: {
262-
compositeKey: {
269+
foreignKeys: [
270+
{
263271
columns: ['user_id', 'tenant_id'],
264272
references: ['public.users.id', 'public.users.tenant_id'],
265273
},
266-
},
274+
],
267275
}),
268276
}),
269277
});
270278

271279
assert.deepStrictEqual(
272-
db.schemas.public.tables.posts.foreignKeys.compositeKey.columns,
280+
db.schemas.public.tables.posts.foreignKeys[0].columns,
273281
['user_id', 'tenant_id'],
274282
);
275283
});
@@ -336,15 +344,15 @@ void describe('Foreign Key Validation', () => {
336344
id: column('id', Varchar('max')),
337345
user_id: column('user_id', Varchar('max')),
338346
},
339-
foreignKeys: {
340-
userFk: { columns: ['user_id'], references: ['public.users.id'] },
341-
},
347+
foreignKeys: [
348+
{ columns: ['user_id'], references: ['public.users.id'] },
349+
],
342350
}),
343351
}),
344352
});
345353

346354
assert.deepStrictEqual(
347-
db.schemas.analytics.tables.events.foreignKeys.userFk.references,
355+
db.schemas.analytics.tables.events.foreignKeys[0].references,
348356
['public.users.id'],
349357
);
350358
});

src/packages/dumbo/src/core/schema/foreignKeys/foreignKeyTypes.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ export type ForeignKeyDefinition<Columns = string, References = string> = {
5252
readonly references: readonly References[];
5353
};
5454

55-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
56-
const Tuple = <T extends [any, ...any]>(v: T) => v;
57-
5855
export const foreignKey = <
5956
const Columns extends readonly string[],
6057
const References extends readonly string[],

0 commit comments

Comments
 (0)