Repository URL to install this package:
|
Version:
1.2.18 ▾
|
@skava/modules
/
___dist
/
view-container
/
styles
/
styled-components
/
src
/
models
/
ServerStyleSheet.js
|
|---|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _stream = _interopRequireDefault(require("stream"));
var _react = _interopRequireDefault(require("react"));
var _exotic = require("exotic");
var _constants = require("../constants");
var _StyleSheet = _interopRequireDefault(require("./StyleSheet"));
var _StyleSheetManager = _interopRequireDefault(require("./StyleSheetManager"));
var _jsxFileName = "view-container/styles/styled-components/src/models/ServerStyleSheet.js";
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const __SERVER__ = typeof window !== 'object' && typeof global === 'object';
/* this error is used for makeStyleTag */
const sheetClosedErr = process.env.NODE_ENV !== 'production' ? `
Can't collect styles once you've consumed a ServerStyleSheet's styles!
ServerStyleSheet is a one off instance for each server-side render cycle.
- Are you trying to reuse it across renders?
- Are you accidentally calling collectStyles twice?
`.trim() : '';
const streamBrowserErr = process.env.NODE_ENV !== 'production' ? 'Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.' : '';
class ServerStyleSheet {
constructor() {
Object.defineProperty(this, "closed", {
configurable: true,
enumerable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "instance", {
configurable: true,
enumerable: true,
writable: true,
value: void 0
});
this.instance = _StyleSheet.default.master.clone();
this.closed = false;
}
collectStyles(children) {
if (this.closed) {
throw new Error(sheetClosedErr);
}
return _react.default.createElement(_StyleSheetManager.default, {
sheet: this.instance,
__source: {
fileName: _jsxFileName,
lineNumber: 44
},
__self: this
}, children);
}
getStyleTags() {
if (!this.closed) {
this.closed = true;
}
return this.instance.toHTML();
}
getStyleElement() {
if (!this.closed) {
this.closed = true;
}
return this.instance.toReactElements();
} // eslint-disable-next-line
interleaveWithNodeStream(readableStream) {
if (!__SERVER__ || _constants.IS_BROWSER) {
throw new Error(streamBrowserErr);
}
/* the tag index keeps track of which tags have already been emitted */
const instance = this.instance;
let instanceTagIndex = 0;
const streamAttr = `${_constants.SC_STREAM_ATTR}="true"`;
const ourStream = new _stream.default.Readable(); // $FlowFixMe
ourStream._read = _exotic.NO_OP;
readableStream.on('data', chunk => {
const tags = instance.tags;
let html = '';
/* retrieve html for each new style tag */
for (; instanceTagIndex < tags.length; instanceTagIndex += 1) {
const tag = tags[instanceTagIndex];
html += tag.toHTML(streamAttr);
}
/* force our StyleSheets to emit entirely new tags */
instance.sealAllTags();
/* prepend style html to chunk */
ourStream.push(html + chunk);
});
readableStream.on('end', () => {
this.closed = true;
ourStream.push(null);
});
readableStream.on('error', readError => {
this.closed = true;
ourStream.emit('error', readError);
});
return ourStream;
}
}
exports.default = ServerStyleSheet;