next-csrf
Version:
CSRF mitigation library for Next.js
76 lines (57 loc) • 2.2 kB
JavaScript
;
exports.__esModule = true;
exports.flush = flush;
exports["default"] = void 0;
var _react = require("react");
var _stylesheetRegistry = _interopRequireDefault(require("./stylesheet-registry"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var styleSheetRegistry = new _stylesheetRegistry["default"]();
var JSXStyle =
/*#__PURE__*/
function (_Component) {
_inheritsLoose(JSXStyle, _Component);
function JSXStyle(props) {
var _this;
_this = _Component.call(this, props) || this;
_this.prevProps = {};
return _this;
}
JSXStyle.dynamic = function dynamic(info) {
return info.map(function (tagInfo) {
var baseId = tagInfo[0];
var props = tagInfo[1];
return styleSheetRegistry.computeId(baseId, props);
}).join(' ');
} // probably faster than PureComponent (shallowEqual)
;
var _proto = JSXStyle.prototype;
_proto.shouldComponentUpdate = function shouldComponentUpdate(otherProps) {
return this.props.id !== otherProps.id || // We do this check because `dynamic` is an array of strings or undefined.
// These are the computed values for dynamic styles.
String(this.props.dynamic) !== String(otherProps.dynamic);
};
_proto.componentWillUnmount = function componentWillUnmount() {
styleSheetRegistry.remove(this.props);
};
_proto.render = function render() {
// This is a workaround to make the side effect async safe in the "render" phase.
// See https://github.com/zeit/styled-jsx/pull/484
if (this.shouldComponentUpdate(this.prevProps)) {
// Updates
if (this.prevProps.id) {
styleSheetRegistry.remove(this.prevProps);
}
styleSheetRegistry.add(this.props);
this.prevProps = this.props;
}
return null;
};
return JSXStyle;
}(_react.Component);
exports["default"] = JSXStyle;
function flush() {
var cssRules = styleSheetRegistry.cssRules();
styleSheetRegistry.flush();
return cssRules;
}