56 lines
1.1 KiB
JavaScript
56 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
const LRU = require('lru-cache');
|
|
|
|
const parserCache = new LRU({
|
|
max: 15000
|
|
});
|
|
|
|
function keyFromFields(type, fields, options) {
|
|
let res =
|
|
type +
|
|
'/' +
|
|
typeof options.nestTables +
|
|
'/' +
|
|
options.nestTables +
|
|
'/' +
|
|
options.rowsAsArray +
|
|
options.supportBigNumbers +
|
|
'/' +
|
|
options.bigNumberStrings +
|
|
'/' +
|
|
typeof options.typeCast;
|
|
for (let i = 0; i < fields.length; ++i) {
|
|
res +=
|
|
'/' + fields[i].name + ':' + fields[i].columnType + ':' + fields[i].flags;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
function getParser(type, fields, options, config, compiler) {
|
|
const key = keyFromFields(type, fields, options);
|
|
let parser = parserCache.get(key);
|
|
|
|
if (parser) {
|
|
return parser;
|
|
}
|
|
|
|
parser = compiler(fields, options, config);
|
|
parserCache.set(key, parser);
|
|
return parser;
|
|
}
|
|
|
|
function setMaxCache(max) {
|
|
parserCache.max = max;
|
|
}
|
|
|
|
function clearCache() {
|
|
parserCache.reset();
|
|
}
|
|
|
|
module.exports = {
|
|
getParser: getParser,
|
|
setMaxCache: setMaxCache,
|
|
clearCache: clearCache
|
|
};
|