diff --git a/lib/diagnostics.js b/lib/diagnostics.js new file mode 100644 index 00000000000..f11044a2dad --- /dev/null +++ b/lib/diagnostics.js @@ -0,0 +1,7 @@ +'use strict'; + +const dc = require('node:diagnostics_channel'); + +const initialization = dc.channel('express.initialization'); + +module.exports = { initialization }; diff --git a/lib/express.js b/lib/express.js index 2d502eb54e4..c4b1173ec13 100644 --- a/lib/express.js +++ b/lib/express.js @@ -19,6 +19,7 @@ var proto = require('./application'); var Router = require('router'); var req = require('./request'); var res = require('./response'); +const channels = require('./diagnostics'); /** * Expose `createApplication()`. @@ -52,6 +53,11 @@ function createApplication() { }) app.init(); + + if (channels.initialization.hasSubscribers) { + channels.initialization.publish({ app }); + } + return app; } diff --git a/test/diagnostics-channel.js b/test/diagnostics-channel.js new file mode 100644 index 00000000000..c4ed76ea829 --- /dev/null +++ b/test/diagnostics-channel.js @@ -0,0 +1,26 @@ +'use strict' + +const dc = require('node:diagnostics_channel') +const express = require('../') +const assert = require('node:assert') + +describe('diagnostics channels', function () { + describe('express.initialization', function () { + it('should publish when app is created', function () { + let msg + + dc.subscribe('express.initialization', function handler (data) { + msg = data + dc.unsubscribe('express.initialization', handler) + }) + + const app = express() + assert.ok(msg, 'express.initialization was not published') + assert.strictEqual(msg.app, app) + }) + + it('should not throw when there are no subscribers', function () { + assert.ok(express()) + }) + }) +})