diff --git a/src/types/generated/pickWithFieldFilters.ts b/src/types/generated/pickWithFieldFilters.ts index f871e3619..b0c2bfe10 100644 --- a/src/types/generated/pickWithFieldFilters.ts +++ b/src/types/generated/pickWithFieldFilters.ts @@ -24,6 +24,36 @@ type MaybeCollection = FullModel extends Array ? Model[] | Extract : Model | Extract +type Rename = Pick< + T, + Exclude +> & { [P in N]: T[K] } + +type IsFieldTransformer = S extends `${string}~size` + ? true + : S extends `${string}~rename(${string})` + ? true + : false + +type ResolveTransformer = + S extends `${infer FieldName extends string & + keyof Model}~rename(${infer NewName extends string})${infer Rest}` + ? ResolveTransformer< + Pick, NewName>, + `${NewName}${Rest}` + > + : S extends `${infer FieldName extends string & + keyof Model}~size${infer Rest}` + ? ResolveTransformer< + { [K in FieldName]: number }, + `${FieldName}${Rest}` + > + : Model + +type SplitNested = S extends `${infer Nested}],${infer Rest}` + ? [`${Nested}]`, Rest] + : [S] + type RecursivePickWithFieldFilter< Model, S extends string, @@ -38,7 +68,10 @@ type RecursivePickWithFieldFilter< // create an object with root key, and recursively pick the nested fields [K in Root]: MaybeCollection< Prettify< - RecursivePickWithFieldFilter, Nested> + PickWithFieldFilters< + GetModel, + SplitNested + > >, Model[Root] > @@ -49,7 +82,10 @@ type RecursivePickWithFieldFilter< ? Pick : S extends ':owner' ? BaseIdentifiableObject - : never //[Model, S] // not a key of Model, ignore + : IsFieldTransformer extends true + ? ResolveTransformer + : never +// : never //[Model, S] // not a key of Model, ignore /** * From Model, Pick properties (and nested properties) using a field filter-array. @@ -75,3 +111,14 @@ export type PickWithFieldFilters< > > > + +// type Test = PickWithFieldFilters< +// CategoryCombo, +// [ +// 'id', +// 'name', +// 'categories[id,displayName,code,categoryOptions[id,displayName],attributeValues~size]', +// 'categoryOptionCombos~size~rename(cocSize)' +// // 'categories~size~rename(K)' +// ] +// >