From 2eadd20cd485f2f64debd21030adb618c3f93768 Mon Sep 17 00:00:00 2001 From: Birk Johansson Date: Thu, 5 Dec 2024 16:50:12 +0100 Subject: [PATCH 1/2] fix(types): add support for size and rename fieldtransformers --- src/types/generated/pickWithFieldFilters.ts | 30 ++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/types/generated/pickWithFieldFilters.ts b/src/types/generated/pickWithFieldFilters.ts index f871e3619..1412d25bf 100644 --- a/src/types/generated/pickWithFieldFilters.ts +++ b/src/types/generated/pickWithFieldFilters.ts @@ -24,6 +24,31 @@ 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}~size${infer Rest}` + ? ResolveTransformer< + { [K in FieldName]: number }, + `${FieldName}${Rest}` + > + : Model + type RecursivePickWithFieldFilter< Model, S extends string, @@ -49,7 +74,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. From 8b7271285f736649c5d7cb4a00f1206843923e93 Mon Sep 17 00:00:00 2001 From: Birk Johansson Date: Thu, 5 Dec 2024 18:13:58 +0100 Subject: [PATCH 2/2] fix: allow complex filters at the end of a filter --- src/types/generated/pickWithFieldFilters.ts | 23 +++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/types/generated/pickWithFieldFilters.ts b/src/types/generated/pickWithFieldFilters.ts index 1412d25bf..b0c2bfe10 100644 --- a/src/types/generated/pickWithFieldFilters.ts +++ b/src/types/generated/pickWithFieldFilters.ts @@ -42,13 +42,18 @@ type ResolveTransformer = Pick, NewName>, `${NewName}${Rest}` > - : S extends `${infer FieldName extends string}~size${infer 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, @@ -63,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] > @@ -103,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)' +// ] +// >