'use strict'; const LRU = require('lru-cache').default; let 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 = new LRU({ max }); } function clearCache() { parserCache.clear(); } module.exports = { getParser: getParser, setMaxCache: setMaxCache, clearCache: clearCache, _keyFromFields: keyFromFields, };