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

Function findById

packages/effect/src/unstable/sql/SqlResolver.ts:221–277  ·  view source on GitHub ↗
(
  options: {
    readonly Id: Id
    readonly Result: Res
    readonly ResultId: (result: Res["Type"], row: Types.NoInfer<Row>) => Id["Type"]
    readonly execute: (
      requests: Arr.NonEmptyArray<Id["Encoded"]>
    ) => Effect.Effect<ReadonlyArray<Row>, E, R>
  }
)

Source from the content-addressed store, hash-verified

219 * @since 4.0.0
220 */
221export const findById = <Id extends Schema.Constraint, Res extends Schema.Constraint, Row, E, R>(
222 options: {
223 readonly Id: Id
224 readonly Result: Res
225 readonly ResultId: (result: Res["Type"], row: Types.NoInfer<Row>) => Id["Type"]
226 readonly execute: (
227 requests: Arr.NonEmptyArray<Id["Encoded"]>
228 ) => Effect.Effect<ReadonlyArray<Row>, E, R>
229 }
230): RequestResolver.RequestResolver<
231 SqlRequest<
232 Id["Type"],
233 Res["Type"],
234 E | Schema.SchemaError | Cause.NoSuchElementError,
235 Id["EncodingServices"] | Res["DecodingServices"] | R
236 >
237> => {
238 const decodeResults = Schema.decodeUnknownEffect(Schema.Array(options.Result))
239
240 return RequestResolver.makeGrouped<
241 SqlRequest<
242 Id["Type"],
243 Res["Type"],
244 E | Schema.SchemaError | Cause.NoSuchElementError,
245 Id["EncodingServices"] | Res["DecodingServices"] | R
246 >,
247 SqlClient.TransactionConnection.Service | undefined
248 >({
249 key: transactionKey,
250 resolver: Effect.fnUntraced(function*(entries) {
251 const [inputs, idMap] = yield* partitionRequestsById(entries, options.Id)
252 if (!Arr.isArrayNonEmpty(inputs)) return
253 const results = yield* options.execute(inputs).pipe(
254 Effect.provideContext(entries[0].context)
255 )
256 const decodedResults = yield* decodeResults(results).pipe(
257 Effect.provideContext(entries[0].context)
258 )
259 for (let i = 0; i < decodedResults.length; i++) {
260 const result = decodedResults[i]
261 const id = options.ResultId(result, results[i])
262 const request = MutableHashMap.get(idMap, id)
263 if (request._tag === "None") {
264 continue
265 }
266 MutableHashMap.remove(idMap, id)
267 request.value.completeUnsafe(Exit.succeed(result))
268 }
269 if (MutableHashMap.isEmpty(idMap)) {
270 return
271 }
272 MutableHashMap.forEach(idMap, (request) => {
273 request.completeUnsafe(constNoSuchElement)
274 })
275 })
276 })
277}
278

Callers

nothing calls this directly

Calls 8

completeUnsafeMethod · 0.80
pipeMethod · 0.65
getMethod · 0.65
isEmptyMethod · 0.65
forEachMethod · 0.65
executeMethod · 0.45
removeMethod · 0.45
succeedMethod · 0.45

Tested by

no test coverage detected