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
JavaScript
;
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'];