MCPcopy Create free account
hub / github.com/effect-app/libs / ordered

Function ordered

repos/effect/packages/effect/src/unstable/sql/SqlResolver.ts:101–139  ·  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

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

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

Used in the wild real call sites across dependent graphs

searching dependent graphs…