Comparing version 4.4.0 to 4.5.0
{ | ||
"name": "papaparse", | ||
"version": "4.4.0", | ||
"version": "4.5.0", | ||
"description": "Fast and powerful CSV parser for the browser that supports web workers and streaming large files. Converts CSV to JSON and JSON to CSV.", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
151
papaparse.js
/*@license | ||
Papa Parse | ||
v4.4.0 | ||
v4.5.0 | ||
https://github.com/mholt/PapaParse | ||
@@ -61,2 +61,3 @@ License: MIT | ||
Papa.SCRIPT_PATH = null; // Must be set by your code if you use workers and this lib is loaded asynchronously | ||
Papa.NODE_STREAM_INPUT = 1; | ||
@@ -75,2 +76,3 @@ // Configurable chunk sizes for local and remote files, respectively | ||
Papa.ReadableStreamStreamer = ReadableStreamStreamer; | ||
Papa.DuplexStreamStreamer = DuplexStreamStreamer; | ||
@@ -208,2 +210,4 @@ if (global.jQuery) | ||
_config.transform = isFunction(_config.transform) ? _config.transform : false; | ||
if (_config.worker && Papa.WORKERS_SUPPORTED) | ||
@@ -234,4 +238,11 @@ { | ||
var streamer = null; | ||
if (typeof _input === 'string') | ||
if (_input === Papa.NODE_STREAM_INPUT) | ||
{ | ||
// create a node Duplex stream for use | ||
// with .pipe | ||
streamer = new DuplexStreamStreamer(_config); | ||
return streamer.getStream(); | ||
} | ||
else if (typeof _input === 'string') | ||
{ | ||
if (_config.download) | ||
@@ -406,2 +417,5 @@ streamer = new NetworkStreamer(_config); | ||
if (str.constructor === Date) | ||
return JSON.stringify(str).slice(1, 25); | ||
str = str.toString().replace(quoteCharRegex, _quoteChar + _quoteChar); | ||
@@ -847,2 +861,103 @@ | ||
function DuplexStreamStreamer(_config) { | ||
var Duplex = require('stream').Duplex; | ||
var config = copy(_config); | ||
var parseOnWrite = true; | ||
var writeStreamHasFinished = false; | ||
var parseCallbackQueue = []; | ||
var stream = null; | ||
this._onCsvData = function(results) | ||
{ | ||
var data = results.data; | ||
for (var i = 0; i < data.length; i++) { | ||
if (!stream.push(data[i]) && !this._handle.paused()) { | ||
// the writeable consumer buffer has filled up | ||
// so we need to pause until more items | ||
// can be processed | ||
this._handle.pause(); | ||
} | ||
} | ||
}; | ||
this._onCsvComplete = function() | ||
{ | ||
// node will finish the read stream when | ||
// null is pushed | ||
stream.push(null); | ||
}; | ||
config.step = bindFunction(this._onCsvData, this); | ||
config.complete = bindFunction(this._onCsvComplete, this); | ||
ChunkStreamer.call(this, config); | ||
this._nextChunk = function() | ||
{ | ||
if (writeStreamHasFinished && parseCallbackQueue.length === 1) { | ||
this._finished = true; | ||
} | ||
if (parseCallbackQueue.length) { | ||
parseCallbackQueue.shift()(); | ||
} else { | ||
parseOnWrite = true; | ||
} | ||
}; | ||
this._addToParseQueue = function(chunk, callback) | ||
{ | ||
// add to queue so that we can indicate | ||
// completion via callback | ||
// node will automatically pause the incoming stream | ||
// when too many items have been added without their | ||
// callback being invoked | ||
parseCallbackQueue.push(bindFunction(function() { | ||
this.parseChunk(typeof chunk === 'string' ? chunk : chunk.toString(config.encoding)); | ||
if (isFunction(callback)) { | ||
return callback(); | ||
} | ||
}, this)); | ||
if (parseOnWrite) { | ||
parseOnWrite = false; | ||
this._nextChunk(); | ||
} | ||
}; | ||
this._onRead = function() | ||
{ | ||
if (this._handle.paused()) { | ||
// the writeable consumer can handle more data | ||
// so resume the chunk parsing | ||
this._handle.resume(); | ||
} | ||
}; | ||
this._onWrite = function(chunk, encoding, callback) | ||
{ | ||
this._addToParseQueue(chunk, callback); | ||
}; | ||
this._onWriteComplete = function() | ||
{ | ||
writeStreamHasFinished = true; | ||
// have to write empty string | ||
// so parser knows its done | ||
this._addToParseQueue(''); | ||
}; | ||
this.getStream = function() | ||
{ | ||
return stream; | ||
}; | ||
stream = new Duplex({ | ||
readableObjectMode: true, | ||
decodeStrings: false, | ||
read: bindFunction(this._onRead, this), | ||
write: bindFunction(this._onWrite, this) | ||
}); | ||
stream.once('finish', bindFunction(this._onWriteComplete, this)); | ||
} | ||
DuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); | ||
DuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer; | ||
// Use one ParserHandle per entire CSV file or string | ||
@@ -853,5 +968,7 @@ function ParserHandle(_config) | ||
var FLOAT = /^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i; | ||
var ISO_DATE = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/; | ||
var self = this; | ||
var _stepCounter = 0; // Number of times step was called (number of rows parsed) | ||
var _rowCounter = 0; // Number of rows that have been parsed so far | ||
var _input; // The input being parsed | ||
@@ -908,3 +1025,3 @@ var _parser; // The core parser being used | ||
{ | ||
var delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines); | ||
var delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments); | ||
if (delimGuess.successful) | ||
@@ -987,3 +1104,3 @@ _config.delimiter = delimGuess.bestDelimiter; | ||
return applyHeaderAndDynamicTyping(); | ||
return applyHeaderAndDynamicTypingAndTransformation(); | ||
} | ||
@@ -1030,8 +1147,8 @@ | ||
return false; | ||
else if(FLOAT.test(value)) { | ||
else if (FLOAT.test(value)) | ||
return parseFloat(value); | ||
} | ||
else { | ||
else if (ISO_DATE.test(value)) | ||
return new Date(value); | ||
else | ||
return (value === '' ? null : value); | ||
} | ||
} | ||
@@ -1041,5 +1158,5 @@ return value; | ||
function applyHeaderAndDynamicTyping() | ||
function applyHeaderAndDynamicTypingAndTransformation() | ||
{ | ||
if (!_results || (!_config.header && !_config.dynamicTyping)) | ||
if (!_results || (!_config.header && !_config.dynamicTyping && !_config.transform)) | ||
return _results; | ||
@@ -1060,2 +1177,5 @@ | ||
if (_config.transform) | ||
value = _config.transform(value,field); | ||
value = parseDynamic(field, value); | ||
@@ -1077,5 +1197,5 @@ | ||
if (j > _fields.length) | ||
addError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, i); | ||
addError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i); | ||
else if (j < _fields.length) | ||
addError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, i); | ||
addError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i); | ||
} | ||
@@ -1086,6 +1206,8 @@ } | ||
_results.meta.fields = _fields; | ||
_rowCounter += _results.data.length; | ||
return _results; | ||
} | ||
function guessDelimiter(input, newline, skipEmptyLines) | ||
function guessDelimiter(input, newline, skipEmptyLines, comments) | ||
{ | ||
@@ -1102,2 +1224,3 @@ var delimChoices = [',', '\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP]; | ||
var preview = new Parser({ | ||
comments: comments, | ||
delimiter: delim, | ||
@@ -1650,3 +1773,3 @@ newline: newline, | ||
{ | ||
if (typeof obj !== 'object') | ||
if (typeof obj !== 'object' || obj === null) | ||
return obj; | ||
@@ -1653,0 +1776,0 @@ var cpy = obj instanceof Array ? [] : {}; |
/*@license | ||
Papa Parse | ||
v4.4.0 | ||
v4.5.0 | ||
https://github.com/mholt/PapaParse | ||
License: MIT | ||
*/ | ||
!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&"undefined"!=typeof exports?module.exports=t():e.Papa=t()}(this,function(){"use strict";var s,e,f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{},r=!f.document&&!!f.postMessage,o=r&&/(\?|&)papaworker(=|&|$)/.test(f.location.search),a=!1,h={},u=0,g={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;z(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.worker&&g.WORKERS_SUPPORTED){var n=function(){if(!g.WORKERS_SUPPORTED)return!1;if(!a&&null===g.SCRIPT_PATH)throw new Error("Script path cannot be determined automatically when Papa Parse is loaded asynchronously. You need to set Papa.SCRIPT_PATH manually.");var e=g.SCRIPT_PATH||s;e+=(-1!==e.indexOf("?")?"&":"?")+"papaworker";var t=new f.Worker(e);return t.onmessage=k,t.id=u++,h[t.id]=t}();return n.userStep=t.step,n.userChunk=t.chunk,n.userComplete=t.complete,n.userError=t.error,t.step=z(t.step),t.chunk=z(t.chunk),t.complete=z(t.complete),t.error=z(t.error),delete t.worker,void n.postMessage({input:e,config:t,workerId:n.id})}var r=null;"string"==typeof e?r=t.download?new l(t):new _(t):!0===e.readable&&z(e.read)&&z(e.on)?r=new m(t):(f.File&&e instanceof File||e instanceof Object)&&(r=new p(t));return r.stream(e)},unparse:function(e,t){var n=!1,f=!0,d=",",c="\r\n",r='"';!function(){if("object"!=typeof t)return;"string"==typeof t.delimiter&&1===t.delimiter.length&&-1===g.BAD_DELIMITERS.indexOf(t.delimiter)&&(d=t.delimiter);("boolean"==typeof t.quotes||t.quotes instanceof Array)&&(n=t.quotes);"string"==typeof t.newline&&(c=t.newline);"string"==typeof t.quoteChar&&(r=t.quoteChar);"boolean"==typeof t.header&&(f=t.header)}();var s=new RegExp(r,"g");"string"==typeof e&&(e=JSON.parse(e));if(e instanceof Array){if(!e.length||e[0]instanceof Array)return a(null,e);if("object"==typeof e[0])return a(i(e[0]),e)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),e.data instanceof Array&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=e.data[0]instanceof Array?e.fields:i(e.data[0])),e.data[0]instanceof Array||"object"==typeof e.data[0]||(e.data=[e.data])),a(e.fields||[],e.data||[]);throw"exception: Unable to serialize unrecognized input";function i(e){if("object"!=typeof e)return[];var t=[];for(var i in e)t.push(i);return t}function a(e,t){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=e instanceof Array&&0<e.length,r=!(t[0]instanceof Array);if(n&&f){for(var s=0;s<e.length;s++)0<s&&(i+=d),i+=l(e[s],s);0<t.length&&(i+=c)}for(var a=0;a<t.length;a++){for(var o=n?e.length:t[a].length,h=0;h<o;h++){0<h&&(i+=d);var u=n&&r?e[h]:h;i+=l(t[a][u],h)}a<t.length-1&&(i+=c)}return i}function l(e,t){if(null==e)return"";e=e.toString().replace(s,r+r);var i="boolean"==typeof n&&n||n instanceof Array&&n[t]||function(e,t){for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1}(e,g.BAD_DELIMITERS)||-1<e.indexOf(d)||" "===e.charAt(0)||" "===e.charAt(e.length-1);return i?r+e+r:e}}};if(g.RECORD_SEP=String.fromCharCode(30),g.UNIT_SEP=String.fromCharCode(31),g.BYTE_ORDER_MARK="\ufeff",g.BAD_DELIMITERS=["\r","\n",'"',g.BYTE_ORDER_MARK],g.WORKERS_SUPPORTED=!r&&!!f.Worker,g.SCRIPT_PATH=null,g.LocalChunkSize=10485760,g.RemoteChunkSize=5242880,g.DefaultDelimiter=",",g.Parser=v,g.ParserHandle=i,g.NetworkStreamer=l,g.FileStreamer=p,g.StringStreamer=_,g.ReadableStreamStreamer=m,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!("INPUT"===d(this).prop("tagName").toUpperCase()&&"file"===d(this).attr("type").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0!==h.length){var e,t,i,n,r=h[0];if(z(o.before)){var s=o.before(r.file,r.inputElem);if("object"==typeof s){if("abort"===s.action)return e="AbortError",t=r.file,i=r.inputElem,n=s.reason,void(z(o.error)&&o.error({name:e},t,i,n));if("skip"===s.action)return void u();"object"==typeof s.config&&(r.instanceConfig=d.extend(r.instanceConfig,s.config))}else if("skip"===s)return void u()}var a=r.instanceConfig.complete;r.instanceConfig.complete=function(e){z(a)&&a(e,r.file,r.inputElem),u()},g.parse(r.file,r.instanceConfig)}else z(o.complete)&&o.complete()}function u(){h.splice(0,1),e()}}}function c(e){this._handle=null,this._finished=!1,this._completed=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=C(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&z(this._config.beforeFirstChunk)){var i=this._config.beforeFirstChunk(e);void 0!==i&&(e=i)}this.isFirstChunk=!1;var n=this._partialLine+e;this._partialLine="";var r=this._handle.parse(n,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=r.meta.cursor;this._finished||(this._partialLine=n.substring(s-this._baseIndex),this._baseIndex=s),r&&r.data&&(this._rowCount+=r.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:r,workerId:g.WORKER_ID,finished:a});else if(z(this._config.chunk)&&!t){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return;r=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!a||!z(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||r&&r.meta.paused||this._nextChunk(),r}},this._sendError=function(e){z(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:g.WORKER_ID,error:e,finished:!1})}}function l(e){var n;(e=e||{}).chunkSize||(e.chunkSize=g.RemoteChunkSize),c.call(this,e),this._nextChunk=r?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(n=new XMLHttpRequest,this._config.withCredentials&&(n.withCredentials=this._config.withCredentials),r||(n.onload=w(this._chunkLoaded,this),n.onerror=w(this._chunkError,this)),n.open("GET",this._input,!r),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)n.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;n.setRequestHeader("Range","bytes="+this._start+"-"+i),n.setRequestHeader("If-None-Match","webkit-no-cache")}try{n.send()}catch(e){this._chunkError(e.message)}r&&0===n.status?this._chunkError():this._start+=this._config.chunkSize}},this._chunkLoaded=function(){4===n.readyState&&(n.status<200||400<=n.status?this._chunkError():(this._finished=!this._config.chunkSize||this._start>function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return-1;return parseInt(t.substr(t.lastIndexOf("/")+1))}(n),this.parseChunk(n.responseText)))},this._chunkError=function(e){var t=n.statusText||e;this._sendError(new Error(t))}}function p(e){var n,r;(e=e||{}).chunkSize||(e.chunkSize=g.LocalChunkSize),c.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,s?((n=new FileReader).onload=w(this._chunkLoaded,this),n.onerror=w(this._chunkError,this)):n=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=r.call(e,this._start,t)}var i=n.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:i}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(n.error)}}function _(e){var i;c.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e=this._config.chunkSize,t=e?i.substr(0,e):i;return i=e?i.substr(e):"",this._finished=!i,this.parseChunk(t)}}}function m(e){c.call(this,e=e||{});var t=[],i=!0,n=!1;this.pause=function(){c.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){c.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){n&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=w(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=w(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=w(function(){this._streamCleanUp(),n=!0,this._streamData("")},this),this._streamCleanUp=w(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function i(_){var s,a,o,n=/^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i,t=this,i=0,h=!1,e=!1,u=[],f={data:[],errors:[],meta:{}};if(z(_.step)){var r=_.step;_.step=function(e){if(f=e,c())d();else{if(d(),0===f.data.length)return;i+=e.data.length,_.preview&&i>_.preview?a.abort():r(f,t)}}}function d(){if(f&&o&&(p("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+g.DefaultDelimiter+"'"),o=!1),_.skipEmptyLines)for(var e=0;e<f.data.length;e++)1===f.data[e].length&&""===f.data[e][0]&&f.data.splice(e--,1);return c()&&function(){if(!f)return;for(var e=0;c()&&e<f.data.length;e++)for(var t=0;t<f.data[e].length;t++){var i=f.data[e][t];_.trimHeaders&&(i=i.trim()),u.push(i)}f.data.splice(0,1)}(),function(){if(!f||!_.header&&!_.dynamicTyping)return f;for(var e=0;e<f.data.length;e++){var t,i=_.header?{}:[];for(t=0;t<f.data[e].length;t++){var n=t,r=f.data[e][t];_.header&&(n=t>=u.length?"__parsed_extra":u[t]),r=l(n,r),"__parsed_extra"===n?(i[n]=i[n]||[],i[n].push(r)):i[n]=r}f.data[e]=i,_.header&&(t>u.length?p("FieldMismatch","TooManyFields","Too many fields: expected "+u.length+" fields but parsed "+t,e):t<u.length&&p("FieldMismatch","TooFewFields","Too few fields: expected "+u.length+" fields but parsed "+t,e))}_.header&&f.meta&&(f.meta.fields=u);return f}()}function c(){return _.header&&0===u.length}function l(e,t){return i=e,_.dynamicTypingFunction&&void 0===_.dynamicTyping[i]&&(_.dynamicTyping[i]=_.dynamicTypingFunction(i)),!0===(_.dynamicTyping[i]||_.dynamicTyping)?"true"===t||"TRUE"===t||"false"!==t&&"FALSE"!==t&&(n.test(t)?parseFloat(t):""===t?null:t):t;var i}function p(e,t,i,n){f.errors.push({type:e,code:t,message:i,row:n})}this.parse=function(e,t,i){if(_.newline||(_.newline=function(e){var t=(e=e.substr(0,1048576)).split("\r"),i=e.split("\n"),n=1<i.length&&i[0].length<t[0].length;if(1===t.length||n)return"\n";for(var r=0,s=0;s<t.length;s++)"\n"===t[s][0]&&r++;return r>=t.length/2?"\r\n":"\r"}(e)),o=!1,_.delimiter)z(_.delimiter)&&(_.delimiter=_.delimiter(e),f.meta.delimiter=_.delimiter);else{var n=function(e,t,i){for(var n,r,s,a=[",","\t","|",";",g.RECORD_SEP,g.UNIT_SEP],o=0;o<a.length;o++){var h=a[o],u=0,f=0,d=0;s=void 0;for(var c=new v({delimiter:h,newline:t,preview:10}).parse(e),l=0;l<c.data.length;l++)if(i&&1===c.data[l].length&&0===c.data[l][0].length)d++;else{var p=c.data[l].length;f+=p,void 0!==s?1<p&&(u+=Math.abs(p-s),s=p):s=p}0<c.data.length&&(f/=c.data.length-d),(void 0===r||u<r)&&1.99<f&&(r=u,n=h)}return{successful:!!(_.delimiter=n),bestDelimiter:n}}(e,_.newline,_.skipEmptyLines);n.successful?_.delimiter=n.bestDelimiter:(o=!0,_.delimiter=g.DefaultDelimiter),f.meta.delimiter=_.delimiter}var r=C(_);return _.preview&&_.header&&r.preview++,s=e,a=new v(r),f=a.parse(s,t,i),d(),h?{meta:{paused:!0}}:f||{meta:{paused:!1}}},this.paused=function(){return h},this.pause=function(){h=!0,a.abort(),s=s.substr(a.getCharIndex())},this.resume=function(){h=!1,t.streamer.parseChunk(s,!0)},this.aborted=function(){return e},this.abort=function(){e=!0,a.abort(),f.meta.aborted=!0,z(_.complete)&&_.complete(f),s=""}}function v(e){var S,x=(e=e||{}).delimiter,I=e.newline,O=e.comments,T=e.step,D=e.preview,L=e.fastMode,F=S=void 0===e.quoteChar?'"':e.quoteChar;if(void 0!==e.escapeChar&&(F=e.escapeChar),("string"!=typeof x||-1<g.BAD_DELIMITERS.indexOf(x))&&(x=","),O===x)throw"Comment character same as delimiter";!0===O?O="#":("string"!=typeof O||-1<g.BAD_DELIMITERS.indexOf(O))&&(O=!1),"\n"!==I&&"\r"!==I&&"\r\n"!==I&&(I="\n");var P=0,A=!1;this.parse=function(n,t,i){if("string"!=typeof n)throw"Input must be a string";var r=n.length,e=x.length,s=I.length,a=O.length,o=z(T),h=[],u=[],f=[],d=P=0;if(!n)return E();if(L||!1!==L&&-1===n.indexOf(S)){for(var c=n.split(I),l=0;l<c.length;l++){if(f=c[l],P+=f.length,l!==c.length-1)P+=I.length;else if(i)return E();if(!O||f.substr(0,a)!==O){if(o){if(h=[],y(f.split(x)),R(),A)return E()}else y(f.split(x));if(D&&D<=l)return h=h.slice(0,D),E(!0)}}return E()}for(var p,_=n.indexOf(x,P),g=n.indexOf(I,P),m=new RegExp(F.replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&")+S,"g");;)if(n[P]!==S)if(O&&0===f.length&&n.substr(P,a)===O){if(-1===g)return E();P=g+s,g=n.indexOf(I,P),_=n.indexOf(x,P)}else if(-1!==_&&(_<g||-1===g))f.push(n.substring(P,_)),P=_+e,_=n.indexOf(x,P);else{if(-1===g)break;if(f.push(n.substring(P,g)),w(g+s),o&&(R(),A))return E();if(D&&h.length>=D)return E(!0)}else for(p=P,P++;;){if(-1===(p=n.indexOf(S,p+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:P}),C();if(p===r-1)return C(n.substring(P,p).replace(m,S));if(S!==F||n[p+1]!==F){if(S===F||0===p||n[p-1]!==F){var v=b(_);if(n[p+1+v]===x){f.push(n.substring(P,p).replace(m,S)),P=p+1+v+e,_=n.indexOf(x,P),g=n.indexOf(I,P);break}var k=b(g);if(n.substr(p+1+k,s)===I){if(f.push(n.substring(P,p).replace(m,S)),w(p+1+k+s),_=n.indexOf(x,P),o&&(R(),A))return E();if(D&&h.length>=D)return E(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:P}),p++}}else p++}return C();function y(e){h.push(e),d=P}function b(e){var t=0;if(-1!==e){var i=n.substring(p+1,e);i&&""===i.trim()&&(t=i.length)}return t}function C(e){return i||(void 0===e&&(e=n.substr(P)),f.push(e),P=r,y(f),o&&R()),E()}function w(e){P=e,y(f),f=[],g=n.indexOf(I,P)}function E(e){return{data:h,errors:u,meta:{delimiter:x,linebreak:I,aborted:A,truncated:!!e,cursor:d+(t||0)}}}function R(){T(E()),h=[],u=[]}},this.abort=function(){A=!0},this.getCharIndex=function(){return P}}function k(e){var t=e.data,i=h[t.workerId],n=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var r={abort:function(){n=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:b,resume:b};if(z(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:[t.results.data[s]],errors:t.results.errors,meta:t.results.meta},r),!n);s++);delete t.results}else z(i.userChunk)&&(i.userChunk(t.results,r,t.file),delete t.results)}t.finished&&!n&&y(t.workerId,t.results)}function y(e,t){var i=h[e];z(i.userComplete)&&i.userComplete(t),i.terminate(),delete h[e]}function b(){throw"Not implemented."}function C(e){if("object"!=typeof e)return e;var t=e instanceof Array?[]:{};for(var i in e)t[i]=C(e[i]);return t}function w(e,t){return function(){e.apply(t,arguments)}}function z(e){return"function"==typeof e}return o?f.onmessage=function(e){var t=e.data;void 0===g.WORKER_ID&&t&&(g.WORKER_ID=t.workerId);if("string"==typeof t.input)f.postMessage({workerId:g.WORKER_ID,results:g.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var i=g.parse(t.input,t.config);i&&f.postMessage({workerId:g.WORKER_ID,results:i,finished:!0})}}:g.WORKERS_SUPPORTED&&(e=document.getElementsByTagName("script"),s=e.length?e[e.length-1].src:"",document.body?document.addEventListener("DOMContentLoaded",function(){a=!0},!0):a=!0),(l.prototype=Object.create(c.prototype)).constructor=l,(p.prototype=Object.create(c.prototype)).constructor=p,(_.prototype=Object.create(_.prototype)).constructor=_,(m.prototype=Object.create(c.prototype)).constructor=m,g}); | ||
!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&"undefined"!=typeof exports?module.exports=t():e.Papa=t()}(this,function(){"use strict";var s,e,f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{},r=!f.document&&!!f.postMessage,o=r&&/(\?|&)papaworker(=|&|$)/.test(f.location.search),a=!1,h={},u=0,v={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&v.WORKERS_SUPPORTED){var n=function(){if(!v.WORKERS_SUPPORTED)return!1;if(!a&&null===v.SCRIPT_PATH)throw new Error("Script path cannot be determined automatically when Papa Parse is loaded asynchronously. You need to set Papa.SCRIPT_PATH manually.");var e=v.SCRIPT_PATH||s;e+=(-1!==e.indexOf("?")?"&":"?")+"papaworker";var t=new f.Worker(e);return t.onmessage=y,t.id=u++,h[t.id]=t}();return n.userStep=t.step,n.userChunk=t.chunk,n.userComplete=t.complete,n.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void n.postMessage({input:e,config:t,workerId:n.id})}var r=null;{if(e===v.NODE_STREAM_INPUT)return(r=new g(t)).getStream();"string"==typeof e?r=t.download?new l(t):new _(t):!0===e.readable&&M(e.read)&&M(e.on)?r=new m(t):(f.File&&e instanceof File||e instanceof Object)&&(r=new p(t))}return r.stream(e)},unparse:function(e,t){var n=!1,f=!0,d=",",c="\r\n",r='"';!function(){if("object"!=typeof t)return;"string"==typeof t.delimiter&&1===t.delimiter.length&&-1===v.BAD_DELIMITERS.indexOf(t.delimiter)&&(d=t.delimiter);("boolean"==typeof t.quotes||t.quotes instanceof Array)&&(n=t.quotes);"string"==typeof t.newline&&(c=t.newline);"string"==typeof t.quoteChar&&(r=t.quoteChar);"boolean"==typeof t.header&&(f=t.header)}();var s=new RegExp(r,"g");"string"==typeof e&&(e=JSON.parse(e));if(e instanceof Array){if(!e.length||e[0]instanceof Array)return a(null,e);if("object"==typeof e[0])return a(i(e[0]),e)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),e.data instanceof Array&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=e.data[0]instanceof Array?e.fields:i(e.data[0])),e.data[0]instanceof Array||"object"==typeof e.data[0]||(e.data=[e.data])),a(e.fields||[],e.data||[]);throw"exception: Unable to serialize unrecognized input";function i(e){if("object"!=typeof e)return[];var t=[];for(var i in e)t.push(i);return t}function a(e,t){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=e instanceof Array&&0<e.length,r=!(t[0]instanceof Array);if(n&&f){for(var s=0;s<e.length;s++)0<s&&(i+=d),i+=l(e[s],s);0<t.length&&(i+=c)}for(var a=0;a<t.length;a++){for(var o=n?e.length:t[a].length,h=0;h<o;h++){0<h&&(i+=d);var u=n&&r?e[h]:h;i+=l(t[a][u],h)}a<t.length-1&&(i+=c)}return i}function l(e,t){if(null==e)return"";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);e=e.toString().replace(s,r+r);var i="boolean"==typeof n&&n||n instanceof Array&&n[t]||function(e,t){for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1}(e,v.BAD_DELIMITERS)||-1<e.indexOf(d)||" "===e.charAt(0)||" "===e.charAt(e.length-1);return i?r+e+r:e}}};if(v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK="\ufeff",v.BAD_DELIMITERS=["\r","\n",'"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!r&&!!f.Worker,v.SCRIPT_PATH=null,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=",",v.Parser=k,v.ParserHandle=i,v.NetworkStreamer=l,v.FileStreamer=p,v.StringStreamer=_,v.ReadableStreamStreamer=m,v.DuplexStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!("INPUT"===d(this).prop("tagName").toUpperCase()&&"file"===d(this).attr("type").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0!==h.length){var e,t,i,n,r=h[0];if(M(o.before)){var s=o.before(r.file,r.inputElem);if("object"==typeof s){if("abort"===s.action)return e="AbortError",t=r.file,i=r.inputElem,n=s.reason,void(M(o.error)&&o.error({name:e},t,i,n));if("skip"===s.action)return void u();"object"==typeof s.config&&(r.instanceConfig=d.extend(r.instanceConfig,s.config))}else if("skip"===s)return void u()}var a=r.instanceConfig.complete;r.instanceConfig.complete=function(e){M(a)&&a(e,r.file,r.inputElem),u()},v.parse(r.file,r.instanceConfig)}else M(o.complete)&&o.complete()}function u(){h.splice(0,1),e()}}}function c(e){this._handle=null,this._finished=!1,this._completed=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&M(this._config.beforeFirstChunk)){var i=this._config.beforeFirstChunk(e);void 0!==i&&(e=i)}this.isFirstChunk=!1;var n=this._partialLine+e;this._partialLine="";var r=this._handle.parse(n,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=r.meta.cursor;this._finished||(this._partialLine=n.substring(s-this._baseIndex),this._baseIndex=s),r&&r.data&&(this._rowCount+=r.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:r,workerId:v.WORKER_ID,finished:a});else if(M(this._config.chunk)&&!t){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return;r=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!a||!M(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||r&&r.meta.paused||this._nextChunk(),r}},this._sendError=function(e){M(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function l(e){var n;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),c.call(this,e),this._nextChunk=r?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(n=new XMLHttpRequest,this._config.withCredentials&&(n.withCredentials=this._config.withCredentials),r||(n.onload=E(this._chunkLoaded,this),n.onerror=E(this._chunkError,this)),n.open("GET",this._input,!r),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)n.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;n.setRequestHeader("Range","bytes="+this._start+"-"+i),n.setRequestHeader("If-None-Match","webkit-no-cache")}try{n.send()}catch(e){this._chunkError(e.message)}r&&0===n.status?this._chunkError():this._start+=this._config.chunkSize}},this._chunkLoaded=function(){4===n.readyState&&(n.status<200||400<=n.status?this._chunkError():(this._finished=!this._config.chunkSize||this._start>function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return-1;return parseInt(t.substr(t.lastIndexOf("/")+1))}(n),this.parseChunk(n.responseText)))},this._chunkError=function(e){var t=n.statusText||e;this._sendError(new Error(t))}}function p(e){var n,r;(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),c.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,s?((n=new FileReader).onload=E(this._chunkLoaded,this),n.onerror=E(this._chunkError,this)):n=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=r.call(e,this._start,t)}var i=n.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:i}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(n.error)}}function _(e){var i;c.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e=this._config.chunkSize,t=e?i.substr(0,e):i;return i=e?i.substr(e):"",this._finished=!i,this.parseChunk(t)}}}function m(e){c.call(this,e=e||{});var t=[],i=!0,n=!1;this.pause=function(){c.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){c.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){n&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=E(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=E(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=E(function(){this._streamCleanUp(),n=!0,this._streamData("")},this),this._streamCleanUp=E(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function g(e){var t=require("stream").Duplex,i=w(e),n=!0,r=!1,s=[],a=null;this._onCsvData=function(e){for(var t=e.data,i=0;i<t.length;i++)a.push(t[i])||this._handle.paused()||this._handle.pause()},this._onCsvComplete=function(){a.push(null)},i.step=E(this._onCsvData,this),i.complete=E(this._onCsvComplete,this),c.call(this,i),this._nextChunk=function(){r&&1===s.length&&(this._finished=!0),s.length?s.shift()():n=!0},this._addToParseQueue=function(e,t){s.push(E(function(){if(this.parseChunk("string"==typeof e?e:e.toString(i.encoding)),M(t))return t()},this)),n&&(n=!1,this._nextChunk())},this._onRead=function(){this._handle.paused()&&this._handle.resume()},this._onWrite=function(e,t,i){this._addToParseQueue(e,i)},this._onWriteComplete=function(){r=!0,this._addToParseQueue("")},this.getStream=function(){return a},(a=new t({readableObjectMode:!0,decodeStrings:!1,read:E(this._onRead,this),write:E(this._onWrite,this)})).once("finish",E(this._onWriteComplete,this))}function i(m){var s,a,o,n=/^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i,r=/(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/,t=this,i=0,h=0,u=!1,e=!1,f=[],d={data:[],errors:[],meta:{}};if(M(m.step)){var c=m.step;m.step=function(e){if(d=e,p())l();else{if(l(),0===d.data.length)return;i+=e.data.length,m.preview&&i>m.preview?a.abort():c(d,t)}}}function l(){if(d&&o&&(g("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+v.DefaultDelimiter+"'"),o=!1),m.skipEmptyLines)for(var e=0;e<d.data.length;e++)1===d.data[e].length&&""===d.data[e][0]&&d.data.splice(e--,1);return p()&&function(){if(!d)return;for(var e=0;p()&&e<d.data.length;e++)for(var t=0;t<d.data[e].length;t++){var i=d.data[e][t];m.trimHeaders&&(i=i.trim()),f.push(i)}d.data.splice(0,1)}(),function(){if(!d||!m.header&&!m.dynamicTyping&&!m.transform)return d;for(var e=0;e<d.data.length;e++){var t,i=m.header?{}:[];for(t=0;t<d.data[e].length;t++){var n=t,r=d.data[e][t];m.header&&(n=t>=f.length?"__parsed_extra":f[t]),m.transform&&(r=m.transform(r,n)),r=_(n,r),"__parsed_extra"===n?(i[n]=i[n]||[],i[n].push(r)):i[n]=r}d.data[e]=i,m.header&&(t>f.length?g("FieldMismatch","TooManyFields","Too many fields: expected "+f.length+" fields but parsed "+t,h+e):t<f.length&&g("FieldMismatch","TooFewFields","Too few fields: expected "+f.length+" fields but parsed "+t,h+e))}m.header&&d.meta&&(d.meta.fields=f);return h+=d.data.length,d}()}function p(){return m.header&&0===f.length}function _(e,t){return i=e,m.dynamicTypingFunction&&void 0===m.dynamicTyping[i]&&(m.dynamicTyping[i]=m.dynamicTypingFunction(i)),!0===(m.dynamicTyping[i]||m.dynamicTyping)?"true"===t||"TRUE"===t||"false"!==t&&"FALSE"!==t&&(n.test(t)?parseFloat(t):r.test(t)?new Date(t):""===t?null:t):t;var i}function g(e,t,i,n){d.errors.push({type:e,code:t,message:i,row:n})}this.parse=function(e,t,i){if(m.newline||(m.newline=function(e){var t=(e=e.substr(0,1048576)).split("\r"),i=e.split("\n"),n=1<i.length&&i[0].length<t[0].length;if(1===t.length||n)return"\n";for(var r=0,s=0;s<t.length;s++)"\n"===t[s][0]&&r++;return r>=t.length/2?"\r\n":"\r"}(e)),o=!1,m.delimiter)M(m.delimiter)&&(m.delimiter=m.delimiter(e),d.meta.delimiter=m.delimiter);else{var n=function(e,t,i,n){for(var r,s,a,o=[",","\t","|",";",v.RECORD_SEP,v.UNIT_SEP],h=0;h<o.length;h++){var u=o[h],f=0,d=0,c=0;a=void 0;for(var l=new k({comments:n,delimiter:u,newline:t,preview:10}).parse(e),p=0;p<l.data.length;p++)if(i&&1===l.data[p].length&&0===l.data[p][0].length)c++;else{var _=l.data[p].length;d+=_,void 0!==a?1<_&&(f+=Math.abs(_-a),a=_):a=_}0<l.data.length&&(d/=l.data.length-c),(void 0===s||f<s)&&1.99<d&&(s=f,r=u)}return{successful:!!(m.delimiter=r),bestDelimiter:r}}(e,m.newline,m.skipEmptyLines,m.comments);n.successful?m.delimiter=n.bestDelimiter:(o=!0,m.delimiter=v.DefaultDelimiter),d.meta.delimiter=m.delimiter}var r=w(m);return m.preview&&m.header&&r.preview++,s=e,a=new k(r),d=a.parse(s,t,i),l(),u?{meta:{paused:!0}}:d||{meta:{paused:!1}}},this.paused=function(){return u},this.pause=function(){u=!0,a.abort(),s=s.substr(a.getCharIndex())},this.resume=function(){u=!1,t.streamer.parseChunk(s,!0)},this.aborted=function(){return e},this.abort=function(){e=!0,a.abort(),d.meta.aborted=!0,M(m.complete)&&m.complete(d),s=""}}function k(e){var S,x=(e=e||{}).delimiter,T=e.newline,O=e.comments,I=e.step,D=e.preview,P=e.fastMode,A=S=void 0===e.quoteChar?'"':e.quoteChar;if(void 0!==e.escapeChar&&(A=e.escapeChar),("string"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=","),O===x)throw"Comment character same as delimiter";!0===O?O="#":("string"!=typeof O||-1<v.BAD_DELIMITERS.indexOf(O))&&(O=!1),"\n"!==T&&"\r"!==T&&"\r\n"!==T&&(T="\n");var L=0,F=!1;this.parse=function(n,t,i){if("string"!=typeof n)throw"Input must be a string";var r=n.length,e=x.length,s=T.length,a=O.length,o=M(I),h=[],u=[],f=[],d=L=0;if(!n)return E();if(P||!1!==P&&-1===n.indexOf(S)){for(var c=n.split(T),l=0;l<c.length;l++){if(f=c[l],L+=f.length,l!==c.length-1)L+=T.length;else if(i)return E();if(!O||f.substr(0,a)!==O){if(o){if(h=[],y(f.split(x)),R(),F)return E()}else y(f.split(x));if(D&&D<=l)return h=h.slice(0,D),E(!0)}}return E()}for(var p,_=n.indexOf(x,L),m=n.indexOf(T,L),g=new RegExp(A.replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&")+S,"g");;)if(n[L]!==S)if(O&&0===f.length&&n.substr(L,a)===O){if(-1===m)return E();L=m+s,m=n.indexOf(T,L),_=n.indexOf(x,L)}else if(-1!==_&&(_<m||-1===m))f.push(n.substring(L,_)),L=_+e,_=n.indexOf(x,L);else{if(-1===m)break;if(f.push(n.substring(L,m)),w(m+s),o&&(R(),F))return E();if(D&&h.length>=D)return E(!0)}else for(p=L,L++;;){if(-1===(p=n.indexOf(S,p+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:L}),b();if(p===r-1)return b(n.substring(L,p).replace(g,S));if(S!==A||n[p+1]!==A){if(S===A||0===p||n[p-1]!==A){var v=C(_);if(n[p+1+v]===x){f.push(n.substring(L,p).replace(g,S)),L=p+1+v+e,_=n.indexOf(x,L),m=n.indexOf(T,L);break}var k=C(m);if(n.substr(p+1+k,s)===T){if(f.push(n.substring(L,p).replace(g,S)),w(p+1+k+s),_=n.indexOf(x,L),o&&(R(),F))return E();if(D&&h.length>=D)return E(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:L}),p++}}else p++}return b();function y(e){h.push(e),d=L}function C(e){var t=0;if(-1!==e){var i=n.substring(p+1,e);i&&""===i.trim()&&(t=i.length)}return t}function b(e){return i||(void 0===e&&(e=n.substr(L)),f.push(e),L=r,y(f),o&&R()),E()}function w(e){L=e,y(f),f=[],m=n.indexOf(T,L)}function E(e){return{data:h,errors:u,meta:{delimiter:x,linebreak:T,aborted:F,truncated:!!e,cursor:d+(t||0)}}}function R(){I(E()),h=[],u=[]}},this.abort=function(){F=!0},this.getCharIndex=function(){return L}}function y(e){var t=e.data,i=h[t.workerId],n=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var r={abort:function(){n=!0,C(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:b,resume:b};if(M(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:[t.results.data[s]],errors:t.results.errors,meta:t.results.meta},r),!n);s++);delete t.results}else M(i.userChunk)&&(i.userChunk(t.results,r,t.file),delete t.results)}t.finished&&!n&&C(t.workerId,t.results)}function C(e,t){var i=h[e];M(i.userComplete)&&i.userComplete(t),i.terminate(),delete h[e]}function b(){throw"Not implemented."}function w(e){if("object"!=typeof e||null===e)return e;var t=e instanceof Array?[]:{};for(var i in e)t[i]=w(e[i]);return t}function E(e,t){return function(){e.apply(t,arguments)}}function M(e){return"function"==typeof e}return o?f.onmessage=function(e){var t=e.data;void 0===v.WORKER_ID&&t&&(v.WORKER_ID=t.workerId);if("string"==typeof t.input)f.postMessage({workerId:v.WORKER_ID,results:v.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var i=v.parse(t.input,t.config);i&&f.postMessage({workerId:v.WORKER_ID,results:i,finished:!0})}}:v.WORKERS_SUPPORTED&&(e=document.getElementsByTagName("script"),s=e.length?e[e.length-1].src:"",document.body?document.addEventListener("DOMContentLoaded",function(){a=!0},!0):a=!0),(l.prototype=Object.create(c.prototype)).constructor=l,(p.prototype=Object.create(c.prototype)).constructor=p,(_.prototype=Object.create(_.prototype)).constructor=_,(m.prototype=Object.create(c.prototype)).constructor=m,(g.prototype=Object.create(c.prototype)).constructor=g,v}); |
@@ -71,5 +71,7 @@ var stepped = 0, chunks = 0, rows = 0; | ||
var delim = $('#delimiter').val(); | ||
var header = $('#header').prop('checked'); | ||
var results = Papa.unparse(input, { | ||
delimiter: delim | ||
delimiter: delim, | ||
header: header, | ||
}); | ||
@@ -76,0 +78,0 @@ |
@@ -52,2 +52,4 @@ Parse CSV with JavaScript | ||
Papa Parse can also parse in a node streaming style which makes `.pipe` available. Simply pipe the [Readable Stream](https://nodejs.org/api/stream.html#stream_readable_streams) to the stream returned from `Papa.parse(Papa.NODE_STREAM_INPUT, options)`. The `Papa.LocalChunkSize`, `Papa.RemoteChunkSize` , `download`, `withCredentials`, `worker`, `step`, and `complete` config options are unavailable. To register a callback with the stream to process data, use the `data` event like so: `stream.on('data', callback)` and to signal the end of stream, use the 'end' event like so: `stream.on('end', callback)`. | ||
Get Started | ||
@@ -54,0 +56,0 @@ ----------- |
@@ -62,2 +62,69 @@ "use strict"; | ||
it('reports the correct row number on FieldMismatch errors', function(done) { | ||
Papa.parse(fs.createReadStream(__dirname + '/verylong-sample.csv'), { | ||
header: true, | ||
fastMode: true, | ||
complete: function(parsedCsv) { | ||
assert.deepEqual(parsedCsv.errors, [ | ||
{ | ||
"type": "FieldMismatch", | ||
"code": "TooFewFields", | ||
"message": "Too few fields: expected 3 fields but parsed 2", | ||
"row": 498 | ||
}, | ||
{ | ||
"type": "FieldMismatch", | ||
"code": "TooFewFields", | ||
"message": "Too few fields: expected 3 fields but parsed 2", | ||
"row": 998 | ||
}, | ||
{ | ||
"type": "FieldMismatch", | ||
"code": "TooFewFields", | ||
"message": "Too few fields: expected 3 fields but parsed 2", | ||
"row": 1498 | ||
}, | ||
{ | ||
"type": "FieldMismatch", | ||
"code": "TooFewFields", | ||
"message": "Too few fields: expected 3 fields but parsed 2", | ||
"row": 1998 | ||
} | ||
]); | ||
assert.strictEqual(2000, parsedCsv.data.length); | ||
done(); | ||
}, | ||
}); | ||
}); | ||
it('piped streaming CSV should be correctly parsed', function(done) { | ||
var data = []; | ||
var readStream = fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'); | ||
var csvStream = readStream.pipe(Papa.parse(Papa.NODE_STREAM_INPUT)); | ||
csvStream.on('data', function(item) { | ||
data.push(item); | ||
}); | ||
csvStream.on('end', function() { | ||
assert.deepEqual(data[0], [ | ||
'Grant', | ||
'Dyer', | ||
'Donec.elementum@orciluctuset.example', | ||
'2013-11-23T02:30:31-08:00', | ||
'2014-05-31T01:06:56-07:00', | ||
'Magna Ut Associates', | ||
'ljenkins' | ||
]); | ||
assert.deepEqual(data[7], [ | ||
'Talon', | ||
'Salinas', | ||
'posuere.vulputate.lacus@Donecsollicitudin.example', | ||
'2015-01-31T09:19:02-08:00', | ||
'2014-12-17T04:59:18-08:00', | ||
'Aliquam Iaculis Incorporate', | ||
'Phasellus@Quisquetincidunt.example' | ||
]); | ||
done(); | ||
}); | ||
}); | ||
it('should support pausing and resuming on same tick when streaming', function(done) { | ||
@@ -64,0 +131,0 @@ var rows = []; |
@@ -876,2 +876,24 @@ var chai; | ||
{ | ||
description: "Custom transform function is applied to values", | ||
input: 'A,B,C\r\nd,e,f', | ||
config: { | ||
transform: function(value) { | ||
return value.toLowerCase(); | ||
} | ||
}, | ||
expected: { | ||
data: [["a","b","c"], ["d","e","f"]], | ||
errors: [] | ||
} | ||
}, | ||
{ | ||
description: "Dynamic typing converts ISO date strings to Dates", | ||
input: 'ISO date,long date\r\n2018-05-04T21:08:03.269Z,Fri May 04 2018 14:08:03 GMT-0700 (PDT)\r\n2018-05-08T15:20:22.642Z,Tue May 08 2018 08:20:22 GMT-0700 (PDT)', | ||
config: { dynamicTyping: true }, | ||
expected: { | ||
data: [["ISO date", "long date"], [new Date("2018-05-04T21:08:03.269Z"), "Fri May 04 2018 14:08:03 GMT-0700 (PDT)"], [new Date("2018-05-08T15:20:22.642Z"), "Tue May 08 2018 08:20:22 GMT-0700 (PDT)"]], | ||
errors: [] | ||
} | ||
}, | ||
{ | ||
description: "Blank line at beginning", | ||
@@ -1095,2 +1117,22 @@ input: '\r\na,b,c\r\nd,e,f', | ||
{ | ||
description: "Lines with comments are not used when guessing the delimiter in an escaped file", | ||
notes: "Guessing the delimiter should work even if there are many lines of comments at the start of the file", | ||
input: '#1\n#2\n#3\n#4\n#5\n#6\n#7\n#8\n#9\n#10\none,"t,w,o",three\nfour,five,six', | ||
config: { comments: '#' }, | ||
expected: { | ||
data: [['one','t,w,o','three'],['four','five','six']], | ||
errors: [] | ||
} | ||
}, | ||
{ | ||
description: "Lines with comments are not used when guessing the delimiter in a non-escaped file", | ||
notes: "Guessing the delimiter should work even if there are many lines of comments at the start of the file", | ||
input: '#1\n#2\n#3\n#4\n#5\n#6\n#7\n#8\n#9\n#10\n#11\none,two,three\nfour,five,six', | ||
config: { comments: '#' }, | ||
expected: { | ||
data: [['one','two','three'],['four','five','six']], | ||
errors: [] | ||
} | ||
}, | ||
{ | ||
description: "Single quote as quote character", | ||
@@ -1407,2 +1449,7 @@ notes: "Must parse correctly when single quote is specified as a quote character", | ||
expected: 'a,b,c\r\nd,e,f' | ||
}, | ||
{ | ||
description: "Date objects are exported in its ISO representation", | ||
input: [{date: new Date("2018-05-04T21:08:03.269Z"), "not a date": 16}, {date: new Date("Tue May 08 2018 08:20:22 GMT-0700 (PDT)"), "not a date": 32}], | ||
expected: 'date,not a date\r\n2018-05-04T21:08:03.269Z,16\r\n2018-05-08T15:20:22.000Z,32' | ||
} | ||
@@ -1409,0 +1456,0 @@ ]; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
224514
21
4942
70
1