MCPcopy
hub / github.com/Effect-TS/effect / ordered

Function ordered

packages/sql/src/SqlResolver.ts:196–256  ·  view source on GitHub ↗
(
  tag: T,
  options:
    | {
      readonly Request: Schema.Schema<I, II, RI>
      readonly Result: Schema.Schema<A, IA>
      readonly execute: (
        requests: Array<Types.NoInfer<II>>
      ) => Effect.Effect<ReadonlyArray<_>, E>
      readonly withContext?: false
    }
    | {
      readonly Request: Schema.Schema<I, II, RI>
      readonly Result: Schema.Schema<A, IA, RA>
      readonly execute: (
        requests: Array<Types.NoInfer<II>>
      ) => Effect.Effect<ReadonlyArray<_>, E, R>
      readonly withContext: true
    }
)

Source from the content-addressed store, hash-verified

194 * @category resolvers
195 */
196export const ordered = <T extends string, I, II, RI, A, IA, _, E, RA = never, R = never>(
197 tag: T,
198 options:
199 | {
200 readonly Request: Schema.Schema<I, II, RI>
201 readonly Result: Schema.Schema<A, IA>
202 readonly execute: (
203 requests: Array<Types.NoInfer<II>>
204 ) => Effect.Effect<ReadonlyArray<_>, E>
205 readonly withContext?: false
206 }
207 | {
208 readonly Request: Schema.Schema<I, II, RI>
209 readonly Result: Schema.Schema<A, IA, RA>
210 readonly execute: (
211 requests: Array<Types.NoInfer<II>>
212 ) => Effect.Effect<ReadonlyArray<_>, E, R>
213 readonly withContext: true
214 }
215): Effect.Effect<
216 SqlResolver<T, I, A, E | ResultLengthMismatch, RI>,
217 never,
218 RA | R
219> => {
220 const decodeResults = Schema.decodeUnknown(Schema.Array(options.Result))
221 const resolver = RequestResolver.makeBatched(
222 (requests: NonEmptyArray<SqlRequest<T, A, E | ResultLengthMismatch>>) => {
223 const [inputs, spanLinks] = partitionRequests(requests)
224 return options.execute(inputs as any).pipe(
225 Effect.filterOrFail(
226 (results) => results.length === inputs.length,
227 ({ length }) =>
228 new ResultLengthMismatch({
229 expected: inputs.length,
230 actual: length
231 })
232 ),
233 Effect.flatMap(decodeResults),
234 Effect.flatMap(
235 Effect.forEach((result, i) => Request.succeed(requests[i], result), {
236 discard: true
237 })
238 ),
239 Effect.catchAllCause((cause) =>
240 Effect.forEach(
241 requests,
242 (request) => Request.failCause(request, cause),
243 { discard: true }
244 )
245 ),
246 Effect.withSpan(`sql.Resolver.batch ${tag}`, {
247 kind: "client",
248 links: spanLinks,
249 attributes: { "request.count": inputs.length },
250 captureStackTrace: false
251 })
252 ) as Effect.Effect<void>
253 }

Callers

nothing calls this directly

Calls 6

partitionRequestsFunction · 0.85
makeResolverFunction · 0.85
failCauseMethod · 0.80
identifiedMethod · 0.65
pipeMethod · 0.65
executeMethod · 0.45

Tested by

no test coverage detected