@turbox3d/reactivity
Version:
Large-scale reactive state management library
65 lines (63 loc) • 2.2 kB
JavaScript
;
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();
}