MCPcopy Create free account
hub / github.com/Effect-TS/effect / ordered

Function ordered

packages/effect/src/unstable/sql/SqlResolver.ts:102–141  ·  view source on GitHub ↗
(
  options: {
    readonly Request: Req
    readonly Result: Res
    readonly execute: (
      requests: Arr.NonEmptyArray<Req["Encoded"]>
    ) => Effect.Effect<ReadonlyArray<_>, E, R>
  }
)

Source from the content-addressed store, hash-verified

100 * @since 4.0.0
101 */
102export const ordered = <Req extends Schema.Constraint, Res extends Schema.Constraint, _, E, R>(
103 options: {
104 readonly Request: Req
105 readonly Result: Res
106 readonly execute: (
107 requests: Arr.NonEmptyArray<Req["Encoded"]>
108 ) => Effect.Effect<ReadonlyArray<_>, E, R>
109 }
110): RequestResolver.RequestResolver<
111 SqlRequest<Req["Type"], Res["Type"], E | ResultLengthMismatch, Req["EncodingServices"] | Res["DecodingServices"] | R>
112> => {
113 const decodeArray = Schema.decodeUnknownEffect(Schema.Array(options.Result))
114 return RequestResolver.makeGrouped<
115 SqlRequest<
116 Req["Type"],
117 Res["Type"],
118 E | ResultLengthMismatch,
119 Req["EncodingServices"] | Res["DecodingServices"] | R
120 >,
121 SqlClient.TransactionConnection.Service | undefined
122 >({
123 key: transactionKey,
124 resolver: Effect.fnUntraced(function*(entries) {
125 const [inputs, encodedEntries] = yield* partitionRequests(entries, options.Request)
126 if (!Arr.isArrayNonEmpty(inputs)) return
127 const results = yield* options.execute(inputs).pipe(
128 Effect.provideContext(entries[0].context)
129 )
130 if (results.length !== inputs.length) {
131 return yield* new ResultLengthMismatch({ expected: inputs.length, actual: results.length })
132 }
133 const decodedResults = yield* decodeArray(results).pipe(
134 Effect.provideContext(entries[0].context)
135 )
136 for (let i = 0; i < encodedEntries.length; i++) {
137 encodedEntries[i].completeUnsafe(Exit.succeed(decodedResults[i]))
138 }
139 })
140 })
141}
142
143/**
144 * Creates a batched SQL request resolver that encodes requests, decodes result

Callers

nothing calls this directly

Calls 4

completeUnsafeMethod · 0.80
pipeMethod · 0.65
executeMethod · 0.45
succeedMethod · 0.45

Tested by

no test coverage detected