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

Function findById

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

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

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

Used in the wild real call sites across dependent graphs

searching dependent graphs…