reactotron-react-native
Version:
A development tool to explore, inspect, and diagnose your React Native apps.
196 lines (191 loc) • 7.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "asyncStorage", {
enumerable: true,
get: function () {
return _asyncStorage.default;
}
});
exports.default = void 0;
Object.defineProperty(exports, "devTools", {
enumerable: true,
get: function () {
return _devTools.default;
}
});
Object.defineProperty(exports, "networking", {
enumerable: true,
get: function () {
return _networking.default;
}
});
Object.defineProperty(exports, "openInEditor", {
enumerable: true,
get: function () {
return _openInEditor.default;
}
});
Object.defineProperty(exports, "overlay", {
enumerable: true,
get: function () {
return _overlay.default;
}
});
exports.reactNativeCorePlugins = void 0;
Object.defineProperty(exports, "storybook", {
enumerable: true,
get: function () {
return _storybook.default;
}
});
Object.defineProperty(exports, "trackGlobalErrors", {
enumerable: true,
get: function () {
return _trackGlobalErrors.default;
}
});
Object.defineProperty(exports, "trackGlobalLogs", {
enumerable: true,
get: function () {
return _trackGlobalLogs.default;
}
});
var _reactNative = require("react-native");
var _reactotronCoreClient = require("reactotron-core-client");
var _NativeSourceCode = _interopRequireDefault(require("react-native/Libraries/NativeModules/specs/NativeSourceCode"));
var _getReactNativeVersion = _interopRequireDefault(require("./helpers/getReactNativeVersion"));
var _getReactNativeDimensions = _interopRequireDefault(require("./helpers/getReactNativeDimensions"));
var _asyncStorage = _interopRequireDefault(require("./plugins/asyncStorage"));
var _overlay = _interopRequireDefault(require("./plugins/overlay"));
var _openInEditor = _interopRequireDefault(require("./plugins/openInEditor"));
var _trackGlobalErrors = _interopRequireDefault(require("./plugins/trackGlobalErrors"));
var _networking = _interopRequireDefault(require("./plugins/networking"));
var _storybook = _interopRequireDefault(require("./plugins/storybook"));
var _devTools = _interopRequireDefault(require("./plugins/devTools"));
var _trackGlobalLogs = _interopRequireDefault(require("./plugins/trackGlobalLogs"));
var _parseURL = require("./helpers/parseURL");
var _getReactNativePlatformConstants = _interopRequireDefault(require("./helpers/getReactNativePlatformConstants"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
// eslint-disable-next-line import/namespace, import/default
const REACTOTRON_ASYNC_CLIENT_ID = "@REACTOTRON/clientId";
let tempClientId = null;
/**
* Most of the time, host should be 'localhost'.
* But sometimes, it's not. So we need to figure out what it is.
* @see https://github.com/infinitered/reactotron/issues/1107
*
* On an Android emulator, if you want to connect any servers of local, you will need run adb reverse on your terminal. This function gets the localhost IP of host machine directly to bypass this.
*/
const getHost = (defaultHost = "localhost") => {
try {
// RN Reference: https://github.com/facebook/react-native/blob/main/packages/react-native/src/private/specs/modules/NativeSourceCode.js
const scriptURL = _NativeSourceCode.default.getConstants().scriptURL;
if (typeof scriptURL !== "string") throw new Error("Invalid non-string URL");
return (0, _parseURL.getHostFromUrl)(scriptURL);
} catch (error) {
console.warn(`getHost: "${error.message}" for scriptURL - Falling back to ${defaultHost}`);
return defaultHost;
}
};
const {
osRelease,
model,
serverHost,
forceTouch,
interfaceIdiom,
systemName,
uiMode,
serial
} = (0, _getReactNativePlatformConstants.default)();
const DEFAULTS = {
createSocket: path => new WebSocket(path),
// eslint-disable-line
host: getHost("localhost"),
port: 9090,
name: "React Native App",
environment: process.env.NODE_ENV || (__DEV__ ? "development" : "production"),
client: {
reactotronLibraryName: "reactotron-react-native",
reactotronLibraryVersion: "REACTOTRON_REACT_NATIVE_VERSION",
platform: _reactNative.Platform.OS,
platformVersion: _reactNative.Platform.Version,
osRelease,
model,
serverHost,
forceTouch,
interfaceIdiom,
systemName,
uiMode,
serial,
reactNativeVersion: (0, _getReactNativeVersion.default)(),
...(0, _getReactNativeDimensions.default)()
},
/* eslint-disable @typescript-eslint/no-use-before-define */
getClientId: async (name = "") => {
if (reactotron.asyncStorageHandler) {
return reactotron.asyncStorageHandler.getItem(REACTOTRON_ASYNC_CLIENT_ID);
}
// Generate clientId based on the device info
const {
screenWidth,
screenHeight,
screenScale
} = (0, _getReactNativeDimensions.default)();
// Accounting for screen rotation
const dimensions = [screenWidth, screenHeight].sort().join("-");
const additionalInfo = _reactNative.Platform.select({
ios: systemName,
android: model,
default: ""
});
tempClientId = [name, _reactNative.Platform.OS, _reactNative.Platform.Version, additionalInfo, dimensions, screenScale].filter(Boolean).join("-");
return tempClientId;
},
setClientId: async clientId => {
if (reactotron.asyncStorageHandler) {
return reactotron.asyncStorageHandler.setItem(REACTOTRON_ASYNC_CLIENT_ID, clientId);
}
tempClientId = clientId;
},
proxyHack: true
};
const reactNativeCorePlugins = exports.reactNativeCorePlugins = [(0, _asyncStorage.default)(), (0, _trackGlobalErrors.default)(), (0, _trackGlobalLogs.default)(), (0, _openInEditor.default)(), (0, _overlay.default)(), (0, _networking.default)(), (0, _storybook.default)(), (0, _devTools.default)()];
const reactotron = (0, _reactotronCoreClient.createClient)(DEFAULTS);
function getPluginOptions(options) {
return typeof options === "object" ? options : null;
}
reactotron.useReactNative = (options = {}) => {
if (options.errors !== false) {
reactotron.use((0, _trackGlobalErrors.default)(getPluginOptions(options.errors)));
}
if (options.log !== false) {
reactotron.use((0, _trackGlobalLogs.default)());
}
if (options.editor !== false) {
reactotron.use((0, _openInEditor.default)(getPluginOptions(options.editor)));
}
if (options.overlay !== false) {
reactotron.use((0, _overlay.default)());
}
if (options.asyncStorage !== false) {
reactotron.use((0, _asyncStorage.default)(getPluginOptions(options.asyncStorage)));
}
if (options.networking !== false) {
reactotron.use((0, _networking.default)(getPluginOptions(options.networking)));
}
if (options.storybook !== false) {
reactotron.use((0, _storybook.default)());
}
if (options.devTools !== false) {
reactotron.use((0, _devTools.default)());
}
return reactotron;
};
reactotron.setAsyncStorageHandler = asyncStorage => {
reactotron.asyncStorageHandler = asyncStorage;
return reactotron;
};
var _default = exports.default = reactotron;
//# sourceMappingURL=reactotron-react-native.js.map