react-native-onyx
Version:
State management for React Native
38 lines (37 loc) • 1.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.OptionalDependencyNotInstalledError = exports.createModuleProxy = void 0;
/**
* Create a lazily-imported module proxy.
* This is useful for lazily requiring optional dependencies.
*/
const createModuleProxy = (getModule) => {
const holder = { module: undefined };
const proxy = new Proxy(holder, {
get: (target, property) => {
if (property === '$$typeof') {
// If inlineRequires is enabled, Metro will look up all imports
// with the $$typeof operator. In this case, this will throw the
// `OptionalDependencyNotInstalledError` error because we try to access the module
// even though we are not using it (Metro does it), so instead we return undefined
// to bail out of inlineRequires here.
return undefined;
}
if (target.module == null) {
// lazy initialize module via require()
// caller needs to make sure the require() call is wrapped in a try/catch
// eslint-disable-next-line no-param-reassign
target.module = getModule();
}
return target.module[property];
},
});
return proxy;
};
exports.createModuleProxy = createModuleProxy;
class OptionalDependencyNotInstalledError extends Error {
constructor(name) {
super(`${name} is not installed!`);
}
}
exports.OptionalDependencyNotInstalledError = OptionalDependencyNotInstalledError;
;