@dark-engine/core
Version:
The lightweight and powerful UI rendering engine without dependencies and written in TypeScript (Browser, Node.js, Android, iOS, Windows, Linux, macOS)
45 lines (44 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
exports.lazy = void 0;
const utils_1 = require('../utils');
const component_1 = require('../component');
const use_memo_1 = require('../use-memo');
const factories = new Map();
function lazy(loader, done) {
return (0, component_1.component)(
props => {
const scope = (0, use_memo_1.useMemo)(() => ({ isDirty: false }), []);
const factory = factories.get(loader);
if ((0, utils_1.detectIsUndefined)(factory) && !scope.isDirty) {
const make = async () => {
factories.set(loader, await run(loader));
(0, utils_1.detectIsFunction)(done) && done();
};
scope.isDirty = true;
(0, utils_1.throwThis)(make());
}
return factory ? factory(props) : null;
},
{ displayName: 'Lazy' },
);
}
exports.lazy = lazy;
function run(loader) {
return new Promise((resolve, reject) => {
loader()
.then(module => {
check(module);
resolve(module.default);
})
.catch(reject);
});
}
function check(module) {
if (process.env.NODE_ENV !== 'production') {
if (!module.default) {
(0, utils_1.illegal)('The lazy loaded component should be exported as default!');
}
}
}
//# sourceMappingURL=lazy.js.map