(
docs: ReadonlyArray<A>,
operation: (doc: A) => OperationInput,
fallback: (doc: A) => Effect.Effect<void, unknown, never>
)
| 428 | ) |
| 429 | |
| 430 | const batchDocs = <A extends { readonly id: string; readonly _partitionKey: string }>( |
| 431 | docs: ReadonlyArray<A>, |
| 432 | operation: (doc: A) => OperationInput, |
| 433 | fallback: (doc: A) => Effect.Effect<void, unknown, never> |
| 434 | ): Effect.Effect<void, unknown, never> => |
| 435 | Effect.forEach( |
| 436 | Arr.groupByT(docs, (doc) => doc._partitionKey), |
| 437 | ([partitionKey, partitionDocs]) => |
| 438 | Effect.forEach( |
| 439 | Arr.chunksOf(partitionDocs, maxCosmosBatchOperations), |
| 440 | (chunk) => { |
| 441 | const operations: Array<OperationInput> = chunk.map(operation) |
| 442 | return Effect |
| 443 | .tryPromise(() => container.items.batch(operations, partitionKey)) |
| 444 | .pipe( |
| 445 | Effect.tap(annotateItem), |
| 446 | Effect.flatMap((resp) => { |
| 447 | const failed = resp.result?.find((result) => !isSuccessfulStatus(result.statusCode)) |
| 448 | return failed === undefined ? Effect.void : Effect.fail(failed.statusCode) |
| 449 | }), |
| 450 | Effect.catchIf(() => true, () => Effect.forEach(chunk, fallback, { discard: true })) |
| 451 | ) |
| 452 | }, |
| 453 | { discard: true } |
| 454 | ), |
| 455 | { discard: true } |
| 456 | ) |
| 457 | |
| 458 | const patchDoc = <A extends { readonly id: string; readonly _partitionKey: string }>( |
| 459 | doc: A, |
no test coverage detected
searching dependent graphs…