UNPKG

dd-trace

Version:

Datadog APM tracing client for JavaScript

106 lines (90 loc) 2.24 kB
'use strict' const shimmer = require('../../datadog-shimmer') const { addHook, channel } = require('./helpers/instrument') const routeChannel = channel('apm:hono:request:route') const handleChannel = channel('apm:hono:request:handle') const errorChannel = channel('apm:hono:request:error') function wrapFetch (fetch) { return function (request, env, executionCtx) { handleChannel.publish({ req: env.incoming }) return fetch.apply(this, arguments) } } function onErrorFn (error, _context_) { throw error } function wrapCompose (compose) { return function (middlewares, onError, onNotFound) { onError ??= onErrorFn const instrumentedOnError = (...args) => { const [error, context] = args const req = context.env.incoming errorChannel.publish({ req, error }) return onError(...args) } const instrumentedMiddlewares = middlewares.map(h => { const [[fn, meta], params] = h const instrumentedFn = (...args) => { const context = args[0] routeChannel.publish({ req: context.env.incoming, route: meta?.path }) return fn(...args) } return [[instrumentedFn, meta], params] }) return compose.call(this, instrumentedMiddlewares, instrumentedOnError, onNotFound) } } addHook({ name: 'hono', versions: ['>=4'], file: 'dist/hono.js' }, hono => { class Hono extends hono.Hono { constructor (...args) { super(...args) shimmer.wrap(this, 'fetch', wrapFetch) } } hono.Hono = Hono return hono }) addHook({ name: 'hono', versions: ['>=4'], file: 'dist/cjs/hono.js' }, hono => { class Hono extends hono.Hono { constructor (...args) { super(...args) shimmer.wrap(this, 'fetch', wrapFetch) } } return Object.create(hono, { Hono: { get () { return Hono }, enumerable: true, } }) }) addHook({ name: 'hono', versions: ['>=4'], file: 'dist/cjs/compose.js' }, Compose => { return shimmer.wrap(Compose, 'compose', wrapCompose, { replaceGetter: true }) }) addHook({ name: 'hono', versions: ['>=4'], file: 'dist/compose.js' }, Compose => { return shimmer.wrap(Compose, 'compose', wrapCompose) })