New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

karet

Package Overview
Dependencies
Maintainers
1
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

karet - npm Package Compare versions

Comparing version 0.2.7 to 1.0.0

.nyc_output/324e943a78346083674389acf2c95de4.json

52

lib/karet.js

@@ -104,17 +104,2 @@ "use strict";

function hasObs(props) {
for (var key in props) {
var val = props[key];
if (isObs(val)) {
return true;
} else if (STYLE === key) {
for (var k in val) {
var valK = val[k];
if (isObs(valK)) return true;
}
}
}
return false;
}
function forEach(props, extra, fn) {

@@ -336,3 +321,21 @@ for (var key in props) {

function hasAnyObs(props, args) {
function hasObsInProps(props) {
for (var key in props) {
var val = props[key];
if (isObs(val)) {
return true;
} else if (CHILDREN === key) {
if ((0, _infestines.isArray)(val)) for (var i = 0, n = val.length; i < n; ++i) {
if (isObs(val[i])) return true;
}
} else if (STYLE === key) {
for (var k in val) {
if (isObs(val[k])) return true;
}
}
}
return false;
}
function hasObsInArgs(args) {
for (var i = 2, n = args.length; i < n; ++i) {

@@ -348,3 +351,3 @@ var arg = args[i];

}
return hasObs(args[1]);
return hasObsInProps(args[1]);
}

@@ -361,2 +364,6 @@

function hasLift(props) {
return props && props[KARET_LIFT] === true;
}
function createElement() {

@@ -369,10 +376,7 @@ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {

var props = args[1];
if (typeof type === "string" && hasAnyObs(props, args)) {
args[1] = filterProps(type, props);
args[0] = FromClass;
} else if (props && props[KARET_LIFT] === true) {
if (hasAnyObs(props, args)) {
if ((0, _infestines.isString)(type) || hasLift(props)) {
if (hasObsInArgs(args)) {
args[1] = filterProps(type, props);
args[0] = FromClass;
} else {
} else if (hasLift(props)) {
args[1] = (0, _infestines.dissocPartialU)(KARET_LIFT, props) || _infestines.object0;

@@ -393,2 +397,2 @@ }

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9rYXJldC5qcyJdLCJuYW1lcyI6WyJWQUxVRSIsIkVSUk9SIiwiRU5EIiwiU1RZTEUiLCJDSElMRFJFTiIsIktBUkVUX0xJRlQiLCJERF9SRUYiLCJyZWFjdEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiQ29tcG9uZW50IiwiaXNPYnMiLCJ4IiwiTGlmdGVkQ29tcG9uZW50IiwicHJvcHMiLCJjYWxsIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsImRvVW5zdWJzY3JpYmUiLCJkb1N1YnNjcmliZSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiRnJvbUtlZmlyIiwiY2FsbGJhY2siLCJyZW5kZXJlZCIsIm9ic2VydmFibGUiLCJvZmZBbnkiLCJlIiwidHlwZSIsInZhbHVlIiwiZm9yY2VVcGRhdGUiLCJvbkFueSIsInJlbmRlciIsImZyb21LZWZpciIsImhhc09icyIsImtleSIsInZhbCIsImsiLCJ2YWxLIiwiZm9yRWFjaCIsImV4dHJhIiwiZm4iLCJpIiwibiIsImxlbmd0aCIsInZhbEkiLCJ2YWx1ZXMiLCJuZXdQcm9wcyIsIm5ld0NoaWxkcmVuIiwiQXJyYXkiLCJqIiwicmVmIiwibmV3U3R5bGUiLCJzdHlsZSIsImFwcGx5IiwiY29uY2F0IiwiaW5jVmFsdWVzIiwic2VsZiIsIm9mZkFueTEiLCJoYW5kbGVycyIsIm9icyIsImhhbmRsZXIiLCJwb3AiLCJvbkFueTEiLCJkb0hhbmRsZU4iLCJwdXNoIiwiRnJvbUNsYXNzIiwiRnVuY3Rpb24iLCJyZXZlcnNlIiwiZG9IYW5kbGUxIiwiZmlsbCIsImlkeCIsImhhc0FueU9icyIsImFyZ3MiLCJhcmciLCJtIiwiZmlsdGVyUHJvcHMiLCJmcm9tQ2xhc3MiLCJDbGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFTQTs7QUFFQSxJQUFNQSxRQUFRLE9BQWQ7QUFDQSxJQUFNQyxRQUFRLE9B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QVA7QUFDRDs7a0JBRWMsK0JBQWMsZUFBZCxFQUErQmhFLGFBQS9CLGtCOztBQUVmOztBQUVPLElBQU1vRSxnQ0FBWSxTQUFaQSxTQUFZO0FBQUEsU0FBUztBQUFBLFdBQ2hDckUsYUFBYTBELFNBQWIsRUFBd0JVLFlBQVlFLEtBQVosRUFBbUJoRSxLQUFuQixDQUF4QixDQURnQztBQUFBLEdBQVQ7QUFBQSxDQUFsQiIsImZpbGUiOiJrYXJldC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwia2VmaXJcIlxuaW1wb3J0IHtcbiAgYXJyYXkwLFxuICBhc3NvY1BhcnRpYWxVLFxuICBkaXNzb2NQYXJ0aWFsVSxcbiAgaW5oZXJpdCxcbiAgaXNBcnJheSxcbiAgb2JqZWN0MFxufSBmcm9tIFwiaW5mZXN0aW5lc1wiXG5cbi8vXG5cbmNvbnN0IFZBTFVFID0gXCJ2YWx1ZVwiXG5jb25zdCBFUlJPUiA9IFwiZXJyb3JcIlxuY29uc3QgRU5EID0gXCJlbmRcIlxuY29uc3QgU1RZTEUgPSBcInN0eWxlXCJcbmNvbnN0IENISUxEUkVOID0gXCJjaGlsZHJlblwiXG5jb25zdCBLQVJFVF9MSUZUID0gXCJrYXJldC1saWZ0XCJcbmNvbnN0IEREX1JFRiA9IFwiJCRyZWZcIlxuXG4vL1xuXG5jb25zdCByZWFjdEVsZW1lbnQgPSBSZWFjdC5jcmVhdGVFbGVtZW50XG5jb25zdCBDb21wb25lbnQgPSBSZWFjdC5Db21wb25lbnRcblxuY29uc3QgaXNPYnMgPSB4ID0+IHggaW5zdGFuY2VvZiBPYnNlcnZhYmxlXG5cbi8vXG5cbmZ1bmN0aW9uIExpZnRlZENvbXBvbmVudChwcm9wcykge1xuICBDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcylcbn1cblxuaW5oZXJpdChMaWZ0ZWRDb21wb25lbnQsIENvbXBvbmVudCwge1xuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIHRoaXMuZG9VbnN1YnNjcmliZSgpXG4gICAgdGhpcy5kb1N1YnNjcmliZShuZXh0UHJvcHMpXG4gIH0sXG4gIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICB0aGlzLmRvU3Vic2NyaWJlKHRoaXMucHJvcHMpXG4gIH0sXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuZG9VbnN1YnNjcmliZSgpXG4gIH1cbn0pXG5cbi8vXG5cbmZ1bmN0aW9uIEZyb21LZWZpcihwcm9wcykge1xuICBMaWZ0ZWRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcylcbiAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgdGhpcy5yZW5kZXJlZCA9IG51bGxcbn1cblxuaW5oZXJpdChGcm9tS2VmaXIsIExpZnRlZENvbXBvbmVudCwge1xuICBkb1Vuc3Vic2NyaWJlKCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja1xuICAgIGlmIChjYWxsYmFjaylcbiAgICAgIHRoaXMucHJvcHMub2JzZXJ2YWJsZS5vZmZBbnkoY2FsbGJhY2spXG4gIH0sXG4gIGRvU3Vic2NyaWJlKHtvYnNlcnZhYmxlfSkge1xuICAgIGlmIChpc09icyhvYnNlcnZhYmxlKSkge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBlID0+IHtcbiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFZBTFVFOlxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZCA9IGUudmFsdWUgfHwgbnVsbFxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgRVJST1I6XG4gICAgICAgICAgICB0aHJvdyBlLnZhbHVlXG4gICAgICAgICAgY2FzZSBFTkQ6XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIG9ic2VydmFibGUub25BbnkoY2FsbGJhY2spXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBvYnNlcnZhYmxlIHx8IG51bGxcbiAgICB9XG4gIH0sXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFxuICB9XG59KVxuXG5leHBvcnQgY29uc3QgZnJvbUtlZmlyID0gb2JzZXJ2YWJsZSA9PiByZWFjdEVsZW1lbnQoRnJvbUtlZmlyLCB7b2JzZXJ2YWJsZX0pXG5cbi8vXG5cbmZ1bmN0aW9uIGhhc09icyhwcm9wcykge1xuICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgIGNvbnN0IHZhbCA9IHByb3BzW2tleV1cbiAgICBpZiAoaXNPYnModmFsKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKFNUWUxFID09PSBrZXkpIHtcbiAgICAgIGZvciAoY29uc3QgayBpbiB2YWwpIHtcbiAgICAgICAgY29uc3QgdmFsSyA9IHZhbFtrXVxuICAgICAgICBpZiAoaXNPYnModmFsSykpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGZvckVhY2gocHJvcHMsIGV4dHJhLCBmbikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgIGNvbnN0IHZhbCA9IHByb3BzW2tleV1cbiAgICBpZiAoaXNPYnModmFsKSkge1xuICAgICAgZm4oZXh0cmEsIHZhbClcbiAgICB9IGVsc2UgaWYgKENISUxEUkVOID09PSBrZXkpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wLCBuPXZhbC5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgICAgICAgY29uc3QgdmFsSSA9IHZhbFtpXVxuICAgICAgICAgIGlmIChpc09icyh2YWxJKSlcbiAgICAgICAgICAgIGZuKGV4dHJhLCB2YWxJKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChTVFlMRSA9PT0ga2V5KSB7XG4gICAgICBmb3IgKGNvbnN0IGsgaW4gdmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbEsgPSB2YWxba11cbiAgICAgICAgaWYgKGlzT2JzKHZhbEspKVxuICAgICAgICAgIGZuKGV4dHJhLCB2YWxLKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXIocHJvcHMsIHZhbHVlcykge1xuICBsZXQgdHlwZSA9IG51bGxcbiAgbGV0IG5ld1Byb3BzID0gbnVsbFxuICBsZXQgbmV3Q2hpbGRyZW4gPSBudWxsXG5cbiAgbGV0IGsgPSAtMVxuXG4gIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgY29uc3QgdmFsID0gcHJvcHNba2V5XVxuICAgIGlmIChDSElMRFJFTiA9PT0ga2V5KSB7XG4gICAgICBpZiAoaXNPYnModmFsKSkge1xuICAgICAgICBuZXdDaGlsZHJlbiA9IHZhbHVlc1srK2tdXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICBmb3IgKGxldCBpPTAsIG49dmFsLmxlbmd0aDsgaTxuOyArK2kpIHtcbiAgICAgICAgICBjb25zdCB2YWxJID0gdmFsW2ldXG4gICAgICAgICAgaWYgKGlzT2JzKHZhbEkpKSB7XG4gICAgICAgICAgICBpZiAoIW5ld0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIG5ld0NoaWxkcmVuID0gQXJyYXkobilcbiAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPGk7ICsrailcbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbltqXSA9IHZhbFtqXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5baV0gPSB2YWx1ZXNbKytrXVxuICAgICAgICAgIH0gZWxzZSBpZiAobmV3Q2hpbGRyZW4pXG4gICAgICAgICAgICBuZXdDaGlsZHJlbltpXSA9IHZhbElcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5ld0NoaWxkcmVuKVxuICAgICAgICAgIG5ld0NoaWxkcmVuID0gdmFsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdDaGlsZHJlbiA9IHZhbFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXCIkJHR5cGVcIiA9PT0ga2V5KSB7XG4gICAgICB0eXBlID0gcHJvcHNba2V5XVxuICAgIH0gZWxzZSBpZiAoRERfUkVGID09PSBrZXkpIHtcbiAgICAgIG5ld1Byb3BzID0gbmV3UHJvcHMgfHwge31cbiAgICAgIG5ld1Byb3BzLnJlZiA9IGlzT2JzKHZhbCkgPyB2YWx1ZXNbKytrXSA6IHZhbFxuICAgIH0gZWxzZSBpZiAoaXNPYnModmFsKSkge1xuICAgICAgbmV3UHJvcHMgPSBuZXdQcm9wcyB8fCB7fVxuICAgICAgbmV3UHJvcHNba2V5XSA9IHZhbHVlc1srK2tdXG4gICAgfSBlbHNlIGlmIChTVFlMRSA9PT0ga2V5KSB7XG4gICAgICBsZXQgbmV3U3R5bGVcbiAgICAgIGZvciAoY29uc3QgaSBpbiB2YWwpIHtcbiAgICAgICAgY29uc3QgdmFsSSA9IHZhbFtpXVxuICAgICAgICBpZiAoaXNPYnModmFsSSkpIHtcbiAgICAgICAgICBpZiAoIW5ld1N0eWxlKSB7XG4gICAgICAgICAgICBuZXdTdHlsZSA9IHt9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGogaW4gdmFsKSB7XG4gICAgICAgICAgICAgIGlmIChqID09PSBpKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIG5ld1N0eWxlW2pdID0gdmFsW2pdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld1N0eWxlW2ldID0gdmFsdWVzWysra11cbiAgICAgICAgfSBlbHNlIGlmIChuZXdTdHlsZSkge1xuICAgICAgICAgIG5ld1N0eWxlW2ldID0gdmFsSVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXdQcm9wcyA9IG5ld1Byb3BzIHx8IHt9XG4gICAgICBuZXdQcm9wcy5zdHlsZSA9IG5ld1N0eWxlIHx8IHZhbFxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQcm9wcyA9IG5ld1Byb3BzIHx8IHt9XG4gICAgICBuZXdQcm9wc1trZXldID0gdmFsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NoaWxkcmVuIGluc3RhbmNlb2YgQXJyYXlcbiAgICA/IHJlYWN0RWxlbWVudC5hcHBseShudWxsLCBbdHlwZSwgbmV3UHJvcHNdLmNvbmNhdChuZXdDaGlsZHJlbikpXG4gICAgOiBuZXdDaGlsZHJlblxuICAgID8gcmVhY3RFbGVtZW50KHR5cGUsIG5ld1Byb3BzLCBuZXdDaGlsZHJlbilcbiAgICA6IHJlYWN0RWxlbWVudCh0eXBlLCBuZXdQcm9wcylcbn1cblxuLy9cblxuZnVuY3Rpb24gaW5jVmFsdWVzKHNlbGYpIHsgc2VsZi52YWx1ZXMgKz0gMSB9XG5mdW5jdGlvbiBvZmZBbnkxKGhhbmRsZXJzLCBvYnMpIHsgb2JzLm9mZkFueShoYW5kbGVycykgfVxuZnVuY3Rpb24gb2ZmQW55KGhhbmRsZXJzLCBvYnMpIHtcbiAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzLnBvcCgpXG4gIGlmIChoYW5kbGVyKVxuICAgIG9icy5vZmZBbnkoaGFuZGxlcilcbn1cbmZ1bmN0aW9uIG9uQW55MShoYW5kbGVycywgb2JzKSB7IG9icy5vbkFueShoYW5kbGVycykgfVxuZnVuY3Rpb24gb25Bbnkoc2VsZiwgb2JzKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBlID0+IHNlbGYuZG9IYW5kbGVOKGhhbmRsZXIsIGUpXG4gIHNlbGYuaGFuZGxlcnMucHVzaChoYW5kbGVyKVxuICBvYnMub25BbnkoaGFuZGxlcilcbn1cblxuZnVuY3Rpb24gRnJvbUNsYXNzKHByb3BzKSB7XG4gIExpZnRlZENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKVxuICB0aGlzLnZhbHVlcyA9IHRoaXNcbiAgdGhpcy5oYW5kbGVycyA9IG51bGxcbn1cblxuaW5oZXJpdChGcm9tQ2xhc3MsIExpZnRlZENvbXBvbmVudCwge1xuICBkb1Vuc3Vic2NyaWJlKCkge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1xuICAgIGlmIChoYW5kbGVycyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBmb3JFYWNoKHRoaXMucHJvcHMsIGhhbmRsZXJzLCBvZmZBbnkxKVxuICAgIH0gZWxzZSBpZiAoaGFuZGxlcnMpIHtcbiAgICAgIGZvckVhY2godGhpcy5wcm9wcywgaGFuZGxlcnMucmV2ZXJzZSgpLCBvZmZBbnkpXG4gICAgfVxuICB9LFxuICBkb1N1YnNjcmliZShwcm9wcykge1xuICAgIHRoaXMudmFsdWVzID0gMFxuICAgIGZvckVhY2gocHJvcHMsIHRoaXMsIGluY1ZhbHVlcylcbiAgICBjb25zdCBuID0gdGhpcy52YWx1ZXNcblxuICAgIHN3aXRjaCAobikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB0aGlzLnZhbHVlcyA9IGFycmF5MFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdGhpc1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGUgPT4gdGhpcy5kb0hhbmRsZTEoZSlcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IGhhbmRsZXJzXG4gICAgICAgIGZvckVhY2gocHJvcHMsIGhhbmRsZXJzLCBvbkFueTEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnZhbHVlcyA9IEFycmF5KG4pLmZpbGwodGhpcylcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IFtdXG4gICAgICAgIGZvckVhY2gocHJvcHMsIHRoaXMsIG9uQW55KVxuICAgIH1cbiAgfSxcbiAgZG9IYW5kbGUxKGUpIHtcbiAgICBzd2l0Y2ggKGUudHlwZSkge1xuICAgICAgY2FzZSBWQUxVRToge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudmFsdWVcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVcbiAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBFUlJPUjogdGhyb3cgZS52YWx1ZVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFt0aGlzLnZhbHVlc11cbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRvSGFuZGxlTihoYW5kbGVyLCBlKSB7XG4gICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzXG4gICAgbGV0IGlkeD0wXG4gICAgd2hpbGUgKGhhbmRsZXJzW2lkeF0gIT09IGhhbmRsZXIpXG4gICAgICArK2lkeFxuICAgIHN3aXRjaCAoZS50eXBlKSB7XG4gICAgICBjYXNlIFZBTFVFOiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS52YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnZhbHVlc1xuICAgICAgICBpZiAodmFsdWVzW2lkeF0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgdmFsdWVzW2lkeF0gPSB2YWx1ZVxuICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEVSUk9SOiB0aHJvdyBlLnZhbHVlXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGhhbmRsZXJzW2lkeF0gPSBudWxsXG4gICAgICAgIGNvbnN0IG4gPSBoYW5kbGVycy5sZW5ndGhcbiAgICAgICAgaWYgKG4gIT09IHRoaXMudmFsdWVzLmxlbmd0aClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbjsgKytpKVxuICAgICAgICAgIGlmIChoYW5kbGVyc1tpXSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB0aGlzLmhhbmRsZXJzID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNcbiAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcylcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiByZW5kZXIodGhpcy5wcm9wcywgW3ZhbHVlXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy52YWx1ZXNcbiAgICAgIGZvciAobGV0IGk9MCwgbj12YWx1ZXMubGVuZ3RoOyBpPG47ICsraSlcbiAgICAgICAgaWYgKHZhbHVlc1tpXSA9PT0gdGhpcylcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIHJlbmRlcih0aGlzLnByb3BzLCB2YWx1ZXMpXG4gICAgfVxuICB9XG59KVxuXG4vL1xuXG5mdW5jdGlvbiBoYXNBbnlPYnMocHJvcHMsIGFyZ3MpIHtcbiAgZm9yIChsZXQgaT0yLCBuPWFyZ3MubGVuZ3RoOyBpPG47ICsraSkge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV1cbiAgICBpZiAoaXNBcnJheShhcmcpKSB7XG4gICAgICBmb3IgKGxldCBqPTAsIG09YXJnLmxlbmd0aDsgajxtOyArK2opXG4gICAgICAgIGlmIChpc09icyhhcmdbal0pKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09icyhhcmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzT2JzKGFyZ3NbMV0pXG59XG5cbmZ1bmN0aW9uIGZpbHRlclByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGNvbnN0IG5ld1Byb3BzID0ge1wiJCR0eXBlXCI6IHR5cGV9XG4gIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgY29uc3QgdmFsID0gcHJvcHNba2V5XVxuICAgIGlmIChcInJlZlwiID09PSBrZXkpXG4gICAgICBuZXdQcm9wc1tERF9SRUZdID0gdmFsXG4gICAgZWxzZSBpZiAoS0FSRVRfTElGVCAhPT0ga2V5KVxuICAgICAgbmV3UHJvcHNba2V5XSA9IHZhbFxuICB9XG4gIHJldHVybiBuZXdQcm9wc1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KC4uLmFyZ3MpIHtcbiAgY29uc3QgdHlwZSA9IGFyZ3NbMF1cbiAgY29uc3QgcHJvcHMgPSBhcmdzWzFdXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBoYXNBbnlPYnMocHJvcHMsIGFyZ3MpKSB7XG4gICAgYXJnc1sxXSA9IGZpbHRlclByb3BzKHR5cGUsIHByb3BzKVxuICAgIGFyZ3NbMF0gPSBGcm9tQ2xhc3NcbiAgfSBlbHNlIGlmIChwcm9wcyAmJiBwcm9wc1tLQVJFVF9MSUZUXSA9PT0gdHJ1ZSkge1xuICAgIGlmIChoYXNBbnlPYnMocHJvcHMsIGFyZ3MpKSB7XG4gICAgICBhcmdzWzFdID0gZmlsdGVyUHJvcHModHlwZSwgcHJvcHMpXG4gICAgICBhcmdzWzBdID0gRnJvbUNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NbMV0gPSBkaXNzb2NQYXJ0aWFsVShLQVJFVF9MSUZULCBwcm9wcykgfHwgb2JqZWN0MFxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVhY3RFbGVtZW50KC4uLmFyZ3MpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc29jUGFydGlhbFUoXCJjcmVhdGVFbGVtZW50XCIsIGNyZWF0ZUVsZW1lbnQsIFJlYWN0KVxuXG4vL1xuXG5leHBvcnQgY29uc3QgZnJvbUNsYXNzID0gQ2xhc3MgPT4gcHJvcHMgPT5cbiAgcmVhY3RFbGVtZW50KEZyb21DbGFzcywgZmlsdGVyUHJvcHMoQ2xhc3MsIHByb3BzKSlcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9rYXJldC5qcyJdLCJuYW1lcyI6WyJWQUxVRSIsIkVSUk9SIiwiRU5EIiwiU1RZTEUiLCJDSElMRFJFTiIsIktBUkVUX0xJRlQiLCJERF9SRUYiLCJyZWFjdEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiQ29tcG9uZW50IiwiaXNPYnMiLCJ4IiwiTGlmdGVkQ29tcG9uZW50IiwicHJvcHMiLCJjYWxsIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsImRvVW5zdWJzY3JpYmUiLCJkb1N1YnNjcmliZSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiRnJvbUtlZmlyIiwiY2FsbGJhY2siLCJyZW5kZXJlZCIsIm9ic2VydmFibGUiLCJvZmZBbnkiLCJlIiwidHlwZSIsInZhbHVlIiwiZm9yY2VVcGRhdGUiLCJvbkFueSIsInJlbmRlciIsImZyb21LZWZpciIsImZvckVhY2giLCJleHRyYSIsImZuIiwia2V5IiwidmFsIiwiaSIsIm4iLCJsZW5ndGgiLCJ2YWxJIiwiayIsInZhbEsiLCJ2YWx1ZXMiLCJuZXdQcm9wcyIsIm5ld0NoaWxkcmVuIiwiQXJyYXkiLCJqIiwicmVmIiwibmV3U3R5bGUiLCJzdHlsZSIsImFwcGx5IiwiY29uY2F0IiwiaW5jVmFsdWVzIiwic2VsZiIsIm9mZkFueTEiLCJoYW5kbGVycyIsIm9icyIsImhhbmRsZXIiLCJwb3AiLCJvbkFueTEiLCJkb0hhbmRsZU4iLCJwdXNoIiwiRnJvbUNsYXNzIiwiRnVuY3Rpb24iLCJyZXZlcnNlIiwiZG9IYW5kbGUxIiwiZmlsbCIsImlkeCIsImhhc09ic0luUHJvcHMiLCJoYXNPYnNJbkFyZ3MiLCJhcmdzIiwiYXJnIiwibSIsImZpbHRlclByb3BzIiwiaGFzTGlmdCIsImZyb21DbGFzcyIsIkNsYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFDQTs7QUFDQTs7OztBQVVBOztBQUVBLElBQU1BLFFBQVEsT0FB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QUdPLElBQUlZLFFBQVEvRCxLQUFSLENBQUosRUFBb0I7QUFDekIyRCxXQUFLLENBQUwsSUFBVSxnQ0FBZW5FLFVBQWYsRUFBMkJRLEtBQTNCLHdCQUFWO0FBQ0Q7QUFDRjtBQUNELFNBQU9OLDhCQUFnQmlFLElBQWhCLENBQVA7QUFDRDs7a0JBRWMsK0JBQWMsZUFBZCxFQUErQmhFLGFBQS9CLGtCOztBQUVmOztBQUVPLElBQU1xRSxnQ0FBWSxTQUFaQSxTQUFZO0FBQUEsU0FBUztBQUFBLFdBQ2hDdEUsYUFBYXlELFNBQWIsRUFBd0JXLFlBQVlHLEtBQVosRUFBbUJqRSxLQUFuQixDQUF4QixDQURnQztBQUFBLEdBQVQ7QUFBQSxDQUFsQiIsImZpbGUiOiJrYXJldC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwia2VmaXJcIlxuaW1wb3J0IHtcbiAgYXJyYXkwLFxuICBhc3NvY1BhcnRpYWxVLFxuICBkaXNzb2NQYXJ0aWFsVSxcbiAgaW5oZXJpdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIG9iamVjdDBcbn0gZnJvbSBcImluZmVzdGluZXNcIlxuXG4vL1xuXG5jb25zdCBWQUxVRSA9IFwidmFsdWVcIlxuY29uc3QgRVJST1IgPSBcImVycm9yXCJcbmNvbnN0IEVORCA9IFwiZW5kXCJcbmNvbnN0IFNUWUxFID0gXCJzdHlsZVwiXG5jb25zdCBDSElMRFJFTiA9IFwiY2hpbGRyZW5cIlxuY29uc3QgS0FSRVRfTElGVCA9IFwia2FyZXQtbGlmdFwiXG5jb25zdCBERF9SRUYgPSBcIiQkcmVmXCJcblxuLy9cblxuY29uc3QgcmVhY3RFbGVtZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudFxuY29uc3QgQ29tcG9uZW50ID0gUmVhY3QuQ29tcG9uZW50XG5cbmNvbnN0IGlzT2JzID0geCA9PiB4IGluc3RhbmNlb2YgT2JzZXJ2YWJsZVxuXG4vL1xuXG5mdW5jdGlvbiBMaWZ0ZWRDb21wb25lbnQocHJvcHMpIHtcbiAgQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpXG59XG5cbmluaGVyaXQoTGlmdGVkQ29tcG9uZW50LCBDb21wb25lbnQsIHtcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICB0aGlzLmRvVW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuZG9TdWJzY3JpYmUobmV4dFByb3BzKVxuICB9LFxuICBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgdGhpcy5kb1N1YnNjcmliZSh0aGlzLnByb3BzKVxuICB9LFxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRvVW5zdWJzY3JpYmUoKVxuICB9XG59KVxuXG4vL1xuXG5mdW5jdGlvbiBGcm9tS2VmaXIocHJvcHMpIHtcbiAgTGlmdGVkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpXG4gIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gIHRoaXMucmVuZGVyZWQgPSBudWxsXG59XG5cbmluaGVyaXQoRnJvbUtlZmlyLCBMaWZ0ZWRDb21wb25lbnQsIHtcbiAgZG9VbnN1YnNjcmliZSgpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuY2FsbGJhY2tcbiAgICBpZiAoY2FsbGJhY2spXG4gICAgICB0aGlzLnByb3BzLm9ic2VydmFibGUub2ZmQW55KGNhbGxiYWNrKVxuICB9LFxuICBkb1N1YnNjcmliZSh7b2JzZXJ2YWJsZX0pIHtcbiAgICBpZiAoaXNPYnMob2JzZXJ2YWJsZSkpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gZSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBWQUxVRTpcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWQgPSBlLnZhbHVlIHx8IG51bGxcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEVSUk9SOlxuICAgICAgICAgICAgdGhyb3cgZS52YWx1ZVxuICAgICAgICAgIGNhc2UgRU5EOlxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBvYnNlcnZhYmxlLm9uQW55KGNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gb2JzZXJ2YWJsZSB8fCBudWxsXG4gICAgfVxuICB9LFxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRcbiAgfVxufSlcblxuZXhwb3J0IGNvbnN0IGZyb21LZWZpciA9IG9ic2VydmFibGUgPT4gcmVhY3RFbGVtZW50KEZyb21LZWZpciwge29ic2VydmFibGV9KVxuXG4vL1xuXG5mdW5jdGlvbiBmb3JFYWNoKHByb3BzLCBleHRyYSwgZm4pIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICBjb25zdCB2YWwgPSBwcm9wc1trZXldXG4gICAgaWYgKGlzT2JzKHZhbCkpIHtcbiAgICAgIGZuKGV4dHJhLCB2YWwpXG4gICAgfSBlbHNlIGlmIChDSElMRFJFTiA9PT0ga2V5KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAobGV0IGk9MCwgbj12YWwubGVuZ3RoOyBpPG47ICsraSkge1xuICAgICAgICAgIGNvbnN0IHZhbEkgPSB2YWxbaV1cbiAgICAgICAgICBpZiAoaXNPYnModmFsSSkpXG4gICAgICAgICAgICBmbihleHRyYSwgdmFsSSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoU1RZTEUgPT09IGtleSkge1xuICAgICAgZm9yIChjb25zdCBrIGluIHZhbCkge1xuICAgICAgICBjb25zdCB2YWxLID0gdmFsW2tdXG4gICAgICAgIGlmIChpc09icyh2YWxLKSlcbiAgICAgICAgICBmbihleHRyYSwgdmFsSylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyKHByb3BzLCB2YWx1ZXMpIHtcbiAgbGV0IHR5cGUgPSBudWxsXG4gIGxldCBuZXdQcm9wcyA9IG51bGxcbiAgbGV0IG5ld0NoaWxkcmVuID0gbnVsbFxuXG4gIGxldCBrID0gLTFcblxuICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgIGNvbnN0IHZhbCA9IHByb3BzW2tleV1cbiAgICBpZiAoQ0hJTERSRU4gPT09IGtleSkge1xuICAgICAgaWYgKGlzT2JzKHZhbCkpIHtcbiAgICAgICAgbmV3Q2hpbGRyZW4gPSB2YWx1ZXNbKytrXVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wLCBuPXZhbC5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgICAgICAgY29uc3QgdmFsSSA9IHZhbFtpXVxuICAgICAgICAgIGlmIChpc09icyh2YWxJKSkge1xuICAgICAgICAgICAgaWYgKCFuZXdDaGlsZHJlbikge1xuICAgICAgICAgICAgICBuZXdDaGlsZHJlbiA9IEFycmF5KG4pXG4gICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxpOyArK2opXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bal0gPSB2YWxbal1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW2ldID0gdmFsdWVzWysra11cbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld0NoaWxkcmVuKVxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5baV0gPSB2YWxJXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXdDaGlsZHJlbilcbiAgICAgICAgICBuZXdDaGlsZHJlbiA9IHZhbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q2hpbGRyZW4gPSB2YWxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFwiJCR0eXBlXCIgPT09IGtleSkge1xuICAgICAgdHlwZSA9IHByb3BzW2tleV1cbiAgICB9IGVsc2UgaWYgKEREX1JFRiA9PT0ga2V5KSB7XG4gICAgICBuZXdQcm9wcyA9IG5ld1Byb3BzIHx8IHt9XG4gICAgICBuZXdQcm9wcy5yZWYgPSBpc09icyh2YWwpID8gdmFsdWVzWysra10gOiB2YWxcbiAgICB9IGVsc2UgaWYgKGlzT2JzKHZhbCkpIHtcbiAgICAgIG5ld1Byb3BzID0gbmV3UHJvcHMgfHwge31cbiAgICAgIG5ld1Byb3BzW2tleV0gPSB2YWx1ZXNbKytrXVxuICAgIH0gZWxzZSBpZiAoU1RZTEUgPT09IGtleSkge1xuICAgICAgbGV0IG5ld1N0eWxlXG4gICAgICBmb3IgKGNvbnN0IGkgaW4gdmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbEkgPSB2YWxbaV1cbiAgICAgICAgaWYgKGlzT2JzKHZhbEkpKSB7XG4gICAgICAgICAgaWYgKCFuZXdTdHlsZSkge1xuICAgICAgICAgICAgbmV3U3R5bGUgPSB7fVxuICAgICAgICAgICAgZm9yIChjb25zdCBqIGluIHZhbCkge1xuICAgICAgICAgICAgICBpZiAoaiA9PT0gaSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBuZXdTdHlsZVtqXSA9IHZhbFtqXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdTdHlsZVtpXSA9IHZhbHVlc1srK2tdXG4gICAgICAgIH0gZWxzZSBpZiAobmV3U3R5bGUpIHtcbiAgICAgICAgICBuZXdTdHlsZVtpXSA9IHZhbElcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3UHJvcHMgPSBuZXdQcm9wcyB8fCB7fVxuICAgICAgbmV3UHJvcHMuc3R5bGUgPSBuZXdTdHlsZSB8fCB2YWxcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3UHJvcHMgPSBuZXdQcm9wcyB8fCB7fVxuICAgICAgbmV3UHJvcHNba2V5XSA9IHZhbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDaGlsZHJlbiBpbnN0YW5jZW9mIEFycmF5XG4gICAgPyByZWFjdEVsZW1lbnQuYXBwbHkobnVsbCwgW3R5cGUsIG5ld1Byb3BzXS5jb25jYXQobmV3Q2hpbGRyZW4pKVxuICAgIDogbmV3Q2hpbGRyZW5cbiAgICA/IHJlYWN0RWxlbWVudCh0eXBlLCBuZXdQcm9wcywgbmV3Q2hpbGRyZW4pXG4gICAgOiByZWFjdEVsZW1lbnQodHlwZSwgbmV3UHJvcHMpXG59XG5cbi8vXG5cbmZ1bmN0aW9uIGluY1ZhbHVlcyhzZWxmKSB7IHNlbGYudmFsdWVzICs9IDEgfVxuZnVuY3Rpb24gb2ZmQW55MShoYW5kbGVycywgb2JzKSB7IG9icy5vZmZBbnkoaGFuZGxlcnMpIH1cbmZ1bmN0aW9uIG9mZkFueShoYW5kbGVycywgb2JzKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVycy5wb3AoKVxuICBpZiAoaGFuZGxlcilcbiAgICBvYnMub2ZmQW55KGhhbmRsZXIpXG59XG5mdW5jdGlvbiBvbkFueTEoaGFuZGxlcnMsIG9icykgeyBvYnMub25BbnkoaGFuZGxlcnMpIH1cbmZ1bmN0aW9uIG9uQW55KHNlbGYsIG9icykge1xuICBjb25zdCBoYW5kbGVyID0gZSA9PiBzZWxmLmRvSGFuZGxlTihoYW5kbGVyLCBlKVxuICBzZWxmLmhhbmRsZXJzLnB1c2goaGFuZGxlcilcbiAgb2JzLm9uQW55KGhhbmRsZXIpXG59XG5cbmZ1bmN0aW9uIEZyb21DbGFzcyhwcm9wcykge1xuICBMaWZ0ZWRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcylcbiAgdGhpcy52YWx1ZXMgPSB0aGlzXG4gIHRoaXMuaGFuZGxlcnMgPSBudWxsXG59XG5cbmluaGVyaXQoRnJvbUNsYXNzLCBMaWZ0ZWRDb21wb25lbnQsIHtcbiAgZG9VbnN1YnNjcmliZSgpIHtcbiAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNcbiAgICBpZiAoaGFuZGxlcnMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgZm9yRWFjaCh0aGlzLnByb3BzLCBoYW5kbGVycywgb2ZmQW55MSlcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXJzKSB7XG4gICAgICBmb3JFYWNoKHRoaXMucHJvcHMsIGhhbmRsZXJzLnJldmVyc2UoKSwgb2ZmQW55KVxuICAgIH1cbiAgfSxcbiAgZG9TdWJzY3JpYmUocHJvcHMpIHtcbiAgICB0aGlzLnZhbHVlcyA9IDBcbiAgICBmb3JFYWNoKHByb3BzLCB0aGlzLCBpbmNWYWx1ZXMpXG4gICAgY29uc3QgbiA9IHRoaXMudmFsdWVzXG5cbiAgICBzd2l0Y2ggKG4pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBhcnJheTBcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHRoaXNcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBlID0+IHRoaXMuZG9IYW5kbGUxKGUpXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVyc1xuICAgICAgICBmb3JFYWNoKHByb3BzLCBoYW5kbGVycywgb25BbnkxKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBBcnJheShuKS5maWxsKHRoaXMpXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXVxuICAgICAgICBmb3JFYWNoKHByb3BzLCB0aGlzLCBvbkFueSlcbiAgICB9XG4gIH0sXG4gIGRvSGFuZGxlMShlKSB7XG4gICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgIGNhc2UgVkFMVUU6IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyAhPT0gdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlXG4gICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgRVJST1I6IHRocm93IGUudmFsdWVcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbdGhpcy52YWx1ZXNdXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkb0hhbmRsZU4oaGFuZGxlciwgZSkge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1xuICAgIGxldCBpZHg9MFxuICAgIHdoaWxlIChoYW5kbGVyc1tpZHhdICE9PSBoYW5kbGVyKVxuICAgICAgKytpZHhcbiAgICBzd2l0Y2ggKGUudHlwZSkge1xuICAgICAgY2FzZSBWQUxVRToge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy52YWx1ZXNcbiAgICAgICAgaWYgKHZhbHVlc1tpZHhdICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHZhbHVlc1tpZHhdID0gdmFsdWVcbiAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBFUlJPUjogdGhyb3cgZS52YWx1ZVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBoYW5kbGVyc1tpZHhdID0gbnVsbFxuICAgICAgICBjb25zdCBuID0gaGFuZGxlcnMubGVuZ3RoXG4gICAgICAgIGlmIChuICE9PSB0aGlzLnZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaSA8IG47ICsraSlcbiAgICAgICAgICBpZiAoaGFuZGxlcnNbaV0pXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWVzXG4gICAgICBpZiAodmFsdWUgPT09IHRoaXMpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gcmVuZGVyKHRoaXMucHJvcHMsIFt2YWx1ZV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudmFsdWVzXG4gICAgICBmb3IgKGxldCBpPTAsIG49dmFsdWVzLmxlbmd0aDsgaTxuOyArK2kpXG4gICAgICAgIGlmICh2YWx1ZXNbaV0gPT09IHRoaXMpXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiByZW5kZXIodGhpcy5wcm9wcywgdmFsdWVzKVxuICAgIH1cbiAgfVxufSlcblxuLy9cblxuZnVuY3Rpb24gaGFzT2JzSW5Qcm9wcyhwcm9wcykge1xuICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgIGNvbnN0IHZhbCA9IHByb3BzW2tleV1cbiAgICBpZiAoaXNPYnModmFsKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKENISUxEUkVOID09PSBrZXkpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbCkpXG4gICAgICAgIGZvciAobGV0IGk9MCwgbj12YWwubGVuZ3RoOyBpPG47ICsraSlcbiAgICAgICAgICBpZiAoaXNPYnModmFsW2ldKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChTVFlMRSA9PT0ga2V5KSB7XG4gICAgICBmb3IgKGNvbnN0IGsgaW4gdmFsKVxuICAgICAgICBpZiAoaXNPYnModmFsW2tdKSlcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gaGFzT2JzSW5BcmdzKGFyZ3MpIHtcbiAgZm9yIChsZXQgaT0yLCBuPWFyZ3MubGVuZ3RoOyBpPG47ICsraSkge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV1cbiAgICBpZiAoaXNBcnJheShhcmcpKSB7XG4gICAgICBmb3IgKGxldCBqPTAsIG09YXJnLmxlbmd0aDsgajxtOyArK2opXG4gICAgICAgIGlmIChpc09icyhhcmdbal0pKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09icyhhcmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzT2JzSW5Qcm9wcyhhcmdzWzFdKVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJQcm9wcyh0eXBlLCBwcm9wcykge1xuICBjb25zdCBuZXdQcm9wcyA9IHtcIiQkdHlwZVwiOiB0eXBlfVxuICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgIGNvbnN0IHZhbCA9IHByb3BzW2tleV1cbiAgICBpZiAoXCJyZWZcIiA9PT0ga2V5KVxuICAgICAgbmV3UHJvcHNbRERfUkVGXSA9IHZhbFxuICAgIGVsc2UgaWYgKEtBUkVUX0xJRlQgIT09IGtleSlcbiAgICAgIG5ld1Byb3BzW2tleV0gPSB2YWxcbiAgfVxuICByZXR1cm4gbmV3UHJvcHNcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHNbS0FSRVRfTElGVF0gPT09IHRydWVcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCguLi5hcmdzKSB7XG4gIGNvbnN0IHR5cGUgPSBhcmdzWzBdXG4gIGNvbnN0IHByb3BzID0gYXJnc1sxXVxuICBpZiAoaXNTdHJpbmcodHlwZSkgfHwgaGFzTGlmdChwcm9wcykpIHtcbiAgICBpZiAoaGFzT2JzSW5BcmdzKGFyZ3MpKSB7XG4gICAgICBhcmdzWzFdID0gZmlsdGVyUHJvcHModHlwZSwgcHJvcHMpXG4gICAgICBhcmdzWzBdID0gRnJvbUNsYXNzXG4gICAgfSBlbHNlIGlmIChoYXNMaWZ0KHByb3BzKSkge1xuICAgICAgYXJnc1sxXSA9IGRpc3NvY1BhcnRpYWxVKEtBUkVUX0xJRlQsIHByb3BzKSB8fCBvYmplY3QwXG4gICAgfVxuICB9XG4gIHJldHVybiByZWFjdEVsZW1lbnQoLi4uYXJncylcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzb2NQYXJ0aWFsVShcImNyZWF0ZUVsZW1lbnRcIiwgY3JlYXRlRWxlbWVudCwgUmVhY3QpXG5cbi8vXG5cbmV4cG9ydCBjb25zdCBmcm9tQ2xhc3MgPSBDbGFzcyA9PiBwcm9wcyA9PlxuICByZWFjdEVsZW1lbnQoRnJvbUNsYXNzLCBmaWx0ZXJQcm9wcyhDbGFzcywgcHJvcHMpKVxuIl19
{
"name": "karet",
"version": "0.2.7",
"description": "Concise reactive components by embedding Kefir into React VDOM",
"version": "1.0.0",
"description": "Karet is a library that allows you to embed Kefir observables into React VDOM",
"main": "lib/karet.js",

@@ -18,7 +18,8 @@ "scripts": {

"keywords": [
"react",
"jsx",
"dom",
"kefir",
"reactive"
"observables",
"react",
"reactive",
"vdom"
],

@@ -39,3 +40,4 @@ "license": "MIT",

"codecov": "^1.0.1",
"eslint": "^3.14.0",
"eslint": "^3.15.0",
"eslint-plugin-babel": "^4.0.1",
"eslint-plugin-react": "^6.9.0",

@@ -48,3 +50,3 @@ "mocha": "^3.2.0",

"dependencies": {
"infestines": "^0.4.0",
"infestines": "^0.4.1",
"kefir": "^3.2.1",

@@ -51,0 +53,0 @@ "react": "^15.0.1"

@@ -5,8 +5,32 @@ [ [≡](#contents) | [Tutorial](#tutorial) | [Reference](#reference) ]

Karet is an experimental library that allows you to
Karet is a library that allows you to
embed [Kefir](http://rpominov.github.io/kefir/) observables
into [React](https://facebook.github.io/react/) Virtual DOM.
into [React](https://facebook.github.io/react/) Virtual DOM. Embedding
observables into VDOM has the following benefits:
* It allows you to use
only
[functional components](https://facebook.github.io/react/docs/components-and-props.html#functional-and-class-components),
because you can then use observables for managing state
and [`ref`](https://facebook.github.io/react/docs/refs-and-the-dom.html) for
component lifetime, leading to more **_concise code_**.
* It helps you to use React in an **_algorithmically efficient_** way:
* The body of a functional component is evaluated only once each time the
component is mounted.
* This also helps you to avoid issues such as
the
[gotcha with ref](https://facebook.github.io/react/docs/refs-and-the-dom.html#caveats).
* Only elements that contain embedded observables are rerendered when changes
are pushed through observables. An update to a deeply nested VDOM element
can be an O(1) operation.
[![npm version](https://badge.fury.io/js/karet.svg)](http://badge.fury.io/js/karet) [![Build Status](https://travis-ci.org/calmm-js/karet.svg?branch=master)](https://travis-ci.org/calmm-js/karet) [![Code Coverage](https://img.shields.io/codecov/c/github/calmm-js/karet/master.svg)](https://codecov.io/github/calmm-js/karet?branch=master) [![](https://david-dm.org/calmm-js/karet.svg)](https://david-dm.org/calmm-js/karet) [![](https://david-dm.org/calmm-js/karet/dev-status.svg)](https://david-dm.org/calmm-js/karet?type=dev)
Using Karet couldn't be simpler. You just `import React from "karet"` and you
are good to go.
[![npm version](https://badge.fury.io/js/karet.svg)](http://badge.fury.io/js/karet)
[![Gitter](https://img.shields.io/gitter/room/calmm-js/chat.js.svg)](https://gitter.im/calmm-js/chat)
[![Build Status](https://travis-ci.org/calmm-js/karet.svg?branch=master)](https://travis-ci.org/calmm-js/karet)
[![Code Coverage](https://img.shields.io/codecov/c/github/calmm-js/karet/master.svg)](https://codecov.io/github/calmm-js/karet?branch=master)
[![](https://david-dm.org/calmm-js/karet.svg)](https://david-dm.org/calmm-js/karet)
[![](https://david-dm.org/calmm-js/karet/dev-status.svg)](https://david-dm.org/calmm-js/karet?type=dev)
## Contents

@@ -107,3 +131,3 @@

`fromClass` allows one the lift a React component.
`fromClass` allows one to lift a React component.

@@ -110,0 +134,0 @@ For example:

@@ -9,2 +9,3 @@ import React from "react"

isArray,
isString,
object0

@@ -92,18 +93,2 @@ } from "infestines"

function hasObs(props) {
for (const key in props) {
const val = props[key]
if (isObs(val)) {
return true
} else if (STYLE === key) {
for (const k in val) {
const valK = val[k]
if (isObs(valK))
return true
}
}
}
return false
}
function forEach(props, extra, fn) {

@@ -319,3 +304,22 @@ for (const key in props) {

function hasAnyObs(props, args) {
function hasObsInProps(props) {
for (const key in props) {
const val = props[key]
if (isObs(val)) {
return true
} else if (CHILDREN === key) {
if (isArray(val))
for (let i=0, n=val.length; i<n; ++i)
if (isObs(val[i]))
return true
} else if (STYLE === key) {
for (const k in val)
if (isObs(val[k]))
return true
}
}
return false
}
function hasObsInArgs(args) {
for (let i=2, n=args.length; i<n; ++i) {

@@ -331,3 +335,3 @@ const arg = args[i]

}
return hasObs(args[1])
return hasObsInProps(args[1])
}

@@ -347,13 +351,14 @@

function hasLift(props) {
return props && props[KARET_LIFT] === true
}
function createElement(...args) {
const type = args[0]
const props = args[1]
if (typeof type === "string" && hasAnyObs(props, args)) {
args[1] = filterProps(type, props)
args[0] = FromClass
} else if (props && props[KARET_LIFT] === true) {
if (hasAnyObs(props, args)) {
if (isString(type) || hasLift(props)) {
if (hasObsInArgs(args)) {
args[1] = filterProps(type, props)
args[0] = FromClass
} else {
} else if (hasLift(props)) {
args[1] = dissocPartialU(KARET_LIFT, props) || object0

@@ -360,0 +365,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc