UNPKG

@turbox3d/reactivity

Version:

Large-scale reactive state management library

65 lines (63 loc) 2.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; exports.isRunning = void 0; var _shared = require("@turbox3d/shared"); var _use = require("./use"); var _store = require("./store"); var _mutation = _interopRequireDefault(require("../middlewares/mutation")); var _logger = _interopRequireDefault(require("../middlewares/logger")); var _perf = _interopRequireDefault(require("../middlewares/perf")); var _collector = require("./collector"); var _event = require("../utils/event"); var _timeTravel = require("./time-travel"); var _mutation2 = require("../decorators/mutation"); var _symbol = require("../const/symbol"); // import effectMiddleware from '../middlewares/effect'; // eslint-disable-next-line import/no-mutable-exports var isRunning = exports.isRunning = false; function clean() { _collector.triggerCollector.endBatch(); _timeTravel.TimeTravel.clear(); } /** * Includes init built-in middleware, create store, load domain tree and so on. */ function init(callback) { clean(); (0, _shared.invariant)((0, _shared.isSupportProxy)() && (0, _shared.isSupportSymbol)(), 'Proxy or Symbol is not supported, please add polyfill.'); if (!isRunning) { (0, _use.use)(_perf["default"]); // use(effectMiddleware); (0, _use.use)(_mutation["default"]); (0, _use.use)(_logger["default"]); var enhancers = [(0, _use.applyMiddleware)()]; if (process.env.NODE_ENV !== 'production') { // Turbox dev tools extension support. } var enhancer = _shared.compose.apply(void 0, enhancers); (0, _store.createStore)(enhancer); _event.emitter.emit(_event.EEventName.storeOnActive); } exports.isRunning = isRunning = true; if (!callback) { return; } var f = (0, _mutation2.mutation)("".concat(_symbol.TURBOX_PREFIX, "init"), callback, { immediately: true, displayName: '' }); var result = f(); if ((0, _shared.isPromise)(result)) { // eslint-disable-next-line consistent-return return result.then(function () { clean(); }, function () { clean(); }); } clean(); }