Skip to content

Commit 2536b78

Browse files
committed
f
1 parent d12f736 commit 2536b78

File tree

5 files changed

+82
-77
lines changed

5 files changed

+82
-77
lines changed

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,28 @@ import {
1212
} from './tableSchemaComponent';
1313

1414
export type DatabaseSchemaURNType = 'sc:dumbo:database_schema';
15-
export type DatabaseSchemaURN = `${DatabaseSchemaURNType}:${string}`;
15+
export type DatabaseSchemaURN<SchemaName extends string = string> =
16+
`${DatabaseSchemaURNType}:${SchemaName}`;
1617

1718
export const DatabaseSchemaURNType: DatabaseSchemaURNType =
1819
'sc:dumbo:database_schema';
19-
export const DatabaseSchemaURN = ({
20+
export const DatabaseSchemaURN = <SchemaName extends string = string>({
2021
name,
2122
}: {
22-
name: string;
23-
}): DatabaseSchemaURN => `${DatabaseSchemaURNType}:${name}`;
23+
name: SchemaName;
24+
}): DatabaseSchemaURN<SchemaName> => `${DatabaseSchemaURNType}:${name}`;
2425

2526
export type DatabaseSchemaTables<
2627
Tables extends AnyTableSchemaComponent = AnyTableSchemaComponent,
2728
> = Record<string, Tables>;
2829

2930
export type DatabaseSchemaSchemaComponent<
3031
Tables extends DatabaseSchemaTables = DatabaseSchemaTables,
32+
SchemaName extends string = string,
3133
> = SchemaComponent<
32-
DatabaseSchemaURN,
34+
DatabaseSchemaURN<SchemaName>,
3335
Readonly<{
34-
schemaName: string;
36+
schemaName: SchemaName;
3537
tables: ReadonlyMap<string, TableSchemaComponent> & Tables;
3638
addTable: (table: string | TableSchemaComponent) => TableSchemaComponent;
3739
}>
@@ -43,14 +45,18 @@ export type AnyDatabaseSchemaSchemaComponent =
4345

4446
export const databaseSchemaSchemaComponent = <
4547
Tables extends DatabaseSchemaTables = DatabaseSchemaTables,
48+
const SchemaName extends string = string,
4649
>({
4750
schemaName,
4851
tables,
4952
...migrationsOrComponents
5053
}: {
51-
schemaName: string;
54+
schemaName: SchemaName;
5255
tables?: Tables;
53-
} & SchemaComponentOptions): DatabaseSchemaSchemaComponent<Tables> => {
56+
} & SchemaComponentOptions): DatabaseSchemaSchemaComponent<
57+
Tables,
58+
SchemaName
59+
> => {
5460
const base = schemaComponent(DatabaseSchemaURN({ name: schemaName }), {
5561
migrations: migrationsOrComponents.migrations ?? [],
5662
components: [

src/packages/dumbo/src/core/schema/components/relationships/relationshipValidation.ts

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -425,16 +425,6 @@ export type ValidateTablesInSchema<
425425
: ValidationResult<false, ExtractValidationErrors<Results>>
426426
: ValidationResult<true>;
427427

428-
export type ValidateSchemaRelationships<
429-
Schema extends AnyDatabaseSchemaSchemaComponent,
430-
ValidReferences extends string,
431-
AllTypes,
432-
CurrentSchema extends string,
433-
> =
434-
Schema extends DatabaseSchemaSchemaComponent<infer Tables>
435-
? ValidateTablesInSchema<Tables, ValidReferences, AllTypes, CurrentSchema>
436-
: ValidationResult<true>;
437-
438428
export type ValidateSingleSchemaRelationships<
439429
Schema extends AnyDatabaseSchemaSchemaComponent,
440430
SchemaName extends string,
@@ -469,16 +459,23 @@ export type ValidatedSchemaComponent<
469459
? { valid: false; error: FormatError<E> }
470460
: DatabaseSchemaSchemaComponent<Tables>;
471461

472-
export type ValidateSchemasInDatabase<
473-
Schemas extends Record<string, AnyDatabaseSchemaSchemaComponent>,
474-
ValidReferences extends string,
475-
AllTypes,
476-
> = {
462+
export type ValidateSchemaRelationships<
463+
Schema extends AnyDatabaseSchemaSchemaComponent,
464+
Schemas extends DatabaseSchemas,
465+
> =
466+
Schema extends DatabaseSchemaSchemaComponent<infer Tables>
467+
? ValidateTablesInSchema<
468+
Tables,
469+
AllColumnReferences<Schemas>,
470+
AllColumnTypes<Schemas>,
471+
Schema['schemaName']
472+
>
473+
: ValidationResult<true>;
474+
475+
export type ValidateSchemasInDatabase<Schemas extends DatabaseSchemas> = {
477476
[SchemaName in keyof Schemas]: ValidateSchemaRelationships<
478477
Schemas[SchemaName],
479-
ValidReferences,
480-
AllTypes,
481-
SchemaName & string
478+
Schemas
482479
>;
483480
}[keyof Schemas] extends infer Results
484481
? ExtractValidationErrors<Results> extends never
@@ -487,11 +484,7 @@ export type ValidateSchemasInDatabase<
487484
: ValidationResult<true>;
488485

489486
export type ValidateDatabaseSchemas<Schemas extends DatabaseSchemas> =
490-
ValidateSchemasInDatabase<
491-
Schemas,
492-
AllColumnReferences<Schemas>,
493-
AllColumnTypes<Schemas>
494-
> extends {
487+
ValidateSchemasInDatabase<Schemas> extends {
495488
valid: false;
496489
error: infer E;
497490
}

src/packages/dumbo/src/core/schema/components/relationships/relationshipValidation.type.spec.ts

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -502,54 +502,58 @@ type _Test29 = Expect<IsError<_Result_InvalidFK>>;
502502

503503
import type { ValidateSchemaRelationships } from './relationshipValidation';
504504

505-
type _Schema_MultiTable = DatabaseSchemaSchemaComponent<{
506-
users: TableSchemaComponent<{
507-
id: AnyColumnSchemaComponent;
508-
email: AnyColumnSchemaComponent;
509-
}>;
510-
posts: TableSchemaComponent<
511-
{
505+
type _Schema_MultiTable = DatabaseSchemaSchemaComponent<
506+
{
507+
users: TableSchemaComponent<{
512508
id: AnyColumnSchemaComponent;
513-
user_id: AnyColumnSchemaComponent;
514-
},
515-
{
516-
user: {
517-
columns: ['user_id'];
518-
references: ['public.users.id'];
519-
type: 'one-to-many';
520-
};
521-
}
522-
>;
523-
}>;
509+
email: AnyColumnSchemaComponent;
510+
}>;
511+
posts: TableSchemaComponent<
512+
{
513+
id: AnyColumnSchemaComponent;
514+
user_id: AnyColumnSchemaComponent;
515+
},
516+
{
517+
user: {
518+
columns: ['user_id'];
519+
references: ['public.users.id'];
520+
type: 'one-to-many';
521+
};
522+
}
523+
>;
524+
},
525+
'public'
526+
>;
524527

525528
type _Result_Schema_Valid = ValidateSchemaRelationships<
526529
_Schema_MultiTable,
527-
'public.users.id' | 'public.users.email' | 'public.posts.id',
528-
_AllColumnTypes2,
529-
'public'
530+
{ readonly public: _Schema_MultiTable }
530531
>;
531532

532-
type _Schema_WithError = DatabaseSchemaSchemaComponent<{
533-
posts: TableSchemaComponent<
534-
{
535-
id: AnyColumnSchemaComponent;
536-
user_id: AnyColumnSchemaComponent;
537-
},
538-
{
539-
user: {
540-
columns: ['user_id'];
541-
references: ['public.users.id'];
542-
type: 'one-to-many';
543-
};
544-
}
545-
>;
546-
}>;
533+
type _Test30 = Expect<Equal<_Result_Schema_Valid, { valid: true }>>;
534+
535+
type _Schema_WithError = DatabaseSchemaSchemaComponent<
536+
{
537+
posts: TableSchemaComponent<
538+
{
539+
id: AnyColumnSchemaComponent;
540+
user_id: AnyColumnSchemaComponent;
541+
},
542+
{
543+
user: {
544+
columns: ['user_id'];
545+
references: ['public.users.id'];
546+
type: 'one-to-many';
547+
};
548+
}
549+
>;
550+
},
551+
'public'
552+
>;
547553

548554
type _Result_Schema_Error = ValidateSchemaRelationships<
549555
_Schema_WithError,
550-
'public.posts.id' | 'public.users.email',
551-
_AllColumnTypes2,
552-
'public'
556+
{ public: _Schema_WithError }
553557
>;
554558
type _Test31 = Expect<IsError<_Result_Schema_Error>>;
555559

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,27 +92,29 @@ const dumboTable = <
9292

9393
function dumboDatabaseSchema<
9494
const Tables extends DatabaseSchemaTables = DatabaseSchemaTables,
95-
>(tables: Tables): DatabaseSchemaSchemaComponent<Tables>;
95+
>(
96+
tables: Tables,
97+
): DatabaseSchemaSchemaComponent<Tables, typeof DEFAULT_DATABASE_SCHEMA_NAME>;
9698
function dumboDatabaseSchema<
9799
const Tables extends DatabaseSchemaTables = DatabaseSchemaTables,
98-
SchemaName extends string = string,
100+
const SchemaName extends string = string,
99101
>(
100102
schemaName: SchemaName,
101103
tables: Tables,
102104
options?: SchemaComponentOptions,
103-
): DatabaseSchemaSchemaComponent<Tables>;
105+
): DatabaseSchemaSchemaComponent<Tables, SchemaName>;
104106
function dumboDatabaseSchema<
105107
const Tables extends DatabaseSchemaTables = DatabaseSchemaTables,
106-
SchemaName extends string = string,
108+
const SchemaName extends string = string,
107109
>(
108110
nameOrTables: SchemaName | Tables,
109111
tables?: Tables,
110112
options?: SchemaComponentOptions,
111-
): DatabaseSchemaSchemaComponent<Tables> {
113+
): DatabaseSchemaSchemaComponent<Tables, SchemaName> {
112114
const schemaName =
113115
typeof nameOrTables === 'string'
114116
? nameOrTables
115-
: DEFAULT_DATABASE_SCHEMA_NAME;
117+
: (DEFAULT_DATABASE_SCHEMA_NAME as SchemaName);
116118
const tablesMap =
117119
(typeof nameOrTables === 'string' ? tables : nameOrTables) ??
118120
({} as Tables);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export type SchemaComponentType<Kind extends string = string> = `sc:${Kind}`;
6363
export type DumboSchemaComponentType<Kind extends string = string> =
6464
SchemaComponentType<`dumbo:${Kind}`>;
6565

66-
export const schemaComponent = <ComponentKey extends string = string>(
66+
export const schemaComponent = <const ComponentKey extends string = string>(
6767
key: ComponentKey,
6868
options: SchemaComponentOptions,
6969
): SchemaComponent<ComponentKey> => {

0 commit comments

Comments
 (0)