UNPKG

@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
'use strict'; 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