Browse Source

Simplify dyanmicTypingConfig and add cache for DynmicTypingFunction

pull/288/merge
Sergi Almacellas Abellana 8 years ago
parent
commit
04efec0d61
  1. 36
      papaparse.js

36
papaparse.js

@ -193,7 +193,21 @@
function CsvToJson(_input, _config) function CsvToJson(_input, _config)
{ {
_config = _config || {}; _config = _config || {};
_config.dynamicTyping = new DynamicTypingConfig(_config.dynamicTyping); var dynamicTyping = _config.dynamicTyping || false;
debugger;
if (typeof dynamicTyping == 'function') {
_config.dynamicTypingFunction = dynamicTyping;
// Will be filled on first row call
dynamicTyping = {};
}
_config.dynamicTyping = dynamicTyping;
_config.shouldApplyDynamicTyping = function(field) {
// Cache function values to avoid calling it for each row
if (_config.dynamicTypingFunction && !_config.dynamicTyping[field]) {
_config.dynamicTyping[field] = _config.dynamicTypingFunction(field);
}
return (_config.dynamicTyping[field] || _config.dynamicTyping) === true
}
if (_config.worker && Papa.WORKERS_SUPPORTED) if (_config.worker && Papa.WORKERS_SUPPORTED)
{ {
@ -415,24 +429,6 @@
} }
} }
function DynamicTypingConfig(config)
{
this._config = config;
}
DynamicTypingConfig.prototype.constructor = DynamicTypingConfig;
DynamicTypingConfig.prototype.isIncluded = function(field)
{
if (typeof this._config === 'function')
{
return this._config(field) === true;
}
if (typeof this._config === 'object')
{
return this._config[field] === true;
}
return !!this._config;
};
/** ChunkStreamer is the base prototype for various streamer implementations. */ /** ChunkStreamer is the base prototype for various streamer implementations. */
function ChunkStreamer(config) function ChunkStreamer(config)
{ {
@ -987,7 +983,7 @@
function parseDynamic(field, value) function parseDynamic(field, value)
{ {
if (_config.dynamicTyping.isIncluded(field)) if (_config.shouldApplyDynamicTyping(field))
{ {
if (value === 'true' || value === 'TRUE') if (value === 'true' || value === 'TRUE')
return true; return true;

Loading…
Cancel
Save