Skip to content

Commit 04efec0

Browse files
author
Sergi Almacellas Abellana
committed
Simplify dyanmicTypingConfig and add cache for DynmicTypingFunction
1 parent f8255fd commit 04efec0

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

papaparse.js

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,21 @@
193193
function CsvToJson(_input, _config)
194194
{
195195
_config = _config || {};
196-
_config.dynamicTyping = new DynamicTypingConfig(_config.dynamicTyping);
196+
var dynamicTyping = _config.dynamicTyping || false;
197+
debugger;
198+
if (typeof dynamicTyping == 'function') {
199+
_config.dynamicTypingFunction = dynamicTyping;
200+
// Will be filled on first row call
201+
dynamicTyping = {};
202+
}
203+
_config.dynamicTyping = dynamicTyping;
204+
_config.shouldApplyDynamicTyping = function(field) {
205+
// Cache function values to avoid calling it for each row
206+
if (_config.dynamicTypingFunction && !_config.dynamicTyping[field]) {
207+
_config.dynamicTyping[field] = _config.dynamicTypingFunction(field);
208+
}
209+
return (_config.dynamicTyping[field] || _config.dynamicTyping) === true
210+
}
197211

198212
if (_config.worker && Papa.WORKERS_SUPPORTED)
199213
{
@@ -415,24 +429,6 @@
415429
}
416430
}
417431

418-
function DynamicTypingConfig(config)
419-
{
420-
this._config = config;
421-
}
422-
DynamicTypingConfig.prototype.constructor = DynamicTypingConfig;
423-
DynamicTypingConfig.prototype.isIncluded = function(field)
424-
{
425-
if (typeof this._config === 'function')
426-
{
427-
return this._config(field) === true;
428-
}
429-
if (typeof this._config === 'object')
430-
{
431-
return this._config[field] === true;
432-
}
433-
return !!this._config;
434-
};
435-
436432
/** ChunkStreamer is the base prototype for various streamer implementations. */
437433
function ChunkStreamer(config)
438434
{
@@ -987,7 +983,7 @@
987983

988984
function parseDynamic(field, value)
989985
{
990-
if (_config.dynamicTyping.isIncluded(field))
986+
if (_config.shouldApplyDynamicTyping(field))
991987
{
992988
if (value === 'true' || value === 'TRUE')
993989
return true;

0 commit comments

Comments
 (0)