UNPKG

@talend/react-cmf

Version:

A framework built on top of best react libraries

159 lines (157 loc) 6.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bactchedSubscribe = void 0; exports.bootstrapRedux = bootstrapRedux; exports.bootstrapRegistry = bootstrapRegistry; exports.bootstrapSaga = bootstrapSaga; exports.default = bootstrap; var _client = _interopRequireDefault(require("react-dom/client")); var _redux = require("redux"); var _reduxBatchedSubscribe = require("redux-batched-subscribe"); var _reduxSaga = _interopRequireDefault(require("redux-saga")); var _effects = require("redux-saga/effects"); var _actionCreator = _interopRequireDefault(require("./actionCreator")); var _actions = _interopRequireDefault(require("./actions")); var _App = _interopRequireDefault(require("./App")); var _assert = require("./assert"); var _cmfModule = _interopRequireDefault(require("./cmfModule")); var _component = _interopRequireDefault(require("./component")); var _Saga = require("./components/Saga"); var _expression = _interopRequireDefault(require("./expression")); var _httpInterceptors = _interopRequireDefault(require("./httpInterceptors")); var _onError = _interopRequireDefault(require("./onError")); var _register = require("./register"); var _registry = _interopRequireDefault(require("./registry")); var _sagas = _interopRequireDefault(require("./sagas")); var _store = _interopRequireDefault(require("./store")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const bactchedSubscribe = exports.bactchedSubscribe = (0, _reduxBatchedSubscribe.batchedSubscribe)(notify => { requestAnimationFrame(notify); }); function bootstrapRegistry(options) { (0, _assert.assertTypeOf)(options, 'sagas', 'object'); (0, _assert.assertTypeOf)(options, 'components', 'object'); (0, _assert.assertTypeOf)(options, 'expressions', 'object'); (0, _assert.assertTypeOf)(options, 'actionCreators', 'object'); (0, _assert.assertTypeOf)(options, 'registry', 'object'); (0, _register.registerInternals)(); if (options.registry) { _registry.default.registerMany(options.registry); } if (options.components) { _component.default.registerMany(options.components); } if (options.expressions) { _expression.default.registerMany(options.expressions); } if (options.actionCreators) { _actionCreator.default.registerMany(options.actionCreators); } if (options.sagas) { _sagas.default.registerMany(options.sagas); } } function bootstrapSaga(options) { (0, _assert.assertTypeOf)(options, 'saga', 'function'); function* cmfSaga() { yield (0, _effects.spawn)(_Saga.handleSagaComponent); yield (0, _effects.spawn)(_sagas.default.component.handle); if (typeof options.saga === 'function') { yield (0, _effects.spawn)(options.saga); } } // https://chrome.google.com/webstore/detail/redux-saga-dev-tools/kclmpmjofefcpjlommdpokoccidafnbi // eslint-disable-next-line no-underscore-dangle const sagaMonitor = window.__SAGA_MONITOR_EXTENSION__; const middleware = (0, _reduxSaga.default)({ onError: _onError.default.report, sagaMonitor }); return { middleware, run: () => middleware.run(cmfSaga) }; } function bootstrapRedux(options, sagaMiddleware) { (0, _assert.assertTypeOf)(options, 'settingsURL', 'string'); (0, _assert.assertTypeOf)(options, 'preReducer', ['Array', 'function']); (0, _assert.assertTypeOf)(options, 'httpMiddleware', 'function'); (0, _assert.assertTypeOf)(options, 'enhancer', 'function'); (0, _assert.assertTypeOf)(options, 'preloadedState', 'object'); (0, _assert.assertTypeOf)(options, 'middlewares', 'Array'); (0, _assert.assertTypeOf)(options, 'storeCallback', 'function'); (0, _assert.assertTypeOf)(options, 'reducer', 'object'); if (options.preReducer) { _store.default.addPreReducer(options.preReducer); } if (typeof options.httpMiddleware === 'function') { _store.default.setHttpMiddleware(options.httpMiddleware); } let enhancer = bactchedSubscribe; if (typeof options.enhancer === 'function') { enhancer = (0, _redux.compose)(options.enhancer, bactchedSubscribe); } const middlewares = options.middlewares || []; const store = _store.default.initialize(options.reducer, options.preloadedState, enhancer, [...middlewares, sagaMiddleware]); if (options.settingsURL) { store.dispatch(_actions.default.settings.fetchSettings(options.settingsURL)); } if (typeof options.storeCallback === 'function') { options.storeCallback(store); } return store; } function bootstrapInterceptors(options) { if (options.httpInterceptors) { options.httpInterceptors.forEach(_httpInterceptors.default.push); } } function DefaultRootComponent() { return 'RootComponent is required'; } /** * Bootstrap your cmf app * It takes your configuration and provides a very good default one. * By default it starts react with the following addons: * - redux * - redux-saga * @param {object} options the set of supported options * @returns {object} app object with render function */ async function bootstrap(appOptions = {}) { // setup asap const options = await (0, _cmfModule.default)(appOptions); (0, _assert.assertTypeOf)(options, 'root', 'object'); (0, _assert.assertTypeOf)(options, 'appId', 'string'); (0, _assert.assertTypeOf)(options, 'RootComponent', 'function'); bootstrapRegistry(options); bootstrapInterceptors(options); const appId = options.appId || 'app'; const saga = bootstrapSaga(options); const store = bootstrapRedux(options, saga.middleware); _onError.default.bootstrap(options, store); const RootComponent = options.RootComponent || DefaultRootComponent; const element = options.root || document.getElementById(appId); const config = { store, saga, App: _App.default, cmfModule: options }; if (options.render !== false) { saga.run(); const root = _client.default.createRoot(element); root.render(/*#__PURE__*/(0, _jsxRuntime.jsx)(_App.default, { store: store, loading: options.AppLoader, withSettings: !!options.settingsURL, registry: _registry.default.getRegistry(), children: /*#__PURE__*/(0, _jsxRuntime.jsx)(RootComponent, {}) })); } return config; } //# sourceMappingURL=bootstrap.js.map