Skip to content

Commit 3e35bff

Browse files
committed
Refactored relationship validation to include type validation and partial matches
1 parent ee1fa6f commit 3e35bff

35 files changed

+3981
-7493
lines changed

plan.md

Lines changed: 0 additions & 1619 deletions
This file was deleted.

src/packages/dumbo/src/core/schema/MIGRATION_UNIFICATION_PLAN.md

Lines changed: 0 additions & 1731 deletions
This file was deleted.

src/packages/dumbo/src/core/schema/REVIEW.MD

Lines changed: 0 additions & 201 deletions
This file was deleted.

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

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,23 @@ import {
66
} from '../schemaComponent';
77

88
export type ColumnURNType = 'sc:dumbo:column';
9-
export type ColumnURN = `${ColumnURNType}:${string}`;
9+
export type ColumnURN<ColumnName extends string = string> =
10+
`${ColumnURNType}:${ColumnName}`;
1011

1112
export const ColumnURNType: ColumnURNType = 'sc:dumbo:column';
12-
export const ColumnURN = ({ name }: { name: string }): ColumnURN =>
13-
`${ColumnURNType}:${name}`;
13+
export const ColumnURN = <ColumnName extends string = string>({
14+
name,
15+
}: {
16+
name: ColumnName;
17+
}): ColumnURN<ColumnName> => `${ColumnURNType}:${name}`;
1418

1519
export type ColumnSchemaComponent<
1620
ColumnType extends AnyColumnTypeToken | string = AnyColumnTypeToken | string,
21+
ColumnName extends string = string,
1722
> = SchemaComponent<
18-
ColumnURN,
23+
ColumnURN<ColumnName>,
1924
Readonly<{
20-
columnName: string;
25+
columnName: ColumnName;
2126
}>
2227
> &
2328
SQLColumnToken<ColumnType>;
@@ -31,14 +36,17 @@ export type ColumnSchemaComponentOptions<
3136
SchemaComponentOptions;
3237

3338
export const columnSchemaComponent = <
34-
ColumnType extends AnyColumnTypeToken | string = AnyColumnTypeToken | string,
35-
TOptions extends
39+
const ColumnType extends AnyColumnTypeToken | string =
40+
| AnyColumnTypeToken
41+
| string,
42+
const TOptions extends
3643
ColumnSchemaComponentOptions<ColumnType> = ColumnSchemaComponentOptions<ColumnType>,
44+
const ColumnName extends string = string,
3745
>(
3846
params: {
39-
columnName: string;
47+
columnName: ColumnName;
4048
} & TOptions,
41-
): ColumnSchemaComponent<ColumnType> &
49+
): ColumnSchemaComponent<ColumnType, ColumnName> &
4250
(TOptions extends { notNull: true } | { primaryKey: true }
4351
? { notNull: true }
4452
: { notNull?: false }) => {
@@ -66,7 +74,7 @@ export const columnSchemaComponent = <
6674
type,
6775
};
6876

69-
return result as ColumnSchemaComponent<ColumnType> &
77+
return result as ColumnSchemaComponent<ColumnType, ColumnName> &
7078
(TOptions extends { notNull: true } | { primaryKey: true }
7179
? { notNull: true }
7280
: { notNull?: false });

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,45 +12,51 @@ 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
}>
3840
>;
3941

4042
export type AnyDatabaseSchemaSchemaComponent =
4143
// eslint-disable-next-line @typescript-eslint/no-explicit-any
42-
DatabaseSchemaSchemaComponent<any>;
44+
DatabaseSchemaSchemaComponent<any, any>;
4345

4446
export const databaseSchemaSchemaComponent = <
45-
Tables extends DatabaseSchemaTables = DatabaseSchemaTables,
47+
const 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: [

0 commit comments

Comments
 (0)