@@ -89,15 +89,21 @@ export type ViewOpts = {
8989 public : true ;
9090} ;
9191
92+ type FlattenedArray < T > = T extends readonly ( infer E ) [ ] ? E : never ;
93+
94+ type ArrayViewReturnTypeBuilder = TypeBuilder <
95+ readonly object [ ] ,
96+ { tag : 'Array' ; value : AlgebraicTypeVariants . Product }
97+ > ;
98+
99+ type OptionViewReturnTypeBuilder = TypeBuilder <
100+ object | undefined ,
101+ OptionAlgebraicType < AlgebraicTypeVariants . Product >
102+ > ;
103+
92104type ProceduralViewReturnTypeBuilder =
93- | TypeBuilder <
94- readonly object [ ] ,
95- { tag : 'Array' ; value : AlgebraicTypeVariants . Product }
96- >
97- | TypeBuilder <
98- object | undefined ,
99- OptionAlgebraicType < AlgebraicTypeVariants . Product >
100- > ;
105+ | ArrayViewReturnTypeBuilder
106+ | OptionViewReturnTypeBuilder ;
101107
102108export type QueryViewReturnTypeBuilder = QueryTypeBuilder <
103109 TypeBuilder < object , any >
@@ -120,10 +126,22 @@ type QueryReturnProduct<Ret extends QueryViewReturnTypeBuilder> =
120126 ? ExtractProductFromTypeBuilder < Row >
121127 : never ;
122128
129+ type ExtractArrayProduct < T extends TypeBuilder < any , any > > =
130+ InferSpacetimeTypeOfTypeBuilder < T > extends { tag : 'Array' ; value : infer V }
131+ ? V extends { tag : 'Product' ; value : infer P }
132+ ? P
133+ : never
134+ : never ;
135+
136+ type LegacyArrayQueryReturn < Ret extends ArrayViewReturnTypeBuilder > =
137+ RowTypedQuery < FlattenedArray < Infer < Ret > > , ExtractArrayProduct < Ret > > ;
138+
123139type ViewReturn < Ret extends ViewReturnTypeBuilder > =
124140 Ret extends QueryViewReturnTypeBuilder
125141 ? RowTypedQuery < QueryReturnRow < Ret > , QueryReturnProduct < Ret > >
126- : Infer < Ret > ;
142+ : Ret extends ArrayViewReturnTypeBuilder
143+ ? Infer < Ret > | LegacyArrayQueryReturn < Ret >
144+ : Infer < Ret > ;
127145
128146// // If we allowed functions to return either.
129147// type ViewReturn<Ret extends ViewReturnTypeBuilder> =
0 commit comments