UNPKG

second

Version:

Build React components with server-only data requirements, then rehydrate them on the client to provide interactivity and event bindings.

78 lines (55 loc) 2.01 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _secondContainer = require('second-container'); var _secondContainer2 = _interopRequireDefault(_secondContainer); var _secondFetcher = require('second-fetcher'); var _secondFetcher2 = _interopRequireDefault(_secondFetcher); var _secondRenderer = require('second-renderer'); var _secondRenderer2 = _interopRequireDefault(_secondRenderer); var _secondDehydrator = require('second-dehydrator'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class Second { constructor() { this.initialised = false; } init({ VDom, VDomServer, fetcherOptions = {} }) { this.initialised = true; this.fetcher = new _secondFetcher2.default(fetcherOptions); this.containerFactory = (0, _secondContainer2.default)({ Component: VDom.Component, createElement: VDom.createElement, fetcher: this.fetcher }); this.dehydrate = (0, _secondDehydrator.createDehydrator)(VDom.createElement); this.renderer = new _secondRenderer2.default({ VDom, VDomServer, componentIsReady: () => !this.fetcher.hasOutstandingRequests() }); } reset() { this.fetcher.reset(); } createContainer(Component, params) { if (!this.initialised) { throw new Error('You must call second.init() before you can call second.createContainer().'); } return this.containerFactory(Component, params); } render(Component, params) { if (!this.initialised) { throw new Error('You must call second.init() before you can call second.render().'); } return this.renderer.render(Component, params); } renderStatic(Component, params) { if (!this.initialised) { throw new Error('You must call second.init() before you can call second.renderStatic().'); } return this.renderer.renderStatic(Component, params); } } exports.default = new Second(); module.exports = exports['default'];