Files
react-native/packages/dev-middleware/src/createDevMiddleware.js
T
Moti Zilberman f4f18940d7 Create unstable API for event logging (#39091)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/39091

Changelog: [Internal]

Adds a simple typed logging hook to `react-native/dev-middleware`. This is intended to allow integrators to receive events from the dev server, apply any relevant sampling/processing, and log them to a backend. (To be clear, the open source version of React Native does not and will not collect any data.)

WARNING: The API will evolve over the coming weeks/months and is *not guaranteed to be stable* - it might even break between patch releases.

Reviewed By: huntie

Differential Revision: D48466760

fbshipit-source-id: ed1e21fb0dac5d6199ff1ee26017a1d33d9b7d92
2023-08-21 10:31:50 -07:00

62 lines
1.4 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall react_native
*/
import type {NextHandleFunction} from 'connect';
import type {EventReporter} from './types/EventReporter';
import type {Logger} from './types/Logger';
import connect from 'connect';
import openDebuggerMiddleware from './middleware/openDebuggerMiddleware';
import InspectorProxy from './inspector-proxy/InspectorProxy';
type Options = $ReadOnly<{
host: string,
port: number,
projectRoot: string,
logger?: Logger,
unstable_eventReporter?: EventReporter,
}>;
type DevMiddlewareAPI = $ReadOnly<{
middleware: NextHandleFunction,
websocketEndpoints: {[path: string]: ws$WebSocketServer},
}>;
export default function createDevMiddleware({
host,
port,
projectRoot,
logger,
unstable_eventReporter,
}: Options): DevMiddlewareAPI {
const inspectorProxy = new InspectorProxy(
projectRoot,
unstable_eventReporter,
);
const middleware = connect()
.use(
'/open-debugger',
openDebuggerMiddleware({
logger,
eventReporter: unstable_eventReporter,
}),
)
.use((...args) => inspectorProxy.processRequest(...args));
return {
middleware,
websocketEndpoints: inspectorProxy.createWebSocketListeners(
`${host}:${port}`,
),
};
}