569 lines
18 KiB
JavaScript
569 lines
18 KiB
JavaScript
|
|
// Generated by CoffeeScript 1.12.7
|
||
|
|
var Parser, StringDecoder, isObjLiteral, stream, util;
|
||
|
|
|
||
|
|
stream = require('stream');
|
||
|
|
|
||
|
|
util = require('util');
|
||
|
|
|
||
|
|
StringDecoder = require('string_decoder').StringDecoder;
|
||
|
|
|
||
|
|
module.exports = function() {
|
||
|
|
var callback, called, chunks, data, err, options, parser;
|
||
|
|
if (arguments.length === 3) {
|
||
|
|
data = arguments[0];
|
||
|
|
options = arguments[1];
|
||
|
|
callback = arguments[2];
|
||
|
|
if (typeof callback !== 'function') {
|
||
|
|
throw Error("Invalid callback argument: " + (JSON.stringify(callback)));
|
||
|
|
}
|
||
|
|
if (!(typeof data === 'string' || Buffer.isBuffer(arguments[0]))) {
|
||
|
|
return callback(Error("Invalid data argument: " + (JSON.stringify(data))));
|
||
|
|
}
|
||
|
|
} else if (arguments.length === 2) {
|
||
|
|
if (typeof arguments[0] === 'string' || Buffer.isBuffer(arguments[0])) {
|
||
|
|
data = arguments[0];
|
||
|
|
} else if (isObjLiteral(arguments[0])) {
|
||
|
|
options = arguments[0];
|
||
|
|
} else {
|
||
|
|
err = "Invalid first argument: " + (JSON.stringify(arguments[0]));
|
||
|
|
}
|
||
|
|
if (typeof arguments[1] === 'function') {
|
||
|
|
callback = arguments[1];
|
||
|
|
} else if (isObjLiteral(arguments[1])) {
|
||
|
|
if (options) {
|
||
|
|
err = 'Invalid arguments: got options twice as first and second arguments';
|
||
|
|
} else {
|
||
|
|
options = arguments[1];
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
err = "Invalid first argument: " + (JSON.stringify(arguments[1]));
|
||
|
|
}
|
||
|
|
if (err) {
|
||
|
|
if (!callback) {
|
||
|
|
throw Error(err);
|
||
|
|
} else {
|
||
|
|
return callback(Error(err));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else if (arguments.length === 1) {
|
||
|
|
if (typeof arguments[0] === 'function') {
|
||
|
|
callback = arguments[0];
|
||
|
|
} else {
|
||
|
|
options = arguments[0];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (options == null) {
|
||
|
|
options = {};
|
||
|
|
}
|
||
|
|
parser = new Parser(options);
|
||
|
|
if (data != null) {
|
||
|
|
process.nextTick(function() {
|
||
|
|
parser.write(data);
|
||
|
|
return parser.end();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
if (callback) {
|
||
|
|
called = false;
|
||
|
|
chunks = options.objname ? {} : [];
|
||
|
|
parser.on('readable', function() {
|
||
|
|
var chunk, results;
|
||
|
|
results = [];
|
||
|
|
while (chunk = parser.read()) {
|
||
|
|
if (options.objname) {
|
||
|
|
results.push(chunks[chunk[0]] = chunk[1]);
|
||
|
|
} else {
|
||
|
|
results.push(chunks.push(chunk));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return results;
|
||
|
|
});
|
||
|
|
parser.on('error', function(err) {
|
||
|
|
called = true;
|
||
|
|
return callback(err);
|
||
|
|
});
|
||
|
|
parser.on('end', function() {
|
||
|
|
if (!called) {
|
||
|
|
return callback(null, chunks);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return parser;
|
||
|
|
};
|
||
|
|
|
||
|
|
Parser = function(options) {
|
||
|
|
var base, base1, base10, base11, base12, base13, base14, base15, base16, base2, base3, base4, base5, base6, base7, base8, base9, k, v;
|
||
|
|
if (options == null) {
|
||
|
|
options = {};
|
||
|
|
}
|
||
|
|
this.options = {};
|
||
|
|
for (k in options) {
|
||
|
|
v = options[k];
|
||
|
|
this.options[k] = v;
|
||
|
|
}
|
||
|
|
this.options.objectMode = true;
|
||
|
|
stream.Transform.call(this, this.options);
|
||
|
|
if ((base = this.options).rowDelimiter == null) {
|
||
|
|
base.rowDelimiter = null;
|
||
|
|
}
|
||
|
|
if (typeof this.options.rowDelimiter === 'string') {
|
||
|
|
this.options.rowDelimiter = [this.options.rowDelimiter];
|
||
|
|
}
|
||
|
|
if ((base1 = this.options).delimiter == null) {
|
||
|
|
base1.delimiter = ',';
|
||
|
|
}
|
||
|
|
if (this.options.quote !== void 0 && !this.options.quote) {
|
||
|
|
this.options.quote = '';
|
||
|
|
}
|
||
|
|
if ((base2 = this.options).quote == null) {
|
||
|
|
base2.quote = '"';
|
||
|
|
}
|
||
|
|
if ((base3 = this.options).escape == null) {
|
||
|
|
base3.escape = '"';
|
||
|
|
}
|
||
|
|
if ((base4 = this.options).columns == null) {
|
||
|
|
base4.columns = null;
|
||
|
|
}
|
||
|
|
if ((base5 = this.options).comment == null) {
|
||
|
|
base5.comment = '';
|
||
|
|
}
|
||
|
|
if ((base6 = this.options).objname == null) {
|
||
|
|
base6.objname = false;
|
||
|
|
}
|
||
|
|
if ((base7 = this.options).trim == null) {
|
||
|
|
base7.trim = false;
|
||
|
|
}
|
||
|
|
if ((base8 = this.options).ltrim == null) {
|
||
|
|
base8.ltrim = false;
|
||
|
|
}
|
||
|
|
if ((base9 = this.options).rtrim == null) {
|
||
|
|
base9.rtrim = false;
|
||
|
|
}
|
||
|
|
if ((base10 = this.options).auto_parse == null) {
|
||
|
|
base10.auto_parse = false;
|
||
|
|
}
|
||
|
|
if ((base11 = this.options).auto_parse_date == null) {
|
||
|
|
base11.auto_parse_date = false;
|
||
|
|
}
|
||
|
|
if (this.options.auto_parse_date === true) {
|
||
|
|
this.options.auto_parse_date = function(value) {
|
||
|
|
var m;
|
||
|
|
m = Date.parse(value);
|
||
|
|
if (!isNaN(m)) {
|
||
|
|
value = new Date(m);
|
||
|
|
}
|
||
|
|
return value;
|
||
|
|
};
|
||
|
|
}
|
||
|
|
if ((base12 = this.options).relax == null) {
|
||
|
|
base12.relax = false;
|
||
|
|
}
|
||
|
|
if ((base13 = this.options).relax_column_count == null) {
|
||
|
|
base13.relax_column_count = false;
|
||
|
|
}
|
||
|
|
if ((base14 = this.options).skip_empty_lines == null) {
|
||
|
|
base14.skip_empty_lines = false;
|
||
|
|
}
|
||
|
|
if ((base15 = this.options).max_limit_on_data_read == null) {
|
||
|
|
base15.max_limit_on_data_read = 128000;
|
||
|
|
}
|
||
|
|
if ((base16 = this.options).skip_lines_with_empty_values == null) {
|
||
|
|
base16.skip_lines_with_empty_values = false;
|
||
|
|
}
|
||
|
|
this.lines = 0;
|
||
|
|
this.count = 0;
|
||
|
|
this.skipped_line_count = 0;
|
||
|
|
this.empty_line_count = 0;
|
||
|
|
this.is_int = /^(\-|\+)?([1-9]+[0-9]*)$/;
|
||
|
|
this.is_float = function(value) {
|
||
|
|
return (value - parseFloat(value) + 1) >= 0;
|
||
|
|
};
|
||
|
|
this._ = {
|
||
|
|
decoder: new StringDecoder(),
|
||
|
|
quoting: false,
|
||
|
|
commenting: false,
|
||
|
|
field: null,
|
||
|
|
nextChar: null,
|
||
|
|
closingQuote: 0,
|
||
|
|
line: [],
|
||
|
|
chunks: [],
|
||
|
|
rawBuf: '',
|
||
|
|
buf: '',
|
||
|
|
rowDelimiterLength: this.options.rowDelimiter ? Math.max.apply(Math, this.options.rowDelimiter.map(function(v) {
|
||
|
|
return v.length;
|
||
|
|
})) : void 0
|
||
|
|
};
|
||
|
|
return this;
|
||
|
|
};
|
||
|
|
|
||
|
|
util.inherits(Parser, stream.Transform);
|
||
|
|
|
||
|
|
module.exports.Parser = Parser;
|
||
|
|
|
||
|
|
Parser.prototype._transform = function(chunk, encoding, callback) {
|
||
|
|
var err;
|
||
|
|
if (chunk instanceof Buffer) {
|
||
|
|
chunk = this._.decoder.write(chunk);
|
||
|
|
}
|
||
|
|
err = this.__write(chunk, false);
|
||
|
|
if (err) {
|
||
|
|
return this.emit('error', err);
|
||
|
|
}
|
||
|
|
return callback();
|
||
|
|
};
|
||
|
|
|
||
|
|
Parser.prototype._flush = function(callback) {
|
||
|
|
var err;
|
||
|
|
err = this.__write(this._.decoder.end(), true);
|
||
|
|
if (err) {
|
||
|
|
return this.emit('error', err);
|
||
|
|
}
|
||
|
|
if (this._.quoting) {
|
||
|
|
this.emit('error', new Error("Quoted field not terminated at line " + (this.lines + 1)));
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (this._.line.length > 0) {
|
||
|
|
err = this.__push(this._.line);
|
||
|
|
if (err) {
|
||
|
|
return callback(err);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return callback();
|
||
|
|
};
|
||
|
|
|
||
|
|
Parser.prototype.__push = function(line) {
|
||
|
|
var call_column_udf, columns, err, field, i, j, len, lineAsColumns, rawBuf, ref, row;
|
||
|
|
if (this.options.skip_lines_with_empty_values && line.join('').trim() === '') {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
row = null;
|
||
|
|
if (this.options.columns === true) {
|
||
|
|
this.options.columns = line;
|
||
|
|
rawBuf = '';
|
||
|
|
return;
|
||
|
|
} else if (typeof this.options.columns === 'function') {
|
||
|
|
call_column_udf = function(fn, line) {
|
||
|
|
var columns, err;
|
||
|
|
try {
|
||
|
|
columns = fn.call(null, line);
|
||
|
|
return [null, columns];
|
||
|
|
} catch (error) {
|
||
|
|
err = error;
|
||
|
|
return [err];
|
||
|
|
}
|
||
|
|
};
|
||
|
|
ref = call_column_udf(this.options.columns, line), err = ref[0], columns = ref[1];
|
||
|
|
if (err) {
|
||
|
|
return err;
|
||
|
|
}
|
||
|
|
this.options.columns = columns;
|
||
|
|
rawBuf = '';
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (!this._.line_length && line.length > 0) {
|
||
|
|
this._.line_length = this.options.columns ? this.options.columns.length : line.length;
|
||
|
|
}
|
||
|
|
if (line.length === 1 && line[0] === '') {
|
||
|
|
this.empty_line_count++;
|
||
|
|
} else if (line.length !== this._.line_length) {
|
||
|
|
if (this.options.relax_column_count) {
|
||
|
|
this.count++;
|
||
|
|
this.skipped_line_count++;
|
||
|
|
} else if (this.options.columns != null) {
|
||
|
|
return Error("Number of columns on line " + this.lines + " does not match header");
|
||
|
|
} else {
|
||
|
|
return Error("Number of columns is inconsistent on line " + this.lines);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
this.count++;
|
||
|
|
}
|
||
|
|
if (this.options.columns != null) {
|
||
|
|
lineAsColumns = {};
|
||
|
|
for (i = j = 0, len = line.length; j < len; i = ++j) {
|
||
|
|
field = line[i];
|
||
|
|
if (this.options.columns[i] === false) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
lineAsColumns[this.options.columns[i]] = field;
|
||
|
|
}
|
||
|
|
if (this.options.objname) {
|
||
|
|
row = [lineAsColumns[this.options.objname], lineAsColumns];
|
||
|
|
} else {
|
||
|
|
row = lineAsColumns;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
row = line;
|
||
|
|
}
|
||
|
|
if (this.count < this.options.from) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (this.count > this.options.to) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (this.options.raw) {
|
||
|
|
this.push({
|
||
|
|
raw: this._.rawBuf,
|
||
|
|
row: row
|
||
|
|
});
|
||
|
|
this._.rawBuf = '';
|
||
|
|
} else {
|
||
|
|
this.push(row);
|
||
|
|
}
|
||
|
|
return null;
|
||
|
|
};
|
||
|
|
|
||
|
|
Parser.prototype.__write = function(chars, end) {
|
||
|
|
var areNextCharsDelimiter, areNextCharsRowDelimiters, auto_parse, char, err, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, ref5, remainingBuffer, rowDelimiter, rtrim, wasCommenting;
|
||
|
|
is_int = (function(_this) {
|
||
|
|
return function(value) {
|
||
|
|
if (typeof _this.is_int === 'function') {
|
||
|
|
return _this.is_int(value);
|
||
|
|
} else {
|
||
|
|
return _this.is_int.test(value);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
})(this);
|
||
|
|
is_float = (function(_this) {
|
||
|
|
return function(value) {
|
||
|
|
if (typeof _this.is_float === 'function') {
|
||
|
|
return _this.is_float(value);
|
||
|
|
} else {
|
||
|
|
return _this.is_float.test(value);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
})(this);
|
||
|
|
auto_parse = (function(_this) {
|
||
|
|
return function(value) {
|
||
|
|
if (!_this.options.auto_parse) {
|
||
|
|
return value;
|
||
|
|
}
|
||
|
|
if (typeof _this.options.auto_parse === 'function') {
|
||
|
|
return _this.options.auto_parse(value);
|
||
|
|
}
|
||
|
|
if (is_int(value)) {
|
||
|
|
value = parseInt(value);
|
||
|
|
} else if (is_float(value)) {
|
||
|
|
value = parseFloat(value);
|
||
|
|
} else if (_this.options.auto_parse_date) {
|
||
|
|
value = _this.options.auto_parse_date(value);
|
||
|
|
}
|
||
|
|
return value;
|
||
|
|
};
|
||
|
|
})(this);
|
||
|
|
ltrim = this.options.trim || this.options.ltrim;
|
||
|
|
rtrim = this.options.trim || this.options.rtrim;
|
||
|
|
chars = this._.buf + chars;
|
||
|
|
l = chars.length;
|
||
|
|
i = 0;
|
||
|
|
if (this.lines === 0 && 0xFEFF === chars.charCodeAt(0)) {
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
while (i < l) {
|
||
|
|
if (!end) {
|
||
|
|
remainingBuffer = chars.substr(i, l - i);
|
||
|
|
if ((!this.options.rowDelimiter && i + 3 > l) || (!this._.commenting && l - i < this.options.comment.length && this.options.comment.substr(0, l - i) === remainingBuffer) || (this.options.rowDelimiter && l - i < this._.rowDelimiterLength && this.options.rowDelimiter.some(function(rd) {
|
||
|
|
return rd.substr(0, l - i) === remainingBuffer;
|
||
|
|
})) || (this.options.rowDelimiter && this._.quoting && l - i < (this.options.quote.length + this._.rowDelimiterLength) && this.options.rowDelimiter.some((function(_this) {
|
||
|
|
return function(rd) {
|
||
|
|
return (_this.options.quote + rd).substr(0, l - i) === remainingBuffer;
|
||
|
|
};
|
||
|
|
})(this))) || (l - i <= this.options.delimiter.length && this.options.delimiter.substr(0, l - i) === remainingBuffer) || (l - i <= this.options.escape.length && this.options.escape.substr(0, l - i) === remainingBuffer)) {
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
char = this._.nextChar ? this._.nextChar : chars.charAt(i);
|
||
|
|
this._.nextChar = l > i + 1 ? chars.charAt(i + 1) : '';
|
||
|
|
if (this.options.raw) {
|
||
|
|
this._.rawBuf += char;
|
||
|
|
}
|
||
|
|
if (this.options.rowDelimiter == null) {
|
||
|
|
nextCharPos = i;
|
||
|
|
rowDelimiter = null;
|
||
|
|
if (!this._.quoting && (char === '\n' || char === '\r')) {
|
||
|
|
rowDelimiter = char;
|
||
|
|
nextCharPos += 1;
|
||
|
|
} else if (this._.quoting && char === this.options.quote && ((ref = this._.nextChar) === '\n' || ref === '\r')) {
|
||
|
|
rowDelimiter = this._.nextChar;
|
||
|
|
nextCharPos += 2;
|
||
|
|
if (this.raw) {
|
||
|
|
rawBuf += this._.nextChar;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (rowDelimiter) {
|
||
|
|
if (rowDelimiter === '\r' && chars.charAt(nextCharPos) === '\n') {
|
||
|
|
rowDelimiter += '\n';
|
||
|
|
}
|
||
|
|
this.options.rowDelimiter = [rowDelimiter];
|
||
|
|
this._.rowDelimiterLength = rowDelimiter.length;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (!this._.commenting && char === this.options.escape) {
|
||
|
|
escapeIsQuote = this.options.escape === this.options.quote;
|
||
|
|
isEscape = this._.nextChar === this.options.escape;
|
||
|
|
isQuote = this._.nextChar === this.options.quote;
|
||
|
|
if (!(escapeIsQuote && (this._.field == null) && !this._.quoting) && (isEscape || isQuote)) {
|
||
|
|
i++;
|
||
|
|
char = this._.nextChar;
|
||
|
|
this._.nextChar = chars.charAt(i + 1);
|
||
|
|
if (this._.field == null) {
|
||
|
|
this._.field = '';
|
||
|
|
}
|
||
|
|
this._.field += char;
|
||
|
|
if (this.options.raw) {
|
||
|
|
this._.rawBuf += char;
|
||
|
|
}
|
||
|
|
i++;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (!this._.commenting && char === this.options.quote) {
|
||
|
|
if (this._.quoting) {
|
||
|
|
areNextCharsRowDelimiters = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {
|
||
|
|
return chars.substr(i + 1, rd.length) === rd;
|
||
|
|
});
|
||
|
|
areNextCharsDelimiter = chars.substr(i + 1, this.options.delimiter.length) === this.options.delimiter;
|
||
|
|
isNextCharAComment = this._.nextChar === this.options.comment;
|
||
|
|
if (this._.nextChar && !areNextCharsRowDelimiters && !areNextCharsDelimiter && !isNextCharAComment) {
|
||
|
|
if (this.options.relax) {
|
||
|
|
this._.quoting = false;
|
||
|
|
if (this._.field) {
|
||
|
|
this._.field = "" + this.options.quote + this._.field;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
return Error("Invalid closing quote at line " + (this.lines + 1) + "; found " + (JSON.stringify(this._.nextChar)) + " instead of delimiter " + (JSON.stringify(this.options.delimiter)));
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
this._.quoting = false;
|
||
|
|
this._.closingQuote = this.options.quote.length;
|
||
|
|
i++;
|
||
|
|
if (end && i === l) {
|
||
|
|
this._.line.push(auto_parse(this._.field || ''));
|
||
|
|
this._.field = null;
|
||
|
|
}
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
} else if (!this._.field) {
|
||
|
|
this._.quoting = true;
|
||
|
|
i++;
|
||
|
|
continue;
|
||
|
|
} else if ((this._.field != null) && !this.options.relax) {
|
||
|
|
return Error("Invalid opening quote at line " + (this.lines + 1));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
isRowDelimiter = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {
|
||
|
|
return chars.substr(i, rd.length) === rd;
|
||
|
|
});
|
||
|
|
if (isRowDelimiter || (end && i === l - 1)) {
|
||
|
|
this.lines++;
|
||
|
|
}
|
||
|
|
wasCommenting = false;
|
||
|
|
if (!this._.commenting && !this._.quoting && this.options.comment && chars.substr(i, this.options.comment.length) === this.options.comment) {
|
||
|
|
this._.commenting = true;
|
||
|
|
} else if (this._.commenting && isRowDelimiter) {
|
||
|
|
wasCommenting = true;
|
||
|
|
this._.commenting = false;
|
||
|
|
}
|
||
|
|
isDelimiter = chars.substr(i, this.options.delimiter.length) === this.options.delimiter;
|
||
|
|
if (!this._.commenting && !this._.quoting && (isDelimiter || isRowDelimiter)) {
|
||
|
|
if (isRowDelimiter) {
|
||
|
|
isRowDelimiterLength = this.options.rowDelimiter.filter(function(rd) {
|
||
|
|
return chars.substr(i, rd.length) === rd;
|
||
|
|
})[0].length;
|
||
|
|
}
|
||
|
|
if (isRowDelimiter && this._.line.length === 0 && (this._.field == null)) {
|
||
|
|
if (wasCommenting || this.options.skip_empty_lines) {
|
||
|
|
i += isRowDelimiterLength;
|
||
|
|
this._.nextChar = chars.charAt(i);
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (rtrim) {
|
||
|
|
if (!this._.closingQuote) {
|
||
|
|
this._.field = (ref1 = this._.field) != null ? ref1.trimRight() : void 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this._.line.push(auto_parse(this._.field || ''));
|
||
|
|
this._.closingQuote = 0;
|
||
|
|
this._.field = null;
|
||
|
|
if (isDelimiter) {
|
||
|
|
i += this.options.delimiter.length;
|
||
|
|
this._.nextChar = chars.charAt(i);
|
||
|
|
if (end && !this._.nextChar) {
|
||
|
|
isRowDelimiter = true;
|
||
|
|
this._.line.push('');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (isRowDelimiter) {
|
||
|
|
err = this.__push(this._.line);
|
||
|
|
if (err) {
|
||
|
|
return err;
|
||
|
|
}
|
||
|
|
this._.line = [];
|
||
|
|
i += isRowDelimiterLength;
|
||
|
|
this._.nextChar = chars.charAt(i);
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
} else if (!this._.commenting && !this._.quoting && (char === ' ' || char === '\t')) {
|
||
|
|
if (this._.field == null) {
|
||
|
|
this._.field = '';
|
||
|
|
}
|
||
|
|
if (!(ltrim && !this._.field)) {
|
||
|
|
this._.field += char;
|
||
|
|
}
|
||
|
|
i++;
|
||
|
|
} else if (!this._.commenting) {
|
||
|
|
if (this._.field == null) {
|
||
|
|
this._.field = '';
|
||
|
|
}
|
||
|
|
this._.field += char;
|
||
|
|
i++;
|
||
|
|
} else {
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
if (!this._.commenting && ((ref2 = this._.field) != null ? ref2.length : void 0) > this.options.max_limit_on_data_read) {
|
||
|
|
return Error("Field exceeds max_limit_on_data_read setting (" + this.options.max_limit_on_data_read + ") " + (JSON.stringify(this.options.delimiter)));
|
||
|
|
}
|
||
|
|
if (!this._.commenting && ((ref3 = this._.line) != null ? ref3.length : void 0) > this.options.max_limit_on_data_read) {
|
||
|
|
return Error("Row delimiter not found in the file " + (JSON.stringify(this.options.rowDelimiter)));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (end) {
|
||
|
|
if (this._.field != null) {
|
||
|
|
if (rtrim) {
|
||
|
|
if (!this._.closingQuote) {
|
||
|
|
this._.field = (ref4 = this._.field) != null ? ref4.trimRight() : void 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this._.line.push(auto_parse(this._.field || ''));
|
||
|
|
this._.field = null;
|
||
|
|
}
|
||
|
|
if (((ref5 = this._.field) != null ? ref5.length : void 0) > this.options.max_limit_on_data_read) {
|
||
|
|
return Error("Delimiter not found in the file " + (JSON.stringify(this.options.delimiter)));
|
||
|
|
}
|
||
|
|
if (l === 0) {
|
||
|
|
this.lines++;
|
||
|
|
}
|
||
|
|
if (this._.line.length > this.options.max_limit_on_data_read) {
|
||
|
|
return Error("Row delimiter not found in the file " + (JSON.stringify(this.options.rowDelimiter)));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this._.buf = chars.substr(i);
|
||
|
|
return null;
|
||
|
|
};
|
||
|
|
|
||
|
|
isObjLiteral = function(_obj) {
|
||
|
|
var _test;
|
||
|
|
_test = _obj;
|
||
|
|
if (typeof _obj !== 'object' || _obj === null || Array.isArray(_obj)) {
|
||
|
|
return false;
|
||
|
|
} else {
|
||
|
|
return (function() {
|
||
|
|
while (!false) {
|
||
|
|
if (Object.getPrototypeOf(_test = Object.getPrototypeOf(_test)) === null) {
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return Object.getPrototypeOf(_obj === _test);
|
||
|
|
})();
|
||
|
|
}
|
||
|
|
};
|