From 97f2e567bc9a42cf7a7334dcbf78ba94b3bf136c Mon Sep 17 00:00:00 2001 From: Wessel van der Veen Date: Fri, 22 Sep 2023 13:11:17 +0200 Subject: [PATCH 1/2] fix(dataplan-pg): type helpers --- grafast/dataplan-pg/src/interfaces.ts | 114 ++++++++++++++++++-------- 1 file changed, 79 insertions(+), 35 deletions(-) diff --git a/grafast/dataplan-pg/src/interfaces.ts b/grafast/dataplan-pg/src/interfaces.ts index 8c3eb281b7..1d593478b3 100644 --- a/grafast/dataplan-pg/src/interfaces.ts +++ b/grafast/dataplan-pg/src/interfaces.ts @@ -760,41 +760,85 @@ export interface PgRegistry< }; } -export type GetPgRegistryCodecs> = - TRegistry["pgCodecs"]; - -export type GetPgRegistrySources> = - TRegistry["pgResources"]; - +export type GetPgRegistryCodecs = U extends PgRegistry + ? C + : never; +export type GetPgRegistrySources = U extends PgRegistry + ? R + : never; +export type GetPgRegistryRelations = U extends PgRegistry + ? R + : never; +export type GetPgCodecName = U extends PgCodec< + infer N, + any, + any, + any, + any, + any, + any +> + ? N + : never export type GetPgRegistryCodecRelations< TRegistry extends PgRegistry, TCodec extends PgCodec, -> = TRegistry["pgRelations"][TCodec["name"]]; - -export type GetPgCodecAttributes< - TCodec extends PgCodec, -> = TCodec extends PgCodec - ? UAttributes extends undefined - ? never - : UAttributes - : PgCodecAttributes; - -export type GetPgResourceRegistry< - TResource extends PgResource, -> = TResource["registry"]; - -export type GetPgResourceCodec< - TResource extends PgResource, -> = TResource["codec"]; - -export type GetPgResourceAttributes< - TResource extends PgResource, -> = GetPgCodecAttributes; - -export type GetPgResourceRelations< - TResource extends PgResource, -> = TResource["registry"]["pgRelations"][TResource["codec"]["name"]]; - -export type GetPgResourceUniques< - TResource extends PgResource, -> = TResource["uniques"]; +> = GetPgRegistryRelations[GetPgCodecName] +export type GetPgCodecAttributes = U extends PgCodec< + any, + infer A, + any, + any, + any, + any, + any +> + ? A + : never; +export type GetPgResourceRegistry = U extends PgResource< + any, + any, + any, + any, + infer R +> + ? R + : never; +export type GetPgResourceCodec = U extends PgResource< + any, + infer C, + any, + any, + any +> + ? C + : never; +export type GetPgResourceAttributes = U extends PgResource< + any, + infer C, + any, + any, + any +> + ? GetPgCodecAttributes> + : never; +export type GetPgResourceRelations = U extends PgResource< + any, + any, + any, + any, + any +> + ? GetPgRegistryRelations>[GetPgCodecName< + GetPgResourceCodec + >] + : never +export type GetPgResourceUniques = T extends PgResource< + any, + any, + infer U, + any, + any +> + ? U + : never; From 9846f01dfebcb70d0e626c3fa03d5b7581a09c24 Mon Sep 17 00:00:00 2001 From: Wessel van der Veen Date: Fri, 22 Sep 2023 20:23:34 +0200 Subject: [PATCH 2/2] fix(dataplan-pg): remove type narrowing for pgeregistry --- grafast/dataplan-pg/src/interfaces.ts | 144 ++++++-------------------- 1 file changed, 30 insertions(+), 114 deletions(-) diff --git a/grafast/dataplan-pg/src/interfaces.ts b/grafast/dataplan-pg/src/interfaces.ts index 1d593478b3..9462a54fcb 100644 --- a/grafast/dataplan-pg/src/interfaces.ts +++ b/grafast/dataplan-pg/src/interfaces.ts @@ -652,28 +652,11 @@ export type Expand = T extends unknown : never; export interface PgRegistry< - TCodecs extends { - [name in string]: PgCodec< - name, - PgCodecAttributes | undefined, - any, - any, - any, - any, - any - >; - } = Record< + TCodecs = Record< string, PgCodec >, - TResourceOptions extends { - [name in string]: PgResourceOptions< - name, - PgCodec, // TCodecs[keyof TCodecs], - ReadonlyArray>, - readonly PgResourceParameter[] | undefined - >; - } = Record< + TResourceOptions = Record< string, PgResourceOptions< string, @@ -683,22 +666,7 @@ export interface PgRegistry< readonly PgResourceParameter[] | undefined > >, - TRelations extends { - [codecName in keyof TCodecs]?: { - [relationName in string]: PgCodecRelationConfig< - // TCodecs[keyof TCodecs] & - PgCodec, - // TResourceOptions[keyof TResourceOptions] & - PgResourceOptions< - any, - // TCodecs[keyof TCodecs] & - PgCodecWithAttributes, - any, - any - > - >; - }; - } = Record< + TRelations = Record< string, Record< string, @@ -760,85 +728,33 @@ export interface PgRegistry< }; } -export type GetPgRegistryCodecs = U extends PgRegistry - ? C - : never; -export type GetPgRegistrySources = U extends PgRegistry - ? R - : never; -export type GetPgRegistryRelations = U extends PgRegistry - ? R - : never; -export type GetPgCodecName = U extends PgCodec< - infer N, - any, - any, - any, - any, - any, - any -> - ? N - : never +export type GetPgRegistryCodecs> = + TRegistry["pgCodecs"]; +export type GetPgRegistrySources> = + TRegistry["pgResources"]; export type GetPgRegistryCodecRelations< TRegistry extends PgRegistry, TCodec extends PgCodec, -> = GetPgRegistryRelations[GetPgCodecName] -export type GetPgCodecAttributes = U extends PgCodec< - any, - infer A, - any, - any, - any, - any, - any -> - ? A - : never; -export type GetPgResourceRegistry = U extends PgResource< - any, - any, - any, - any, - infer R -> - ? R - : never; -export type GetPgResourceCodec = U extends PgResource< - any, - infer C, - any, - any, - any -> - ? C - : never; -export type GetPgResourceAttributes = U extends PgResource< - any, - infer C, - any, - any, - any -> - ? GetPgCodecAttributes> - : never; -export type GetPgResourceRelations = U extends PgResource< - any, - any, - any, - any, - any -> - ? GetPgRegistryRelations>[GetPgCodecName< - GetPgResourceCodec - >] - : never -export type GetPgResourceUniques = T extends PgResource< - any, - any, - infer U, - any, - any -> - ? U - : never; +> = TRegistry["pgRelations"][TCodec["name"]]; +export type GetPgCodecAttributes< + TCodec extends PgCodec, +> = TCodec extends PgCodec + ? UAttributes extends undefined + ? never + : UAttributes + : PgCodecAttributes; +export type GetPgResourceRegistry< + TResource extends PgResource, +> = TResource["registry"]; +export type GetPgResourceCodec< + TResource extends PgResource, +> = TResource["codec"]; +export type GetPgResourceAttributes< + TResource extends PgResource, +> = GetPgCodecAttributes; +export type GetPgResourceRelations< + TResource extends PgResource, +> = TResource["registry"]["pgRelations"][TResource["codec"]["name"]]; +export type GetPgResourceUniques< + TResource extends PgResource, +> = TResource["uniques"];