one
Version:
One is a React framework for web, iOS, and Android apps.
104 lines (102 loc) • 2.93 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all) __defProp(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var index_native_exports = {};
__export(index_native_exports, {
Fonts: () => Fonts,
useFonts: () => useFonts
});
module.exports = __toCommonJS(index_native_exports);
var import_react = require("react");
var import_react_native = require("react-native");
var import_react_native_nitro_modules = require("react-native-nitro-modules");
var import_nativeError = require("../nativeError.native.js");
var hybrid;
function getModule() {
if (hybrid === void 0) {
hybrid = import_react_native_nitro_modules.NitroModules.hasHybridObject("OneFonts") ? import_react_native_nitro_modules.NitroModules.createHybridObject("OneFonts") : null;
}
return hybrid;
}
function resolveFontUri(name, source) {
if (typeof source === "string") {
return source;
}
var resolved = import_react_native.Image.resolveAssetSource(source);
if (!resolved) {
throw new Error(`Fonts.load: "${name}" is not a font asset`);
}
return resolved.uri;
}
async function load(fonts) {
var module2 = getModule();
if (!module2) {
throw new Error("fonts need a native build");
}
var entries = Object.entries(fonts).map(function(param) {
var [name, source] = param;
return {
name,
uri: resolveFontUri(name, source)
};
});
await Promise.all(entries.map(function(param) {
var { name, uri } = param;
return module2.load(name, uri).catch(import_nativeError.rethrowNativeError);
}));
}
function isLoaded(name) {
var module2 = getModule();
if (!module2) {
return false;
}
return module2.isLoaded(name);
}
var Fonts = {
load,
isLoaded
};
function useFonts(fonts) {
var [loaded, setLoaded] = (0, import_react.useState)(function() {
return Object.keys(fonts).every(isLoaded);
});
var [error, setError] = (0, import_react.useState)(null);
(0, import_react.useEffect)(function() {
if (loaded) {
return;
}
var cancelled = false;
setError(null);
load(fonts).then(function() {
if (!cancelled) {
setLoaded(true);
}
}, function(reason) {
if (!cancelled) {
setError(reason instanceof Error ? reason : new Error(String(reason)));
}
});
return function() {
cancelled = true;
};
}, []);
return [loaded, error];
}