@graphistry/falcor-react-schema
Version:
97 lines (78 loc) • 3.13 kB
JavaScript
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = _assign2.default || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = memoizeQueryies;
var _pegjsUtil = require('pegjs-util');
var _toPaths = require('@graphistry/falcor-query-syntax/lib/toPaths');
var _toPaths2 = _interopRequireDefault(_toPaths);
var _toFlatBuffer = require('@graphistry/falcor-path-utils/lib/toFlatBuffer');
var _toFlatBuffer2 = _interopRequireDefault(_toFlatBuffer);
var _flatBufferToPaths = require('@graphistry/falcor-path-utils/lib/flatBufferToPaths');
var _flatBufferToPaths2 = _interopRequireDefault(_flatBufferToPaths);
var _computeFlatBufferHash = require('@graphistry/falcor-path-utils/lib/computeFlatBufferHash');
var _computeFlatBufferHash2 = _interopRequireDefault(_computeFlatBufferHash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function memoizeQueryies() {
var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;
var count = 0,
map = {},
lru = {};
return function memoizedQuerySyntax(query) {
var entry = map[query];
if (entry === undefined && ++count > limit) {
delete map[lru.tail.query];
splice(lru, lru.tail);
}
if (!entry || !entry.error) {
var result = (0, _pegjsUtil.parse)(_toPaths2.default.Parser, query);
if (!result.error) {
// Turn the computed AST into paths, then turn it back into an
// AST so we collapse adjacent nodes.
result.ast = (0, _computeFlatBufferHash2.default)((0, _toFlatBuffer2.default)((0, _flatBufferToPaths2.default)(result.ast)));
}
entry = map[query] = _extends({ query: query }, result);
promote(lru, entry);
}
return entry;
};
}
function promote(lru, entry) {
var head = lru.head;
if (!head) {
lru.head = lru.tail = entry;
return;
} else if (head === entry) {
return;
}
var prev = entry.prev;
var next = entry.next;
next && (next.prev = prev);
prev && (prev.next = next);
entry.prev = undefined;
// Insert into head position
lru.head = entry;
entry.next = head;
head.prev = entry;
// If the item we promoted was the tail, then set prev to tail.
if (entry === lru.tail) {
lru.tail = prev;
}
}
function splice(lru, entry) {
var prev = entry.prev;
var next = entry.next;
next && (next.prev = prev);
prev && (prev.next = next);
entry.prev = entry.next = undefined;
if (entry === lru.head) {
lru.head = next;
}
if (entry === lru.tail) {
lru.tail = prev;
}
}
//# sourceMappingURL=memoizeQueryies.js.map
;