Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"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;