|
193 | 193 | function CsvToJson(_input, _config) |
194 | 194 | { |
195 | 195 | _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 | + } |
197 | 211 |
|
198 | 212 | if (_config.worker && Papa.WORKERS_SUPPORTED) |
199 | 213 | { |
|
415 | 429 | } |
416 | 430 | } |
417 | 431 |
|
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 | | - |
436 | 432 | /** ChunkStreamer is the base prototype for various streamer implementations. */ |
437 | 433 | function ChunkStreamer(config) |
438 | 434 | { |
|
987 | 983 |
|
988 | 984 | function parseDynamic(field, value) |
989 | 985 | { |
990 | | - if (_config.dynamicTyping.isIncluded(field)) |
| 986 | + if (_config.shouldApplyDynamicTyping(field)) |
991 | 987 | { |
992 | 988 | if (value === 'true' || value === 'TRUE') |
993 | 989 | return true; |
|
0 commit comments