UNPKG

react-native-nitro-modules

Version:

Insanely fast native C++, Swift or Kotlin modules with a statically compiled binding layer to JSI.

58 lines (53 loc) 2.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NitroModules = void 0; exports.isRuntimeAlive = isRuntimeAlive; var _reactNative = require("react-native"); var _ModuleNotFoundError = require("../ModuleNotFoundError"); const jsVersion = require('react-native-nitro-modules/package.json').version; function getInstalledNitro() { // @ts-expect-error return global.NitroModulesProxy; } let nitroModules = getInstalledNitro(); // Reuse the existing proxy when the same JS runtime evaluates Nitro again, // such as when react-native-harness loads a dedicated test bundle. if (nitroModules != null) { if (nitroModules.version !== jsVersion) { throw new Error(`Nitro was installed twice: once with native version ${nitroModules.version} and once with JS version ${jsVersion}. ` + 'This usually means react-native-nitro-modules exists multiple times in node_modules (e.g. in monorepos or double-linked setups).'); } } else { // 1. Get (and initialize) the TurboModule let turboModule; try { turboModule = _reactNative.TurboModuleRegistry.getEnforcing('NitroModules'); } catch (e) { throw new _ModuleNotFoundError.ModuleNotFoundError(e); } // 2. Install Dispatcher and install `NitroModulesProxy` into the Runtime's `global` const errorMessage = turboModule.install(); if (errorMessage != null) { throw new Error(`Failed to install Nitro: ${errorMessage}`); } // 3. Find `NitroModulesProxy` in `global` nitroModules = getInstalledNitro(); if (nitroModules == null) { const cause = new Error('NitroModules was installed, but `global.NitroModulesProxy` was null!'); throw new _ModuleNotFoundError.ModuleNotFoundError(cause); } } const NitroModules = exports.NitroModules = nitroModules; // Double-check native version if (__DEV__) { if (jsVersion !== NitroModules.version) { console.warn(`The native Nitro Modules core runtime version is ${NitroModules.version}, but the JS code is using version ${jsVersion}. ` + `This could lead to undefined behaviour! Make sure to keep your Nitro versions in sync.`); } } function isRuntimeAlive() { const cache = globalThis.__nitroJsiCache; const dispatcher = globalThis.__nitroDispatcher; return cache != null && dispatcher != null; } //# sourceMappingURL=NativeNitroModules.js.map