MCPcopy Create free account
hub / github.com/middleapi/orpc / asyncIteratorWithSpan

Function asyncIteratorWithSpan

packages/shared/src/iterator.ts:175–210  ·  view source on GitHub ↗
(
  { name, ...options }: AsyncIteratorWithSpanOptions,
  iterator: AsyncIterator<T, TReturn, TNext>,
)

Source from the content-addressed store, hash-verified

173}
174
175export function asyncIteratorWithSpan<T, TReturn, TNext>(
176 { name, ...options }: AsyncIteratorWithSpanOptions,
177 iterator: AsyncIterator<T, TReturn, TNext>,
178): AsyncIteratorClass<T, TReturn, TNext> {
179 let span: ReturnType<typeof startSpan> | undefined
180
181 return new AsyncIteratorClass(
182 async () => {
183 span ??= startSpan(name)
184
185 try {
186 const result = await runInSpanContext(span, () => iterator.next())
187 span?.addEvent(result.done ? 'completed' : 'yielded')
188 return result
189 }
190 catch (err) {
191 setSpanError(span, err, options)
192 throw err
193 }
194 },
195 async (reason) => {
196 try {
197 if (reason !== 'next') {
198 await runInSpanContext(span, () => iterator.return?.())
199 }
200 }
201 catch (err) {
202 setSpanError(span, err, options)
203 throw err
204 }
205 finally {
206 span?.end()
207 }
208 },
209 )
210}

Callers 4

callMethod · 0.90
iterator.test.tsFile · 0.90
createProcedureClientFunction · 0.90
handleMethod · 0.90

Calls 6

startSpanFunction · 0.90
runInSpanContextFunction · 0.90
setSpanErrorFunction · 0.90
returnMethod · 0.80
endMethod · 0.65
nextMethod · 0.45

Tested by

no test coverage detected