Spaces:
Running
Running
; | |
const LRU = require('lru-cache').default; | |
const parserCache = new LRU({ | |
max: 15000, | |
}); | |
function keyFromFields(type, fields, options, config) { | |
const res = [ | |
type, | |
typeof options.nestTables, | |
options.nestTables, | |
Boolean(options.rowsAsArray), | |
Boolean(options.supportBigNumbers || config.supportBigNumbers), | |
Boolean(options.bigNumberStrings || config.bigNumberStrings), | |
typeof options.typeCast, | |
options.timezone || config.timezone, | |
Boolean(options.decimalNumbers), | |
options.dateStrings, | |
]; | |
for (let i = 0; i < fields.length; ++i) { | |
const field = fields[i]; | |
res.push([ | |
field.name, | |
field.columnType, | |
field.length, | |
field.schema, | |
field.table, | |
field.flags, | |
field.characterSet, | |
]); | |
} | |
return JSON.stringify(res, null, 0); | |
} | |
function getParser(type, fields, options, config, compiler) { | |
const key = keyFromFields(type, fields, options, config); | |
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.clear(); | |
} | |
module.exports = { | |
getParser: getParser, | |
setMaxCache: setMaxCache, | |
clearCache: clearCache, | |
_keyFromFields: keyFromFields, | |
}; | |