"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); 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 _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var SPLIT = '__@field_split__'; /** * Convert name path into string to fast the fetch speed of Map. */ function normalize(namePath) { return namePath.map(function (cell) { return "".concat((0, _typeof2.default)(cell), ":").concat(cell); }) // Magic split .join(SPLIT); } /** * NameMap like a `Map` but accepts `string[]` as key. */ var NameMap = /*#__PURE__*/function () { function NameMap() { (0, _classCallCheck2.default)(this, NameMap); (0, _defineProperty2.default)(this, "kvs", new Map()); } (0, _createClass2.default)(NameMap, [{ key: "set", value: function set(key, value) { this.kvs.set(normalize(key), value); } }, { key: "get", value: function get(key) { return this.kvs.get(normalize(key)); } }, { key: "update", value: function update(key, updater) { var origin = this.get(key); var next = updater(origin); if (!next) { this.delete(key); } else { this.set(key, next); } } }, { key: "delete", value: function _delete(key) { this.kvs.delete(normalize(key)); } // Since we only use this in test, let simply realize this }, { key: "map", value: function map(callback) { return (0, _toConsumableArray2.default)(this.kvs.entries()).map(function (_ref) { var _ref2 = (0, _slicedToArray2.default)(_ref, 2), key = _ref2[0], value = _ref2[1]; var cells = key.split(SPLIT); return callback({ key: cells.map(function (cell) { var _cell$match = cell.match(/^([^:]*):(.*)$/), _cell$match2 = (0, _slicedToArray2.default)(_cell$match, 3), type = _cell$match2[1], unit = _cell$match2[2]; return type === 'number' ? Number(unit) : unit; }), value: value }); }); } }, { key: "toJSON", value: function toJSON() { var json = {}; this.map(function (_ref3) { var key = _ref3.key, value = _ref3.value; json[key.join('.')] = value; return null; }); return json; } }]); return NameMap; }(); var _default = NameMap; exports.default = _default;