UNPKG

@dark-engine/platform-server

Version:
66 lines (65 loc) 2.43 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.inject = exports.roots = exports.render = void 0; const core_1 = require('@dark-engine/core'); const dom_1 = require('../dom'); const utils_1 = require('../utils'); const isBrowser = (0, utils_1.detectIsBrowser)(); const roots = new Map(); exports.roots = roots; const raf = isBrowser && requestAnimationFrame.bind(this); const caf = isBrowser && cancelAnimationFrame.bind(this); const spawn = raf; let isInjected = false; function inject() { core_1.platform.createElement = dom_1.createNativeElement; core_1.platform.toggle = dom_1.toggle; core_1.platform.raf = raf; core_1.platform.caf = caf; core_1.platform.spawn = spawn; core_1.platform.commit = dom_1.commit; core_1.platform.finishCommit = dom_1.finishCommit; core_1.platform.detectIsDynamic = core_1.trueFn; isInjected = true; } exports.inject = inject; function render(element, container, hydrate) { !isInjected && inject(); if (process.env.NODE_ENV !== 'production') { if (!(container instanceof Element) && !(container instanceof Document)) { (0, utils_1.illegal)(`The render receives a valid element as container!`); } } const isMounted = !(0, core_1.detectIsUndefined)(roots.get(container)); const isHydration = (0, core_1.detectIsFunction)(hydrate); let rootId = null; if (!isMounted) { rootId = roots.size; roots.set(container, rootId); !isHydration && (0, utils_1.removeContent)(container); } else { rootId = roots.get(container); } const $scope = (0, core_1.$$scope)(rootId); if ($scope?.getIsInsertionEffect()) return; const callback = () => { (0, core_1.setRootId)(rootId); const $scope = (0, core_1.$$scope)(); const rootFiber = $scope.getRoot(); const isUpdate = Boolean(rootFiber); const fiber = new core_1.Fiber().mutate({ el: container, inst: new core_1.TagVirtualNode(core_1.ROOT, {}, (0, core_1.flatten)([element || (0, core_1.createReplacer)()])), alt: rootFiber, tag: isUpdate ? core_1.UPDATE_EFFECT_TAG : core_1.CREATE_EFFECT_TAG, }); $scope.resetMount(); $scope.setWorkInProgress(fiber); $scope.setIsHydration(isHydration); $scope.setUnitOfWork(fiber); isHydration && hydrate(); }; core_1.scheduler.schedule(callback, { priority: core_1.TaskPriority.NORMAL }); } exports.render = render; //# sourceMappingURL=render.js.map