|
1 | | -import { flattenError, nullableAsArray } from "../misc/misc.ts"; |
| 1 | +import { nullableAsArray } from "../misc/misc.ts"; |
2 | 2 |
|
3 | 3 | export type ArrayResultOptions = { |
4 | 4 | cause: unknown; |
@@ -132,40 +132,23 @@ export class ArrayResult<T> { |
132 | 132 | try { |
133 | 133 | return arrayResult(); |
134 | 134 | } catch (error) { |
135 | | - return ArrayResult.errors(extractArrayResultError(flattenError(error))); |
| 135 | + return ArrayResult.errors(extractArrayResultError(error)); |
136 | 136 | } |
137 | 137 | } |
138 | 138 | } |
139 | | -type Errors = |
140 | | - | Readonly<{ type: "array result"; errors: ReadonlyArray<ArrayResultError> }> |
141 | | - | Readonly<{ type: "outside"; errors: ReadonlyArray<unknown> }>; |
142 | 139 | export function extractArrayResultError( |
143 | | - errors: ReadonlyArray<unknown>, |
| 140 | + error: unknown, |
144 | 141 | ): ReadonlyArray<ArrayResultError> { |
145 | | - const aggregate = errors.reduce<Errors>( |
146 | | - (errors, error) => { |
147 | | - switch (errors.type) { |
148 | | - case "array result": |
149 | | - if (error instanceof ArrayResultError) { |
150 | | - return { type: "array result", errors: [...errors.errors, error] }; |
151 | | - } else { |
152 | | - return { type: "outside", errors: [error] }; |
153 | | - } |
154 | | - case "outside": { |
155 | | - const moreError = error instanceof ArrayResultError ? [] : [error]; |
156 | | - return { type: "outside", errors: [...errors.errors, ...moreError] }; |
157 | | - } |
158 | | - } |
159 | | - }, |
160 | | - { |
161 | | - type: "array result", |
162 | | - errors: [], |
163 | | - }, |
164 | | - ); |
165 | | - switch (aggregate.type) { |
166 | | - case "array result": |
167 | | - return aggregate.errors; |
168 | | - case "outside": |
169 | | - throw new AggregateError(aggregate.errors); |
| 142 | + if (error instanceof ArrayResultError) { |
| 143 | + return [error]; |
| 144 | + } else if (error instanceof AggregateError) { |
| 145 | + const { errors } = error; |
| 146 | + if ( |
| 147 | + errors.length > 1 && |
| 148 | + errors.every((error) => error instanceof ArrayResultError) |
| 149 | + ) { |
| 150 | + return errors; |
| 151 | + } |
170 | 152 | } |
| 153 | + throw error; |
171 | 154 | } |
0 commit comments