@dark-engine/platform-desktop
Version:
Dark renderer to desktop platforms like Windows, Linux, macOS via Nodegui and Qt
45 lines (44 loc) • 1.62 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
exports.inject = exports.render = void 0;
const core_1 = require('@dark-engine/core');
const native_element_1 = require('../native-element');
const dom_1 = require('../dom');
const raf = setTimeout.bind(this);
const caf = clearTimeout.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) {
!isInjected && inject();
const callback = () => {
(0, core_1.setRootId)(0);
const $scope = (0, core_1.$$scope)();
const root = $scope.getRoot();
const isUpdate = Boolean(root);
const fiber = new core_1.Fiber().mutate({
el: isUpdate ? root.el : new native_element_1.TagNativeElement(core_1.ROOT),
inst: new core_1.TagVirtualNode(core_1.ROOT, {}, (0, core_1.flatten)([element || (0, core_1.createReplacer)()])),
alt: root,
tag: isUpdate ? core_1.UPDATE_EFFECT_TAG : core_1.CREATE_EFFECT_TAG,
});
$scope.resetMount();
$scope.setWorkInProgress(fiber);
$scope.setUnitOfWork(fiber);
};
core_1.scheduler.schedule(callback, { priority: core_1.TaskPriority.NORMAL });
}
exports.render = render;
globalThis._DARK_ = core_1.Fiber;
//# sourceMappingURL=render.js.map