UNPKG

type-r2

Version:

Serializable, validated, and observable data layer for modern JS applications

42 lines 1.68 kB
var referenceMask = /\^|(store\.[^.]+)|([^.]+)/g; var CompiledReference = (function () { function CompiledReference(reference, splitTail) { if (splitTail === void 0) { splitTail = false; } var path = reference .match(referenceMask) .map(function (key) { if (key === '^' || key === 'owner') return 'getOwner()'; if (key[0] === '~') return "getStore().get(\"".concat(key.substr(1), "\")"); if (key.indexOf('store.') === 0) return "getStore().get(\"".concat(key.substr(6), "\")"); return key; }); this.tail = splitTail && path.pop(); this.local = !path.length; this.resolve = new Function('self', "\n var v = self.".concat(path.shift(), ";\n \n ").concat(path.map(function (x) { return "\n v = v && v.".concat(x, ";\n "); }).join(''), "\n\n return v;\n ")); } return CompiledReference; }()); export { CompiledReference }; export function resolveReference(root, reference, action) { var path = reference.match(referenceMask), skip = path.length - 1; var self = root; for (var i = 0; i < skip; i++) { var key = path[i]; switch (key) { case '~': self = self.getStore(); break; case '^': self = self.getOwner(); break; default: self = self.get(key); } if (!self) return; } return action(self, path[skip]); } //# sourceMappingURL=traversable.js.map