feat: Add Be and tbd skill, also added Roadmap file

This commit is contained in:
2026-05-10 16:32:12 -04:00
parent 3500ade13f
commit 0bb8885802
29587 changed files with 10611695 additions and 0 deletions

4
Skills/@be/node_modules/csv-parse/.npmignore generated vendored Normal file
View File

@@ -0,0 +1,4 @@
/src
/test
/Makefile
.travis.yml

154
Skills/@be/node_modules/csv-parse/CHANGELOG.md generated vendored Normal file
View File

@@ -0,0 +1,154 @@
# Changelog
## v1.3.1
* package: preserve compatibility with Node.js < 7.6
## v1.3.0
* options: auto_parse as a user function
* options: auto_parse_date as a user function
* test: should require handled by mocha
* package: coffeescript 2 and use semver tilde
* options: ensure objectMode is cloned
## v1.2.4
* relax_column_count: honors count while preserving skipped_line_count
* api: improve argument validation
## v1.2.3
* sync: catch err on write
## v1.2.2
* relax: handle double quote
## v1.2.1
* src: group state variable initialisation
* package: update repo url
* quote: disabled when null, false or empty
* src: remove try/catch
* src: optimize estimation for row delimiter length
* lines: improve tests
* src: use in instead of multiple is
* src: string optimization
## v1.2.0
* skip default row delimiters when quoted #58
* auto_parse: cleaner implementation
* src: isolate internal variables
## v1.1.12
* options: new to and from options
## v1.1.11
* rowDelimiters: fix all last month issues
## v1.1.10
* regression with trim and last empty field #123
## V1.1.9
* rowDelimiter: simplification
* fix regression when trim and skip_empty_lines activated #122
* auto_parse = simplify internal function
## V1.1.8
* src: trailing whitespace and empty headers #120
* rowDelimiter: adding support for multiple row delimiters #119
* Remove unnecessary argument: Parser.prototype.\__write #114
## v1.1.7
* skip_lines_with_empty_values: support space and tabs #108
* test: remove coverage support
* test: group by api, options and properties
* skip_lines_with_empty_values option
* write test illustrating column function throwing an error #98
* added ability to skip columns #50
## v1.1.6
* reduce substr usage
* new raw option
## v1.1.5
* empty_line_count counter and renamed skipped to skipped_line_count
* skipped line count
## v1.1.4
* avoid deoptimization due to wrong charAt index #103
* parser writing before assigning listeners
## v1.1.3
* column: stop on column count error #100
## v1.1.2
* make the parser more sensitive to input
* test case about the chunks of multiple chars without quotes
* test about data emission with newline
## v1.1.1
* stream: call end if data instance of buffer
* travis: add nodejs 6
* columns: fix line error #97
## v1.1.0
* relax_column_count: default to false (strict)
## v1.0.6
* relax_column_count: backward compatibility for 1.0.x
* relax_column_count: introduce new option
* columns: detect column length and fix lines count
## v1.0.5
* fix quotes tests that used data with inconsistent number of #73
* add tests for inconsistent number of columns #73
* throw an error when a column is missing #73
* travis: test nodejs versions 4, 5
* max_limit_on_data_read: new option
* removing the duplicate files in test and samples #86
* option argument to accept the number of bytes can be read #86
* avoid unwanted parsing when there is wrong delimiter or row delimiter #86
## v1.0.4
* sync: support objname
## v1.0.3
* sync: please older versions of node.js
* sync: new sample
## v1.0.2
* sync: new module
* removed global variable record on stream.js example #70
## v1.0.1
* api: accept buffer with 3 arguments #57
* package: latest dependencies
* spectrum: bypass regression test
## v1.0.0
* auto_parse: work on all fields, rename to “is_*”
* auto_parse: simplify test

16
Skills/@be/node_modules/csv-parse/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,16 @@
Software License Agreement (BSD License)
========================================
Copyright (c) 2011, SARL Adaltas.
All rights reserved.
Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of SARL Adaltas nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the SARL Adaltas.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

28
Skills/@be/node_modules/csv-parse/README.md generated vendored Normal file
View File

@@ -0,0 +1,28 @@
[![Build Status](https://secure.travis-ci.org/adaltas/node-csv-parse.svg)][travis]
Part of the [CSV module][csv_home], this project is a parser converting CSV text
input into arrays or objects. It implements the Node.js
[`stream.Transform` API][stream_transform]. It also provides a simple
callback-based API for convenience. It is both extremely easy to use and
powerful. It was first released in 2010 and is used against big data sets by a
large community.
[Documentation for the "csv-parse" package is available here][home].
## Features
* Follow the Node.js streaming API
* Simplicity with the optional callback API
* Support delimiters, quotes, escape characters and comments
* Line breaks discovery
* Support big datasets
* Complete test coverage and samples for inspiration
* no external dependencies
* to be used conjointly with `csv-generate`, `stream-transform` and `csv-stringify`
* BSD License
[home]: http://csv.adaltas.com/parse/
[csv_home]: https://github.com/wdavidw/node-csv
[stream_transform]: http://nodejs.org/api/stream.html#stream_class_stream_transform
[travis]: http://travis-ci.org/wdavidw/node-csv-parse

120
Skills/@be/node_modules/csv-parse/lib/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,120 @@
// Type definitions for csv-parse 1.1
// Project: https://github.com/wdavidw/node-csv-parse
// Definitions by: David Muller <https://github.com/davidm77>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference types="node" />
import * as stream from "stream";
export = parse;
declare function parse(input: string, options?: parse.Options, callback?: parse.Callback): any;
declare function parse(options?: parse.Options, callback?: parse.Callback): any;
declare function parse(callback?: parse.Callback): any;
declare namespace parse {
type Callback = (err: any, output: any) => void;
interface Parser extends stream.Transform {}
class Parser {
constructor(options: Options);
__push(line: any): any ;
__write(chars: any, end: any, callback: any): any;
}
interface Options {
/**
* Set the field delimiter. One character only, defaults to comma.
*/
delimiter?: string;
/**
* String used to delimit record rows or a special value;
* special constants are 'auto', 'unix', 'mac', 'windows', 'unicode';
* defaults to 'auto' (discovered in source or 'unix' if no source is specified).
*/
rowDelimiter?: string;
/**
* Optional character surrounding a field, one character only, defaults to double quotes.
*/
quote?: string
/**
* Set the escape character, one character only, defaults to double quotes.
*/
escape?: string
/**
* List of fields as an array,
* a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line,
* default to null,
* affect the result data set in the sense that records will be objects instead of arrays.
*/
columns?: any[] | boolean | ((line1: any[]) => boolean | string[]);
/**
* Treat all the characters after this one as a comment, default to '' (disabled).
*/
comment?: string
/**
* Name of header-record title to name objects by.
*/
objname?: string
/**
* Preserve quotes inside unquoted field.
*/
relax?: boolean
/**
* Discard inconsistent columns count, default to false.
*/
relax_column_count?: boolean
/**
* Dont generate empty values for empty lines.
*/
skip_empty_lines?: boolean
/**
* Maximum numer of characters to be contained in the field and line buffers before an exception is raised,
* used to guard against a wrong delimiter or rowDelimiter,
* default to 128000 characters.
*/
max_limit_on_data_read?: number
/**
* If true, ignore whitespace immediately around the delimiter, defaults to false.
* Does not remove whitespace in a quoted field.
*/
trim?: boolean
/**
* If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false.
* Does not remove whitespace in a quoted field.
*/
ltrim?: boolean
/**
* If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false.
* Does not remove whitespace in a quoted field.
*/
rtrim?: boolean
/**
* If true, the parser will attempt to convert read data types to native types.
*/
auto_parse?: boolean
/**
* If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option.
*/
auto_parse_date?: boolean
}
// TODO: what is this for?
interface ParserStream extends NodeJS.ReadWriteStream {
read(size?: number): any & string[];
}
}

568
Skills/@be/node_modules/csv-parse/lib/index.js generated vendored Normal file
View File

@@ -0,0 +1,568 @@
// 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);
})();
}
};

38
Skills/@be/node_modules/csv-parse/lib/sync.js generated vendored Normal file
View File

@@ -0,0 +1,38 @@
// Generated by CoffeeScript 1.12.7
var StringDecoder, parse;
StringDecoder = require('string_decoder').StringDecoder;
parse = require('./index');
module.exports = function(data, options) {
var decoder, err, parser, records;
if (options == null) {
options = {};
}
records = options.objname ? {} : [];
if (data instanceof Buffer) {
decoder = new StringDecoder();
data = decoder.write(data);
}
parser = new parse.Parser(options);
parser.push = function(record) {
if (options.objname) {
return records[record[0]] = record[1];
} else {
return records.push(record);
}
};
err = parser.__write(data, false);
if (err) {
throw err;
}
if (data instanceof Buffer) {
err = parser.__write(data.end(), true);
if (err) {
throw err;
}
}
parser._flush((function() {}));
return records;
};

376
Skills/@be/node_modules/csv-parse/package-lock.json generated vendored Normal file
View File

@@ -0,0 +1,376 @@
{
"name": "csv-parse",
"version": "1.2.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"dev": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"browser-stdout": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
"integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
"dev": true
},
"coffee-script": {
"version": "1.12.7",
"resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
"integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==",
"dev": true
},
"commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
"dev": true,
"requires": {
"graceful-readlink": "1.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"csv-generate": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-1.0.0.tgz",
"integrity": "sha1-vVKIaFnQySXz5R9g86vtJi+hXK8=",
"dev": true
},
"csv-spectrum": {
"version": "https://registry.npmjs.org/csv-spectrum/-/csv-spectrum-1.0.0.tgz",
"integrity": "sha1-WRrJ/0itTz60M4RXvJgBs0nj1ig=",
"dev": true
},
"debug": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
"integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"diff": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
"integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
"dev": true
},
"each": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/each/-/each-0.6.1.tgz",
"integrity": "sha1-EYHMR5M4ggVaWQ9wrnjBsR8biGU=",
"dev": true,
"requires": {
"glob": "7.0.6"
}
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"glob": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
"integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
"dev": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
"dev": true
},
"growl": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
"integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
"dev": true
},
"has-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
"integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
"dev": true
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"json3": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
"integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
"dev": true
},
"lodash._baseassign": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
"integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
"dev": true,
"requires": {
"lodash._basecopy": "3.0.1",
"lodash.keys": "3.1.2"
}
},
"lodash._basecopy": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
"integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
"dev": true
},
"lodash._basecreate": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
"integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
"dev": true
},
"lodash._getnative": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
"dev": true
},
"lodash._isiterateecall": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
"integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
"dev": true
},
"lodash.create": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
"integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
"dev": true,
"requires": {
"lodash._baseassign": "3.2.0",
"lodash._basecreate": "3.0.3",
"lodash._isiterateecall": "3.0.9"
}
},
"lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
"dev": true
},
"lodash.isarray": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
"dev": true
},
"lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
"dev": true,
"requires": {
"lodash._getnative": "3.9.1",
"lodash.isarguments": "3.1.0",
"lodash.isarray": "3.0.4"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "1.1.8"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"mocha": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
"integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
"dev": true,
"requires": {
"browser-stdout": "1.3.0",
"commander": "2.9.0",
"debug": "2.6.8",
"diff": "3.2.0",
"escape-string-regexp": "1.0.5",
"glob": "7.1.1",
"growl": "1.9.2",
"he": "1.1.1",
"json3": "3.3.2",
"lodash.create": "3.1.1",
"mkdirp": "0.5.1",
"supports-color": "3.1.2"
},
"dependencies": {
"glob": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
"integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
"dev": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
}
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"should": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/should/-/should-13.0.1.tgz",
"integrity": "sha512-PyGb++NcZXyHq1lK4Lv9JC2/qjRia1gsE6wrMEOpJX1t7bxEZlY0oYijSq7xgvp6rPJiH8DVvcmw/LWtFaw1vw==",
"dev": true,
"requires": {
"should-equal": "2.0.0",
"should-format": "3.0.3",
"should-type": "1.4.0",
"should-type-adaptors": "1.0.1",
"should-util": "1.0.0"
}
},
"should-equal": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz",
"integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==",
"dev": true,
"requires": {
"should-type": "1.4.0"
}
},
"should-format": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz",
"integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=",
"dev": true,
"requires": {
"should-type": "1.4.0",
"should-type-adaptors": "1.0.1"
}
},
"should-type": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz",
"integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=",
"dev": true
},
"should-type-adaptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz",
"integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=",
"dev": true,
"requires": {
"should-type": "1.4.0",
"should-util": "1.0.0"
}
},
"should-util": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz",
"integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=",
"dev": true
},
"supports-color": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
"integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
"dev": true,
"requires": {
"has-flag": "1.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

50
Skills/@be/node_modules/csv-parse/package.json generated vendored Normal file
View File

@@ -0,0 +1,50 @@
{
"version": "1.3.3",
"name": "csv-parse",
"description": "CSV parsing implementing the Node.js `stream.Transform` API",
"keywords": [
"csv",
"parse",
"parser"
],
"contributors": [
"David Worms <david@adaltas.com> (http://www.adaltas.com)",
"Will White (https://github.com/willwhite)",
"Justin Latimer (https://github.com/justinlatimer)",
"jonseymour (https://github.com/jonseymour)",
"pascalopitz (https://github.com/pascalopitz)",
"Josh Pschorr (https://github.com/jpschorr)",
"Elad Ben-Israel (https://github.com/eladb)",
"Philippe Plantier (https://github.com/phipla)",
"Tim Oxley (https://github.com/timoxley)",
"Damon Oehlman (https://github.com/DamonOehlman)",
"Alexandru Topliceanu (https://github.com/topliceanu)",
"Visup (https://github.com/visup)",
"Edmund von der Burg (https://github.com/evdb)",
"Douglas Christopher Wilson (https://github.com/dougwilson)",
"Joe Eaves (https://github.com/Joeasaurus)",
"Mark Stosberg (https://github.com/markstos)"
],
"license": "BSD-3-Clause",
"repository": {
"type": "git",
"url": "https://github.com/wdavidw/node-csv-parse"
},
"homepage": "http://csv.adaltas.com/parse/",
"dependencies": {},
"devDependencies": {
"each": "~0.6.1",
"coffee-script": "~1.12.7",
"csv-generate": "~1.0.0",
"csv-spectrum": "~1.0.0",
"mocha": "~4.0.1",
"should": "~13.1.2"
},
"optionalDependencies": {},
"main": "./lib",
"scripts": {
"coffee": "./node_modules/.bin/coffee -b -o lib src",
"pretest": "./node_modules/.bin/coffee -b -o lib src",
"test": "NODE_ENV=test ./node_modules/.bin/mocha test/**/*.coffee"
}
}

11
Skills/@be/node_modules/csv-parse/samples/callback.js generated vendored Normal file
View File

@@ -0,0 +1,11 @@
// The package "should" must be installed:
// `npm install should`
var parse = require('../lib');
require('should');
var input = '#Welcome\n"1","2","3","4"\n"a","b","c","d"';
parse(input, {comment: '#'}, function(err, output){
output.should.eql([ [ '1', '2', '3', '4' ], [ 'a', 'b', 'c', 'd' ] ]);
});

View File

@@ -0,0 +1,3 @@
Foo,Bar,Baz
first,row,items
second,row,items

View File

@@ -0,0 +1,22 @@
// The package "should" must be installed:
// `npm install should`
fs = require('fs');
parse = require('..');
// Using the first line of the CSV data to discover the column names
rs = fs.createReadStream(__dirname+'/columns-discovery.in');
parser = parse({columns: true}, function(err, data){
console.log(data);
})
rs.pipe(parser);
/*
`node samples/header-based-columns.js`
[ { Foo: 'first', Bar: 'row', Baz: 'items' },
{ Foo: 'second', Bar: 'row', Baz: 'items' } ]
*/

15
Skills/@be/node_modules/csv-parse/samples/comment.js generated vendored Normal file
View File

@@ -0,0 +1,15 @@
// The package "should" must be installed:
// `npm install should`
var parse = require('..');
should = require('should')
parse(
'#Welcome\n"1","2","3","4"\n"a","b","c","d"',
{comment: '#'},
function(err, data){
data.should.eql([ [ '1', '2', '3', '4' ], [ 'a', 'b', 'c', 'd' ] ]);
}
);

View File

@@ -0,0 +1,3 @@
abc;123
def;456
ghi;789
1 abc 123
2 def 456
3 ghi 789

9
Skills/@be/node_modules/csv-parse/samples/fs_read.js generated vendored Normal file
View File

@@ -0,0 +1,9 @@
var fs = require('fs');
var parse = require('..');
var parser = parse({delimiter: ';'}, function(err, data){
console.log(data);
});
fs.createReadStream(__dirname+'/fs_read.csv').pipe(parser);

18
Skills/@be/node_modules/csv-parse/samples/objname.js generated vendored Normal file
View File

@@ -0,0 +1,18 @@
// The package "should" must be installed:
// `npm install should`
var parse = require('..');
require('should');
parse(
'ColumnOne,ColumnTwo\nfirst,Data\nsecond,MoreData',
{'columns':true, 'objname': "ColumnOne"},
function(err, data){
if(err) throw err;
data.should.eql({
first: { ColumnOne: 'first', ColumnTwo: 'Data' },
second: { ColumnOne: 'second', ColumnTwo: 'MoreData' }
});
}
);

17
Skills/@be/node_modules/csv-parse/samples/pipe.js generated vendored Normal file
View File

@@ -0,0 +1,17 @@
// The package "stream-transform" must be installed:
// `npm install stream-transform`
var fs = require('fs');
var parse = require('..');
var transform = require('stream-transform');
var parser = parse({delimiter: ':'})
var input = fs.createReadStream('/etc/passwd');
var transformer = transform(function(record, callback){
setTimeout(function(){
callback(null, record.join(' ')+'\n');
}, 500);
}, {parallel: 10});
input.pipe(parser).pipe(transformer).pipe(process.stdout);

34
Skills/@be/node_modules/csv-parse/samples/stream.js generated vendored Normal file
View File

@@ -0,0 +1,34 @@
// The package "should" must be installed:
// `npm install should`
var parse = require('../lib');
require('should');
var output = [];
// Create the parser
var parser = parse({delimiter: ':'});
// Use the writable stream api
parser.on('readable', function(){
var record;
while (record = parser.read()) {
output.push(record);
}
});
// Catch any error
parser.on('error', function(err){
console.log(err.message);
});
// When we are done, test that the parsed output matched what expected
parser.on('finish', function(){
output.should.eql([
[ 'root','x','0','0','root','/root','/bin/bash' ],
[ 'someone','x','1022','1022','a funny cat','/home/someone','/bin/bash' ]
]);
});
// Now that setup is done, write data to the stream
parser.write("root:x:0:0:root:/root:/bin/bash\n");
parser.write("someone:x:1022:1022:a funny cat:/home/someone:/bin/bash\n");
// Close the readable stream
parser.end();

10
Skills/@be/node_modules/csv-parse/samples/sync.js generated vendored Normal file
View File

@@ -0,0 +1,10 @@
// The package "should" must be installed:
// `npm install should`
var parse = require('../lib/sync');
require('should');
var input = '"key_1","key_2"\n"value 1","value 2"';
var records = parse(input, {columns: true});
records.should.eql([{ key_1: 'value 1', key_2: 'value 2' }]);

11
Skills/@be/node_modules/csv-parse/samples/tsv.js generated vendored Normal file
View File

@@ -0,0 +1,11 @@
// The package "should" must be installed:
// `npm install should`
parse = require('..');
should = require('should');
parse( "1 2 3\ra b c", {delimiter: '\t'}, function(err, data){
if(err) throw err;
data.should.eql([ [ '1', '2', '3' ], [ 'a', 'b', 'c' ] ]);
});