proxyequal
Version:
A proxy based usage tracking and comparison
60 lines (52 loc) • 1.62 kB
JavaScript
import { getProxyKey, proxyfy } from "./proxyEqual";
export var proxyObjectRest = function proxyObjectRest(state, excludingKeys) {
var _getProxyKey = getProxyKey(state),
suffix = _getProxyKey.suffix,
fingerPrint = _getProxyKey.fingerPrint,
report = _getProxyKey.report,
ProxyMap = _getProxyKey.ProxyMap,
control = _getProxyKey.control;
var results = [];
var excludeMap = {};
excludingKeys.forEach(function (k) {
results.push(state[k]);
excludeMap[k] = true;
});
control.seal();
var rest = {};
Object.keys(state).forEach(function (k) {
if (!excludeMap[k]) {
rest[k] = state[k];
}
});
control.unseal();
return [].concat(results, [proxyfy(rest, report, suffix, fingerPrint, ProxyMap, control)]);
};
export var proxyArrayRest = function proxyArrayRest(state, fromIndex) {
var _getProxyKey2 = getProxyKey(state),
suffix = _getProxyKey2.suffix,
fingerPrint = _getProxyKey2.fingerPrint,
report = _getProxyKey2.report,
ProxyMap = _getProxyKey2.ProxyMap,
control = _getProxyKey2.control;
var results = [];
var rest = [];
var l = state.length;
var i;
for (i = 0; i < l && i < fromIndex; ++i) {
results.push(state[i]);
}
control.seal();
for (; i < l; ++i) {
rest.push(state[i]);
}
control.unseal();
var prefixedReport = function prefixedReport(prefix, key) {
if (key === String(+key)) {
report(prefix, +key + fromIndex);
} else {
report(prefix, key);
}
};
return [].concat(results, [proxyfy(rest, prefixedReport, suffix, fingerPrint, ProxyMap, control)]);
};