rpcchannel
Version:
Easy RPC with permission controls
129 lines (104 loc) • 10.8 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.WildcardEntryKey = exports.DefaultEntryKey = exports.AddressMap = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _utils = require("./utils");
/**
* A mapping of multi-part addresses (using the Java naming convention) to any
* type. Used extensively by the RPC channel.
* @author Nathan Pennie <kb1rd@kb1rd.net>
*/
/** */
var DefaultEntryKey = Symbol('DefaultEntry');
exports.DefaultEntryKey = DefaultEntryKey;
var WildcardEntryKey = Symbol('WildcardEntry');
exports.WildcardEntryKey = WildcardEntryKey;
function getFromAddrMapFlat(map, addr, wc_values) {
var part = addr.shift();
if (!part) {
return map[DefaultEntryKey];
}
var data = undefined;
if (map[part]) {
data = getFromAddrMapFlat(map[part], addr, wc_values);
}
if (!data && map[WildcardEntryKey]) {
if (wc_values) {
wc_values.push(part);
}
data = getFromAddrMapFlat(map[WildcardEntryKey], addr, wc_values);
}
addr.unshift(part);
return data;
}
var AddressMap = /*#__PURE__*/function () {
function AddressMap() {
(0, _classCallCheck2["default"])(this, AddressMap);
(0, _defineProperty2["default"])(this, "table", {});
}
(0, _createClass2["default"])(AddressMap, [{
key: "put",
value: function put(addr, value) {
var last_table = this.table;
addr.forEach(function (part) {
var key = part || WildcardEntryKey;
if ((0, _utils.isUndef)(last_table[key])) {
last_table[key] = {};
}
last_table = last_table[key];
}); // TODO: Delete parents if empty
if ((0, _utils.isUndef)(value)) {
delete last_table[DefaultEntryKey];
} else {
last_table[DefaultEntryKey] = value;
}
}
}, {
key: "get",
value: function get(addr, wc_values) {
var value = getFromAddrMapFlat(this.table, addr, wc_values);
return (0, _utils.isUndef)(value) ? this.table[DefaultEntryKey] : value;
}
}, {
key: "clear",
value: function clear() {
for (var _i = 0, _Object$keys = Object.keys(this.table); _i < _Object$keys.length; _i++) {
var k = _Object$keys[_i];
delete this.table[k];
}
}
}, {
key: "toString",
value: function toString() {
var entries = [];
var addr_str = [];
function traverse(map) {
if (map[DefaultEntryKey]) {
entries.push("".concat(addr_str.join('.'), ": ").concat(map[DefaultEntryKey]));
}
if (map[WildcardEntryKey]) {
addr_str.push('*');
traverse(map[WildcardEntryKey]);
addr_str.pop();
}
Object.keys(map).forEach(function (key) {
addr_str.push("[".concat(key, "]"));
traverse(map[key]);
addr_str.pop();
});
}
traverse(this.table);
return "AddrMap [\n".concat(entries.map(function (s) {
return ' ' + s;
}).join('\n'), "\n]");
}
}]);
return AddressMap;
}();
exports.AddressMap = AddressMap;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGRybWFwLnRzIl0sIm5hbWVzIjpbIkRlZmF1bHRFbnRyeUtleSIsIlN5bWJvbCIsIldpbGRjYXJkRW50cnlLZXkiLCJnZXRGcm9tQWRkck1hcEZsYXQiLCJtYXAiLCJhZGRyIiwid2NfdmFsdWVzIiwicGFydCIsInNoaWZ0IiwiZGF0YSIsInVuZGVmaW5lZCIsInB1c2giLCJ1bnNoaWZ0IiwiQWRkcmVzc01hcCIsInZhbHVlIiwibGFzdF90YWJsZSIsInRhYmxlIiwiZm9yRWFjaCIsImtleSIsIk9iamVjdCIsImtleXMiLCJrIiwiZW50cmllcyIsImFkZHJfc3RyIiwidHJhdmVyc2UiLCJqb2luIiwicG9wIiwicyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBT0E7O0FBUEE7Ozs7OztBQUtBO0FBT0EsSUFBTUEsZUFBZSxHQUFHQyxNQUFNLENBQUMsY0FBRCxDQUE5Qjs7QUFDQSxJQUFNQyxnQkFBZ0IsR0FBR0QsTUFBTSxDQUFDLGVBQUQsQ0FBL0I7OztBQVFBLFNBQVNFLGtCQUFULENBQ0VDLEdBREYsRUFFRUMsSUFGRixFQUdFQyxTQUhGLEVBSWlCO0FBQ2YsTUFBTUMsSUFBSSxHQUFHRixJQUFJLENBQUNHLEtBQUwsRUFBYjs7QUFFQSxNQUFJLENBQUNELElBQUwsRUFBVztBQUNULFdBQU9ILEdBQUcsQ0FBQ0osZUFBRCxDQUFWO0FBQ0Q7O0FBRUQsTUFBSVMsSUFBbUIsR0FBR0MsU0FBMUI7O0FBQ0EsTUFBSU4sR0FBRyxDQUFDRyxJQUFELENBQVAsRUFBZTtBQUNiRSxJQUFBQSxJQUFJLEdBQUdOLGtCQUFrQixDQUFDQyxHQUFHLENBQUNHLElBQUQsQ0FBSixFQUFZRixJQUFaLEVBQWtCQyxTQUFsQixDQUF6QjtBQUNEOztBQUNELE1BQUksQ0FBQ0csSUFBRCxJQUFTTCxHQUFHLENBQUNGLGdCQUFELENBQWhCLEVBQW9DO0FBQ2xDLFFBQUlJLFNBQUosRUFBZTtBQUNiQSxNQUFBQSxTQUFTLENBQUNLLElBQVYsQ0FBZUosSUFBZjtBQUNEOztBQUNERSxJQUFBQSxJQUFJLEdBQUdOLGtCQUFrQixDQUN2QkMsR0FBRyxDQUFDRixnQkFBRCxDQURvQixFQUV2QkcsSUFGdUIsRUFHdkJDLFNBSHVCLENBQXpCO0FBS0Q7O0FBRURELEVBQUFBLElBQUksQ0FBQ08sT0FBTCxDQUFhTCxJQUFiO0FBQ0EsU0FBT0UsSUFBUDtBQUNEOztJQUVLSSxVOzs7b0RBQ3VCLEU7Ozs7O3dCQUN2QlIsSSxFQUFrQ1MsSyxFQUE0QjtBQUNoRSxVQUFJQyxVQUFVLEdBQUcsS0FBS0MsS0FBdEI7QUFDQVgsTUFBQUEsSUFBSSxDQUFDWSxPQUFMLENBQWEsVUFBQ1YsSUFBRCxFQUFVO0FBQ3JCLFlBQU1XLEdBQUcsR0FBR1gsSUFBSSxJQUFJTCxnQkFBcEI7O0FBQ0EsWUFBSSxvQkFBUWEsVUFBVSxDQUFDRyxHQUFELENBQWxCLENBQUosRUFBOEI7QUFDNUJILFVBQUFBLFVBQVUsQ0FBQ0csR0FBRCxDQUFWLEdBQWtCLEVBQWxCO0FBQ0Q7O0FBQ0RILFFBQUFBLFVBQVUsR0FBR0EsVUFBVSxDQUFDRyxHQUFELENBQXZCO0FBQ0QsT0FORCxFQUZnRSxDQVNoRTs7QUFDQSxVQUFJLG9CQUFRSixLQUFSLENBQUosRUFBb0I7QUFDbEIsZUFBT0MsVUFBVSxDQUFDZixlQUFELENBQWpCO0FBQ0QsT0FGRCxNQUVPO0FBQ0xlLFFBQUFBLFVBQVUsQ0FBQ2YsZUFBRCxDQUFWLEdBQThCYyxLQUE5QjtBQUNEO0FBQ0Y7Ozt3QkFFR1QsSSxFQUEwQkMsUyxFQUFxQztBQUNqRSxVQUFNUSxLQUFLLEdBQUdYLGtCQUFrQixDQUFDLEtBQUthLEtBQU4sRUFBYVgsSUFBYixFQUFtQkMsU0FBbkIsQ0FBaEM7QUFDQSxhQUFPLG9CQUFRUSxLQUFSLElBQWlCLEtBQUtFLEtBQUwsQ0FBV2hCLGVBQVgsQ0FBakIsR0FBK0NjLEtBQXREO0FBQ0Q7Ozs0QkFFYTtBQUNaLHNDQUFnQkssTUFBTSxDQUFDQyxJQUFQLENBQVksS0FBS0osS0FBakIsQ0FBaEIsa0NBQXlDO0FBQXBDLFlBQU1LLENBQUMsbUJBQVA7QUFDSCxlQUFPLEtBQUtMLEtBQUwsQ0FBV0ssQ0FBWCxDQUFQO0FBQ0Q7QUFDRjs7OytCQUVrQjtBQUNqQixVQUFNQyxPQUFpQixHQUFHLEVBQTFCO0FBQ0EsVUFBTUMsUUFBa0IsR0FBRyxFQUEzQjs7QUFDQSxlQUFTQyxRQUFULENBQWtCcEIsR0FBbEIsRUFBMEM7QUFDeEMsWUFBSUEsR0FBRyxDQUFDSixlQUFELENBQVAsRUFBMEI7QUFDeEJzQixVQUFBQSxPQUFPLENBQUNYLElBQVIsV0FBZ0JZLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjLEdBQWQsQ0FBaEIsZUFBdUNyQixHQUFHLENBQUNKLGVBQUQsQ0FBMUM7QUFDRDs7QUFDRCxZQUFJSSxHQUFHLENBQUNGLGdCQUFELENBQVAsRUFBMkI7QUFDekJxQixVQUFBQSxRQUFRLENBQUNaLElBQVQsQ0FBYyxHQUFkO0FBQ0FhLFVBQUFBLFFBQVEsQ0FBQ3BCLEdBQUcsQ0FBQ0YsZ0JBQUQsQ0FBSixDQUFSO0FBQ0FxQixVQUFBQSxRQUFRLENBQUNHLEdBQVQ7QUFDRDs7QUFDRFAsUUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVloQixHQUFaLEVBQWlCYSxPQUFqQixDQUF5QixVQUFDQyxHQUFELEVBQVM7QUFDaENLLFVBQUFBLFFBQVEsQ0FBQ1osSUFBVCxZQUFrQk8sR0FBbEI7QUFDQU0sVUFBQUEsUUFBUSxDQUFDcEIsR0FBRyxDQUFDYyxHQUFELENBQUosQ0FBUjtBQUNBSyxVQUFBQSxRQUFRLENBQUNHLEdBQVQ7QUFDRCxTQUpEO0FBS0Q7O0FBQ0RGLE1BQUFBLFFBQVEsQ0FBQyxLQUFLUixLQUFOLENBQVI7QUFDQSxrQ0FBcUJNLE9BQU8sQ0FBQ2xCLEdBQVIsQ0FBWSxVQUFDdUIsQ0FBRDtBQUFBLGVBQU8sT0FBT0EsQ0FBZDtBQUFBLE9BQVosRUFBNkJGLElBQTdCLENBQWtDLElBQWxDLENBQXJCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgbWFwcGluZyBvZiBtdWx0aS1wYXJ0IGFkZHJlc3NlcyAodXNpbmcgdGhlIEphdmEgbmFtaW5nIGNvbnZlbnRpb24pIHRvIGFueVxuICogdHlwZS4gVXNlZCBleHRlbnNpdmVseSBieSB0aGUgUlBDIGNoYW5uZWwuXG4gKiBAYXV0aG9yIE5hdGhhbiBQZW5uaWUgPGtiMXJkQGtiMXJkLm5ldD5cbiAqL1xuLyoqICovXG5cbmltcG9ydCB7IGlzVW5kZWYgfSBmcm9tICcuL3V0aWxzJ1xuXG50eXBlIE11bHRpc3RyaW5nQWRkcmVzcyA9IHN0cmluZ1tdXG50eXBlIFdpbGRjYXJkTXVsdGlzdHJpbmdBZGRyZXNzID0gKHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpW11cblxuY29uc3QgRGVmYXVsdEVudHJ5S2V5ID0gU3ltYm9sKCdEZWZhdWx0RW50cnknKVxuY29uc3QgV2lsZGNhcmRFbnRyeUtleSA9IFN5bWJvbCgnV2lsZGNhcmRFbnRyeScpXG5cbnR5cGUgQWRkcmVzc01hcEZsYXQ8VD4gPSB7XG4gIFtrZXk6IHN0cmluZ106IEFkZHJlc3NNYXBGbGF0PFQ+XG4gIFtXaWxkY2FyZEVudHJ5S2V5XT86IEFkZHJlc3NNYXBGbGF0PFQ+XG4gIFtEZWZhdWx0RW50cnlLZXldPzogVFxufVxuXG5mdW5jdGlvbiBnZXRGcm9tQWRkck1hcEZsYXQ8VD4oXG4gIG1hcDogQWRkcmVzc01hcEZsYXQ8VD4sXG4gIGFkZHI6IE11bHRpc3RyaW5nQWRkcmVzcyxcbiAgd2NfdmFsdWVzPzogc3RyaW5nW11cbik6IFQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJ0ID0gYWRkci5zaGlmdCgpXG5cbiAgaWYgKCFwYXJ0KSB7XG4gICAgcmV0dXJuIG1hcFtEZWZhdWx0RW50cnlLZXldXG4gIH1cblxuICBsZXQgZGF0YTogVCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBpZiAobWFwW3BhcnRdKSB7XG4gICAgZGF0YSA9IGdldEZyb21BZGRyTWFwRmxhdChtYXBbcGFydF0sIGFkZHIsIHdjX3ZhbHVlcylcbiAgfVxuICBpZiAoIWRhdGEgJiYgbWFwW1dpbGRjYXJkRW50cnlLZXldKSB7XG4gICAgaWYgKHdjX3ZhbHVlcykge1xuICAgICAgd2NfdmFsdWVzLnB1c2gocGFydClcbiAgICB9XG4gICAgZGF0YSA9IGdldEZyb21BZGRyTWFwRmxhdChcbiAgICAgIG1hcFtXaWxkY2FyZEVudHJ5S2V5XSBhcyBBZGRyZXNzTWFwRmxhdDxUPixcbiAgICAgIGFkZHIsXG4gICAgICB3Y192YWx1ZXNcbiAgICApXG4gIH1cblxuICBhZGRyLnVuc2hpZnQocGFydClcbiAgcmV0dXJuIGRhdGFcbn1cblxuY2xhc3MgQWRkcmVzc01hcDxUPiB7XG4gIHRhYmxlOiBBZGRyZXNzTWFwRmxhdDxUPiA9IHt9XG4gIHB1dChhZGRyOiBXaWxkY2FyZE11bHRpc3RyaW5nQWRkcmVzcywgdmFsdWU6IFQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBsZXQgbGFzdF90YWJsZSA9IHRoaXMudGFibGVcbiAgICBhZGRyLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHBhcnQgfHwgV2lsZGNhcmRFbnRyeUtleVxuICAgICAgaWYgKGlzVW5kZWYobGFzdF90YWJsZVtrZXldKSkge1xuICAgICAgICBsYXN0X3RhYmxlW2tleV0gPSB7fVxuICAgICAgfVxuICAgICAgbGFzdF90YWJsZSA9IGxhc3RfdGFibGVba2V5XSBhcyBBZGRyZXNzTWFwRmxhdDxUPlxuICAgIH0pXG4gICAgLy8gVE9ETzogRGVsZXRlIHBhcmVudHMgaWYgZW1wdHlcbiAgICBpZiAoaXNVbmRlZih2YWx1ZSkpIHtcbiAgICAgIGRlbGV0ZSBsYXN0X3RhYmxlW0RlZmF1bHRFbnRyeUtleV1cbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdF90YWJsZVtEZWZhdWx0RW50cnlLZXldID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBnZXQoYWRkcjogTXVsdGlzdHJpbmdBZGRyZXNzLCB3Y192YWx1ZXM/OiBzdHJpbmdbXSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RnJvbUFkZHJNYXBGbGF0KHRoaXMudGFibGUsIGFkZHIsIHdjX3ZhbHVlcylcbiAgICByZXR1cm4gaXNVbmRlZih2YWx1ZSkgPyB0aGlzLnRhYmxlW0RlZmF1bHRFbnRyeUtleV0gOiB2YWx1ZVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudGFibGUpKSB7XG4gICAgICBkZWxldGUgdGhpcy50YWJsZVtrXVxuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW50cmllczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGFkZHJfc3RyOiBzdHJpbmdbXSA9IFtdXG4gICAgZnVuY3Rpb24gdHJhdmVyc2UobWFwOiBBZGRyZXNzTWFwRmxhdDxUPikge1xuICAgICAgaWYgKG1hcFtEZWZhdWx0RW50cnlLZXldKSB7XG4gICAgICAgIGVudHJpZXMucHVzaChgJHthZGRyX3N0ci5qb2luKCcuJyl9OiAke21hcFtEZWZhdWx0RW50cnlLZXldfWApXG4gICAgICB9XG4gICAgICBpZiAobWFwW1dpbGRjYXJkRW50cnlLZXldKSB7XG4gICAgICAgIGFkZHJfc3RyLnB1c2goJyonKVxuICAgICAgICB0cmF2ZXJzZShtYXBbV2lsZGNhcmRFbnRyeUtleV0gYXMgQWRkcmVzc01hcEZsYXQ8VD4pXG4gICAgICAgIGFkZHJfc3RyLnBvcCgpXG4gICAgICB9XG4gICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBhZGRyX3N0ci5wdXNoKGBbJHtrZXl9XWApXG4gICAgICAgIHRyYXZlcnNlKG1hcFtrZXldKVxuICAgICAgICBhZGRyX3N0ci5wb3AoKVxuICAgICAgfSlcbiAgICB9XG4gICAgdHJhdmVyc2UodGhpcy50YWJsZSlcbiAgICByZXR1cm4gYEFkZHJNYXAgW1xcbiR7ZW50cmllcy5tYXAoKHMpID0+ICcgICcgKyBzKS5qb2luKCdcXG4nKX1cXG5dYFxuICB9XG59XG5cbmV4cG9ydCB7XG4gIE11bHRpc3RyaW5nQWRkcmVzcyxcbiAgV2lsZGNhcmRNdWx0aXN0cmluZ0FkZHJlc3MsXG4gIEFkZHJlc3NNYXAsXG4gIERlZmF1bHRFbnRyeUtleSxcbiAgV2lsZGNhcmRFbnRyeUtleVxufVxuIl19