diff --git a/bin/cli-linux b/bin/cli-linux
new file mode 100755
index 0000000..48e8c21
Binary files /dev/null and b/bin/cli-linux differ
diff --git a/bin/cli-macos b/bin/cli-macos
new file mode 100755
index 0000000..dc01e92
Binary files /dev/null and b/bin/cli-macos differ
diff --git a/dist/flight-log-parser.es6.js b/dist/flight-log-parser.es6.js
index 1f51872..7135836 100644
--- a/dist/flight-log-parser.es6.js
+++ b/dist/flight-log-parser.es6.js
@@ -1,7 +1,3 @@
-import buffer from 'buffer';
-import stream from 'stream';
-import util from 'util';
-
var FlightLogHeader;
(function (FlightLogHeader) {
FlightLogHeader["DateTime"] = "Date/Time (UTC)";
@@ -176,1071 +172,6 @@ const FLIGHT_MODE_MAPPING = {
255: 'Unknown',
};
-function createCommonjsModule(fn, module) {
- return module = { exports: {} }, fn(module, module.exports), module.exports;
-}
-
-var safeBuffer = createCommonjsModule(function (module, exports) {
-/* eslint-disable node/no-deprecated-api */
-
-var Buffer = buffer.Buffer;
-
-// alternative to using Object.keys for old browsers
-function copyProps (src, dst) {
- for (var key in src) {
- dst[key] = src[key];
- }
-}
-if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer;
-} else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports);
- exports.Buffer = SafeBuffer;
-}
-
-function SafeBuffer (arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length)
-}
-
-// Copy static methods from Buffer
-copyProps(Buffer, SafeBuffer);
-
-SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number')
- }
- return Buffer(arg, encodingOrOffset, length)
-};
-
-SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- var buf = Buffer(size);
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding);
- } else {
- buf.fill(fill);
- }
- } else {
- buf.fill(0);
- }
- return buf
-};
-
-SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return Buffer(size)
-};
-
-SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return buffer.SlowBuffer(size)
-};
-});
-var safeBuffer_1 = safeBuffer.Buffer;
-
-/**/
-
-var Buffer$1 = safeBuffer.Buffer;
-/**/
-
-var isEncoding = Buffer$1.isEncoding || function (encoding) {
- encoding = '' + encoding;
- switch (encoding && encoding.toLowerCase()) {
- case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
- return true;
- default:
- return false;
- }
-};
-
-function _normalizeEncoding(enc) {
- if (!enc) return 'utf8';
- var retried;
- while (true) {
- switch (enc) {
- case 'utf8':
- case 'utf-8':
- return 'utf8';
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return 'utf16le';
- case 'latin1':
- case 'binary':
- return 'latin1';
- case 'base64':
- case 'ascii':
- case 'hex':
- return enc;
- default:
- if (retried) return; // undefined
- enc = ('' + enc).toLowerCase();
- retried = true;
- }
- }
-}
-// Do not cache `Buffer.isEncoding` when checking encoding names as some
-// modules monkey-patch it to support additional encodings
-function normalizeEncoding(enc) {
- var nenc = _normalizeEncoding(enc);
- if (typeof nenc !== 'string' && (Buffer$1.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
- return nenc || enc;
-}
-
-// StringDecoder provides an interface for efficiently splitting a series of
-// buffers into a series of JS strings without breaking apart multi-byte
-// characters.
-var StringDecoder_1 = StringDecoder;
-function StringDecoder(encoding) {
- this.encoding = normalizeEncoding(encoding);
- var nb;
- switch (this.encoding) {
- case 'utf16le':
- this.text = utf16Text;
- this.end = utf16End;
- nb = 4;
- break;
- case 'utf8':
- this.fillLast = utf8FillLast;
- nb = 4;
- break;
- case 'base64':
- this.text = base64Text;
- this.end = base64End;
- nb = 3;
- break;
- default:
- this.write = simpleWrite;
- this.end = simpleEnd;
- return;
- }
- this.lastNeed = 0;
- this.lastTotal = 0;
- this.lastChar = Buffer$1.allocUnsafe(nb);
-}
-
-StringDecoder.prototype.write = function (buf) {
- if (buf.length === 0) return '';
- var r;
- var i;
- if (this.lastNeed) {
- r = this.fillLast(buf);
- if (r === undefined) return '';
- i = this.lastNeed;
- this.lastNeed = 0;
- } else {
- i = 0;
- }
- if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
- return r || '';
-};
-
-StringDecoder.prototype.end = utf8End;
-
-// Returns only complete characters in a Buffer
-StringDecoder.prototype.text = utf8Text;
-
-// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
-StringDecoder.prototype.fillLast = function (buf) {
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
- this.lastNeed -= buf.length;
-};
-
-// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
-// continuation byte. If an invalid byte is detected, -2 is returned.
-function utf8CheckByte(byte) {
- if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
- return byte >> 6 === 0x02 ? -1 : -2;
-}
-
-// Checks at most 3 bytes at the end of a Buffer in order to detect an
-// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
-// needed to complete the UTF-8 character (if applicable) are returned.
-function utf8CheckIncomplete(self, buf, i) {
- var j = buf.length - 1;
- if (j < i) return 0;
- var nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 1;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 2;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) {
- if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
- }
- return nb;
- }
- return 0;
-}
-
-// Validates as many continuation bytes for a multi-byte UTF-8 character as
-// needed or are available. If we see a non-continuation byte where we expect
-// one, we "replace" the validated continuation bytes we've seen so far with
-// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
-// behavior. The continuation byte check is included three times in the case
-// where all of the continuation bytes for a character exist in the same buffer.
-// It is also done this way as a slight performance increase instead of using a
-// loop.
-function utf8CheckExtraBytes(self, buf, p) {
- if ((buf[0] & 0xC0) !== 0x80) {
- self.lastNeed = 0;
- return '\ufffd';
- }
- if (self.lastNeed > 1 && buf.length > 1) {
- if ((buf[1] & 0xC0) !== 0x80) {
- self.lastNeed = 1;
- return '\ufffd';
- }
- if (self.lastNeed > 2 && buf.length > 2) {
- if ((buf[2] & 0xC0) !== 0x80) {
- self.lastNeed = 2;
- return '\ufffd';
- }
- }
- }
-}
-
-// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
-function utf8FillLast(buf) {
- var p = this.lastTotal - this.lastNeed;
- var r = utf8CheckExtraBytes(this, buf, p);
- if (r !== undefined) return r;
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, p, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, p, 0, buf.length);
- this.lastNeed -= buf.length;
-}
-
-// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
-// partial character, the character's bytes are buffered until the required
-// number of bytes are available.
-function utf8Text(buf, i) {
- var total = utf8CheckIncomplete(this, buf, i);
- if (!this.lastNeed) return buf.toString('utf8', i);
- this.lastTotal = total;
- var end = buf.length - (total - this.lastNeed);
- buf.copy(this.lastChar, 0, end);
- return buf.toString('utf8', i, end);
-}
-
-// For UTF-8, a replacement character is added when ending on a partial
-// character.
-function utf8End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + '\ufffd';
- return r;
-}
-
-// UTF-16LE typically needs two bytes per character, but even if we have an even
-// number of bytes available, we need to check if we end on a leading/high
-// surrogate. In that case, we need to wait for the next two bytes in order to
-// decode the last character properly.
-function utf16Text(buf, i) {
- if ((buf.length - i) % 2 === 0) {
- var r = buf.toString('utf16le', i);
- if (r) {
- var c = r.charCodeAt(r.length - 1);
- if (c >= 0xD800 && c <= 0xDBFF) {
- this.lastNeed = 2;
- this.lastTotal = 4;
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- return r.slice(0, -1);
- }
- }
- return r;
- }
- this.lastNeed = 1;
- this.lastTotal = 2;
- this.lastChar[0] = buf[buf.length - 1];
- return buf.toString('utf16le', i, buf.length - 1);
-}
-
-// For UTF-16LE we do not explicitly append special replacement characters if we
-// end on a partial character, we simply let v8 handle that.
-function utf16End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) {
- var end = this.lastTotal - this.lastNeed;
- return r + this.lastChar.toString('utf16le', 0, end);
- }
- return r;
-}
-
-function base64Text(buf, i) {
- var n = (buf.length - i) % 3;
- if (n === 0) return buf.toString('base64', i);
- this.lastNeed = 3 - n;
- this.lastTotal = 3;
- if (n === 1) {
- this.lastChar[0] = buf[buf.length - 1];
- } else {
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- }
- return buf.toString('base64', i, buf.length - n);
-}
-
-function base64End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
- return r;
-}
-
-// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
-function simpleWrite(buf) {
- return buf.toString(this.encoding);
-}
-
-function simpleEnd(buf) {
- return buf && buf.length ? this.write(buf) : '';
-}
-
-var string_decoder = {
- StringDecoder: StringDecoder_1
-};
-
-// Generated by CoffeeScript 2.2.4
-// # CSV Parser
-
-// This module provides a CSV parser tested and used against large datasets. Over
-// the year, it has been enhance and is now full of useful options.
-
-// Please look at the [README], the [project website][site] the [samples] and the
-// [tests] for additional information.
-var Parser, StringDecoder$1, isObjLiteral, stream$1, util$1;
-
-stream$1 = stream;
-
-util$1 = util;
-
-StringDecoder$1 = string_decoder.StringDecoder;
-
-// ## Usage
-
-// Callback approach, for ease of use:
-
-// `parse(data, [options], callback)`
-
-// [Node.js Stream API][stream], for maximum of power:
-
-// `parse([options], [callback])`
-var lib = 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) {
- // 1st arg is data:string or options:object
- 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])}`;
- }
- // 2nd arg is options:object or callback:function
- 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([options])`
-
-// Options are documented [here](http://csv.adaltas.com/parse/).
-Parser = function(options = {}) {
- var base, base1, base10, base11, base12, base13, base14, base15, base16, base17, base2, base3, base4, base5, base6, base7, base8, base9, k, v;
- // @options = options
- this.options = {};
- for (k in options) {
- v = options[k];
- this.options[k] = v;
- }
- this.options.objectMode = true;
- stream$1.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 (this.options.auto_parse != null) {
- this.options.cast = this.options.auto_parse;
- }
- if ((base10 = this.options).cast == null) {
- base10.cast = false;
- }
- if (this.options.auto_parse_date != null) {
- this.options.cast_date = this.options.auto_parse_date;
- }
- if ((base11 = this.options).cast_date == null) {
- base11.cast_date = false;
- }
- if (this.options.cast_date === true) {
- this.options.cast_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;
- }
- if ((base17 = this.options).skip_lines_with_error == null) {
- base17.skip_lines_with_error = false;
- }
- // Counters
- // lines = count + skipped_line_count + empty_line_count
- this.lines = 0; // Number of lines encountered in the source dataset
- this.count = 0; // Number of records being processed
- this.skipped_line_count = 0; // Number of records skipped due to errors
- this.empty_line_count = 0; // Number of empty lines
- // Constants
- this.is_int = /^(\-|\+)?([1-9]+[0-9]*)$/;
- // @is_float = /^(\-|\+)?([0-9]+(\.[0-9]+)([eE][0-9]+)?|Infinity)$/
- // @is_float = /^(\-|\+)?((([0-9])|([1-9]+[0-9]*))(\.[0-9]+)([eE][0-9]+)?|Infinity)$/
- this.is_float = function(value) {
- return (value - parseFloat(value) + 1) >= 0; // Borrowed from jquery
- };
- // Internal state
- this._ = {
- decoder: new StringDecoder$1(),
- quoting: false,
- commenting: false,
- field: null,
- nextChar: null,
- closingQuote: 0,
- line: [],
- chunks: [],
- rawBuf: '',
- buf: '',
- rowDelimiterLength: this.options.rowDelimiter ? Math.max(...this.options.rowDelimiter.map(function(v) {
- return v.length;
- })) : void 0,
- lineHasError: false
- };
- return this;
-};
-
-// ## Internal API
-
-// The Parser implement a [`stream.Transform` class][transform].
-
-// ### Events
-
-// The library extends Node [EventEmitter][event] class and emit all
-// the events of the Writable and Readable [Stream API][stream].
-util$1.inherits(Parser, stream$1.Transform);
-
-// For extra flexibility, you can get access to the original Parser
-// class: `require('csv-parse').Parser`.
-var Parser_1 = Parser;
-
-// ### `_transform(chunk, encoding, callback)`
-
-// * `chunk` Buffer | String
-// The chunk to be transformed. Will always be a buffer unless the decodeStrings option was set to false.
-// * `encoding` String
-// If the chunk is a string, then this is the encoding type. (Ignore if decodeStrings chunk is a buffer.)
-// * `callback` Function
-// Call this function (optionally with an error argument) when you are done processing the supplied chunk.
-
-// Implementation of the [`stream.Transform` API][transform]
-Parser.prototype._transform = function(chunk, encoding, callback) {
- return setImmediate(() => {
- 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) {
- return callback(this.__flush());
-};
-
-Parser.prototype.__flush = function() {
- var err;
- err = this.__write(this._.decoder.end(), true);
- if (err) {
- return err;
- }
- if (this._.quoting) {
- err = this.error(`Quoted field not terminated at line ${this.lines + 1}`);
- return err;
- }
- if (this._.line.length > 0) {
- return this.__push(this._.line);
- }
-};
-
-Parser.prototype.__push = function(line) {
- var call_column_udf, columns, err, field, i, j, len, lineAsColumns, record;
- if (this.options.skip_lines_with_empty_values && line.join('').trim() === '') {
- return;
- }
- record = null;
- if (this.options.columns === true) {
- this.options.columns = line;
- 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];
- }
- };
- [err, columns] = call_column_udf(this.options.columns, line);
- if (err) {
- return err;
- }
- this.options.columns = columns;
- return;
- }
- if (!this._.line_length && line.length > 0) {
- this._.line_length = this.options.columns ? this.options.columns.length : line.length;
- }
- // Dont check column count on empty lines
- if (line.length === 1 && line[0] === '') {
- this.empty_line_count++;
- } else if (line.length !== this._.line_length) {
- // Dont check column count with relax_column_count
- if (this.options.relax_column_count) {
- this.count++;
- this.skipped_line_count++;
- } else if (this.options.columns != null) {
- // Suggest: Inconsistent header and column numbers: header is 1 and number of columns is 1 on line 1
- err = this.error(`Number of columns on line ${this.lines} does not match header`);
- return err;
- } else {
- err = this.error(`Number of columns is inconsistent on line ${this.lines}`);
- return err;
- }
- } 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) {
- record = [lineAsColumns[this.options.objname], lineAsColumns];
- } else {
- record = lineAsColumns;
- }
- } else {
- record = 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: record
- });
- this._.rawBuf = '';
- } else {
- this.push(record);
- }
- if (this.listenerCount('record')) {
- this.emit('record', record);
- }
- return null;
-};
-
-Parser.prototype.__write = function(chars, end) {
- var areNextCharsDelimiter, areNextCharsRowDelimiters, cast, char, err, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isNextCharTrimable, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, ref5, ref6, remainingBuffer, rowDelimiter, rtrim, wasCommenting;
- is_int = (value) => {
- if (typeof this.is_int === 'function') {
- return this.is_int(value);
- } else {
- return this.is_int.test(value);
- }
- };
- is_float = (value) => {
- if (typeof this.is_float === 'function') {
- return this.is_float(value);
- } else {
- return this.is_float.test(value);
- }
- };
- cast = (value, context = {}) => {
- if (!this.options.cast) {
- return value;
- }
- if (context.quoting == null) {
- context.quoting = !!this._.closingQuote;
- }
- if (context.lines == null) {
- context.lines = this.lines;
- }
- if (context.count == null) {
- context.count = this.count;
- }
- if (context.index == null) {
- context.index = this._.line.length;
- }
- // context.header ?= if @options.column and @lines is 1 and @count is 0 then true else false
- if (context.header == null) {
- context.header = this.options.columns === true;
- }
- if (context.column == null) {
- context.column = Array.isArray(this.options.columns) ? this.options.columns[context.index] : context.index;
- }
- if (typeof this.options.cast === 'function') {
- return this.options.cast(value, context);
- }
- if (is_int(value)) {
- value = parseInt(value);
- } else if (is_float(value)) {
- value = parseFloat(value);
- } else if (this.options.cast_date) {
- value = this.options.cast_date(value, context);
- }
- return value;
- };
- 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)) {
- // Strip BOM header
- i++;
- }
- while (i < l) {
- // Ensure we get enough space to look ahead
- if (!end) {
- remainingBuffer = chars.substr(i, l - i);
- // (i+1000 >= l) or
- // Skip if the remaining buffer can be comment
- // Skip if the remaining buffer can be row delimiter
- 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;
- // Skip if the remaining buffer can be row delimiter following the closing quote
- })) || (this.options.rowDelimiter && this._.quoting && l - i < (this.options.quote.length + this._.rowDelimiterLength) && this.options.rowDelimiter.some((rd) => {
- return (this.options.quote + rd).substr(0, l - i) === remainingBuffer;
- // Skip if the remaining buffer can be delimiter
- // Skip if the remaining buffer can be escape sequence
- })) || (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) : null;
- if (this.options.raw) {
- this._.rawBuf += char;
- }
- // Auto discovery of rowDelimiter, unix, mac and windows supported
- if (this.options.rowDelimiter == null) {
- nextCharPos = i;
- rowDelimiter = null;
- // First empty line
- 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 (rowDelimiter) {
- if (rowDelimiter === '\r' && chars.charAt(nextCharPos) === '\n') {
- rowDelimiter += '\n';
- }
- this.options.rowDelimiter = [rowDelimiter];
- this._.rowDelimiterLength = rowDelimiter.length;
- }
- }
- // Parse that damn char
- // Note, shouldn't we have sth like chars.substr(i, @options.escape.length)
- if (!this._.commenting && char === this.options.escape) {
- // Make sure the escape is really here for escaping:
- // If escape is same as quote, and escape is first char of a field
- // and it's not quoted, then it is a quote
- // Next char should be an escape or a quote
- escapeIsQuote = this.options.escape === this.options.quote;
- isEscape = this._.nextChar === this.options.escape;
- isQuote = this._.nextChar === this.options.quote;
- if (!(escapeIsQuote && !this._.field && !this._.quoting) && (isEscape || isQuote)) {
- i++;
- char = this._.nextChar;
- this._.nextChar = chars.charAt(i + 1);
- if (this._.field == null) {
- this._.field = '';
- }
- this._.field += char;
- // Since we're skipping the next one, better add it now if in raw mode.
- if (this.options.raw) {
- this._.rawBuf += char;
- }
- i++;
- continue;
- }
- }
- // Char match quote
- if (!this._.commenting && char === this.options.quote) {
- if (this._.acceptOnlyEmptyChars && (char !== ' ' && char !== '\t')) {
- return this.error('Only trimable characters are accepted after quotes');
- }
- if (this._.quoting) {
- // Make sure a closing quote is followed by a delimiter
- // If we have a next character and
- // it isnt a rowDelimiter and
- // it isnt an column delimiter and
- // it isnt the begining of a comment
- // Otherwise, if this is not "relax" mode, throw an error
- isNextCharTrimable = rtrim && ((ref1 = this._.nextChar) === ' ' || ref1 === '\t');
- 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 != null) && !isNextCharTrimable && !areNextCharsRowDelimiters && !areNextCharsDelimiter && !isNextCharAComment) {
- if (this.options.relax) {
- this._.quoting = false;
- if (this._.field) {
- this._.field = `${this.options.quote}${this._.field}`;
- }
- } else {
- if (err = this.error(`Invalid closing quote at line ${this.lines + 1}; found ${JSON.stringify(this._.nextChar)} instead of delimiter ${JSON.stringify(this.options.delimiter)}`)) {
- return err;
- }
- }
- } else if ((this._.nextChar != null) && isNextCharTrimable) {
- i++;
- this._.quoting = false;
- this._.closingQuote = this.options.quote.length;
- this._.acceptOnlyEmptyChars = true;
- continue;
- } else {
- i++;
- this._.quoting = false;
- this._.closingQuote = this.options.quote.length;
- if (end && i === l) {
- this._.line.push(cast(this._.field || ''));
- this._.field = null;
- }
- continue;
- }
- } else if (!this._.field) {
- this._.quoting = true;
- i++;
- continue;
- } else if ((this._.field != null) && !this.options.relax) {
- if (err = this.error(`Invalid opening quote at line ${this.lines + 1}`)) {
- return err;
- }
- }
- }
- // Otherwise, treat quote as a regular character
- 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++;
- }
- // Set the commenting flag
- 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._.acceptOnlyEmptyChars) {
- if (isDelimiter || isRowDelimiter) {
- this._.acceptOnlyEmptyChars = false;
- } else {
- if (char === ' ' || char === '\t') {
- i++;
- continue;
- } else {
- return this.error('Only trimable characters are accepted after quotes');
- }
- }
- }
- 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;
- }
- // Empty lines
- 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 = (ref2 = this._.field) != null ? ref2.trimRight() : void 0;
- }
- }
- this._.line.push(cast(this._.field || ''));
- this._.closingQuote = 0;
- this._.field = null;
- if (isDelimiter) { // End of field
- i += this.options.delimiter.length;
- this._.nextChar = chars.charAt(i);
- if (end && !this._.nextChar) {
- isRowDelimiter = true;
- this._.line.push('');
- }
- }
- if (isRowDelimiter) { // End of record
- if (!this._.lineHasError) {
- err = this.__push(this._.line);
- if (err) {
- return err;
- }
- }
- if (this._.lineHasError) {
- this._.lineHasError = false;
- }
- // Some cleanup for the next record
- this._.line = [];
- i += isRowDelimiterLength;
- this._.nextChar = chars.charAt(i);
- continue;
- }
- } else if (!this._.commenting && !this._.quoting && (char === ' ' || char === '\t')) {
- if (this._.field == null) {
- // Left trim unless we are quoting or field already filled
- 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 && ((ref3 = this._.field) != null ? ref3.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 && ((ref4 = this._.line) != null ? ref4.length : void 0) > this.options.max_limit_on_data_read) {
- return Error(`Row delimiter not found in the file ${JSON.stringify(this.options.rowDelimiter)}`);
- }
- }
- // Flush remaining fields and lines
- if (end) {
- if (l === 0) {
- this.lines++;
- }
- if (this._.field != null) {
- if (rtrim) {
- if (!this._.closingQuote) {
- this._.field = (ref5 = this._.field) != null ? ref5.trimRight() : void 0;
- }
- }
- this._.line.push(cast(this._.field || ''));
- this._.field = null;
- }
- if (((ref6 = this._.field) != null ? ref6.length : void 0) > this.options.max_limit_on_data_read) {
- return Error(`Delimiter not found in the file ${JSON.stringify(this.options.delimiter)}`);
- }
- 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)}`);
- }
- }
- // Store un-parsed chars for next call
- this._.buf = chars.substr(i);
- return null;
-};
-
-Parser.prototype.error = function(msg) {
- var err;
- err = Error(msg);
- if (!this.options.skip_lines_with_error) {
- return err;
- } else {
- if (!this._.lineHasError) {
- this._.lineHasError = true;
- this.emit('skip', err);
- }
- }
- return null;
-};
-
-// ## Utils
-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);
- })();
- }
-};
-lib.Parser = Parser_1;
-
const INT_FIELDS = new Set([
FlightLogHeader.AircraftBatteryCell1Voltage,
FlightLogHeader.AircraftBatteryCell2Voltage,
@@ -1258,6 +189,18 @@ const INT_FIELDS = new Set([
FlightLogHeader.AircraftNoFlyValue,
FlightLogHeader.AircraftSatellites,
FlightLogHeader.GimbalModeValue,
+ FlightLogHeader.AircraftSmartGoHomeRadius,
+ FlightLogHeader.AircraftSmartGoHomeCountdown,
+ FlightLogHeader.AircraftVelocityX,
+ FlightLogHeader.AircraftVelocityY,
+ FlightLogHeader.AircraftVelocityZ,
+ FlightLogHeader.RCHorizontalAccuaracy,
+ FlightLogHeader.RCLatitude,
+ FlightLogHeader.RCLongitude,
+ FlightLogHeader.LandingGearStatusValue,
+ FlightLogHeader.LandingGearModeValue,
+ FlightLogHeader.RCStateValue,
+ FlightLogHeader.RCLandingGearValue,
]);
const FLOAT_FIELDS = new Set([
FlightLogHeader.AircraftBarometricAltitude,
@@ -1314,8 +257,26 @@ const BOOL_FIELDS = new Set([
FlightLogHeader.AircraftSmartGoHomeRequesting,
FlightLogHeader.AircraftUltrasonicOn,
FlightLogHeader.AircraftVisionOn,
+ FlightLogHeader.LandingGearIsMovable,
+ FlightLogHeader.RCGoHome,
+ FlightLogHeader.RCRecord,
+ FlightLogHeader.RCShutter,
+ FlightLogHeader.RCPlayback,
+ FlightLogHeader.RCPause,
+ FlightLogHeader.RCCustom1,
+ FlightLogHeader.RCCustom2,
+ FlightLogHeader.RCSattelites,
+ FlightLogHeader.RCGSPDataIsValid,
+ FlightLogHeader.RCLeftHorizontal,
+ FlightLogHeader.RCRightHorizontal,
+ FlightLogHeader.RCLeftVertical,
+ FlightLogHeader.RCRightVertical,
+ FlightLogHeader.AircraftCameraChangeableLensSupported,
+ FlightLogHeader.AircraftCameraLensInstalled,
+ FlightLogHeader.AircraftCameraLensMFAssistant,
]);
+const parse = require('csv-parse');
const META_REGEX = {
appVersion: /^#DroneDeploy\s+(.+)$/,
sessionId: /^Session ID\s+(.+)$/,
@@ -1330,6 +291,7 @@ const META_REGEX = {
batteryRemainingLife: /^Remaining Life \(%\)\s+(.+)$/,
batteryDischarges: /^Discharges\s+(.+)$/,
batteryCells: /^Battery Cells Number\s+(.+)$/,
+ batterySerialNumber: /^Battery Serial Number\s+(.+)$/,
batteryFirmware: /^Battery Firmware\s+(.+)$/,
fcSerialNumber: /^Flight Controller Serial Number\s+(.+)$/,
fcFirmware: /^Flight Controller Firmware\s+(.+)$/,
@@ -1363,13 +325,12 @@ function parseBody(lines) {
relax_column_count: true,
};
return new Promise((resolve, reject) => {
- lib(text, options, (err, result) => {
+ parse(text, options, (err, result) => {
if (err) {
return reject(err);
}
const [headers, ...rows] = result;
- const logs = rows
- .map((row) => {
+ const logs = rows.map((row) => {
const log = {};
for (let i = 0; i < headers.length; i++) {
const header = headers[i].trim();
@@ -1391,7 +352,7 @@ function parseBody(lines) {
});
});
}
-function findMatch(search, regex) {
+function findMatch(search, regex, isNum) {
let match;
for (let str of search) {
match = str.match(regex);
@@ -1400,19 +361,34 @@ function findMatch(search, regex) {
}
}
if (!match) {
- return 'N/A';
+ return isNum ? '0' : 'N/A';
}
return match[1];
}
function parseMetaData(headers, footers) {
const meta = [...headers, ...footers];
+ let end = findMatch(meta, META_REGEX.sessionEnd);
+ let elapsed = findMatch(meta, META_REGEX.elapsedTime);
+ // if we weren't able to parse an end date or an elapsed time from our footer (which is really just the last three
+ // lines of the log file), it's likely that we have a truncated log file. if that's the case, we can still salvage
+ // some valid data by parsing the date and elapsed time from the very last log row in the file, which is what we're
+ // doing below. it's pretty brittle, but it's preferred to having an invalid end date and a NaN elapsed time.
+ if (end === 'N/A' || elapsed === 'N/A') {
+ const lastLine = footers[footers.length - 1];
+ const pieces = lastLine.split('\t');
+ // if we don't have at least two pieces, i don't know what is in `footer` so i'm just going to leave it alone
+ if (pieces.length >= 2) {
+ end = pieces[0];
+ elapsed = pieces[1];
+ }
+ }
return {
appVersion: findMatch(meta, META_REGEX.appVersion),
session: {
id: findMatch(meta, META_REGEX.sessionId),
start: new Date(findMatch(meta, META_REGEX.sessionStart)),
- end: new Date(findMatch(meta, META_REGEX.sessionEnd)),
- elapsed: parseFloat(findMatch(meta, META_REGEX.elapsedTime)),
+ end: new Date(end),
+ elapsed: elapsed === 'N/A' ? 0 : parseFloat(elapsed),
},
device: {
model: findMatch(meta, META_REGEX.deviceModel),
@@ -1424,11 +400,12 @@ function parseMetaData(headers, footers) {
firmware: findMatch(meta, META_REGEX.aircraftFirmware),
},
battery: {
- chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume), 10),
- remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife), 10),
- discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges), 10),
- cells: parseInt(findMatch(meta, META_REGEX.batteryCells), 10),
+ chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume, true), 10),
+ remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife, true), 10),
+ discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges, true), 10),
+ cells: parseInt(findMatch(meta, META_REGEX.batteryCells, true), 10),
firmware: findMatch(meta, META_REGEX.batteryFirmware),
+ serialNumber: findMatch(meta, META_REGEX.batterySerialNumber),
},
flightController: {
serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),
diff --git a/dist/flight-log-parser.es6.js.map b/dist/flight-log-parser.es6.js.map
index 8257fc9..18d3b80 100644
--- a/dist/flight-log-parser.es6.js.map
+++ b/dist/flight-log-parser.es6.js.map
@@ -1 +1 @@
-{"version":3,"file":"flight-log-parser.es6.js","sources":["../src/types.ts","../node_modules/safe-buffer/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/csv-parse/lib/index.js","../src/field-types.ts","../src/parser.ts"],"sourcesContent":["export enum FlightLogHeader {\n DateTime = 'Date/Time (UTC)',\n ElapsedTime = 'Elapsed Time (sec)',\n Info = 'Info',\n DeviceLatitude = 'Device Latitude (Degrees)',\n DeviceLongitude = 'Device Longitude (Degrees)',\n DeviceLocationLastUpdated = 'Device Location Last Updated (ms)',\n AircraftBatteryPowerPercent = 'Aircraft Battery Power (%)',\n AircraftBatteryCharge = 'Aircraft Battery Charge (mAh)',\n AircraftBatteryCurrent = 'Aircraft Battery Current (mA)',\n AircraftBatteryVoltage = 'Aircraft Battery Voltage (mV)',\n AircraftBatteryTemperature = 'Aircraft Battery Temperature (Fahrenheit)',\n AircraftBatteryLastUpdated = 'Aircraft Battery Last Updated (ms)',\n AircraftBatteryCell1Voltage = 'Aircraft Battery Cell 1 Voltage',\n AircraftBatteryCell2Voltage = 'Aircraft Battery Cell 2 Voltage',\n AircraftBatteryCell3Voltage = 'Aircraft Battery Cell 3 Voltage',\n AircraftBatteryCell4Voltage = 'Aircraft Battery Cell 4 Voltage',\n AircraftBatteryCellVoltageLastUpdated = 'Aircraft Battery Cell Voltage Last Updated (ms)',\n AircraftLatitude = 'Aircraft Latitude (Degrees)',\n AircraftLongitude = 'Aircraft Longitude (Degrees)',\n AircraftSpeed = 'Aircraft Speed (mph)',\n AircraftBarometricAltitude = 'Aircraft Barometric Altitude (ft)',\n AircraftHeading = 'Aircraft Heading (Degrees)',\n AircraftVelocityX = 'Aircraft Vel - X (mph)',\n AircraftVelocityY = 'Aircraft Vel - Y (mph)',\n AircraftVelocityZ = 'Aircraft Vel - Z (mph)',\n AircraftPitch = 'Aircraft Pitch (Degrees)',\n AircraftRoll = 'Aircraft Roll (Degrees)',\n AircraftSatellites = 'Aircraft Satellites',\n AircraftMotorsOn = 'Aircraft Motors On',\n AircraftFlying = 'Aircraft Flying',\n AircraftFlightMode = 'Aircraft Flight Mode',\n AircraftFlightModeValue = 'Aircraft Flight Mode Value',\n AircraftIMUPreheating = 'Aircraft IMU Preheating',\n AircraftUltrasonicOn = 'Aircraft Ultrasonic On',\n AircraftUltrasonicAltitude = 'Aircraft Ultrasonic Altitude (ft)',\n AircraftVisionOn = 'Aircraft Vision On',\n AircraftGPSSignal = 'Aircraft GPS Signal',\n AircraftGPSSignalValue = 'Aircraft GPS Signal Value',\n AircraftNoFly = 'Aircraft No-fly',\n AircraftNoFlyValue = 'Aircraft No-fly Value',\n AircraftNoFlyLatitude = 'Aircraft No-fly Latitude (Degrees)',\n AircraftNoFlyLongitude = 'Aircraft No-fly Longitude (Degrees)',\n AircraftNoFlyRadius = 'Aircraft No-fly Radius (ft)',\n HomeLatitude = 'Home Latitude (Degrees)',\n HomeLongitude = 'Home Longitude (Degrees)',\n AircraftSmartGoHomeFlightTimeRemaining = 'Aircraft Smart Go-home Flight Time Remaining (sec)',\n AircraftSmartGoHomeFlightReturnTime = 'Aircraft Smart Go-home Flight Return Time (sec)',\n AircraftSmartGoHomeLandingTime = 'Aircraft Smart Go-home Landing Time (sec)',\n AircraftSmartGoHomeReturnPower = 'Aircraft Smart Go-home Return Power (%)',\n AircraftSmartGoHomeLandingPower = 'Aircraft Smart Go-home Landing Power (%)',\n AircraftSmartGoHomeRadius = 'Aircraft Smart Go-home Radius (ft)',\n AircraftSmartGoHomeCountdown = 'Aircraft Smart Go-home Countdown (sec)',\n AircraftSmartGoHomeRequesting = 'Aircraft Smart Go-home Requesting',\n AircraftSystemStateLastUpdated = 'Aircraft System State Last Updated (ms)',\n GimbalPitch = 'Gimbal Pitch (Degrees)',\n GimbalRoll = 'Gimbal Roll (Degrees)',\n GimbalYaw = 'Gimbal Yaw (Degrees)',\n GimbalMode = 'Gimbal Mode',\n GimbalModeValue = 'Gimbal Mode Value',\n GimbalPitchAtStop = 'Gimbal Pitch at Stop',\n GimbalRollAtStop = 'Gimbal Roll at Stop',\n GimbalYawAtStop = 'Gimbal Yaw at Stop',\n GimbalStatusLastUpdated = 'Gimbal Status Last Updated (ms)',\n LandingGearIsMovable = 'Landing Gear is Movable',\n LandingGearStatus = 'Landing Gear Status',\n LandingGearStatusValue = 'Landing Gear Status Value',\n LandingGearMode = 'Landing Gear Mode',\n LandingGearModeValue = 'Landing Gear Mode Value',\n LandingGearLastUpdated = 'Landing Gear Last Updated (ms)',\n RCState = 'RC State',\n RCStateValue = 'RC State Value',\n RCLeftHorizontal = 'RC Left Horizontal',\n RCLeftVertical = 'RC Left Vertical',\n RCRightHorizontal = 'RC Right Horizontal',\n RCRightVertical = 'RC Right Vertical',\n RCLeftWheel = 'RC Left Wheel',\n RCRightWheel = 'RC Right Wheel',\n RCLandingGear = 'RC Landing Gear',\n RCLandingGearValue = 'RC Landing Gear Value',\n RCGoHome = 'RC Go Home',\n RCRecord = 'RC Record ',\n RCShutter = 'RC Shutter',\n RCPlayback = 'RC Playback',\n RCPause = 'RC Pause',\n RCCustom1 = 'RC Custom 1',\n RCCustom2 = 'RC Custom 2',\n RCStateLastUpdated = 'RC State Last Updated (ms)',\n RCBatteryPercentRemaining = 'RC Battery (%)',\n RCBatteryStateLastUpdated = 'RC Battery State Last Updated (ms)',\n RCSattelites = 'RC Sattelites',\n RCHorizontalAccuaracy = 'RC Horizontal Accuaracy (ft)',\n RCLatitude = 'RC Latitude (Degrees)',\n RCLongitude = 'RC Longitude (Degrees)',\n RCGSPDataIsValid = 'RC GSP Data is Valid',\n RCGPSStateLastUpdated = 'RC GPS State Last Updated (ms)',\n RCSignal1 = 'RC Signal 1',\n RCSignal2 = 'RC Signal 2',\n RCSignalLastUpdated = 'RC Signal Last Updated (ms)',\n LBSignal1 = 'LB Signal 1',\n LBSignal2 = 'LB Signal 2',\n LBSignalLastUpdated = 'LB Signal Last Updated (ms)',\n AircraftCameraMode = 'Aircraft Camera Mode',\n AircraftCameraModeValue = 'Aircraft Camera Mode Value',\n AircraftCameraOverheated = 'Aircraft Camera Overheated',\n AircraftCameraSensorError = 'Aircraft Camera Sensor Error',\n AircraftCameraRecording = 'Aircraft Camera Recording',\n AircraftCameraRawCapture = 'Aircraft Camera Raw Capture',\n AircraftCameraIntervalCapture = 'Aircraft Camera Interval Capture',\n AircraftCameraBurstCapture = 'Aircraft Camera Burst Capture',\n AircraftCameraSingleCapture = 'Aircraft Camera Single Capture',\n AircraftCameraStoringPhoto = 'Aircraft Camera Storing Photo',\n AircraftCameraStateLastUpdated = 'Aircraft Camera State Last Updated (ms)',\n AircraftCameraSDCardExists = 'Aircraft Camera SD Card Exists',\n AircraftCameraSDCardRemainingPercent = 'Aircraft Camera SD Card Remaining (%)',\n AircraftCameraSDCardStateLastUpdated = 'Aircraft Camera SD Card State Last Updated (ms)',\n AircraftCameraChangeableLensSupported = 'Aircraft Camera Changeable Lens Supported',\n AircraftCameraLensInstalled = 'Aircraft Camera Lens Installed',\n AircraftCameraLensType = 'Aircraft Camera Lens Type',\n AircraftCameraLensAFEnabled = 'Aircraft Camera Lens AF Enabled',\n AircraftCameraLensFocusMode = 'Aircraft Camera Lens Focus Mode',\n AircraftCameraLensFocusModeValue = 'Aircraft Camera Lens Focus Mode Value',\n AircraftCameraLensFocusStatus = 'Aircraft Camera Lens Focus Status',\n AircraftCameraLensFocusStatusValue = 'Aircraft Camera Lens Focus Status Value',\n AircraftCameraLensMFAssistant = 'Aircraft Camera Lens MF Assistant',\n AircraftCameraLensAFAssistant = 'Aircraft Camera Lens AF Assistant',\n AircraftCameraLensAssistantWorking = 'Aircraft Camera Lens Assistant Working',\n AircraftCameraLensStateLastUpdated = 'Aircraft Camera Lens State Last Updated (ms)',\n DeviceToAircraftDistance = 'Device > Aircraft Distance - XY (ft)',\n}\n\nexport type FlightLogRow = {\n [prop in FlightLogHeader]: any; // because csv\n};\n\nexport type FlightLogMetaData = {\n appVersion: string;\n session: {\n id: string;\n start: Date;\n end: Date,\n elapsed: number;\n };\n device: {\n model: string;\n os: string;\n };\n aircraft: {\n model: string;\n name: string;\n firmware: string;\n };\n battery: {\n chargeVolume: number;\n remainingLifePercent: number;\n discharges: number;\n cells: number;\n firmware: string;\n };\n flightController: {\n serialNumber: string;\n firmware: string;\n };\n gimbal: {\n firmware: string;\n };\n remoteController: {\n serialNumber: string;\n firmware: string;\n };\n camera: {\n serialNumber: string;\n };\n};\n\nexport type FlightLog = {\n metaData: FlightLogMetaData;\n rows: FlightLogRow[];\n}\n\n// based off of types in ios/android SDK FlightMode enums\nexport const FLIGHT_MODE_MAPPING = {\n 0: 'Manual',\n 1: 'Attitude',\n 2: 'Attitude Course Lock',\n 3: 'Attitude Hover',\n 4: 'Hover',\n 5: 'GPS Blake',\n 6: 'GPS Attitude',\n 7: 'GPS Course Lock',\n 8: 'GPS Home',\n 9: 'GPS Hotpoint',\n 10: 'Assisted Takeoff',\n 11: 'Auto Takeoff',\n 12: 'Auto Landing',\n 13: 'Attitude Landing',\n 14: 'GPS Waypoint',\n 15: 'Go Home',\n 16: 'Click Go',\n 17: 'Joystick',\n 18: 'Attitude Limited',\n 19: 'Cinematic',\n 23: 'Attitude Limited',\n 24: 'Draw',\n 25: 'GPS Follow Me',\n 26: 'ActiveTrack',\n 27: 'TapFly',\n 28: 'Pano',\n 29: 'Farming',\n 30: 'FPV',\n 31: 'GPS Sport',\n 32: 'GPS Novice',\n 33: 'Confirm Landing',\n 35: 'Terrain Follow',\n 36: 'Palm Control',\n 37: 'Quick Shot',\n 38: 'Tripod',\n 39: 'ActiveTrack Spotlight',\n 41: 'Motors Just Started',\n 43: 'GPS Gentle',\n 255: 'Unknown',\n};\n\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Generated by CoffeeScript 2.2.4\n// # CSV Parser\n\n// This module provides a CSV parser tested and used against large datasets. Over\n// the year, it has been enhance and is now full of useful options.\n\n// Please look at the [README], the [project website][site] the [samples] and the\n// [tests] for additional information.\nvar Parser, StringDecoder, isObjLiteral, stream, util;\n\nstream = require('stream');\n\nutil = require('util');\n\nStringDecoder = require('string_decoder').StringDecoder;\n\n// ## Usage\n\n// Callback approach, for ease of use: \n\n// `parse(data, [options], callback)` \n\n// [Node.js Stream API][stream], for maximum of power: \n\n// `parse([options], [callback])` \nmodule.exports = function() {\n var callback, called, chunks, data, err, options, parser;\n if (arguments.length === 3) {\n data = arguments[0];\n options = arguments[1];\n callback = arguments[2];\n if (typeof callback !== 'function') {\n throw Error(`Invalid callback argument: ${JSON.stringify(callback)}`);\n }\n if (!(typeof data === 'string' || Buffer.isBuffer(arguments[0]))) {\n return callback(Error(`Invalid data argument: ${JSON.stringify(data)}`));\n }\n } else if (arguments.length === 2) {\n // 1st arg is data:string or options:object\n if (typeof arguments[0] === 'string' || Buffer.isBuffer(arguments[0])) {\n data = arguments[0];\n } else if (isObjLiteral(arguments[0])) {\n options = arguments[0];\n } else {\n err = `Invalid first argument: ${JSON.stringify(arguments[0])}`;\n }\n // 2nd arg is options:object or callback:function\n if (typeof arguments[1] === 'function') {\n callback = arguments[1];\n } else if (isObjLiteral(arguments[1])) {\n if (options) {\n err = 'Invalid arguments: got options twice as first and second arguments';\n } else {\n options = arguments[1];\n }\n } else {\n err = `Invalid first argument: ${JSON.stringify(arguments[1])}`;\n }\n if (err) {\n if (!callback) {\n throw Error(err);\n } else {\n return callback(Error(err));\n }\n }\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'function') {\n callback = arguments[0];\n } else {\n options = arguments[0];\n }\n }\n if (options == null) {\n options = {};\n }\n parser = new Parser(options);\n if (data != null) {\n process.nextTick(function() {\n parser.write(data);\n return parser.end();\n });\n }\n if (callback) {\n called = false;\n chunks = options.objname ? {} : [];\n parser.on('readable', function() {\n var chunk, results;\n results = [];\n while (chunk = parser.read()) {\n if (options.objname) {\n results.push(chunks[chunk[0]] = chunk[1]);\n } else {\n results.push(chunks.push(chunk));\n }\n }\n return results;\n });\n parser.on('error', function(err) {\n called = true;\n return callback(err);\n });\n parser.on('end', function() {\n if (!called) {\n return callback(null, chunks);\n }\n });\n }\n return parser;\n};\n\n// ## `Parser([options])`\n\n// Options are documented [here](http://csv.adaltas.com/parse/).\nParser = function(options = {}) {\n var base, base1, base10, base11, base12, base13, base14, base15, base16, base17, base2, base3, base4, base5, base6, base7, base8, base9, k, v;\n // @options = options\n this.options = {};\n for (k in options) {\n v = options[k];\n this.options[k] = v;\n }\n this.options.objectMode = true;\n stream.Transform.call(this, this.options);\n if ((base = this.options).rowDelimiter == null) {\n base.rowDelimiter = null;\n }\n if (typeof this.options.rowDelimiter === 'string') {\n this.options.rowDelimiter = [this.options.rowDelimiter];\n }\n if ((base1 = this.options).delimiter == null) {\n base1.delimiter = ',';\n }\n if (this.options.quote !== void 0 && !this.options.quote) {\n this.options.quote = '';\n }\n if ((base2 = this.options).quote == null) {\n base2.quote = '\"';\n }\n if ((base3 = this.options).escape == null) {\n base3.escape = '\"';\n }\n if ((base4 = this.options).columns == null) {\n base4.columns = null;\n }\n if ((base5 = this.options).comment == null) {\n base5.comment = '';\n }\n if ((base6 = this.options).objname == null) {\n base6.objname = false;\n }\n if ((base7 = this.options).trim == null) {\n base7.trim = false;\n }\n if ((base8 = this.options).ltrim == null) {\n base8.ltrim = false;\n }\n if ((base9 = this.options).rtrim == null) {\n base9.rtrim = false;\n }\n if (this.options.auto_parse != null) {\n this.options.cast = this.options.auto_parse;\n }\n if ((base10 = this.options).cast == null) {\n base10.cast = false;\n }\n if (this.options.auto_parse_date != null) {\n this.options.cast_date = this.options.auto_parse_date;\n }\n if ((base11 = this.options).cast_date == null) {\n base11.cast_date = false;\n }\n if (this.options.cast_date === true) {\n this.options.cast_date = function(value) {\n var m;\n m = Date.parse(value);\n if (!isNaN(m)) {\n value = new Date(m);\n }\n return value;\n };\n }\n if ((base12 = this.options).relax == null) {\n base12.relax = false;\n }\n if ((base13 = this.options).relax_column_count == null) {\n base13.relax_column_count = false;\n }\n if ((base14 = this.options).skip_empty_lines == null) {\n base14.skip_empty_lines = false;\n }\n if ((base15 = this.options).max_limit_on_data_read == null) {\n base15.max_limit_on_data_read = 128000;\n }\n if ((base16 = this.options).skip_lines_with_empty_values == null) {\n base16.skip_lines_with_empty_values = false;\n }\n if ((base17 = this.options).skip_lines_with_error == null) {\n base17.skip_lines_with_error = false;\n }\n // Counters\n // lines = count + skipped_line_count + empty_line_count\n this.lines = 0; // Number of lines encountered in the source dataset\n this.count = 0; // Number of records being processed\n this.skipped_line_count = 0; // Number of records skipped due to errors\n this.empty_line_count = 0; // Number of empty lines\n // Constants\n this.is_int = /^(\\-|\\+)?([1-9]+[0-9]*)$/;\n // @is_float = /^(\\-|\\+)?([0-9]+(\\.[0-9]+)([eE][0-9]+)?|Infinity)$/\n // @is_float = /^(\\-|\\+)?((([0-9])|([1-9]+[0-9]*))(\\.[0-9]+)([eE][0-9]+)?|Infinity)$/\n this.is_float = function(value) {\n return (value - parseFloat(value) + 1) >= 0; // Borrowed from jquery\n };\n // Internal state\n this._ = {\n decoder: new StringDecoder(),\n quoting: false,\n commenting: false,\n field: null,\n nextChar: null,\n closingQuote: 0,\n line: [],\n chunks: [],\n rawBuf: '',\n buf: '',\n rowDelimiterLength: this.options.rowDelimiter ? Math.max(...this.options.rowDelimiter.map(function(v) {\n return v.length;\n })) : void 0,\n lineHasError: false\n };\n return this;\n};\n\n// ## Internal API\n\n// The Parser implement a [`stream.Transform` class][transform].\n\n// ### Events\n\n// The library extends Node [EventEmitter][event] class and emit all\n// the events of the Writable and Readable [Stream API][stream]. \nutil.inherits(Parser, stream.Transform);\n\n// For extra flexibility, you can get access to the original Parser\n// class: `require('csv-parse').Parser`.\nmodule.exports.Parser = Parser;\n\n// ### `_transform(chunk, encoding, callback)`\n\n// * `chunk` Buffer | String \n// The chunk to be transformed. Will always be a buffer unless the decodeStrings option was set to false.\n// * `encoding` String \n// If the chunk is a string, then this is the encoding type. (Ignore if decodeStrings chunk is a buffer.)\n// * `callback` Function \n// Call this function (optionally with an error argument) when you are done processing the supplied chunk.\n\n// Implementation of the [`stream.Transform` API][transform]\nParser.prototype._transform = function(chunk, encoding, callback) {\n return setImmediate(() => {\n var err;\n if (chunk instanceof Buffer) {\n chunk = this._.decoder.write(chunk);\n }\n err = this.__write(chunk, false);\n if (err) {\n return this.emit('error', err);\n }\n return callback();\n });\n};\n\nParser.prototype._flush = function(callback) {\n return callback(this.__flush());\n};\n\nParser.prototype.__flush = function() {\n var err;\n err = this.__write(this._.decoder.end(), true);\n if (err) {\n return err;\n }\n if (this._.quoting) {\n err = this.error(`Quoted field not terminated at line ${this.lines + 1}`);\n return err;\n }\n if (this._.line.length > 0) {\n return this.__push(this._.line);\n }\n};\n\nParser.prototype.__push = function(line) {\n var call_column_udf, columns, err, field, i, j, len, lineAsColumns, record;\n if (this.options.skip_lines_with_empty_values && line.join('').trim() === '') {\n return;\n }\n record = null;\n if (this.options.columns === true) {\n this.options.columns = line;\n return;\n } else if (typeof this.options.columns === 'function') {\n call_column_udf = function(fn, line) {\n var columns, err;\n try {\n columns = fn.call(null, line);\n return [null, columns];\n } catch (error) {\n err = error;\n return [err];\n }\n };\n [err, columns] = call_column_udf(this.options.columns, line);\n if (err) {\n return err;\n }\n this.options.columns = columns;\n return;\n }\n if (!this._.line_length && line.length > 0) {\n this._.line_length = this.options.columns ? this.options.columns.length : line.length;\n }\n // Dont check column count on empty lines\n if (line.length === 1 && line[0] === '') {\n this.empty_line_count++;\n } else if (line.length !== this._.line_length) {\n // Dont check column count with relax_column_count\n if (this.options.relax_column_count) {\n this.count++;\n this.skipped_line_count++;\n } else if (this.options.columns != null) {\n // Suggest: Inconsistent header and column numbers: header is 1 and number of columns is 1 on line 1\n err = this.error(`Number of columns on line ${this.lines} does not match header`);\n return err;\n } else {\n err = this.error(`Number of columns is inconsistent on line ${this.lines}`);\n return err;\n }\n } else {\n this.count++;\n }\n if (this.options.columns != null) {\n lineAsColumns = {};\n for (i = j = 0, len = line.length; j < len; i = ++j) {\n field = line[i];\n if (this.options.columns[i] === false) {\n continue;\n }\n lineAsColumns[this.options.columns[i]] = field;\n }\n if (this.options.objname) {\n record = [lineAsColumns[this.options.objname], lineAsColumns];\n } else {\n record = lineAsColumns;\n }\n } else {\n record = line;\n }\n if (this.count < this.options.from) {\n return;\n }\n if (this.count > this.options.to) {\n return;\n }\n if (this.options.raw) {\n this.push({\n raw: this._.rawBuf,\n row: record\n });\n this._.rawBuf = '';\n } else {\n this.push(record);\n }\n if (this.listenerCount('record')) {\n this.emit('record', record);\n }\n return null;\n};\n\nParser.prototype.__write = function(chars, end) {\n var areNextCharsDelimiter, areNextCharsRowDelimiters, cast, char, err, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isNextCharTrimable, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, ref5, ref6, remainingBuffer, rowDelimiter, rtrim, wasCommenting;\n is_int = (value) => {\n if (typeof this.is_int === 'function') {\n return this.is_int(value);\n } else {\n return this.is_int.test(value);\n }\n };\n is_float = (value) => {\n if (typeof this.is_float === 'function') {\n return this.is_float(value);\n } else {\n return this.is_float.test(value);\n }\n };\n cast = (value, context = {}) => {\n if (!this.options.cast) {\n return value;\n }\n if (context.quoting == null) {\n context.quoting = !!this._.closingQuote;\n }\n if (context.lines == null) {\n context.lines = this.lines;\n }\n if (context.count == null) {\n context.count = this.count;\n }\n if (context.index == null) {\n context.index = this._.line.length;\n }\n // context.header ?= if @options.column and @lines is 1 and @count is 0 then true else false\n if (context.header == null) {\n context.header = this.options.columns === true;\n }\n if (context.column == null) {\n context.column = Array.isArray(this.options.columns) ? this.options.columns[context.index] : context.index;\n }\n if (typeof this.options.cast === 'function') {\n return this.options.cast(value, context);\n }\n if (is_int(value)) {\n value = parseInt(value);\n } else if (is_float(value)) {\n value = parseFloat(value);\n } else if (this.options.cast_date) {\n value = this.options.cast_date(value, context);\n }\n return value;\n };\n ltrim = this.options.trim || this.options.ltrim;\n rtrim = this.options.trim || this.options.rtrim;\n chars = this._.buf + chars;\n l = chars.length;\n i = 0;\n if (this.lines === 0 && 0xFEFF === chars.charCodeAt(0)) {\n // Strip BOM header\n i++;\n }\n while (i < l) {\n // Ensure we get enough space to look ahead\n if (!end) {\n remainingBuffer = chars.substr(i, l - i);\n // (i+1000 >= l) or\n // Skip if the remaining buffer can be comment\n // Skip if the remaining buffer can be row delimiter\n 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) {\n return rd.substr(0, l - i) === remainingBuffer;\n // Skip if the remaining buffer can be row delimiter following the closing quote\n })) || (this.options.rowDelimiter && this._.quoting && l - i < (this.options.quote.length + this._.rowDelimiterLength) && this.options.rowDelimiter.some((rd) => {\n return (this.options.quote + rd).substr(0, l - i) === remainingBuffer;\n // Skip if the remaining buffer can be delimiter\n // Skip if the remaining buffer can be escape sequence\n })) || (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)) {\n break;\n }\n }\n char = this._.nextChar ? this._.nextChar : chars.charAt(i);\n this._.nextChar = l > i + 1 ? chars.charAt(i + 1) : null;\n if (this.options.raw) {\n this._.rawBuf += char;\n }\n // Auto discovery of rowDelimiter, unix, mac and windows supported\n if (this.options.rowDelimiter == null) {\n nextCharPos = i;\n rowDelimiter = null;\n // First empty line\n if (!this._.quoting && (char === '\\n' || char === '\\r')) {\n rowDelimiter = char;\n nextCharPos += 1;\n } else if (this._.quoting && char === this.options.quote && ((ref = this._.nextChar) === '\\n' || ref === '\\r')) {\n rowDelimiter = this._.nextChar;\n nextCharPos += 2;\n }\n if (rowDelimiter) {\n if (rowDelimiter === '\\r' && chars.charAt(nextCharPos) === '\\n') {\n rowDelimiter += '\\n';\n }\n this.options.rowDelimiter = [rowDelimiter];\n this._.rowDelimiterLength = rowDelimiter.length;\n }\n }\n // Parse that damn char\n // Note, shouldn't we have sth like chars.substr(i, @options.escape.length)\n if (!this._.commenting && char === this.options.escape) {\n // Make sure the escape is really here for escaping:\n // If escape is same as quote, and escape is first char of a field \n // and it's not quoted, then it is a quote\n // Next char should be an escape or a quote\n escapeIsQuote = this.options.escape === this.options.quote;\n isEscape = this._.nextChar === this.options.escape;\n isQuote = this._.nextChar === this.options.quote;\n if (!(escapeIsQuote && !this._.field && !this._.quoting) && (isEscape || isQuote)) {\n i++;\n char = this._.nextChar;\n this._.nextChar = chars.charAt(i + 1);\n if (this._.field == null) {\n this._.field = '';\n }\n this._.field += char;\n // Since we're skipping the next one, better add it now if in raw mode.\n if (this.options.raw) {\n this._.rawBuf += char;\n }\n i++;\n continue;\n }\n }\n // Char match quote\n if (!this._.commenting && char === this.options.quote) {\n if (this._.acceptOnlyEmptyChars && (char !== ' ' && char !== '\\t')) {\n return this.error('Only trimable characters are accepted after quotes');\n }\n if (this._.quoting) {\n // Make sure a closing quote is followed by a delimiter\n // If we have a next character and \n // it isnt a rowDelimiter and \n // it isnt an column delimiter and\n // it isnt the begining of a comment\n // Otherwise, if this is not \"relax\" mode, throw an error\n isNextCharTrimable = rtrim && ((ref1 = this._.nextChar) === ' ' || ref1 === '\\t');\n areNextCharsRowDelimiters = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {\n return chars.substr(i + 1, rd.length) === rd;\n });\n areNextCharsDelimiter = chars.substr(i + 1, this.options.delimiter.length) === this.options.delimiter;\n isNextCharAComment = this._.nextChar === this.options.comment;\n if ((this._.nextChar != null) && !isNextCharTrimable && !areNextCharsRowDelimiters && !areNextCharsDelimiter && !isNextCharAComment) {\n if (this.options.relax) {\n this._.quoting = false;\n if (this._.field) {\n this._.field = `${this.options.quote}${this._.field}`;\n }\n } else {\n if (err = this.error(`Invalid closing quote at line ${this.lines + 1}; found ${JSON.stringify(this._.nextChar)} instead of delimiter ${JSON.stringify(this.options.delimiter)}`)) {\n return err;\n }\n }\n } else if ((this._.nextChar != null) && isNextCharTrimable) {\n i++;\n this._.quoting = false;\n this._.closingQuote = this.options.quote.length;\n this._.acceptOnlyEmptyChars = true;\n continue;\n } else {\n i++;\n this._.quoting = false;\n this._.closingQuote = this.options.quote.length;\n if (end && i === l) {\n this._.line.push(cast(this._.field || ''));\n this._.field = null;\n }\n continue;\n }\n } else if (!this._.field) {\n this._.quoting = true;\n i++;\n continue;\n } else if ((this._.field != null) && !this.options.relax) {\n if (err = this.error(`Invalid opening quote at line ${this.lines + 1}`)) {\n return err;\n }\n }\n }\n // Otherwise, treat quote as a regular character\n isRowDelimiter = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {\n return chars.substr(i, rd.length) === rd;\n });\n if (isRowDelimiter || (end && i === l - 1)) {\n this.lines++;\n }\n // Set the commenting flag\n wasCommenting = false;\n if (!this._.commenting && !this._.quoting && this.options.comment && chars.substr(i, this.options.comment.length) === this.options.comment) {\n this._.commenting = true;\n } else if (this._.commenting && isRowDelimiter) {\n wasCommenting = true;\n this._.commenting = false;\n }\n isDelimiter = chars.substr(i, this.options.delimiter.length) === this.options.delimiter;\n if (this._.acceptOnlyEmptyChars) {\n if (isDelimiter || isRowDelimiter) {\n this._.acceptOnlyEmptyChars = false;\n } else {\n if (char === ' ' || char === '\\t') {\n i++;\n continue;\n } else {\n return this.error('Only trimable characters are accepted after quotes');\n }\n }\n }\n if (!this._.commenting && !this._.quoting && (isDelimiter || isRowDelimiter)) {\n if (isRowDelimiter) {\n isRowDelimiterLength = this.options.rowDelimiter.filter(function(rd) {\n return chars.substr(i, rd.length) === rd;\n })[0].length;\n }\n // Empty lines\n if (isRowDelimiter && this._.line.length === 0 && (this._.field == null)) {\n if (wasCommenting || this.options.skip_empty_lines) {\n i += isRowDelimiterLength;\n this._.nextChar = chars.charAt(i);\n continue;\n }\n }\n if (rtrim) {\n if (!this._.closingQuote) {\n this._.field = (ref2 = this._.field) != null ? ref2.trimRight() : void 0;\n }\n }\n this._.line.push(cast(this._.field || ''));\n this._.closingQuote = 0;\n this._.field = null;\n if (isDelimiter) { // End of field\n i += this.options.delimiter.length;\n this._.nextChar = chars.charAt(i);\n if (end && !this._.nextChar) {\n isRowDelimiter = true;\n this._.line.push('');\n }\n }\n if (isRowDelimiter) { // End of record\n if (!this._.lineHasError) {\n err = this.__push(this._.line);\n if (err) {\n return err;\n }\n }\n if (this._.lineHasError) {\n this._.lineHasError = false;\n }\n // Some cleanup for the next record\n this._.line = [];\n i += isRowDelimiterLength;\n this._.nextChar = chars.charAt(i);\n continue;\n }\n } else if (!this._.commenting && !this._.quoting && (char === ' ' || char === '\\t')) {\n if (this._.field == null) {\n // Left trim unless we are quoting or field already filled\n this._.field = '';\n }\n if (!(ltrim && !this._.field)) {\n this._.field += char;\n }\n i++;\n } else if (!this._.commenting) {\n if (this._.field == null) {\n this._.field = '';\n }\n this._.field += char;\n i++;\n } else {\n i++;\n }\n if (!this._.commenting && ((ref3 = this._.field) != null ? ref3.length : void 0) > this.options.max_limit_on_data_read) {\n return Error(`Field exceeds max_limit_on_data_read setting (${this.options.max_limit_on_data_read}) ${JSON.stringify(this.options.delimiter)}`);\n }\n if (!this._.commenting && ((ref4 = this._.line) != null ? ref4.length : void 0) > this.options.max_limit_on_data_read) {\n return Error(`Row delimiter not found in the file ${JSON.stringify(this.options.rowDelimiter)}`);\n }\n }\n // Flush remaining fields and lines\n if (end) {\n if (l === 0) {\n this.lines++;\n }\n if (this._.field != null) {\n if (rtrim) {\n if (!this._.closingQuote) {\n this._.field = (ref5 = this._.field) != null ? ref5.trimRight() : void 0;\n }\n }\n this._.line.push(cast(this._.field || ''));\n this._.field = null;\n }\n if (((ref6 = this._.field) != null ? ref6.length : void 0) > this.options.max_limit_on_data_read) {\n return Error(`Delimiter not found in the file ${JSON.stringify(this.options.delimiter)}`);\n }\n if (this._.line.length > this.options.max_limit_on_data_read) {\n return Error(`Row delimiter not found in the file ${JSON.stringify(this.options.rowDelimiter)}`);\n }\n }\n // Store un-parsed chars for next call\n this._.buf = chars.substr(i);\n return null;\n};\n\nParser.prototype.error = function(msg) {\n var err;\n err = Error(msg);\n if (!this.options.skip_lines_with_error) {\n return err;\n } else {\n if (!this._.lineHasError) {\n this._.lineHasError = true;\n this.emit('skip', err);\n }\n }\n return null;\n};\n\n// ## Utils\nisObjLiteral = function(_obj) {\n var _test;\n _test = _obj;\n if (typeof _obj !== 'object' || _obj === null || Array.isArray(_obj)) {\n return false;\n } else {\n return (function() {\n while (!false) {\n if (Object.getPrototypeOf(_test = Object.getPrototypeOf(_test)) === null) {\n break;\n }\n }\n return Object.getPrototypeOf(_obj === _test);\n })();\n }\n};\n\n// [readme]: https://github.com/wdavidw/node-csv-parse\n// [site]: http://csv.adaltas.com/parse/\n// [samples]: https://github.com/wdavidw/node-csv-parse/tree/master/samples\n// [tests]: https://github.com/wdavidw/node-csv-parse/tree/master/test\n// [stream]: (http://nodejs.org/api/stream.html\n// [transform]: (http://nodejs.org/api/stream.html#stream_class_stream_transform_1)\n","import { FlightLogHeader } from './types';\n\nexport const INT_FIELDS = new Set([\n FlightLogHeader.AircraftBatteryCell1Voltage,\n FlightLogHeader.AircraftBatteryCell2Voltage,\n FlightLogHeader.AircraftBatteryCell3Voltage,\n FlightLogHeader.AircraftBatteryCell4Voltage,\n FlightLogHeader.AircraftBatteryCharge,\n FlightLogHeader.AircraftBatteryCurrent,\n FlightLogHeader.AircraftBatteryTemperature,\n FlightLogHeader.AircraftBatteryVoltage,\n FlightLogHeader.AircraftCameraLensFocusModeValue,\n FlightLogHeader.AircraftCameraLensFocusStatusValue,\n FlightLogHeader.AircraftCameraModeValue,\n FlightLogHeader.AircraftFlightModeValue,\n FlightLogHeader.AircraftGPSSignalValue,\n FlightLogHeader.AircraftNoFlyValue,\n FlightLogHeader.AircraftSatellites,\n FlightLogHeader.GimbalModeValue,\n]);\n\nexport const FLOAT_FIELDS = new Set([\n FlightLogHeader.AircraftBarometricAltitude,\n FlightLogHeader.AircraftBatteryPowerPercent,\n FlightLogHeader.AircraftCameraSDCardRemainingPercent,\n FlightLogHeader.AircraftHeading,\n FlightLogHeader.AircraftLatitude,\n FlightLogHeader.AircraftLongitude,\n FlightLogHeader.AircraftNoFlyLatitude,\n FlightLogHeader.AircraftNoFlyLongitude,\n FlightLogHeader.AircraftNoFlyRadius,\n FlightLogHeader.AircraftPitch,\n FlightLogHeader.AircraftRoll,\n FlightLogHeader.AircraftSmartGoHomeFlightReturnTime,\n FlightLogHeader.AircraftSmartGoHomeFlightTimeRemaining,\n FlightLogHeader.AircraftSmartGoHomeLandingPower,\n FlightLogHeader.AircraftSmartGoHomeLandingTime,\n FlightLogHeader.AircraftSmartGoHomeReturnPower,\n FlightLogHeader.AircraftSpeed,\n FlightLogHeader.AircraftUltrasonicAltitude,\n FlightLogHeader.DeviceToAircraftDistance,\n FlightLogHeader.ElapsedTime,\n FlightLogHeader.GimbalPitch,\n FlightLogHeader.GimbalPitchAtStop,\n FlightLogHeader.GimbalRoll,\n FlightLogHeader.GimbalRollAtStop,\n FlightLogHeader.GimbalYaw,\n FlightLogHeader.GimbalYawAtStop,\n FlightLogHeader.HomeLatitude,\n FlightLogHeader.HomeLongitude,\n FlightLogHeader.RCBatteryPercentRemaining,\n FlightLogHeader.RCLeftHorizontal,\n FlightLogHeader.RCRightHorizontal,\n FlightLogHeader.RCLeftVertical,\n FlightLogHeader.RCRightVertical,\n]);\n\nexport const BOOL_FIELDS = new Set([\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraIntervalCapture,\n FlightLogHeader.AircraftCameraLensAFAssistant,\n FlightLogHeader.AircraftCameraLensAFEnabled,\n FlightLogHeader.AircraftCameraLensAssistantWorking,\n FlightLogHeader.AircraftCameraOverheated,\n FlightLogHeader.AircraftCameraRawCapture,\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraRecording,\n FlightLogHeader.AircraftCameraSDCardExists,\n FlightLogHeader.AircraftCameraSensorError,\n FlightLogHeader.AircraftCameraSingleCapture,\n FlightLogHeader.AircraftCameraStoringPhoto,\n FlightLogHeader.AircraftFlying,\n FlightLogHeader.AircraftIMUPreheating,\n FlightLogHeader.AircraftMotorsOn,\n FlightLogHeader.AircraftSmartGoHomeRequesting,\n FlightLogHeader.AircraftUltrasonicOn,\n FlightLogHeader.AircraftVisionOn,\n]);\n\n","import parse from 'csv-parse';\n\nimport { FlightLogRow, FlightLogHeader, FlightLogMetaData, FlightLog } from './types';\nimport { INT_FIELDS, BOOL_FIELDS, FLOAT_FIELDS } from './field-types';\n\nconst META_REGEX = {\n appVersion: /^#DroneDeploy\\s+(.+)$/,\n sessionId: /^Session ID\\s+(.+)$/,\n sessionStart: /^Session Start\\s+(.+)$/,\n sessionEnd: /^Date\\/Time \\(UTC\\)\\s+(.+)$/,\n deviceModel: /^Device Model\\s+(.+)$/,\n deviceOS: /^Device Operating System\\s+(.+)$/,\n aircraftModel: /^Aircraft Model\\s+(.+)$/,\n aircraftName: /^Aircraft Name\\s+(.+)$/,\n aircraftFirmware: /^Aircraft Firmware\\s+(.+)$/,\n batteryChargeVolume: /^Full Charge Volume \\(mAh\\)\\s+(.+)$/,\n batteryRemainingLife: /^Remaining Life \\(%\\)\\s+(.+)$/,\n batteryDischarges: /^Discharges\\s+(.+)$/,\n batteryCells: /^Battery Cells Number\\s+(.+)$/,\n batteryFirmware: /^Battery Firmware\\s+(.+)$/,\n fcSerialNumber: /^Flight Controller Serial Number\\s+(.+)$/,\n fcFirmware: /^Flight Controller Firmware\\s+(.+)$/,\n gimbalFirmware: /^Gimbal Firmware\\s+(.+)$/,\n rcSerialNumber: /^Remote Control Serial Number\\s+(.+)$/,\n rcFirmware: /^Remote Control Firmware\\s+(.+)$/,\n cameraSerialNumber: /^Camera Serial Number\\s+(.+)$/,\n elapsedTime: /^Elapsed Time \\(sec\\)\\s+(.+)$/,\n};\n\nconst LOG_HEADER_LINES = 27;\nconst LOG_FOOTER_LINES = 3;\n\nexport function parseLog(log: String): Promise {\n const lines = log.split('\\n');\n\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const header = lines.slice(0, LOG_HEADER_LINES);\n const footer = lines.slice(-LOG_FOOTER_LINES);\n const body = lines.slice(LOG_HEADER_LINES, -LOG_FOOTER_LINES);\n const metaData = parseMetaData(header, footer);\n\n return parseBody(body).then((rows) => ({\n metaData,\n rows,\n }));\n}\n\nfunction parseBody(lines: string[]): Promise {\n const text = lines.join('\\n');\n const options = {\n delimiter: '\\t',\n from: 1,\n relax_column_count: true,\n };\n\n return new Promise((resolve, reject) => {\n parse(text, options, (err: any, result: string[]) => {\n if (err) {\n return reject(err);\n }\n\n const [headers, ...rows] = result;\n\n const logs = rows\n .map((row) => {\n const log = {} as FlightLogRow;\n\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i].trim() as FlightLogHeader;\n let value: any = row[i];\n\n if (INT_FIELDS.has(header)) {\n value = parseInt(value, 10);\n }\n\n if (FLOAT_FIELDS.has(header)) {\n value = parseFloat(value);\n }\n\n if (BOOL_FIELDS.has(header)) {\n value = value !== '0';\n }\n\n log[header] = value;\n }\n\n return log;\n });\n\n resolve(logs);\n });\n });\n};\n\nfunction findMatch(search: string[], regex: RegExp) {\n let match;\n\n for (let str of search) {\n match = str.match(regex);\n\n if (match) {\n break;\n }\n }\n\n if (!match) {\n return 'N/A';\n }\n\n return match[1];\n};\n\nfunction parseMetaData(headers: string[], footers: string[]): FlightLogMetaData {\n const meta = [...headers, ...footers];\n\n return {\n appVersion: findMatch(meta, META_REGEX.appVersion),\n session: {\n id: findMatch(meta, META_REGEX.sessionId),\n start: new Date(findMatch(meta, META_REGEX.sessionStart)),\n end: new Date(findMatch(meta, META_REGEX.sessionEnd)),\n elapsed: parseFloat(findMatch(meta, META_REGEX.elapsedTime)),\n },\n device: {\n model: findMatch(meta, META_REGEX.deviceModel),\n os: findMatch(meta, META_REGEX.deviceOS).replace(/\\t/g, ' '),\n },\n aircraft: {\n model: findMatch(meta, META_REGEX.aircraftModel),\n name: findMatch(meta, META_REGEX.aircraftName),\n firmware: findMatch(meta, META_REGEX.aircraftFirmware),\n },\n battery: {\n chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume), 10),\n remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife), 10),\n discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges), 10),\n cells: parseInt(findMatch(meta, META_REGEX.batteryCells), 10),\n firmware: findMatch(meta, META_REGEX.batteryFirmware),\n },\n flightController: {\n serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),\n firmware: findMatch(meta, META_REGEX.fcFirmware),\n },\n gimbal: {\n firmware: findMatch(meta, META_REGEX.gimbalFirmware),\n },\n remoteController: {\n serialNumber: findMatch(meta, META_REGEX.rcSerialNumber),\n firmware: findMatch(meta, META_REGEX.rcFirmware),\n },\n camera: {\n serialNumber: findMatch(meta, META_REGEX.cameraSerialNumber),\n },\n };\n};\n"],"names":["Buffer","require$$0","StringDecoder","stream","util","require$$1","require$$2","parse"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"flight-log-parser.es6.js","sources":["../src/types.ts","../src/field-types.ts","../src/parser.ts"],"sourcesContent":["export enum FlightLogHeader {\n DateTime = 'Date/Time (UTC)',\n ElapsedTime = 'Elapsed Time (sec)',\n Info = 'Info',\n DeviceLatitude = 'Device Latitude (Degrees)',\n DeviceLongitude = 'Device Longitude (Degrees)',\n DeviceLocationLastUpdated = 'Device Location Last Updated (ms)',\n AircraftBatteryPowerPercent = 'Aircraft Battery Power (%)',\n AircraftBatteryCharge = 'Aircraft Battery Charge (mAh)',\n AircraftBatteryCurrent = 'Aircraft Battery Current (mA)',\n AircraftBatteryVoltage = 'Aircraft Battery Voltage (mV)',\n AircraftBatteryTemperature = 'Aircraft Battery Temperature (Fahrenheit)',\n AircraftBatteryLastUpdated = 'Aircraft Battery Last Updated (ms)',\n AircraftBatteryCell1Voltage = 'Aircraft Battery Cell 1 Voltage',\n AircraftBatteryCell2Voltage = 'Aircraft Battery Cell 2 Voltage',\n AircraftBatteryCell3Voltage = 'Aircraft Battery Cell 3 Voltage',\n AircraftBatteryCell4Voltage = 'Aircraft Battery Cell 4 Voltage',\n AircraftBatteryCellVoltageLastUpdated = 'Aircraft Battery Cell Voltage Last Updated (ms)',\n AircraftLatitude = 'Aircraft Latitude (Degrees)',\n AircraftLongitude = 'Aircraft Longitude (Degrees)',\n AircraftSpeed = 'Aircraft Speed (mph)',\n AircraftBarometricAltitude = 'Aircraft Barometric Altitude (ft)',\n AircraftHeading = 'Aircraft Heading (Degrees)',\n AircraftVelocityX = 'Aircraft Vel - X (mph)',\n AircraftVelocityY = 'Aircraft Vel - Y (mph)',\n AircraftVelocityZ = 'Aircraft Vel - Z (mph)',\n AircraftPitch = 'Aircraft Pitch (Degrees)',\n AircraftRoll = 'Aircraft Roll (Degrees)',\n AircraftSatellites = 'Aircraft Satellites',\n AircraftMotorsOn = 'Aircraft Motors On',\n AircraftFlying = 'Aircraft Flying',\n AircraftFlightMode = 'Aircraft Flight Mode',\n AircraftFlightModeValue = 'Aircraft Flight Mode Value',\n AircraftIMUPreheating = 'Aircraft IMU Preheating',\n AircraftUltrasonicOn = 'Aircraft Ultrasonic On',\n AircraftUltrasonicAltitude = 'Aircraft Ultrasonic Altitude (ft)',\n AircraftVisionOn = 'Aircraft Vision On',\n AircraftGPSSignal = 'Aircraft GPS Signal',\n AircraftGPSSignalValue = 'Aircraft GPS Signal Value',\n AircraftNoFly = 'Aircraft No-fly',\n AircraftNoFlyValue = 'Aircraft No-fly Value',\n AircraftNoFlyLatitude = 'Aircraft No-fly Latitude (Degrees)',\n AircraftNoFlyLongitude = 'Aircraft No-fly Longitude (Degrees)',\n AircraftNoFlyRadius = 'Aircraft No-fly Radius (ft)',\n HomeLatitude = 'Home Latitude (Degrees)',\n HomeLongitude = 'Home Longitude (Degrees)',\n AircraftSmartGoHomeFlightTimeRemaining = 'Aircraft Smart Go-home Flight Time Remaining (sec)',\n AircraftSmartGoHomeFlightReturnTime = 'Aircraft Smart Go-home Flight Return Time (sec)',\n AircraftSmartGoHomeLandingTime = 'Aircraft Smart Go-home Landing Time (sec)',\n AircraftSmartGoHomeReturnPower = 'Aircraft Smart Go-home Return Power (%)',\n AircraftSmartGoHomeLandingPower = 'Aircraft Smart Go-home Landing Power (%)',\n AircraftSmartGoHomeRadius = 'Aircraft Smart Go-home Radius (ft)',\n AircraftSmartGoHomeCountdown = 'Aircraft Smart Go-home Countdown (sec)',\n AircraftSmartGoHomeRequesting = 'Aircraft Smart Go-home Requesting',\n AircraftSystemStateLastUpdated = 'Aircraft System State Last Updated (ms)',\n GimbalPitch = 'Gimbal Pitch (Degrees)',\n GimbalRoll = 'Gimbal Roll (Degrees)',\n GimbalYaw = 'Gimbal Yaw (Degrees)',\n GimbalMode = 'Gimbal Mode',\n GimbalModeValue = 'Gimbal Mode Value',\n GimbalPitchAtStop = 'Gimbal Pitch at Stop',\n GimbalRollAtStop = 'Gimbal Roll at Stop',\n GimbalYawAtStop = 'Gimbal Yaw at Stop',\n GimbalStatusLastUpdated = 'Gimbal Status Last Updated (ms)',\n LandingGearIsMovable = 'Landing Gear is Movable',\n LandingGearStatus = 'Landing Gear Status',\n LandingGearStatusValue = 'Landing Gear Status Value',\n LandingGearMode = 'Landing Gear Mode',\n LandingGearModeValue = 'Landing Gear Mode Value',\n LandingGearLastUpdated = 'Landing Gear Last Updated (ms)',\n RCState = 'RC State',\n RCStateValue = 'RC State Value',\n RCLeftHorizontal = 'RC Left Horizontal',\n RCLeftVertical = 'RC Left Vertical',\n RCRightHorizontal = 'RC Right Horizontal',\n RCRightVertical = 'RC Right Vertical',\n RCLeftWheel = 'RC Left Wheel',\n RCRightWheel = 'RC Right Wheel',\n RCLandingGear = 'RC Landing Gear',\n RCLandingGearValue = 'RC Landing Gear Value',\n RCGoHome = 'RC Go Home',\n RCRecord = 'RC Record ',\n RCShutter = 'RC Shutter',\n RCPlayback = 'RC Playback',\n RCPause = 'RC Pause',\n RCCustom1 = 'RC Custom 1',\n RCCustom2 = 'RC Custom 2',\n RCStateLastUpdated = 'RC State Last Updated (ms)',\n RCBatteryPercentRemaining = 'RC Battery (%)',\n RCBatteryStateLastUpdated = 'RC Battery State Last Updated (ms)',\n RCSattelites = 'RC Sattelites',\n RCHorizontalAccuaracy = 'RC Horizontal Accuaracy (ft)',\n RCLatitude = 'RC Latitude (Degrees)',\n RCLongitude = 'RC Longitude (Degrees)',\n RCGSPDataIsValid = 'RC GSP Data is Valid',\n RCGPSStateLastUpdated = 'RC GPS State Last Updated (ms)',\n RCSignal1 = 'RC Signal 1',\n RCSignal2 = 'RC Signal 2',\n RCSignalLastUpdated = 'RC Signal Last Updated (ms)',\n LBSignal1 = 'LB Signal 1',\n LBSignal2 = 'LB Signal 2',\n LBSignalLastUpdated = 'LB Signal Last Updated (ms)',\n AircraftCameraMode = 'Aircraft Camera Mode',\n AircraftCameraModeValue = 'Aircraft Camera Mode Value',\n AircraftCameraOverheated = 'Aircraft Camera Overheated',\n AircraftCameraSensorError = 'Aircraft Camera Sensor Error',\n AircraftCameraRecording = 'Aircraft Camera Recording',\n AircraftCameraRawCapture = 'Aircraft Camera Raw Capture',\n AircraftCameraIntervalCapture = 'Aircraft Camera Interval Capture',\n AircraftCameraBurstCapture = 'Aircraft Camera Burst Capture',\n AircraftCameraSingleCapture = 'Aircraft Camera Single Capture',\n AircraftCameraStoringPhoto = 'Aircraft Camera Storing Photo',\n AircraftCameraStateLastUpdated = 'Aircraft Camera State Last Updated (ms)',\n AircraftCameraSDCardExists = 'Aircraft Camera SD Card Exists',\n AircraftCameraSDCardRemainingPercent = 'Aircraft Camera SD Card Remaining (%)',\n AircraftCameraSDCardStateLastUpdated = 'Aircraft Camera SD Card State Last Updated (ms)',\n AircraftCameraChangeableLensSupported = 'Aircraft Camera Changeable Lens Supported',\n AircraftCameraLensInstalled = 'Aircraft Camera Lens Installed',\n AircraftCameraLensType = 'Aircraft Camera Lens Type',\n AircraftCameraLensAFEnabled = 'Aircraft Camera Lens AF Enabled',\n AircraftCameraLensFocusMode = 'Aircraft Camera Lens Focus Mode',\n AircraftCameraLensFocusModeValue = 'Aircraft Camera Lens Focus Mode Value',\n AircraftCameraLensFocusStatus = 'Aircraft Camera Lens Focus Status',\n AircraftCameraLensFocusStatusValue = 'Aircraft Camera Lens Focus Status Value',\n AircraftCameraLensMFAssistant = 'Aircraft Camera Lens MF Assistant',\n AircraftCameraLensAFAssistant = 'Aircraft Camera Lens AF Assistant',\n AircraftCameraLensAssistantWorking = 'Aircraft Camera Lens Assistant Working',\n AircraftCameraLensStateLastUpdated = 'Aircraft Camera Lens State Last Updated (ms)',\n DeviceToAircraftDistance = 'Device > Aircraft Distance - XY (ft)',\n}\n\nexport type FlightLogRow = {\n [prop in FlightLogHeader]: any // because csv\n};\n\nexport type FlightLogMetaData = {\n appVersion: string;\n session: {\n id: string;\n start: Date;\n end: Date;\n elapsed: number;\n };\n device: {\n model: string;\n os: string;\n };\n aircraft: {\n model: string;\n name: string;\n firmware: string;\n };\n battery: {\n chargeVolume: number;\n remainingLifePercent: number;\n discharges: number;\n cells: number;\n firmware: string;\n serialNumber: string;\n };\n flightController: {\n serialNumber: string;\n firmware: string;\n };\n gimbal: {\n firmware: string;\n };\n remoteController: {\n serialNumber: string;\n firmware: string;\n };\n camera: {\n serialNumber: string;\n };\n};\n\nexport type FlightLog = {\n metaData: FlightLogMetaData;\n rows: FlightLogRow[];\n};\n\n// based off of types in ios/android SDK FlightMode enums\nexport const FLIGHT_MODE_MAPPING = {\n 0: 'Manual',\n 1: 'Attitude',\n 2: 'Attitude Course Lock',\n 3: 'Attitude Hover',\n 4: 'Hover',\n 5: 'GPS Blake',\n 6: 'GPS Attitude',\n 7: 'GPS Course Lock',\n 8: 'GPS Home',\n 9: 'GPS Hotpoint',\n 10: 'Assisted Takeoff',\n 11: 'Auto Takeoff',\n 12: 'Auto Landing',\n 13: 'Attitude Landing',\n 14: 'GPS Waypoint',\n 15: 'Go Home',\n 16: 'Click Go',\n 17: 'Joystick',\n 18: 'Attitude Limited',\n 19: 'Cinematic',\n 23: 'Attitude Limited',\n 24: 'Draw',\n 25: 'GPS Follow Me',\n 26: 'ActiveTrack',\n 27: 'TapFly',\n 28: 'Pano',\n 29: 'Farming',\n 30: 'FPV',\n 31: 'GPS Sport',\n 32: 'GPS Novice',\n 33: 'Confirm Landing',\n 35: 'Terrain Follow',\n 36: 'Palm Control',\n 37: 'Quick Shot',\n 38: 'Tripod',\n 39: 'ActiveTrack Spotlight',\n 41: 'Motors Just Started',\n 43: 'GPS Gentle',\n 255: 'Unknown',\n};\n","import { FlightLogHeader } from './types';\n\nexport const INT_FIELDS = new Set([\n FlightLogHeader.AircraftBatteryCell1Voltage,\n FlightLogHeader.AircraftBatteryCell2Voltage,\n FlightLogHeader.AircraftBatteryCell3Voltage,\n FlightLogHeader.AircraftBatteryCell4Voltage,\n FlightLogHeader.AircraftBatteryCharge,\n FlightLogHeader.AircraftBatteryCurrent,\n FlightLogHeader.AircraftBatteryTemperature,\n FlightLogHeader.AircraftBatteryVoltage,\n FlightLogHeader.AircraftCameraLensFocusModeValue,\n FlightLogHeader.AircraftCameraLensFocusStatusValue,\n FlightLogHeader.AircraftCameraModeValue,\n FlightLogHeader.AircraftFlightModeValue,\n FlightLogHeader.AircraftGPSSignalValue,\n FlightLogHeader.AircraftNoFlyValue,\n FlightLogHeader.AircraftSatellites,\n FlightLogHeader.GimbalModeValue,\n FlightLogHeader.AircraftSmartGoHomeRadius,\n FlightLogHeader.AircraftSmartGoHomeCountdown,\n FlightLogHeader.AircraftVelocityX,\n FlightLogHeader.AircraftVelocityY,\n FlightLogHeader.AircraftVelocityZ,\n FlightLogHeader.RCHorizontalAccuaracy,\n FlightLogHeader.RCLatitude,\n FlightLogHeader.RCLongitude,\n FlightLogHeader.LandingGearStatusValue,\n FlightLogHeader.LandingGearModeValue,\n FlightLogHeader.RCStateValue,\n FlightLogHeader.RCLandingGearValue,\n]);\n\nexport const FLOAT_FIELDS = new Set([\n FlightLogHeader.AircraftBarometricAltitude,\n FlightLogHeader.AircraftBatteryPowerPercent,\n FlightLogHeader.AircraftCameraSDCardRemainingPercent,\n FlightLogHeader.AircraftHeading,\n FlightLogHeader.AircraftLatitude,\n FlightLogHeader.AircraftLongitude,\n FlightLogHeader.AircraftNoFlyLatitude,\n FlightLogHeader.AircraftNoFlyLongitude,\n FlightLogHeader.AircraftNoFlyRadius,\n FlightLogHeader.AircraftPitch,\n FlightLogHeader.AircraftRoll,\n FlightLogHeader.AircraftSmartGoHomeFlightReturnTime,\n FlightLogHeader.AircraftSmartGoHomeFlightTimeRemaining,\n FlightLogHeader.AircraftSmartGoHomeLandingPower,\n FlightLogHeader.AircraftSmartGoHomeLandingTime,\n FlightLogHeader.AircraftSmartGoHomeReturnPower,\n FlightLogHeader.AircraftSpeed,\n FlightLogHeader.AircraftUltrasonicAltitude,\n FlightLogHeader.DeviceToAircraftDistance,\n FlightLogHeader.ElapsedTime,\n FlightLogHeader.GimbalPitch,\n FlightLogHeader.GimbalPitchAtStop,\n FlightLogHeader.GimbalRoll,\n FlightLogHeader.GimbalRollAtStop,\n FlightLogHeader.GimbalYaw,\n FlightLogHeader.GimbalYawAtStop,\n FlightLogHeader.HomeLatitude,\n FlightLogHeader.HomeLongitude,\n FlightLogHeader.RCBatteryPercentRemaining,\n FlightLogHeader.RCLeftHorizontal,\n FlightLogHeader.RCRightHorizontal,\n FlightLogHeader.RCLeftVertical,\n FlightLogHeader.RCRightVertical,\n]);\n\nexport const BOOL_FIELDS = new Set([\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraIntervalCapture,\n FlightLogHeader.AircraftCameraLensAFAssistant,\n FlightLogHeader.AircraftCameraLensAFEnabled,\n FlightLogHeader.AircraftCameraLensAssistantWorking,\n FlightLogHeader.AircraftCameraOverheated,\n FlightLogHeader.AircraftCameraRawCapture,\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraRecording,\n FlightLogHeader.AircraftCameraSDCardExists,\n FlightLogHeader.AircraftCameraSensorError,\n FlightLogHeader.AircraftCameraSingleCapture,\n FlightLogHeader.AircraftCameraStoringPhoto,\n FlightLogHeader.AircraftFlying,\n FlightLogHeader.AircraftIMUPreheating,\n FlightLogHeader.AircraftMotorsOn,\n FlightLogHeader.AircraftSmartGoHomeRequesting,\n FlightLogHeader.AircraftUltrasonicOn,\n FlightLogHeader.AircraftVisionOn,\n FlightLogHeader.LandingGearIsMovable,\n FlightLogHeader.RCGoHome,\n FlightLogHeader.RCRecord,\n FlightLogHeader.RCShutter,\n FlightLogHeader.RCPlayback,\n FlightLogHeader.RCPause,\n FlightLogHeader.RCCustom1,\n FlightLogHeader.RCCustom2,\n FlightLogHeader.RCSattelites,\n FlightLogHeader.RCGSPDataIsValid,\n FlightLogHeader.RCLeftHorizontal,\n FlightLogHeader.RCRightHorizontal,\n FlightLogHeader.RCLeftVertical,\n FlightLogHeader.RCRightVertical,\n FlightLogHeader.AircraftCameraChangeableLensSupported,\n FlightLogHeader.AircraftCameraLensInstalled,\n FlightLogHeader.AircraftCameraLensMFAssistant,\n]);\n","const parse = require('csv-parse');\n\nimport { FlightLogRow, FlightLogHeader, FlightLogMetaData, FlightLog } from './types';\nimport { INT_FIELDS, BOOL_FIELDS, FLOAT_FIELDS } from './field-types';\n\nconst META_REGEX = {\n appVersion: /^#DroneDeploy\\s+(.+)$/,\n sessionId: /^Session ID\\s+(.+)$/,\n sessionStart: /^Session Start\\s+(.+)$/,\n sessionEnd: /^Date\\/Time \\(UTC\\)\\s+(.+)$/,\n deviceModel: /^Device Model\\s+(.+)$/,\n deviceOS: /^Device Operating System\\s+(.+)$/,\n aircraftModel: /^Aircraft Model\\s+(.+)$/,\n aircraftName: /^Aircraft Name\\s+(.+)$/,\n aircraftFirmware: /^Aircraft Firmware\\s+(.+)$/,\n batteryChargeVolume: /^Full Charge Volume \\(mAh\\)\\s+(.+)$/,\n batteryRemainingLife: /^Remaining Life \\(%\\)\\s+(.+)$/,\n batteryDischarges: /^Discharges\\s+(.+)$/,\n batteryCells: /^Battery Cells Number\\s+(.+)$/,\n batterySerialNumber: /^Battery Serial Number\\s+(.+)$/,\n batteryFirmware: /^Battery Firmware\\s+(.+)$/,\n fcSerialNumber: /^Flight Controller Serial Number\\s+(.+)$/,\n fcFirmware: /^Flight Controller Firmware\\s+(.+)$/,\n gimbalFirmware: /^Gimbal Firmware\\s+(.+)$/,\n rcSerialNumber: /^Remote Control Serial Number\\s+(.+)$/,\n rcFirmware: /^Remote Control Firmware\\s+(.+)$/,\n cameraSerialNumber: /^Camera Serial Number\\s+(.+)$/,\n elapsedTime: /^Elapsed Time \\(sec\\)\\s+(.+)$/,\n};\n\nconst LOG_HEADER_LINES = 27;\nconst LOG_FOOTER_LINES = 3;\n\nexport function parseLog(log: String): Promise {\n const lines = log.split('\\n');\n\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const header = lines.slice(0, LOG_HEADER_LINES);\n const footer = lines.slice(-LOG_FOOTER_LINES);\n const body = lines.slice(LOG_HEADER_LINES, -LOG_FOOTER_LINES);\n const metaData = parseMetaData(header, footer);\n\n return parseBody(body).then((rows) => ({\n metaData,\n rows,\n }));\n}\n\nfunction parseBody(lines: string[]): Promise {\n const text = lines.join('\\n');\n const options = {\n delimiter: '\\t',\n from: 1,\n relax_column_count: true,\n };\n\n return new Promise((resolve, reject) => {\n parse(text, options, (err: any, result: string[]) => {\n if (err) {\n return reject(err);\n }\n\n const [headers, ...rows] = result;\n\n const logs = rows.map((row) => {\n const log = {} as FlightLogRow;\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i].trim() as FlightLogHeader;\n let value: any = row[i];\n\n if (INT_FIELDS.has(header)) {\n value = parseInt(value, 10);\n }\n\n if (FLOAT_FIELDS.has(header)) {\n value = parseFloat(value);\n }\n\n if (BOOL_FIELDS.has(header)) {\n value = value !== '0';\n }\n\n log[header] = value;\n }\n\n return log;\n });\n\n resolve(logs);\n });\n });\n}\n\nfunction findMatch(search: string[], regex: RegExp, isNum?: boolean) {\n let match;\n for (let str of search) {\n match = str.match(regex);\n if (match) {\n break;\n }\n }\n\n if (!match) {\n return isNum ? '0' : 'N/A';\n }\n\n return match[1];\n}\n\nfunction parseMetaData(headers: string[], footers: string[]): FlightLogMetaData {\n const meta = [...headers, ...footers];\n let end = findMatch(meta, META_REGEX.sessionEnd);\n let elapsed = findMatch(meta, META_REGEX.elapsedTime);\n\n // if we weren't able to parse an end date or an elapsed time from our footer (which is really just the last three\n // lines of the log file), it's likely that we have a truncated log file. if that's the case, we can still salvage\n // some valid data by parsing the date and elapsed time from the very last log row in the file, which is what we're\n // doing below. it's pretty brittle, but it's preferred to having an invalid end date and a NaN elapsed time.\n if (end === 'N/A' || elapsed === 'N/A') {\n const lastLine = footers[footers.length - 1];\n const pieces = lastLine.split('\\t');\n\n // if we don't have at least two pieces, i don't know what is in `footer` so i'm just going to leave it alone\n if (pieces.length >= 2) {\n end = pieces[0];\n elapsed = pieces[1];\n }\n }\n\n return {\n appVersion: findMatch(meta, META_REGEX.appVersion),\n session: {\n id: findMatch(meta, META_REGEX.sessionId),\n start: new Date(findMatch(meta, META_REGEX.sessionStart)),\n end: new Date(end),\n elapsed: elapsed === 'N/A' ? 0 : parseFloat(elapsed),\n },\n device: {\n model: findMatch(meta, META_REGEX.deviceModel),\n os: findMatch(meta, META_REGEX.deviceOS).replace(/\\t/g, ' '),\n },\n aircraft: {\n model: findMatch(meta, META_REGEX.aircraftModel),\n name: findMatch(meta, META_REGEX.aircraftName),\n firmware: findMatch(meta, META_REGEX.aircraftFirmware),\n },\n battery: {\n chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume, true), 10),\n remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife, true), 10),\n discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges, true), 10),\n cells: parseInt(findMatch(meta, META_REGEX.batteryCells, true), 10),\n firmware: findMatch(meta, META_REGEX.batteryFirmware),\n serialNumber: findMatch(meta, META_REGEX.batterySerialNumber),\n },\n flightController: {\n serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),\n firmware: findMatch(meta, META_REGEX.fcFirmware),\n },\n gimbal: {\n firmware: findMatch(meta, META_REGEX.gimbalFirmware),\n },\n remoteController: {\n serialNumber: findMatch(meta, META_REGEX.rcSerialNumber),\n firmware: findMatch(meta, META_REGEX.rcFirmware),\n },\n camera: {\n serialNumber: findMatch(meta, META_REGEX.cameraSerialNumber),\n },\n };\n}\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/flight-log-parser.js b/dist/flight-log-parser.js
index a9cc625..29cebd3 100644
--- a/dist/flight-log-parser.js
+++ b/dist/flight-log-parser.js
@@ -1,12 +1,8 @@
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('buffer'), require('stream'), require('util')) :
- typeof define === 'function' && define.amd ? define(['exports', 'buffer', 'stream', 'util'], factory) :
- (factory((global.flightLogParser = {}),global.buffer,global.stream,global.util));
-}(this, (function (exports,buffer,stream,util) { 'use strict';
-
- buffer = buffer && buffer.hasOwnProperty('default') ? buffer['default'] : buffer;
- stream = stream && stream.hasOwnProperty('default') ? stream['default'] : stream;
- util = util && util.hasOwnProperty('default') ? util['default'] : util;
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (factory((global.flightLogParser = {})));
+}(this, (function (exports) { 'use strict';
(function (FlightLogHeader) {
FlightLogHeader["DateTime"] = "Date/Time (UTC)";
@@ -181,1071 +177,6 @@
255: 'Unknown',
};
- function createCommonjsModule(fn, module) {
- return module = { exports: {} }, fn(module, module.exports), module.exports;
- }
-
- var safeBuffer = createCommonjsModule(function (module, exports) {
- /* eslint-disable node/no-deprecated-api */
-
- var Buffer = buffer.Buffer;
-
- // alternative to using Object.keys for old browsers
- function copyProps (src, dst) {
- for (var key in src) {
- dst[key] = src[key];
- }
- }
- if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer;
- } else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports);
- exports.Buffer = SafeBuffer;
- }
-
- function SafeBuffer (arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length)
- }
-
- // Copy static methods from Buffer
- copyProps(Buffer, SafeBuffer);
-
- SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number')
- }
- return Buffer(arg, encodingOrOffset, length)
- };
-
- SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- var buf = Buffer(size);
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding);
- } else {
- buf.fill(fill);
- }
- } else {
- buf.fill(0);
- }
- return buf
- };
-
- SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return Buffer(size)
- };
-
- SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return buffer.SlowBuffer(size)
- };
- });
- var safeBuffer_1 = safeBuffer.Buffer;
-
- /**/
-
- var Buffer$1 = safeBuffer.Buffer;
- /**/
-
- var isEncoding = Buffer$1.isEncoding || function (encoding) {
- encoding = '' + encoding;
- switch (encoding && encoding.toLowerCase()) {
- case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
- return true;
- default:
- return false;
- }
- };
-
- function _normalizeEncoding(enc) {
- if (!enc) return 'utf8';
- var retried;
- while (true) {
- switch (enc) {
- case 'utf8':
- case 'utf-8':
- return 'utf8';
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return 'utf16le';
- case 'latin1':
- case 'binary':
- return 'latin1';
- case 'base64':
- case 'ascii':
- case 'hex':
- return enc;
- default:
- if (retried) return; // undefined
- enc = ('' + enc).toLowerCase();
- retried = true;
- }
- }
- }
- // Do not cache `Buffer.isEncoding` when checking encoding names as some
- // modules monkey-patch it to support additional encodings
- function normalizeEncoding(enc) {
- var nenc = _normalizeEncoding(enc);
- if (typeof nenc !== 'string' && (Buffer$1.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
- return nenc || enc;
- }
-
- // StringDecoder provides an interface for efficiently splitting a series of
- // buffers into a series of JS strings without breaking apart multi-byte
- // characters.
- var StringDecoder_1 = StringDecoder;
- function StringDecoder(encoding) {
- this.encoding = normalizeEncoding(encoding);
- var nb;
- switch (this.encoding) {
- case 'utf16le':
- this.text = utf16Text;
- this.end = utf16End;
- nb = 4;
- break;
- case 'utf8':
- this.fillLast = utf8FillLast;
- nb = 4;
- break;
- case 'base64':
- this.text = base64Text;
- this.end = base64End;
- nb = 3;
- break;
- default:
- this.write = simpleWrite;
- this.end = simpleEnd;
- return;
- }
- this.lastNeed = 0;
- this.lastTotal = 0;
- this.lastChar = Buffer$1.allocUnsafe(nb);
- }
-
- StringDecoder.prototype.write = function (buf) {
- if (buf.length === 0) return '';
- var r;
- var i;
- if (this.lastNeed) {
- r = this.fillLast(buf);
- if (r === undefined) return '';
- i = this.lastNeed;
- this.lastNeed = 0;
- } else {
- i = 0;
- }
- if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
- return r || '';
- };
-
- StringDecoder.prototype.end = utf8End;
-
- // Returns only complete characters in a Buffer
- StringDecoder.prototype.text = utf8Text;
-
- // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
- StringDecoder.prototype.fillLast = function (buf) {
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
- this.lastNeed -= buf.length;
- };
-
- // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
- // continuation byte. If an invalid byte is detected, -2 is returned.
- function utf8CheckByte(byte) {
- if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
- return byte >> 6 === 0x02 ? -1 : -2;
- }
-
- // Checks at most 3 bytes at the end of a Buffer in order to detect an
- // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
- // needed to complete the UTF-8 character (if applicable) are returned.
- function utf8CheckIncomplete(self, buf, i) {
- var j = buf.length - 1;
- if (j < i) return 0;
- var nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 1;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 2;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) {
- if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
- }
- return nb;
- }
- return 0;
- }
-
- // Validates as many continuation bytes for a multi-byte UTF-8 character as
- // needed or are available. If we see a non-continuation byte where we expect
- // one, we "replace" the validated continuation bytes we've seen so far with
- // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
- // behavior. The continuation byte check is included three times in the case
- // where all of the continuation bytes for a character exist in the same buffer.
- // It is also done this way as a slight performance increase instead of using a
- // loop.
- function utf8CheckExtraBytes(self, buf, p) {
- if ((buf[0] & 0xC0) !== 0x80) {
- self.lastNeed = 0;
- return '\ufffd';
- }
- if (self.lastNeed > 1 && buf.length > 1) {
- if ((buf[1] & 0xC0) !== 0x80) {
- self.lastNeed = 1;
- return '\ufffd';
- }
- if (self.lastNeed > 2 && buf.length > 2) {
- if ((buf[2] & 0xC0) !== 0x80) {
- self.lastNeed = 2;
- return '\ufffd';
- }
- }
- }
- }
-
- // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
- function utf8FillLast(buf) {
- var p = this.lastTotal - this.lastNeed;
- var r = utf8CheckExtraBytes(this, buf, p);
- if (r !== undefined) return r;
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, p, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, p, 0, buf.length);
- this.lastNeed -= buf.length;
- }
-
- // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
- // partial character, the character's bytes are buffered until the required
- // number of bytes are available.
- function utf8Text(buf, i) {
- var total = utf8CheckIncomplete(this, buf, i);
- if (!this.lastNeed) return buf.toString('utf8', i);
- this.lastTotal = total;
- var end = buf.length - (total - this.lastNeed);
- buf.copy(this.lastChar, 0, end);
- return buf.toString('utf8', i, end);
- }
-
- // For UTF-8, a replacement character is added when ending on a partial
- // character.
- function utf8End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + '\ufffd';
- return r;
- }
-
- // UTF-16LE typically needs two bytes per character, but even if we have an even
- // number of bytes available, we need to check if we end on a leading/high
- // surrogate. In that case, we need to wait for the next two bytes in order to
- // decode the last character properly.
- function utf16Text(buf, i) {
- if ((buf.length - i) % 2 === 0) {
- var r = buf.toString('utf16le', i);
- if (r) {
- var c = r.charCodeAt(r.length - 1);
- if (c >= 0xD800 && c <= 0xDBFF) {
- this.lastNeed = 2;
- this.lastTotal = 4;
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- return r.slice(0, -1);
- }
- }
- return r;
- }
- this.lastNeed = 1;
- this.lastTotal = 2;
- this.lastChar[0] = buf[buf.length - 1];
- return buf.toString('utf16le', i, buf.length - 1);
- }
-
- // For UTF-16LE we do not explicitly append special replacement characters if we
- // end on a partial character, we simply let v8 handle that.
- function utf16End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) {
- var end = this.lastTotal - this.lastNeed;
- return r + this.lastChar.toString('utf16le', 0, end);
- }
- return r;
- }
-
- function base64Text(buf, i) {
- var n = (buf.length - i) % 3;
- if (n === 0) return buf.toString('base64', i);
- this.lastNeed = 3 - n;
- this.lastTotal = 3;
- if (n === 1) {
- this.lastChar[0] = buf[buf.length - 1];
- } else {
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- }
- return buf.toString('base64', i, buf.length - n);
- }
-
- function base64End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
- return r;
- }
-
- // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
- function simpleWrite(buf) {
- return buf.toString(this.encoding);
- }
-
- function simpleEnd(buf) {
- return buf && buf.length ? this.write(buf) : '';
- }
-
- var string_decoder = {
- StringDecoder: StringDecoder_1
- };
-
- // Generated by CoffeeScript 2.2.4
- // # CSV Parser
-
- // This module provides a CSV parser tested and used against large datasets. Over
- // the year, it has been enhance and is now full of useful options.
-
- // Please look at the [README], the [project website][site] the [samples] and the
- // [tests] for additional information.
- var Parser, StringDecoder$1, isObjLiteral, stream$1, util$1;
-
- stream$1 = stream;
-
- util$1 = util;
-
- StringDecoder$1 = string_decoder.StringDecoder;
-
- // ## Usage
-
- // Callback approach, for ease of use:
-
- // `parse(data, [options], callback)`
-
- // [Node.js Stream API][stream], for maximum of power:
-
- // `parse([options], [callback])`
- var lib = 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) {
- // 1st arg is data:string or options:object
- 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])}`;
- }
- // 2nd arg is options:object or callback:function
- 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([options])`
-
- // Options are documented [here](http://csv.adaltas.com/parse/).
- Parser = function(options = {}) {
- var base, base1, base10, base11, base12, base13, base14, base15, base16, base17, base2, base3, base4, base5, base6, base7, base8, base9, k, v;
- // @options = options
- this.options = {};
- for (k in options) {
- v = options[k];
- this.options[k] = v;
- }
- this.options.objectMode = true;
- stream$1.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 (this.options.auto_parse != null) {
- this.options.cast = this.options.auto_parse;
- }
- if ((base10 = this.options).cast == null) {
- base10.cast = false;
- }
- if (this.options.auto_parse_date != null) {
- this.options.cast_date = this.options.auto_parse_date;
- }
- if ((base11 = this.options).cast_date == null) {
- base11.cast_date = false;
- }
- if (this.options.cast_date === true) {
- this.options.cast_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;
- }
- if ((base17 = this.options).skip_lines_with_error == null) {
- base17.skip_lines_with_error = false;
- }
- // Counters
- // lines = count + skipped_line_count + empty_line_count
- this.lines = 0; // Number of lines encountered in the source dataset
- this.count = 0; // Number of records being processed
- this.skipped_line_count = 0; // Number of records skipped due to errors
- this.empty_line_count = 0; // Number of empty lines
- // Constants
- this.is_int = /^(\-|\+)?([1-9]+[0-9]*)$/;
- // @is_float = /^(\-|\+)?([0-9]+(\.[0-9]+)([eE][0-9]+)?|Infinity)$/
- // @is_float = /^(\-|\+)?((([0-9])|([1-9]+[0-9]*))(\.[0-9]+)([eE][0-9]+)?|Infinity)$/
- this.is_float = function(value) {
- return (value - parseFloat(value) + 1) >= 0; // Borrowed from jquery
- };
- // Internal state
- this._ = {
- decoder: new StringDecoder$1(),
- quoting: false,
- commenting: false,
- field: null,
- nextChar: null,
- closingQuote: 0,
- line: [],
- chunks: [],
- rawBuf: '',
- buf: '',
- rowDelimiterLength: this.options.rowDelimiter ? Math.max(...this.options.rowDelimiter.map(function(v) {
- return v.length;
- })) : void 0,
- lineHasError: false
- };
- return this;
- };
-
- // ## Internal API
-
- // The Parser implement a [`stream.Transform` class][transform].
-
- // ### Events
-
- // The library extends Node [EventEmitter][event] class and emit all
- // the events of the Writable and Readable [Stream API][stream].
- util$1.inherits(Parser, stream$1.Transform);
-
- // For extra flexibility, you can get access to the original Parser
- // class: `require('csv-parse').Parser`.
- var Parser_1 = Parser;
-
- // ### `_transform(chunk, encoding, callback)`
-
- // * `chunk` Buffer | String
- // The chunk to be transformed. Will always be a buffer unless the decodeStrings option was set to false.
- // * `encoding` String
- // If the chunk is a string, then this is the encoding type. (Ignore if decodeStrings chunk is a buffer.)
- // * `callback` Function
- // Call this function (optionally with an error argument) when you are done processing the supplied chunk.
-
- // Implementation of the [`stream.Transform` API][transform]
- Parser.prototype._transform = function(chunk, encoding, callback) {
- return setImmediate(() => {
- 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) {
- return callback(this.__flush());
- };
-
- Parser.prototype.__flush = function() {
- var err;
- err = this.__write(this._.decoder.end(), true);
- if (err) {
- return err;
- }
- if (this._.quoting) {
- err = this.error(`Quoted field not terminated at line ${this.lines + 1}`);
- return err;
- }
- if (this._.line.length > 0) {
- return this.__push(this._.line);
- }
- };
-
- Parser.prototype.__push = function(line) {
- var call_column_udf, columns, err, field, i, j, len, lineAsColumns, record;
- if (this.options.skip_lines_with_empty_values && line.join('').trim() === '') {
- return;
- }
- record = null;
- if (this.options.columns === true) {
- this.options.columns = line;
- 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];
- }
- };
- [err, columns] = call_column_udf(this.options.columns, line);
- if (err) {
- return err;
- }
- this.options.columns = columns;
- return;
- }
- if (!this._.line_length && line.length > 0) {
- this._.line_length = this.options.columns ? this.options.columns.length : line.length;
- }
- // Dont check column count on empty lines
- if (line.length === 1 && line[0] === '') {
- this.empty_line_count++;
- } else if (line.length !== this._.line_length) {
- // Dont check column count with relax_column_count
- if (this.options.relax_column_count) {
- this.count++;
- this.skipped_line_count++;
- } else if (this.options.columns != null) {
- // Suggest: Inconsistent header and column numbers: header is 1 and number of columns is 1 on line 1
- err = this.error(`Number of columns on line ${this.lines} does not match header`);
- return err;
- } else {
- err = this.error(`Number of columns is inconsistent on line ${this.lines}`);
- return err;
- }
- } 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) {
- record = [lineAsColumns[this.options.objname], lineAsColumns];
- } else {
- record = lineAsColumns;
- }
- } else {
- record = 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: record
- });
- this._.rawBuf = '';
- } else {
- this.push(record);
- }
- if (this.listenerCount('record')) {
- this.emit('record', record);
- }
- return null;
- };
-
- Parser.prototype.__write = function(chars, end) {
- var areNextCharsDelimiter, areNextCharsRowDelimiters, cast, char, err, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isNextCharTrimable, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, ref5, ref6, remainingBuffer, rowDelimiter, rtrim, wasCommenting;
- is_int = (value) => {
- if (typeof this.is_int === 'function') {
- return this.is_int(value);
- } else {
- return this.is_int.test(value);
- }
- };
- is_float = (value) => {
- if (typeof this.is_float === 'function') {
- return this.is_float(value);
- } else {
- return this.is_float.test(value);
- }
- };
- cast = (value, context = {}) => {
- if (!this.options.cast) {
- return value;
- }
- if (context.quoting == null) {
- context.quoting = !!this._.closingQuote;
- }
- if (context.lines == null) {
- context.lines = this.lines;
- }
- if (context.count == null) {
- context.count = this.count;
- }
- if (context.index == null) {
- context.index = this._.line.length;
- }
- // context.header ?= if @options.column and @lines is 1 and @count is 0 then true else false
- if (context.header == null) {
- context.header = this.options.columns === true;
- }
- if (context.column == null) {
- context.column = Array.isArray(this.options.columns) ? this.options.columns[context.index] : context.index;
- }
- if (typeof this.options.cast === 'function') {
- return this.options.cast(value, context);
- }
- if (is_int(value)) {
- value = parseInt(value);
- } else if (is_float(value)) {
- value = parseFloat(value);
- } else if (this.options.cast_date) {
- value = this.options.cast_date(value, context);
- }
- return value;
- };
- 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)) {
- // Strip BOM header
- i++;
- }
- while (i < l) {
- // Ensure we get enough space to look ahead
- if (!end) {
- remainingBuffer = chars.substr(i, l - i);
- // (i+1000 >= l) or
- // Skip if the remaining buffer can be comment
- // Skip if the remaining buffer can be row delimiter
- 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;
- // Skip if the remaining buffer can be row delimiter following the closing quote
- })) || (this.options.rowDelimiter && this._.quoting && l - i < (this.options.quote.length + this._.rowDelimiterLength) && this.options.rowDelimiter.some((rd) => {
- return (this.options.quote + rd).substr(0, l - i) === remainingBuffer;
- // Skip if the remaining buffer can be delimiter
- // Skip if the remaining buffer can be escape sequence
- })) || (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) : null;
- if (this.options.raw) {
- this._.rawBuf += char;
- }
- // Auto discovery of rowDelimiter, unix, mac and windows supported
- if (this.options.rowDelimiter == null) {
- nextCharPos = i;
- rowDelimiter = null;
- // First empty line
- 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 (rowDelimiter) {
- if (rowDelimiter === '\r' && chars.charAt(nextCharPos) === '\n') {
- rowDelimiter += '\n';
- }
- this.options.rowDelimiter = [rowDelimiter];
- this._.rowDelimiterLength = rowDelimiter.length;
- }
- }
- // Parse that damn char
- // Note, shouldn't we have sth like chars.substr(i, @options.escape.length)
- if (!this._.commenting && char === this.options.escape) {
- // Make sure the escape is really here for escaping:
- // If escape is same as quote, and escape is first char of a field
- // and it's not quoted, then it is a quote
- // Next char should be an escape or a quote
- escapeIsQuote = this.options.escape === this.options.quote;
- isEscape = this._.nextChar === this.options.escape;
- isQuote = this._.nextChar === this.options.quote;
- if (!(escapeIsQuote && !this._.field && !this._.quoting) && (isEscape || isQuote)) {
- i++;
- char = this._.nextChar;
- this._.nextChar = chars.charAt(i + 1);
- if (this._.field == null) {
- this._.field = '';
- }
- this._.field += char;
- // Since we're skipping the next one, better add it now if in raw mode.
- if (this.options.raw) {
- this._.rawBuf += char;
- }
- i++;
- continue;
- }
- }
- // Char match quote
- if (!this._.commenting && char === this.options.quote) {
- if (this._.acceptOnlyEmptyChars && (char !== ' ' && char !== '\t')) {
- return this.error('Only trimable characters are accepted after quotes');
- }
- if (this._.quoting) {
- // Make sure a closing quote is followed by a delimiter
- // If we have a next character and
- // it isnt a rowDelimiter and
- // it isnt an column delimiter and
- // it isnt the begining of a comment
- // Otherwise, if this is not "relax" mode, throw an error
- isNextCharTrimable = rtrim && ((ref1 = this._.nextChar) === ' ' || ref1 === '\t');
- 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 != null) && !isNextCharTrimable && !areNextCharsRowDelimiters && !areNextCharsDelimiter && !isNextCharAComment) {
- if (this.options.relax) {
- this._.quoting = false;
- if (this._.field) {
- this._.field = `${this.options.quote}${this._.field}`;
- }
- } else {
- if (err = this.error(`Invalid closing quote at line ${this.lines + 1}; found ${JSON.stringify(this._.nextChar)} instead of delimiter ${JSON.stringify(this.options.delimiter)}`)) {
- return err;
- }
- }
- } else if ((this._.nextChar != null) && isNextCharTrimable) {
- i++;
- this._.quoting = false;
- this._.closingQuote = this.options.quote.length;
- this._.acceptOnlyEmptyChars = true;
- continue;
- } else {
- i++;
- this._.quoting = false;
- this._.closingQuote = this.options.quote.length;
- if (end && i === l) {
- this._.line.push(cast(this._.field || ''));
- this._.field = null;
- }
- continue;
- }
- } else if (!this._.field) {
- this._.quoting = true;
- i++;
- continue;
- } else if ((this._.field != null) && !this.options.relax) {
- if (err = this.error(`Invalid opening quote at line ${this.lines + 1}`)) {
- return err;
- }
- }
- }
- // Otherwise, treat quote as a regular character
- 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++;
- }
- // Set the commenting flag
- 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._.acceptOnlyEmptyChars) {
- if (isDelimiter || isRowDelimiter) {
- this._.acceptOnlyEmptyChars = false;
- } else {
- if (char === ' ' || char === '\t') {
- i++;
- continue;
- } else {
- return this.error('Only trimable characters are accepted after quotes');
- }
- }
- }
- 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;
- }
- // Empty lines
- 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 = (ref2 = this._.field) != null ? ref2.trimRight() : void 0;
- }
- }
- this._.line.push(cast(this._.field || ''));
- this._.closingQuote = 0;
- this._.field = null;
- if (isDelimiter) { // End of field
- i += this.options.delimiter.length;
- this._.nextChar = chars.charAt(i);
- if (end && !this._.nextChar) {
- isRowDelimiter = true;
- this._.line.push('');
- }
- }
- if (isRowDelimiter) { // End of record
- if (!this._.lineHasError) {
- err = this.__push(this._.line);
- if (err) {
- return err;
- }
- }
- if (this._.lineHasError) {
- this._.lineHasError = false;
- }
- // Some cleanup for the next record
- this._.line = [];
- i += isRowDelimiterLength;
- this._.nextChar = chars.charAt(i);
- continue;
- }
- } else if (!this._.commenting && !this._.quoting && (char === ' ' || char === '\t')) {
- if (this._.field == null) {
- // Left trim unless we are quoting or field already filled
- 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 && ((ref3 = this._.field) != null ? ref3.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 && ((ref4 = this._.line) != null ? ref4.length : void 0) > this.options.max_limit_on_data_read) {
- return Error(`Row delimiter not found in the file ${JSON.stringify(this.options.rowDelimiter)}`);
- }
- }
- // Flush remaining fields and lines
- if (end) {
- if (l === 0) {
- this.lines++;
- }
- if (this._.field != null) {
- if (rtrim) {
- if (!this._.closingQuote) {
- this._.field = (ref5 = this._.field) != null ? ref5.trimRight() : void 0;
- }
- }
- this._.line.push(cast(this._.field || ''));
- this._.field = null;
- }
- if (((ref6 = this._.field) != null ? ref6.length : void 0) > this.options.max_limit_on_data_read) {
- return Error(`Delimiter not found in the file ${JSON.stringify(this.options.delimiter)}`);
- }
- 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)}`);
- }
- }
- // Store un-parsed chars for next call
- this._.buf = chars.substr(i);
- return null;
- };
-
- Parser.prototype.error = function(msg) {
- var err;
- err = Error(msg);
- if (!this.options.skip_lines_with_error) {
- return err;
- } else {
- if (!this._.lineHasError) {
- this._.lineHasError = true;
- this.emit('skip', err);
- }
- }
- return null;
- };
-
- // ## Utils
- 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);
- })();
- }
- };
- lib.Parser = Parser_1;
-
const INT_FIELDS = new Set([
exports.FlightLogHeader.AircraftBatteryCell1Voltage,
exports.FlightLogHeader.AircraftBatteryCell2Voltage,
@@ -1263,6 +194,18 @@
exports.FlightLogHeader.AircraftNoFlyValue,
exports.FlightLogHeader.AircraftSatellites,
exports.FlightLogHeader.GimbalModeValue,
+ exports.FlightLogHeader.AircraftSmartGoHomeRadius,
+ exports.FlightLogHeader.AircraftSmartGoHomeCountdown,
+ exports.FlightLogHeader.AircraftVelocityX,
+ exports.FlightLogHeader.AircraftVelocityY,
+ exports.FlightLogHeader.AircraftVelocityZ,
+ exports.FlightLogHeader.RCHorizontalAccuaracy,
+ exports.FlightLogHeader.RCLatitude,
+ exports.FlightLogHeader.RCLongitude,
+ exports.FlightLogHeader.LandingGearStatusValue,
+ exports.FlightLogHeader.LandingGearModeValue,
+ exports.FlightLogHeader.RCStateValue,
+ exports.FlightLogHeader.RCLandingGearValue,
]);
const FLOAT_FIELDS = new Set([
exports.FlightLogHeader.AircraftBarometricAltitude,
@@ -1319,8 +262,26 @@
exports.FlightLogHeader.AircraftSmartGoHomeRequesting,
exports.FlightLogHeader.AircraftUltrasonicOn,
exports.FlightLogHeader.AircraftVisionOn,
+ exports.FlightLogHeader.LandingGearIsMovable,
+ exports.FlightLogHeader.RCGoHome,
+ exports.FlightLogHeader.RCRecord,
+ exports.FlightLogHeader.RCShutter,
+ exports.FlightLogHeader.RCPlayback,
+ exports.FlightLogHeader.RCPause,
+ exports.FlightLogHeader.RCCustom1,
+ exports.FlightLogHeader.RCCustom2,
+ exports.FlightLogHeader.RCSattelites,
+ exports.FlightLogHeader.RCGSPDataIsValid,
+ exports.FlightLogHeader.RCLeftHorizontal,
+ exports.FlightLogHeader.RCRightHorizontal,
+ exports.FlightLogHeader.RCLeftVertical,
+ exports.FlightLogHeader.RCRightVertical,
+ exports.FlightLogHeader.AircraftCameraChangeableLensSupported,
+ exports.FlightLogHeader.AircraftCameraLensInstalled,
+ exports.FlightLogHeader.AircraftCameraLensMFAssistant,
]);
+ const parse = require('csv-parse');
const META_REGEX = {
appVersion: /^#DroneDeploy\s+(.+)$/,
sessionId: /^Session ID\s+(.+)$/,
@@ -1335,6 +296,7 @@
batteryRemainingLife: /^Remaining Life \(%\)\s+(.+)$/,
batteryDischarges: /^Discharges\s+(.+)$/,
batteryCells: /^Battery Cells Number\s+(.+)$/,
+ batterySerialNumber: /^Battery Serial Number\s+(.+)$/,
batteryFirmware: /^Battery Firmware\s+(.+)$/,
fcSerialNumber: /^Flight Controller Serial Number\s+(.+)$/,
fcFirmware: /^Flight Controller Firmware\s+(.+)$/,
@@ -1368,13 +330,12 @@
relax_column_count: true,
};
return new Promise((resolve, reject) => {
- lib(text, options, (err, result) => {
+ parse(text, options, (err, result) => {
if (err) {
return reject(err);
}
const [headers, ...rows] = result;
- const logs = rows
- .map((row) => {
+ const logs = rows.map((row) => {
const log = {};
for (let i = 0; i < headers.length; i++) {
const header = headers[i].trim();
@@ -1396,7 +357,7 @@
});
});
}
- function findMatch(search, regex) {
+ function findMatch(search, regex, isNum) {
let match;
for (let str of search) {
match = str.match(regex);
@@ -1405,19 +366,34 @@
}
}
if (!match) {
- return 'N/A';
+ return isNum ? '0' : 'N/A';
}
return match[1];
}
function parseMetaData(headers, footers) {
const meta = [...headers, ...footers];
+ let end = findMatch(meta, META_REGEX.sessionEnd);
+ let elapsed = findMatch(meta, META_REGEX.elapsedTime);
+ // if we weren't able to parse an end date or an elapsed time from our footer (which is really just the last three
+ // lines of the log file), it's likely that we have a truncated log file. if that's the case, we can still salvage
+ // some valid data by parsing the date and elapsed time from the very last log row in the file, which is what we're
+ // doing below. it's pretty brittle, but it's preferred to having an invalid end date and a NaN elapsed time.
+ if (end === 'N/A' || elapsed === 'N/A') {
+ const lastLine = footers[footers.length - 1];
+ const pieces = lastLine.split('\t');
+ // if we don't have at least two pieces, i don't know what is in `footer` so i'm just going to leave it alone
+ if (pieces.length >= 2) {
+ end = pieces[0];
+ elapsed = pieces[1];
+ }
+ }
return {
appVersion: findMatch(meta, META_REGEX.appVersion),
session: {
id: findMatch(meta, META_REGEX.sessionId),
start: new Date(findMatch(meta, META_REGEX.sessionStart)),
- end: new Date(findMatch(meta, META_REGEX.sessionEnd)),
- elapsed: parseFloat(findMatch(meta, META_REGEX.elapsedTime)),
+ end: new Date(end),
+ elapsed: elapsed === 'N/A' ? 0 : parseFloat(elapsed),
},
device: {
model: findMatch(meta, META_REGEX.deviceModel),
@@ -1429,11 +405,12 @@
firmware: findMatch(meta, META_REGEX.aircraftFirmware),
},
battery: {
- chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume), 10),
- remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife), 10),
- discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges), 10),
- cells: parseInt(findMatch(meta, META_REGEX.batteryCells), 10),
+ chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume, true), 10),
+ remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife, true), 10),
+ discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges, true), 10),
+ cells: parseInt(findMatch(meta, META_REGEX.batteryCells, true), 10),
firmware: findMatch(meta, META_REGEX.batteryFirmware),
+ serialNumber: findMatch(meta, META_REGEX.batterySerialNumber),
},
flightController: {
serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),
diff --git a/dist/flight-log-parser.js.map b/dist/flight-log-parser.js.map
index 767da59..ebd1897 100644
--- a/dist/flight-log-parser.js.map
+++ b/dist/flight-log-parser.js.map
@@ -1 +1 @@
-{"version":3,"file":"flight-log-parser.js","sources":["../src/types.ts","../node_modules/safe-buffer/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/csv-parse/lib/index.js","../src/field-types.ts","../src/parser.ts"],"sourcesContent":["export enum FlightLogHeader {\n DateTime = 'Date/Time (UTC)',\n ElapsedTime = 'Elapsed Time (sec)',\n Info = 'Info',\n DeviceLatitude = 'Device Latitude (Degrees)',\n DeviceLongitude = 'Device Longitude (Degrees)',\n DeviceLocationLastUpdated = 'Device Location Last Updated (ms)',\n AircraftBatteryPowerPercent = 'Aircraft Battery Power (%)',\n AircraftBatteryCharge = 'Aircraft Battery Charge (mAh)',\n AircraftBatteryCurrent = 'Aircraft Battery Current (mA)',\n AircraftBatteryVoltage = 'Aircraft Battery Voltage (mV)',\n AircraftBatteryTemperature = 'Aircraft Battery Temperature (Fahrenheit)',\n AircraftBatteryLastUpdated = 'Aircraft Battery Last Updated (ms)',\n AircraftBatteryCell1Voltage = 'Aircraft Battery Cell 1 Voltage',\n AircraftBatteryCell2Voltage = 'Aircraft Battery Cell 2 Voltage',\n AircraftBatteryCell3Voltage = 'Aircraft Battery Cell 3 Voltage',\n AircraftBatteryCell4Voltage = 'Aircraft Battery Cell 4 Voltage',\n AircraftBatteryCellVoltageLastUpdated = 'Aircraft Battery Cell Voltage Last Updated (ms)',\n AircraftLatitude = 'Aircraft Latitude (Degrees)',\n AircraftLongitude = 'Aircraft Longitude (Degrees)',\n AircraftSpeed = 'Aircraft Speed (mph)',\n AircraftBarometricAltitude = 'Aircraft Barometric Altitude (ft)',\n AircraftHeading = 'Aircraft Heading (Degrees)',\n AircraftVelocityX = 'Aircraft Vel - X (mph)',\n AircraftVelocityY = 'Aircraft Vel - Y (mph)',\n AircraftVelocityZ = 'Aircraft Vel - Z (mph)',\n AircraftPitch = 'Aircraft Pitch (Degrees)',\n AircraftRoll = 'Aircraft Roll (Degrees)',\n AircraftSatellites = 'Aircraft Satellites',\n AircraftMotorsOn = 'Aircraft Motors On',\n AircraftFlying = 'Aircraft Flying',\n AircraftFlightMode = 'Aircraft Flight Mode',\n AircraftFlightModeValue = 'Aircraft Flight Mode Value',\n AircraftIMUPreheating = 'Aircraft IMU Preheating',\n AircraftUltrasonicOn = 'Aircraft Ultrasonic On',\n AircraftUltrasonicAltitude = 'Aircraft Ultrasonic Altitude (ft)',\n AircraftVisionOn = 'Aircraft Vision On',\n AircraftGPSSignal = 'Aircraft GPS Signal',\n AircraftGPSSignalValue = 'Aircraft GPS Signal Value',\n AircraftNoFly = 'Aircraft No-fly',\n AircraftNoFlyValue = 'Aircraft No-fly Value',\n AircraftNoFlyLatitude = 'Aircraft No-fly Latitude (Degrees)',\n AircraftNoFlyLongitude = 'Aircraft No-fly Longitude (Degrees)',\n AircraftNoFlyRadius = 'Aircraft No-fly Radius (ft)',\n HomeLatitude = 'Home Latitude (Degrees)',\n HomeLongitude = 'Home Longitude (Degrees)',\n AircraftSmartGoHomeFlightTimeRemaining = 'Aircraft Smart Go-home Flight Time Remaining (sec)',\n AircraftSmartGoHomeFlightReturnTime = 'Aircraft Smart Go-home Flight Return Time (sec)',\n AircraftSmartGoHomeLandingTime = 'Aircraft Smart Go-home Landing Time (sec)',\n AircraftSmartGoHomeReturnPower = 'Aircraft Smart Go-home Return Power (%)',\n AircraftSmartGoHomeLandingPower = 'Aircraft Smart Go-home Landing Power (%)',\n AircraftSmartGoHomeRadius = 'Aircraft Smart Go-home Radius (ft)',\n AircraftSmartGoHomeCountdown = 'Aircraft Smart Go-home Countdown (sec)',\n AircraftSmartGoHomeRequesting = 'Aircraft Smart Go-home Requesting',\n AircraftSystemStateLastUpdated = 'Aircraft System State Last Updated (ms)',\n GimbalPitch = 'Gimbal Pitch (Degrees)',\n GimbalRoll = 'Gimbal Roll (Degrees)',\n GimbalYaw = 'Gimbal Yaw (Degrees)',\n GimbalMode = 'Gimbal Mode',\n GimbalModeValue = 'Gimbal Mode Value',\n GimbalPitchAtStop = 'Gimbal Pitch at Stop',\n GimbalRollAtStop = 'Gimbal Roll at Stop',\n GimbalYawAtStop = 'Gimbal Yaw at Stop',\n GimbalStatusLastUpdated = 'Gimbal Status Last Updated (ms)',\n LandingGearIsMovable = 'Landing Gear is Movable',\n LandingGearStatus = 'Landing Gear Status',\n LandingGearStatusValue = 'Landing Gear Status Value',\n LandingGearMode = 'Landing Gear Mode',\n LandingGearModeValue = 'Landing Gear Mode Value',\n LandingGearLastUpdated = 'Landing Gear Last Updated (ms)',\n RCState = 'RC State',\n RCStateValue = 'RC State Value',\n RCLeftHorizontal = 'RC Left Horizontal',\n RCLeftVertical = 'RC Left Vertical',\n RCRightHorizontal = 'RC Right Horizontal',\n RCRightVertical = 'RC Right Vertical',\n RCLeftWheel = 'RC Left Wheel',\n RCRightWheel = 'RC Right Wheel',\n RCLandingGear = 'RC Landing Gear',\n RCLandingGearValue = 'RC Landing Gear Value',\n RCGoHome = 'RC Go Home',\n RCRecord = 'RC Record ',\n RCShutter = 'RC Shutter',\n RCPlayback = 'RC Playback',\n RCPause = 'RC Pause',\n RCCustom1 = 'RC Custom 1',\n RCCustom2 = 'RC Custom 2',\n RCStateLastUpdated = 'RC State Last Updated (ms)',\n RCBatteryPercentRemaining = 'RC Battery (%)',\n RCBatteryStateLastUpdated = 'RC Battery State Last Updated (ms)',\n RCSattelites = 'RC Sattelites',\n RCHorizontalAccuaracy = 'RC Horizontal Accuaracy (ft)',\n RCLatitude = 'RC Latitude (Degrees)',\n RCLongitude = 'RC Longitude (Degrees)',\n RCGSPDataIsValid = 'RC GSP Data is Valid',\n RCGPSStateLastUpdated = 'RC GPS State Last Updated (ms)',\n RCSignal1 = 'RC Signal 1',\n RCSignal2 = 'RC Signal 2',\n RCSignalLastUpdated = 'RC Signal Last Updated (ms)',\n LBSignal1 = 'LB Signal 1',\n LBSignal2 = 'LB Signal 2',\n LBSignalLastUpdated = 'LB Signal Last Updated (ms)',\n AircraftCameraMode = 'Aircraft Camera Mode',\n AircraftCameraModeValue = 'Aircraft Camera Mode Value',\n AircraftCameraOverheated = 'Aircraft Camera Overheated',\n AircraftCameraSensorError = 'Aircraft Camera Sensor Error',\n AircraftCameraRecording = 'Aircraft Camera Recording',\n AircraftCameraRawCapture = 'Aircraft Camera Raw Capture',\n AircraftCameraIntervalCapture = 'Aircraft Camera Interval Capture',\n AircraftCameraBurstCapture = 'Aircraft Camera Burst Capture',\n AircraftCameraSingleCapture = 'Aircraft Camera Single Capture',\n AircraftCameraStoringPhoto = 'Aircraft Camera Storing Photo',\n AircraftCameraStateLastUpdated = 'Aircraft Camera State Last Updated (ms)',\n AircraftCameraSDCardExists = 'Aircraft Camera SD Card Exists',\n AircraftCameraSDCardRemainingPercent = 'Aircraft Camera SD Card Remaining (%)',\n AircraftCameraSDCardStateLastUpdated = 'Aircraft Camera SD Card State Last Updated (ms)',\n AircraftCameraChangeableLensSupported = 'Aircraft Camera Changeable Lens Supported',\n AircraftCameraLensInstalled = 'Aircraft Camera Lens Installed',\n AircraftCameraLensType = 'Aircraft Camera Lens Type',\n AircraftCameraLensAFEnabled = 'Aircraft Camera Lens AF Enabled',\n AircraftCameraLensFocusMode = 'Aircraft Camera Lens Focus Mode',\n AircraftCameraLensFocusModeValue = 'Aircraft Camera Lens Focus Mode Value',\n AircraftCameraLensFocusStatus = 'Aircraft Camera Lens Focus Status',\n AircraftCameraLensFocusStatusValue = 'Aircraft Camera Lens Focus Status Value',\n AircraftCameraLensMFAssistant = 'Aircraft Camera Lens MF Assistant',\n AircraftCameraLensAFAssistant = 'Aircraft Camera Lens AF Assistant',\n AircraftCameraLensAssistantWorking = 'Aircraft Camera Lens Assistant Working',\n AircraftCameraLensStateLastUpdated = 'Aircraft Camera Lens State Last Updated (ms)',\n DeviceToAircraftDistance = 'Device > Aircraft Distance - XY (ft)',\n}\n\nexport type FlightLogRow = {\n [prop in FlightLogHeader]: any; // because csv\n};\n\nexport type FlightLogMetaData = {\n appVersion: string;\n session: {\n id: string;\n start: Date;\n end: Date,\n elapsed: number;\n };\n device: {\n model: string;\n os: string;\n };\n aircraft: {\n model: string;\n name: string;\n firmware: string;\n };\n battery: {\n chargeVolume: number;\n remainingLifePercent: number;\n discharges: number;\n cells: number;\n firmware: string;\n };\n flightController: {\n serialNumber: string;\n firmware: string;\n };\n gimbal: {\n firmware: string;\n };\n remoteController: {\n serialNumber: string;\n firmware: string;\n };\n camera: {\n serialNumber: string;\n };\n};\n\nexport type FlightLog = {\n metaData: FlightLogMetaData;\n rows: FlightLogRow[];\n}\n\n// based off of types in ios/android SDK FlightMode enums\nexport const FLIGHT_MODE_MAPPING = {\n 0: 'Manual',\n 1: 'Attitude',\n 2: 'Attitude Course Lock',\n 3: 'Attitude Hover',\n 4: 'Hover',\n 5: 'GPS Blake',\n 6: 'GPS Attitude',\n 7: 'GPS Course Lock',\n 8: 'GPS Home',\n 9: 'GPS Hotpoint',\n 10: 'Assisted Takeoff',\n 11: 'Auto Takeoff',\n 12: 'Auto Landing',\n 13: 'Attitude Landing',\n 14: 'GPS Waypoint',\n 15: 'Go Home',\n 16: 'Click Go',\n 17: 'Joystick',\n 18: 'Attitude Limited',\n 19: 'Cinematic',\n 23: 'Attitude Limited',\n 24: 'Draw',\n 25: 'GPS Follow Me',\n 26: 'ActiveTrack',\n 27: 'TapFly',\n 28: 'Pano',\n 29: 'Farming',\n 30: 'FPV',\n 31: 'GPS Sport',\n 32: 'GPS Novice',\n 33: 'Confirm Landing',\n 35: 'Terrain Follow',\n 36: 'Palm Control',\n 37: 'Quick Shot',\n 38: 'Tripod',\n 39: 'ActiveTrack Spotlight',\n 41: 'Motors Just Started',\n 43: 'GPS Gentle',\n 255: 'Unknown',\n};\n\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Generated by CoffeeScript 2.2.4\n// # CSV Parser\n\n// This module provides a CSV parser tested and used against large datasets. Over\n// the year, it has been enhance and is now full of useful options.\n\n// Please look at the [README], the [project website][site] the [samples] and the\n// [tests] for additional information.\nvar Parser, StringDecoder, isObjLiteral, stream, util;\n\nstream = require('stream');\n\nutil = require('util');\n\nStringDecoder = require('string_decoder').StringDecoder;\n\n// ## Usage\n\n// Callback approach, for ease of use: \n\n// `parse(data, [options], callback)` \n\n// [Node.js Stream API][stream], for maximum of power: \n\n// `parse([options], [callback])` \nmodule.exports = function() {\n var callback, called, chunks, data, err, options, parser;\n if (arguments.length === 3) {\n data = arguments[0];\n options = arguments[1];\n callback = arguments[2];\n if (typeof callback !== 'function') {\n throw Error(`Invalid callback argument: ${JSON.stringify(callback)}`);\n }\n if (!(typeof data === 'string' || Buffer.isBuffer(arguments[0]))) {\n return callback(Error(`Invalid data argument: ${JSON.stringify(data)}`));\n }\n } else if (arguments.length === 2) {\n // 1st arg is data:string or options:object\n if (typeof arguments[0] === 'string' || Buffer.isBuffer(arguments[0])) {\n data = arguments[0];\n } else if (isObjLiteral(arguments[0])) {\n options = arguments[0];\n } else {\n err = `Invalid first argument: ${JSON.stringify(arguments[0])}`;\n }\n // 2nd arg is options:object or callback:function\n if (typeof arguments[1] === 'function') {\n callback = arguments[1];\n } else if (isObjLiteral(arguments[1])) {\n if (options) {\n err = 'Invalid arguments: got options twice as first and second arguments';\n } else {\n options = arguments[1];\n }\n } else {\n err = `Invalid first argument: ${JSON.stringify(arguments[1])}`;\n }\n if (err) {\n if (!callback) {\n throw Error(err);\n } else {\n return callback(Error(err));\n }\n }\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'function') {\n callback = arguments[0];\n } else {\n options = arguments[0];\n }\n }\n if (options == null) {\n options = {};\n }\n parser = new Parser(options);\n if (data != null) {\n process.nextTick(function() {\n parser.write(data);\n return parser.end();\n });\n }\n if (callback) {\n called = false;\n chunks = options.objname ? {} : [];\n parser.on('readable', function() {\n var chunk, results;\n results = [];\n while (chunk = parser.read()) {\n if (options.objname) {\n results.push(chunks[chunk[0]] = chunk[1]);\n } else {\n results.push(chunks.push(chunk));\n }\n }\n return results;\n });\n parser.on('error', function(err) {\n called = true;\n return callback(err);\n });\n parser.on('end', function() {\n if (!called) {\n return callback(null, chunks);\n }\n });\n }\n return parser;\n};\n\n// ## `Parser([options])`\n\n// Options are documented [here](http://csv.adaltas.com/parse/).\nParser = function(options = {}) {\n var base, base1, base10, base11, base12, base13, base14, base15, base16, base17, base2, base3, base4, base5, base6, base7, base8, base9, k, v;\n // @options = options\n this.options = {};\n for (k in options) {\n v = options[k];\n this.options[k] = v;\n }\n this.options.objectMode = true;\n stream.Transform.call(this, this.options);\n if ((base = this.options).rowDelimiter == null) {\n base.rowDelimiter = null;\n }\n if (typeof this.options.rowDelimiter === 'string') {\n this.options.rowDelimiter = [this.options.rowDelimiter];\n }\n if ((base1 = this.options).delimiter == null) {\n base1.delimiter = ',';\n }\n if (this.options.quote !== void 0 && !this.options.quote) {\n this.options.quote = '';\n }\n if ((base2 = this.options).quote == null) {\n base2.quote = '\"';\n }\n if ((base3 = this.options).escape == null) {\n base3.escape = '\"';\n }\n if ((base4 = this.options).columns == null) {\n base4.columns = null;\n }\n if ((base5 = this.options).comment == null) {\n base5.comment = '';\n }\n if ((base6 = this.options).objname == null) {\n base6.objname = false;\n }\n if ((base7 = this.options).trim == null) {\n base7.trim = false;\n }\n if ((base8 = this.options).ltrim == null) {\n base8.ltrim = false;\n }\n if ((base9 = this.options).rtrim == null) {\n base9.rtrim = false;\n }\n if (this.options.auto_parse != null) {\n this.options.cast = this.options.auto_parse;\n }\n if ((base10 = this.options).cast == null) {\n base10.cast = false;\n }\n if (this.options.auto_parse_date != null) {\n this.options.cast_date = this.options.auto_parse_date;\n }\n if ((base11 = this.options).cast_date == null) {\n base11.cast_date = false;\n }\n if (this.options.cast_date === true) {\n this.options.cast_date = function(value) {\n var m;\n m = Date.parse(value);\n if (!isNaN(m)) {\n value = new Date(m);\n }\n return value;\n };\n }\n if ((base12 = this.options).relax == null) {\n base12.relax = false;\n }\n if ((base13 = this.options).relax_column_count == null) {\n base13.relax_column_count = false;\n }\n if ((base14 = this.options).skip_empty_lines == null) {\n base14.skip_empty_lines = false;\n }\n if ((base15 = this.options).max_limit_on_data_read == null) {\n base15.max_limit_on_data_read = 128000;\n }\n if ((base16 = this.options).skip_lines_with_empty_values == null) {\n base16.skip_lines_with_empty_values = false;\n }\n if ((base17 = this.options).skip_lines_with_error == null) {\n base17.skip_lines_with_error = false;\n }\n // Counters\n // lines = count + skipped_line_count + empty_line_count\n this.lines = 0; // Number of lines encountered in the source dataset\n this.count = 0; // Number of records being processed\n this.skipped_line_count = 0; // Number of records skipped due to errors\n this.empty_line_count = 0; // Number of empty lines\n // Constants\n this.is_int = /^(\\-|\\+)?([1-9]+[0-9]*)$/;\n // @is_float = /^(\\-|\\+)?([0-9]+(\\.[0-9]+)([eE][0-9]+)?|Infinity)$/\n // @is_float = /^(\\-|\\+)?((([0-9])|([1-9]+[0-9]*))(\\.[0-9]+)([eE][0-9]+)?|Infinity)$/\n this.is_float = function(value) {\n return (value - parseFloat(value) + 1) >= 0; // Borrowed from jquery\n };\n // Internal state\n this._ = {\n decoder: new StringDecoder(),\n quoting: false,\n commenting: false,\n field: null,\n nextChar: null,\n closingQuote: 0,\n line: [],\n chunks: [],\n rawBuf: '',\n buf: '',\n rowDelimiterLength: this.options.rowDelimiter ? Math.max(...this.options.rowDelimiter.map(function(v) {\n return v.length;\n })) : void 0,\n lineHasError: false\n };\n return this;\n};\n\n// ## Internal API\n\n// The Parser implement a [`stream.Transform` class][transform].\n\n// ### Events\n\n// The library extends Node [EventEmitter][event] class and emit all\n// the events of the Writable and Readable [Stream API][stream]. \nutil.inherits(Parser, stream.Transform);\n\n// For extra flexibility, you can get access to the original Parser\n// class: `require('csv-parse').Parser`.\nmodule.exports.Parser = Parser;\n\n// ### `_transform(chunk, encoding, callback)`\n\n// * `chunk` Buffer | String \n// The chunk to be transformed. Will always be a buffer unless the decodeStrings option was set to false.\n// * `encoding` String \n// If the chunk is a string, then this is the encoding type. (Ignore if decodeStrings chunk is a buffer.)\n// * `callback` Function \n// Call this function (optionally with an error argument) when you are done processing the supplied chunk.\n\n// Implementation of the [`stream.Transform` API][transform]\nParser.prototype._transform = function(chunk, encoding, callback) {\n return setImmediate(() => {\n var err;\n if (chunk instanceof Buffer) {\n chunk = this._.decoder.write(chunk);\n }\n err = this.__write(chunk, false);\n if (err) {\n return this.emit('error', err);\n }\n return callback();\n });\n};\n\nParser.prototype._flush = function(callback) {\n return callback(this.__flush());\n};\n\nParser.prototype.__flush = function() {\n var err;\n err = this.__write(this._.decoder.end(), true);\n if (err) {\n return err;\n }\n if (this._.quoting) {\n err = this.error(`Quoted field not terminated at line ${this.lines + 1}`);\n return err;\n }\n if (this._.line.length > 0) {\n return this.__push(this._.line);\n }\n};\n\nParser.prototype.__push = function(line) {\n var call_column_udf, columns, err, field, i, j, len, lineAsColumns, record;\n if (this.options.skip_lines_with_empty_values && line.join('').trim() === '') {\n return;\n }\n record = null;\n if (this.options.columns === true) {\n this.options.columns = line;\n return;\n } else if (typeof this.options.columns === 'function') {\n call_column_udf = function(fn, line) {\n var columns, err;\n try {\n columns = fn.call(null, line);\n return [null, columns];\n } catch (error) {\n err = error;\n return [err];\n }\n };\n [err, columns] = call_column_udf(this.options.columns, line);\n if (err) {\n return err;\n }\n this.options.columns = columns;\n return;\n }\n if (!this._.line_length && line.length > 0) {\n this._.line_length = this.options.columns ? this.options.columns.length : line.length;\n }\n // Dont check column count on empty lines\n if (line.length === 1 && line[0] === '') {\n this.empty_line_count++;\n } else if (line.length !== this._.line_length) {\n // Dont check column count with relax_column_count\n if (this.options.relax_column_count) {\n this.count++;\n this.skipped_line_count++;\n } else if (this.options.columns != null) {\n // Suggest: Inconsistent header and column numbers: header is 1 and number of columns is 1 on line 1\n err = this.error(`Number of columns on line ${this.lines} does not match header`);\n return err;\n } else {\n err = this.error(`Number of columns is inconsistent on line ${this.lines}`);\n return err;\n }\n } else {\n this.count++;\n }\n if (this.options.columns != null) {\n lineAsColumns = {};\n for (i = j = 0, len = line.length; j < len; i = ++j) {\n field = line[i];\n if (this.options.columns[i] === false) {\n continue;\n }\n lineAsColumns[this.options.columns[i]] = field;\n }\n if (this.options.objname) {\n record = [lineAsColumns[this.options.objname], lineAsColumns];\n } else {\n record = lineAsColumns;\n }\n } else {\n record = line;\n }\n if (this.count < this.options.from) {\n return;\n }\n if (this.count > this.options.to) {\n return;\n }\n if (this.options.raw) {\n this.push({\n raw: this._.rawBuf,\n row: record\n });\n this._.rawBuf = '';\n } else {\n this.push(record);\n }\n if (this.listenerCount('record')) {\n this.emit('record', record);\n }\n return null;\n};\n\nParser.prototype.__write = function(chars, end) {\n var areNextCharsDelimiter, areNextCharsRowDelimiters, cast, char, err, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isNextCharTrimable, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, ref5, ref6, remainingBuffer, rowDelimiter, rtrim, wasCommenting;\n is_int = (value) => {\n if (typeof this.is_int === 'function') {\n return this.is_int(value);\n } else {\n return this.is_int.test(value);\n }\n };\n is_float = (value) => {\n if (typeof this.is_float === 'function') {\n return this.is_float(value);\n } else {\n return this.is_float.test(value);\n }\n };\n cast = (value, context = {}) => {\n if (!this.options.cast) {\n return value;\n }\n if (context.quoting == null) {\n context.quoting = !!this._.closingQuote;\n }\n if (context.lines == null) {\n context.lines = this.lines;\n }\n if (context.count == null) {\n context.count = this.count;\n }\n if (context.index == null) {\n context.index = this._.line.length;\n }\n // context.header ?= if @options.column and @lines is 1 and @count is 0 then true else false\n if (context.header == null) {\n context.header = this.options.columns === true;\n }\n if (context.column == null) {\n context.column = Array.isArray(this.options.columns) ? this.options.columns[context.index] : context.index;\n }\n if (typeof this.options.cast === 'function') {\n return this.options.cast(value, context);\n }\n if (is_int(value)) {\n value = parseInt(value);\n } else if (is_float(value)) {\n value = parseFloat(value);\n } else if (this.options.cast_date) {\n value = this.options.cast_date(value, context);\n }\n return value;\n };\n ltrim = this.options.trim || this.options.ltrim;\n rtrim = this.options.trim || this.options.rtrim;\n chars = this._.buf + chars;\n l = chars.length;\n i = 0;\n if (this.lines === 0 && 0xFEFF === chars.charCodeAt(0)) {\n // Strip BOM header\n i++;\n }\n while (i < l) {\n // Ensure we get enough space to look ahead\n if (!end) {\n remainingBuffer = chars.substr(i, l - i);\n // (i+1000 >= l) or\n // Skip if the remaining buffer can be comment\n // Skip if the remaining buffer can be row delimiter\n 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) {\n return rd.substr(0, l - i) === remainingBuffer;\n // Skip if the remaining buffer can be row delimiter following the closing quote\n })) || (this.options.rowDelimiter && this._.quoting && l - i < (this.options.quote.length + this._.rowDelimiterLength) && this.options.rowDelimiter.some((rd) => {\n return (this.options.quote + rd).substr(0, l - i) === remainingBuffer;\n // Skip if the remaining buffer can be delimiter\n // Skip if the remaining buffer can be escape sequence\n })) || (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)) {\n break;\n }\n }\n char = this._.nextChar ? this._.nextChar : chars.charAt(i);\n this._.nextChar = l > i + 1 ? chars.charAt(i + 1) : null;\n if (this.options.raw) {\n this._.rawBuf += char;\n }\n // Auto discovery of rowDelimiter, unix, mac and windows supported\n if (this.options.rowDelimiter == null) {\n nextCharPos = i;\n rowDelimiter = null;\n // First empty line\n if (!this._.quoting && (char === '\\n' || char === '\\r')) {\n rowDelimiter = char;\n nextCharPos += 1;\n } else if (this._.quoting && char === this.options.quote && ((ref = this._.nextChar) === '\\n' || ref === '\\r')) {\n rowDelimiter = this._.nextChar;\n nextCharPos += 2;\n }\n if (rowDelimiter) {\n if (rowDelimiter === '\\r' && chars.charAt(nextCharPos) === '\\n') {\n rowDelimiter += '\\n';\n }\n this.options.rowDelimiter = [rowDelimiter];\n this._.rowDelimiterLength = rowDelimiter.length;\n }\n }\n // Parse that damn char\n // Note, shouldn't we have sth like chars.substr(i, @options.escape.length)\n if (!this._.commenting && char === this.options.escape) {\n // Make sure the escape is really here for escaping:\n // If escape is same as quote, and escape is first char of a field \n // and it's not quoted, then it is a quote\n // Next char should be an escape or a quote\n escapeIsQuote = this.options.escape === this.options.quote;\n isEscape = this._.nextChar === this.options.escape;\n isQuote = this._.nextChar === this.options.quote;\n if (!(escapeIsQuote && !this._.field && !this._.quoting) && (isEscape || isQuote)) {\n i++;\n char = this._.nextChar;\n this._.nextChar = chars.charAt(i + 1);\n if (this._.field == null) {\n this._.field = '';\n }\n this._.field += char;\n // Since we're skipping the next one, better add it now if in raw mode.\n if (this.options.raw) {\n this._.rawBuf += char;\n }\n i++;\n continue;\n }\n }\n // Char match quote\n if (!this._.commenting && char === this.options.quote) {\n if (this._.acceptOnlyEmptyChars && (char !== ' ' && char !== '\\t')) {\n return this.error('Only trimable characters are accepted after quotes');\n }\n if (this._.quoting) {\n // Make sure a closing quote is followed by a delimiter\n // If we have a next character and \n // it isnt a rowDelimiter and \n // it isnt an column delimiter and\n // it isnt the begining of a comment\n // Otherwise, if this is not \"relax\" mode, throw an error\n isNextCharTrimable = rtrim && ((ref1 = this._.nextChar) === ' ' || ref1 === '\\t');\n areNextCharsRowDelimiters = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {\n return chars.substr(i + 1, rd.length) === rd;\n });\n areNextCharsDelimiter = chars.substr(i + 1, this.options.delimiter.length) === this.options.delimiter;\n isNextCharAComment = this._.nextChar === this.options.comment;\n if ((this._.nextChar != null) && !isNextCharTrimable && !areNextCharsRowDelimiters && !areNextCharsDelimiter && !isNextCharAComment) {\n if (this.options.relax) {\n this._.quoting = false;\n if (this._.field) {\n this._.field = `${this.options.quote}${this._.field}`;\n }\n } else {\n if (err = this.error(`Invalid closing quote at line ${this.lines + 1}; found ${JSON.stringify(this._.nextChar)} instead of delimiter ${JSON.stringify(this.options.delimiter)}`)) {\n return err;\n }\n }\n } else if ((this._.nextChar != null) && isNextCharTrimable) {\n i++;\n this._.quoting = false;\n this._.closingQuote = this.options.quote.length;\n this._.acceptOnlyEmptyChars = true;\n continue;\n } else {\n i++;\n this._.quoting = false;\n this._.closingQuote = this.options.quote.length;\n if (end && i === l) {\n this._.line.push(cast(this._.field || ''));\n this._.field = null;\n }\n continue;\n }\n } else if (!this._.field) {\n this._.quoting = true;\n i++;\n continue;\n } else if ((this._.field != null) && !this.options.relax) {\n if (err = this.error(`Invalid opening quote at line ${this.lines + 1}`)) {\n return err;\n }\n }\n }\n // Otherwise, treat quote as a regular character\n isRowDelimiter = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {\n return chars.substr(i, rd.length) === rd;\n });\n if (isRowDelimiter || (end && i === l - 1)) {\n this.lines++;\n }\n // Set the commenting flag\n wasCommenting = false;\n if (!this._.commenting && !this._.quoting && this.options.comment && chars.substr(i, this.options.comment.length) === this.options.comment) {\n this._.commenting = true;\n } else if (this._.commenting && isRowDelimiter) {\n wasCommenting = true;\n this._.commenting = false;\n }\n isDelimiter = chars.substr(i, this.options.delimiter.length) === this.options.delimiter;\n if (this._.acceptOnlyEmptyChars) {\n if (isDelimiter || isRowDelimiter) {\n this._.acceptOnlyEmptyChars = false;\n } else {\n if (char === ' ' || char === '\\t') {\n i++;\n continue;\n } else {\n return this.error('Only trimable characters are accepted after quotes');\n }\n }\n }\n if (!this._.commenting && !this._.quoting && (isDelimiter || isRowDelimiter)) {\n if (isRowDelimiter) {\n isRowDelimiterLength = this.options.rowDelimiter.filter(function(rd) {\n return chars.substr(i, rd.length) === rd;\n })[0].length;\n }\n // Empty lines\n if (isRowDelimiter && this._.line.length === 0 && (this._.field == null)) {\n if (wasCommenting || this.options.skip_empty_lines) {\n i += isRowDelimiterLength;\n this._.nextChar = chars.charAt(i);\n continue;\n }\n }\n if (rtrim) {\n if (!this._.closingQuote) {\n this._.field = (ref2 = this._.field) != null ? ref2.trimRight() : void 0;\n }\n }\n this._.line.push(cast(this._.field || ''));\n this._.closingQuote = 0;\n this._.field = null;\n if (isDelimiter) { // End of field\n i += this.options.delimiter.length;\n this._.nextChar = chars.charAt(i);\n if (end && !this._.nextChar) {\n isRowDelimiter = true;\n this._.line.push('');\n }\n }\n if (isRowDelimiter) { // End of record\n if (!this._.lineHasError) {\n err = this.__push(this._.line);\n if (err) {\n return err;\n }\n }\n if (this._.lineHasError) {\n this._.lineHasError = false;\n }\n // Some cleanup for the next record\n this._.line = [];\n i += isRowDelimiterLength;\n this._.nextChar = chars.charAt(i);\n continue;\n }\n } else if (!this._.commenting && !this._.quoting && (char === ' ' || char === '\\t')) {\n if (this._.field == null) {\n // Left trim unless we are quoting or field already filled\n this._.field = '';\n }\n if (!(ltrim && !this._.field)) {\n this._.field += char;\n }\n i++;\n } else if (!this._.commenting) {\n if (this._.field == null) {\n this._.field = '';\n }\n this._.field += char;\n i++;\n } else {\n i++;\n }\n if (!this._.commenting && ((ref3 = this._.field) != null ? ref3.length : void 0) > this.options.max_limit_on_data_read) {\n return Error(`Field exceeds max_limit_on_data_read setting (${this.options.max_limit_on_data_read}) ${JSON.stringify(this.options.delimiter)}`);\n }\n if (!this._.commenting && ((ref4 = this._.line) != null ? ref4.length : void 0) > this.options.max_limit_on_data_read) {\n return Error(`Row delimiter not found in the file ${JSON.stringify(this.options.rowDelimiter)}`);\n }\n }\n // Flush remaining fields and lines\n if (end) {\n if (l === 0) {\n this.lines++;\n }\n if (this._.field != null) {\n if (rtrim) {\n if (!this._.closingQuote) {\n this._.field = (ref5 = this._.field) != null ? ref5.trimRight() : void 0;\n }\n }\n this._.line.push(cast(this._.field || ''));\n this._.field = null;\n }\n if (((ref6 = this._.field) != null ? ref6.length : void 0) > this.options.max_limit_on_data_read) {\n return Error(`Delimiter not found in the file ${JSON.stringify(this.options.delimiter)}`);\n }\n if (this._.line.length > this.options.max_limit_on_data_read) {\n return Error(`Row delimiter not found in the file ${JSON.stringify(this.options.rowDelimiter)}`);\n }\n }\n // Store un-parsed chars for next call\n this._.buf = chars.substr(i);\n return null;\n};\n\nParser.prototype.error = function(msg) {\n var err;\n err = Error(msg);\n if (!this.options.skip_lines_with_error) {\n return err;\n } else {\n if (!this._.lineHasError) {\n this._.lineHasError = true;\n this.emit('skip', err);\n }\n }\n return null;\n};\n\n// ## Utils\nisObjLiteral = function(_obj) {\n var _test;\n _test = _obj;\n if (typeof _obj !== 'object' || _obj === null || Array.isArray(_obj)) {\n return false;\n } else {\n return (function() {\n while (!false) {\n if (Object.getPrototypeOf(_test = Object.getPrototypeOf(_test)) === null) {\n break;\n }\n }\n return Object.getPrototypeOf(_obj === _test);\n })();\n }\n};\n\n// [readme]: https://github.com/wdavidw/node-csv-parse\n// [site]: http://csv.adaltas.com/parse/\n// [samples]: https://github.com/wdavidw/node-csv-parse/tree/master/samples\n// [tests]: https://github.com/wdavidw/node-csv-parse/tree/master/test\n// [stream]: (http://nodejs.org/api/stream.html\n// [transform]: (http://nodejs.org/api/stream.html#stream_class_stream_transform_1)\n","import { FlightLogHeader } from './types';\n\nexport const INT_FIELDS = new Set([\n FlightLogHeader.AircraftBatteryCell1Voltage,\n FlightLogHeader.AircraftBatteryCell2Voltage,\n FlightLogHeader.AircraftBatteryCell3Voltage,\n FlightLogHeader.AircraftBatteryCell4Voltage,\n FlightLogHeader.AircraftBatteryCharge,\n FlightLogHeader.AircraftBatteryCurrent,\n FlightLogHeader.AircraftBatteryTemperature,\n FlightLogHeader.AircraftBatteryVoltage,\n FlightLogHeader.AircraftCameraLensFocusModeValue,\n FlightLogHeader.AircraftCameraLensFocusStatusValue,\n FlightLogHeader.AircraftCameraModeValue,\n FlightLogHeader.AircraftFlightModeValue,\n FlightLogHeader.AircraftGPSSignalValue,\n FlightLogHeader.AircraftNoFlyValue,\n FlightLogHeader.AircraftSatellites,\n FlightLogHeader.GimbalModeValue,\n]);\n\nexport const FLOAT_FIELDS = new Set([\n FlightLogHeader.AircraftBarometricAltitude,\n FlightLogHeader.AircraftBatteryPowerPercent,\n FlightLogHeader.AircraftCameraSDCardRemainingPercent,\n FlightLogHeader.AircraftHeading,\n FlightLogHeader.AircraftLatitude,\n FlightLogHeader.AircraftLongitude,\n FlightLogHeader.AircraftNoFlyLatitude,\n FlightLogHeader.AircraftNoFlyLongitude,\n FlightLogHeader.AircraftNoFlyRadius,\n FlightLogHeader.AircraftPitch,\n FlightLogHeader.AircraftRoll,\n FlightLogHeader.AircraftSmartGoHomeFlightReturnTime,\n FlightLogHeader.AircraftSmartGoHomeFlightTimeRemaining,\n FlightLogHeader.AircraftSmartGoHomeLandingPower,\n FlightLogHeader.AircraftSmartGoHomeLandingTime,\n FlightLogHeader.AircraftSmartGoHomeReturnPower,\n FlightLogHeader.AircraftSpeed,\n FlightLogHeader.AircraftUltrasonicAltitude,\n FlightLogHeader.DeviceToAircraftDistance,\n FlightLogHeader.ElapsedTime,\n FlightLogHeader.GimbalPitch,\n FlightLogHeader.GimbalPitchAtStop,\n FlightLogHeader.GimbalRoll,\n FlightLogHeader.GimbalRollAtStop,\n FlightLogHeader.GimbalYaw,\n FlightLogHeader.GimbalYawAtStop,\n FlightLogHeader.HomeLatitude,\n FlightLogHeader.HomeLongitude,\n FlightLogHeader.RCBatteryPercentRemaining,\n FlightLogHeader.RCLeftHorizontal,\n FlightLogHeader.RCRightHorizontal,\n FlightLogHeader.RCLeftVertical,\n FlightLogHeader.RCRightVertical,\n]);\n\nexport const BOOL_FIELDS = new Set([\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraIntervalCapture,\n FlightLogHeader.AircraftCameraLensAFAssistant,\n FlightLogHeader.AircraftCameraLensAFEnabled,\n FlightLogHeader.AircraftCameraLensAssistantWorking,\n FlightLogHeader.AircraftCameraOverheated,\n FlightLogHeader.AircraftCameraRawCapture,\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraRecording,\n FlightLogHeader.AircraftCameraSDCardExists,\n FlightLogHeader.AircraftCameraSensorError,\n FlightLogHeader.AircraftCameraSingleCapture,\n FlightLogHeader.AircraftCameraStoringPhoto,\n FlightLogHeader.AircraftFlying,\n FlightLogHeader.AircraftIMUPreheating,\n FlightLogHeader.AircraftMotorsOn,\n FlightLogHeader.AircraftSmartGoHomeRequesting,\n FlightLogHeader.AircraftUltrasonicOn,\n FlightLogHeader.AircraftVisionOn,\n]);\n\n","import parse from 'csv-parse';\n\nimport { FlightLogRow, FlightLogHeader, FlightLogMetaData, FlightLog } from './types';\nimport { INT_FIELDS, BOOL_FIELDS, FLOAT_FIELDS } from './field-types';\n\nconst META_REGEX = {\n appVersion: /^#DroneDeploy\\s+(.+)$/,\n sessionId: /^Session ID\\s+(.+)$/,\n sessionStart: /^Session Start\\s+(.+)$/,\n sessionEnd: /^Date\\/Time \\(UTC\\)\\s+(.+)$/,\n deviceModel: /^Device Model\\s+(.+)$/,\n deviceOS: /^Device Operating System\\s+(.+)$/,\n aircraftModel: /^Aircraft Model\\s+(.+)$/,\n aircraftName: /^Aircraft Name\\s+(.+)$/,\n aircraftFirmware: /^Aircraft Firmware\\s+(.+)$/,\n batteryChargeVolume: /^Full Charge Volume \\(mAh\\)\\s+(.+)$/,\n batteryRemainingLife: /^Remaining Life \\(%\\)\\s+(.+)$/,\n batteryDischarges: /^Discharges\\s+(.+)$/,\n batteryCells: /^Battery Cells Number\\s+(.+)$/,\n batteryFirmware: /^Battery Firmware\\s+(.+)$/,\n fcSerialNumber: /^Flight Controller Serial Number\\s+(.+)$/,\n fcFirmware: /^Flight Controller Firmware\\s+(.+)$/,\n gimbalFirmware: /^Gimbal Firmware\\s+(.+)$/,\n rcSerialNumber: /^Remote Control Serial Number\\s+(.+)$/,\n rcFirmware: /^Remote Control Firmware\\s+(.+)$/,\n cameraSerialNumber: /^Camera Serial Number\\s+(.+)$/,\n elapsedTime: /^Elapsed Time \\(sec\\)\\s+(.+)$/,\n};\n\nconst LOG_HEADER_LINES = 27;\nconst LOG_FOOTER_LINES = 3;\n\nexport function parseLog(log: String): Promise {\n const lines = log.split('\\n');\n\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const header = lines.slice(0, LOG_HEADER_LINES);\n const footer = lines.slice(-LOG_FOOTER_LINES);\n const body = lines.slice(LOG_HEADER_LINES, -LOG_FOOTER_LINES);\n const metaData = parseMetaData(header, footer);\n\n return parseBody(body).then((rows) => ({\n metaData,\n rows,\n }));\n}\n\nfunction parseBody(lines: string[]): Promise {\n const text = lines.join('\\n');\n const options = {\n delimiter: '\\t',\n from: 1,\n relax_column_count: true,\n };\n\n return new Promise((resolve, reject) => {\n parse(text, options, (err: any, result: string[]) => {\n if (err) {\n return reject(err);\n }\n\n const [headers, ...rows] = result;\n\n const logs = rows\n .map((row) => {\n const log = {} as FlightLogRow;\n\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i].trim() as FlightLogHeader;\n let value: any = row[i];\n\n if (INT_FIELDS.has(header)) {\n value = parseInt(value, 10);\n }\n\n if (FLOAT_FIELDS.has(header)) {\n value = parseFloat(value);\n }\n\n if (BOOL_FIELDS.has(header)) {\n value = value !== '0';\n }\n\n log[header] = value;\n }\n\n return log;\n });\n\n resolve(logs);\n });\n });\n};\n\nfunction findMatch(search: string[], regex: RegExp) {\n let match;\n\n for (let str of search) {\n match = str.match(regex);\n\n if (match) {\n break;\n }\n }\n\n if (!match) {\n return 'N/A';\n }\n\n return match[1];\n};\n\nfunction parseMetaData(headers: string[], footers: string[]): FlightLogMetaData {\n const meta = [...headers, ...footers];\n\n return {\n appVersion: findMatch(meta, META_REGEX.appVersion),\n session: {\n id: findMatch(meta, META_REGEX.sessionId),\n start: new Date(findMatch(meta, META_REGEX.sessionStart)),\n end: new Date(findMatch(meta, META_REGEX.sessionEnd)),\n elapsed: parseFloat(findMatch(meta, META_REGEX.elapsedTime)),\n },\n device: {\n model: findMatch(meta, META_REGEX.deviceModel),\n os: findMatch(meta, META_REGEX.deviceOS).replace(/\\t/g, ' '),\n },\n aircraft: {\n model: findMatch(meta, META_REGEX.aircraftModel),\n name: findMatch(meta, META_REGEX.aircraftName),\n firmware: findMatch(meta, META_REGEX.aircraftFirmware),\n },\n battery: {\n chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume), 10),\n remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife), 10),\n discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges), 10),\n cells: parseInt(findMatch(meta, META_REGEX.batteryCells), 10),\n firmware: findMatch(meta, META_REGEX.batteryFirmware),\n },\n flightController: {\n serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),\n firmware: findMatch(meta, META_REGEX.fcFirmware),\n },\n gimbal: {\n firmware: findMatch(meta, META_REGEX.gimbalFirmware),\n },\n remoteController: {\n serialNumber: findMatch(meta, META_REGEX.rcSerialNumber),\n firmware: findMatch(meta, META_REGEX.rcFirmware),\n },\n camera: {\n serialNumber: findMatch(meta, META_REGEX.cameraSerialNumber),\n },\n };\n};\n"],"names":["FlightLogHeader","Buffer","require$$0","StringDecoder","stream","util","require$$1","require$$2","parse"],"mappings":";;;;;;;;;;EAAA,WAAY,eAAe;MACzB,+CAA4B,CAAA;MAC5B,qDAAkC,CAAA;MAClC,gCAAa,CAAA;MACb,+DAA4C,CAAA;MAC5C,iEAA8C,CAAA;MAC9C,kFAA+D,CAAA;MAC/D,6EAA0D,CAAA;MAC1D,0EAAuD,CAAA;MACvD,2EAAwD,CAAA;MACxD,2EAAwD,CAAA;MACxD,2FAAwE,CAAA;MACxE,oFAAiE,CAAA;MACjE,kFAA+D,CAAA;MAC/D,kFAA+D,CAAA;MAC/D,kFAA+D,CAAA;MAC/D,kFAA+D,CAAA;MAC/D,4GAAyF,CAAA;MACzF,mEAAgD,CAAA;MAChD,qEAAkD,CAAA;MAClD,yDAAsC,CAAA;MACtC,mFAAgE,CAAA;MAChE,iEAA8C,CAAA;MAC9C,+DAA4C,CAAA;MAC5C,+DAA4C,CAAA;MAC5C,+DAA4C,CAAA;MAC5C,6DAA0C,CAAA;MAC1C,2DAAwC,CAAA;MACxC,6DAA0C,CAAA;MAC1C,0DAAuC,CAAA;MACvC,qDAAkC,CAAA;MAClC,8DAA2C,CAAA;MAC3C,yEAAsD,CAAA;MACtD,oEAAiD,CAAA;MACjD,kEAA+C,CAAA;MAC/C,mFAAgE,CAAA;MAChE,0DAAuC,CAAA;MACvC,4DAAyC,CAAA;MACzC,uEAAoD,CAAA;MACpD,oDAAiC,CAAA;MACjC,+DAA4C,CAAA;MAC5C,+EAA4D,CAAA;MAC5D,iFAA8D,CAAA;MAC9D,sEAAmD,CAAA;MACnD,2DAAwC,CAAA;MACxC,6DAA0C,CAAA;MAC1C,gHAA6F,CAAA;MAC7F,0GAAuF,CAAA;MACvF,+FAA4E,CAAA;MAC5E,6FAA0E,CAAA;MAC1E,+FAA4E,CAAA;MAC5E,mFAAgE,CAAA;MAChE,0FAAuE,CAAA;MACvE,sFAAmE,CAAA;MACnE,6FAA0E,CAAA;MAC1E,yDAAsC,CAAA;MACtC,uDAAoC,CAAA;MACpC,qDAAkC,CAAA;MAClC,6CAA0B,CAAA;MAC1B,wDAAqC,CAAA;MACrC,6DAA0C,CAAA;MAC1C,2DAAwC,CAAA;MACxC,yDAAsC,CAAA;MACtC,8EAA2D,CAAA;MAC3D,mEAAgD,CAAA;MAChD,4DAAyC,CAAA;MACzC,uEAAoD,CAAA;MACpD,wDAAqC,CAAA;MACrC,mEAAgD,CAAA;MAChD,4EAAyD,CAAA;MACzD,uCAAoB,CAAA;MACpB,kDAA+B,CAAA;MAC/B,0DAAuC,CAAA;MACvC,sDAAmC,CAAA;MACnC,4DAAyC,CAAA;MACzC,wDAAqC,CAAA;MACrC,gDAA6B,CAAA;MAC7B,kDAA+B,CAAA;MAC/B,oDAAiC,CAAA;MACjC,+DAA4C,CAAA;MAC5C,0CAAuB,CAAA;MACvB,0CAAwB,CAAA;MACxB,2CAAwB,CAAA;MACxB,6CAA0B,CAAA;MAC1B,uCAAoB,CAAA;MACpB,4CAAyB,CAAA;MACzB,4CAAyB,CAAA;MACzB,oEAAiD,CAAA;MACjD,+DAA4C,CAAA;MAC5C,mFAAgE,CAAA;MAChE,iDAA8B,CAAA;MAC9B,yEAAsD,CAAA;MACtD,uDAAoC,CAAA;MACpC,yDAAsC,CAAA;MACtC,4DAAyC,CAAA;MACzC,2EAAwD,CAAA;MACxD,4CAAyB,CAAA;MACzB,4CAAyB,CAAA;MACzB,sEAAmD,CAAA;MACnD,4CAAyB,CAAA;MACzB,4CAAyB,CAAA;MACzB,sEAAmD,CAAA;MACnD,8DAA2C,CAAA;MAC3C,yEAAsD,CAAA;MACtD,0EAAuD,CAAA;MACvD,6EAA0D,CAAA;MAC1D,wEAAqD,CAAA;MACrD,2EAAwD,CAAA;MACxD,qFAAkE,CAAA;MAClE,+EAA4D,CAAA;MAC5D,iFAA8D,CAAA;MAC9D,+EAA4D,CAAA;MAC5D,6FAA0E,CAAA;MAC1E,gFAA6D,CAAA;MAC7D,iGAA8E,CAAA;MAC9E,2GAAwF,CAAA;MACxF,sGAAmF,CAAA;MACnF,iFAA8D,CAAA;MAC9D,uEAAoD,CAAA;MACpD,kFAA+D,CAAA;MAC/D,kFAA+D,CAAA;MAC/D,6FAA0E,CAAA;MAC1E,sFAAmE,CAAA;MACnE,iGAA8E,CAAA;MAC9E,sFAAmE,CAAA;MACnE,sFAAmE,CAAA;MACnE,gGAA6E,CAAA;MAC7E,sGAAmF,CAAA;MACnF,oFAAiE,CAAA;EACnE,CAAC,EAjIWA,uBAAe,KAAfA,uBAAe,QAiI1B;EAmDD;AACA,QAAa,mBAAmB,GAAG;MACjC,CAAC,EAAE,QAAQ;MACX,CAAC,EAAE,UAAU;MACb,CAAC,EAAE,sBAAsB;MACzB,CAAC,EAAE,gBAAgB;MACnB,CAAC,EAAE,OAAO;MACV,CAAC,EAAE,WAAW;MACd,CAAC,EAAE,cAAc;MACjB,CAAC,EAAE,iBAAiB;MACpB,CAAC,EAAE,UAAU;MACb,CAAC,EAAE,cAAc;MACjB,EAAE,EAAE,kBAAkB;MACtB,EAAE,EAAE,cAAc;MAClB,EAAE,EAAE,cAAc;MAClB,EAAE,EAAE,kBAAkB;MACtB,EAAE,EAAE,cAAc;MAClB,EAAE,EAAE,SAAS;MACb,EAAE,EAAE,UAAU;MACd,EAAE,EAAE,UAAU;MACd,EAAE,EAAE,kBAAkB;MACtB,EAAE,EAAE,WAAW;MACf,EAAE,EAAE,kBAAkB;MACtB,EAAE,EAAE,MAAM;MACV,EAAE,EAAE,eAAe;MACnB,EAAE,EAAE,aAAa;MACjB,EAAE,EAAE,QAAQ;MACZ,EAAE,EAAE,MAAM;MACV,EAAE,EAAE,SAAS;MACb,EAAE,EAAE,KAAK;MACT,EAAE,EAAE,WAAW;MACf,EAAE,EAAE,YAAY;MAChB,EAAE,EAAE,iBAAiB;MACrB,EAAE,EAAE,gBAAgB;MACpB,EAAE,EAAE,cAAc;MAClB,EAAE,EAAE,YAAY;MAChB,EAAE,EAAE,QAAQ;MACZ,EAAE,EAAE,uBAAuB;MAC3B,EAAE,EAAE,qBAAqB;MACzB,EAAE,EAAE,YAAY;MAChB,GAAG,EAAE,SAAS;GACf;;;;;;;EC7ND;;EAEA,IAAI,MAAM,GAAG,MAAM,CAAC,OAAM;;;EAG1B,SAAS,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE;IAC5B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;MACnB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAC;KACpB;GACF;EACD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE;IAC/E,cAAc,GAAG,OAAM;GACxB,MAAM;;IAEL,SAAS,CAAC,MAAM,EAAE,OAAO,EAAC;IAC1B,cAAc,GAAG,WAAU;GAC5B;;EAED,SAAS,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;IAClD,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;GAC7C;;;EAGD,SAAS,CAAC,MAAM,EAAE,UAAU,EAAC;;EAE7B,UAAU,CAAC,IAAI,GAAG,UAAU,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;IACzD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAC3B,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC;KACrD;IACD,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;IAC7C;;EAED,UAAU,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;KACjD;IACD,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,EAAC;IACtB,IAAI,IAAI,KAAK,SAAS,EAAE;MACtB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAC;OACzB,MAAM;QACL,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC;OACf;KACF,MAAM;MACL,GAAG,CAAC,IAAI,CAAC,CAAC,EAAC;KACZ;IACD,OAAO,GAAG;IACX;;EAED,UAAU,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;KACjD;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACpB;;EAED,UAAU,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;KACjD;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IAC/B;;;;;;ECpCD,IAAIC,QAAM,GAAGC,UAAsB,CAAC,MAAM,CAAC;;;EAG3C,IAAI,UAAU,GAAGD,QAAM,CAAC,UAAU,IAAI,UAAU,QAAQ,EAAE;IACxD,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC;IACzB,QAAQ,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE;MACxC,KAAK,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,KAAK,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS,CAAC,KAAK,UAAU,CAAC,KAAK,KAAK;QAC7I,OAAO,IAAI,CAAC;MACd;QACE,OAAO,KAAK,CAAC;KAChB;GACF,CAAC;;EAEF,SAAS,kBAAkB,CAAC,GAAG,EAAE;IAC/B,IAAI,CAAC,GAAG,EAAE,OAAO,MAAM,CAAC;IACxB,IAAI,OAAO,CAAC;IACZ,OAAO,IAAI,EAAE;MACX,QAAQ,GAAG;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;UACV,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;UACb,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;UACX,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;UACR,OAAO,GAAG,CAAC;QACb;UACE,IAAI,OAAO,EAAE,OAAO;UACpB,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,CAAC;UAC/B,OAAO,GAAG,IAAI,CAAC;OAClB;KACF;GACF;;;EAID,SAAS,iBAAiB,CAAC,GAAG,EAAE;IAC9B,IAAI,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAKA,QAAM,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;IACpI,OAAO,IAAI,IAAI,GAAG,CAAC;GACpB;;;;;EAKD,mBAAqB,GAAG,aAAa,CAAC;EACtC,SAAS,aAAa,CAAC,QAAQ,EAAE;IAC/B,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC;IACP,QAAQ,IAAI,CAAC,QAAQ;MACnB,KAAK,SAAS;QACZ,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,EAAE,GAAG,CAAC,CAAC;QACP,MAAM;MACR,KAAK,MAAM;QACT,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC7B,EAAE,GAAG,CAAC,CAAC;QACP,MAAM;MACR,KAAK,QAAQ;QACX,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,EAAE,GAAG,CAAC,CAAC;QACP,MAAM;MACR;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,OAAO;KACV;IACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC,QAAQ,GAAGA,QAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;GACxC;;EAED,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE;IAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC;IACN,IAAI,CAAC,CAAC;IACN,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;MACvB,IAAI,CAAC,KAAK,SAAS,EAAE,OAAO,EAAE,CAAC;MAC/B,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;MAClB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KACnB,MAAM;MACL,CAAC,GAAG,CAAC,CAAC;KACP;IACD,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,EAAE,CAAC;GAChB,CAAC;;EAEF,aAAa,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC;;;EAGtC,aAAa,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;;;EAGxC,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,GAAG,EAAE;IAChD,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE;MAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACjE;IACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvE,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC;GAC7B,CAAC;;;;EAIF,SAAS,aAAa,CAAC,IAAI,EAAE;IAC3B,IAAI,IAAI,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7I,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;GACrC;;;;;EAKD,SAAS,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;IACzC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACpB,IAAI,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE,IAAI,CAAC,EAAE;MACX,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;MACnC,OAAO,EAAE,CAAC;KACX;IACD,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC,EAAE;MACX,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;MACnC,OAAO,EAAE,CAAC;KACX;IACD,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC,EAAE;MACX,IAAI,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;OAClD;MACD,OAAO,EAAE,CAAC;KACX;IACD,OAAO,CAAC,CAAC;GACV;;;;;;;;;;EAUD,SAAS,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;IACzC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;MAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;MAClB,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;MACvC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,OAAO,QAAQ,CAAC;OACjB;MACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;UAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;UAClB,OAAO,QAAQ,CAAC;SACjB;OACF;KACF;GACF;;;EAGD,SAAS,YAAY,CAAC,GAAG,EAAE;IACzB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE;MAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACjE;IACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC;GAC7B;;;;;EAKD,SAAS,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE;IACxB,IAAI,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACvB,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;GACrC;;;;EAID,SAAS,OAAO,CAAC,GAAG,EAAE;IACpB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;IACvC,OAAO,CAAC,CAAC;GACV;;;;;;EAMD,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;MAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;MACnC,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;UAC9B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;UAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;UACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;UACvC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;UACvC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACvB;OACF;MACD,OAAO,CAAC,CAAC;KACV;IACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;GACnD;;;;EAID,SAAS,QAAQ,CAAC,GAAG,EAAE;IACrB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;MACzC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;KACtD;IACD,OAAO,CAAC,CAAC;GACV;;EAED,SAAS,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE;IAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACxC,MAAM;MACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;MACvC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACxC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;GAClD;;EAED,SAAS,SAAS,CAAC,GAAG,EAAE;IACtB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrF,OAAO,CAAC,CAAC;GACV;;;EAGD,SAAS,WAAW,CAAC,GAAG,EAAE;IACxB,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;GACpC;;EAED,SAAS,SAAS,CAAC,GAAG,EAAE;IACtB,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;;;;;;;ECtSlD;;;;;;;;EAQA,IAAI,MAAM,EAAEE,eAAa,EAAE,YAAY,EAAEC,QAAM,EAAEC,MAAI,CAAC;;AAEtDD,UAAM,GAAGF,MAAiB,CAAC;;AAE3BG,QAAI,GAAGC,IAAe,CAAC;;AAEvBH,iBAAa,GAAGI,cAAyB,CAAC,aAAa,CAAC;;;;;;;;;;;EAWxD,OAAc,GAAG,WAAW;IAC1B,IAAI,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;IACzD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;MAC1B,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;MACpB,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;MACvB,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;MACxB,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,MAAM,KAAK,CAAC,CAAC,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;OACvE;MACD,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAChE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;OAC1E;KACF,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;;MAEjC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACrE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;OACrB,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACrC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;OACxB,MAAM;QACL,GAAG,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;OACjE;;MAED,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;QACtC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;OACzB,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACrC,IAAI,OAAO,EAAE;UACX,GAAG,GAAG,oEAAoE,CAAC;SAC5E,MAAM;UACL,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;SACxB;OACF,MAAM;QACL,GAAG,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;OACjE;MACD,IAAI,GAAG,EAAE;QACP,IAAI,CAAC,QAAQ,EAAE;UACb,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;SAClB,MAAM;UACL,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;SAC7B;OACF;KACF,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;MACjC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;QACtC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;OACzB,MAAM;QACL,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;OACxB;KACF;IACD,IAAI,OAAO,IAAI,IAAI,EAAE;MACnB,OAAO,GAAG,EAAE,CAAC;KACd;IACD,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,IAAI,IAAI,IAAI,EAAE;MAChB,OAAO,CAAC,QAAQ,CAAC,WAAW;QAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;OACrB,CAAC,CAAC;KACJ;IACD,IAAI,QAAQ,EAAE;MACZ,MAAM,GAAG,KAAK,CAAC;MACf,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;MACnC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW;QAC/B,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE;UAC5B,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;WAC3C,MAAM;YACL,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;WAClC;SACF;QACD,OAAO,OAAO,CAAC;OAChB,CAAC,CAAC;MACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,GAAG,EAAE;QAC/B,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;OACtB,CAAC,CAAC;MACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW;QAC1B,IAAI,CAAC,MAAM,EAAE;UACX,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC/B;OACF,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;GACf,CAAC;;;;;EAKF,MAAM,GAAG,SAAS,OAAO,GAAG,EAAE,EAAE;IAC9B,IAAI,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;;IAE9I,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IAClB,KAAK,CAAC,IAAI,OAAO,EAAE;MACjB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACrB;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC/BH,QAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE;MAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IACD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE;MACjD,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;KACzD;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE;MAC5C,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;KACvB;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;MACxD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;KACzB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE;MACxC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;KACnB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE;MACzC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;KACpB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE;MAC1C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;KACtB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE;MAC1C,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;KACpB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE;MAC1C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;KACvB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE;MACvC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;KACpB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE;MACxC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;KACrB;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE;MACxC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;KACrB;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE;MACnC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;KAC7C;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE;MACxC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;KACrB;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE;MACxC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;KACvD;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE;MAC7C,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE;MACnC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;QACvC,IAAI,CAAC,CAAC;QACN,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACb,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;QACD,OAAO,KAAK,CAAC;OACd,CAAC;KACH;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE;MACzC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,IAAI,IAAI,EAAE;MACtD,MAAM,CAAC,kBAAkB,GAAG,KAAK,CAAC;KACnC;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE;MACpD,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,IAAI,EAAE;MAC1D,MAAM,CAAC,sBAAsB,GAAG,MAAM,CAAC;KACxC;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,4BAA4B,IAAI,IAAI,EAAE;MAChE,MAAM,CAAC,4BAA4B,GAAG,KAAK,CAAC;KAC7C;IACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,qBAAqB,IAAI,IAAI,EAAE;MACzD,MAAM,CAAC,qBAAqB,GAAG,KAAK,CAAC;KACtC;;;IAGD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;;IAE1B,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC;;;IAGzC,IAAI,CAAC,QAAQ,GAAG,SAAS,KAAK,EAAE;MAC9B,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC7C,CAAC;;IAEF,IAAI,CAAC,CAAC,GAAG;MACP,OAAO,EAAE,IAAID,eAAa,EAAE;MAC5B,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,KAAK;MACjB,KAAK,EAAE,IAAI;MACX,QAAQ,EAAE,IAAI;MACd,YAAY,EAAE,CAAC;MACf,IAAI,EAAE,EAAE;MACR,MAAM,EAAE,EAAE;MACV,MAAM,EAAE,EAAE;MACV,GAAG,EAAE,EAAE;MACP,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QACpG,OAAO,CAAC,CAAC,MAAM,CAAC;OACjB,CAAC,CAAC,GAAG,KAAK,CAAC;MACZ,YAAY,EAAE,KAAK;KACpB,CAAC;IACF,OAAO,IAAI,CAAC;GACb,CAAC;;;;;;;;;;AAUFE,QAAI,CAAC,QAAQ,CAAC,MAAM,EAAED,QAAM,CAAC,SAAS,CAAC,CAAC;;;;EAIxC,YAAqB,GAAG,MAAM,CAAC;;;;;;;;;;;;EAY/B,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAChE,OAAO,YAAY,CAAC,MAAM;MACxB,IAAI,GAAG,CAAC;MACR,IAAI,KAAK,YAAY,MAAM,EAAE;QAC3B,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;OACrC;MACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;MACjC,IAAI,GAAG,EAAE;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;OAChC;MACD,OAAO,QAAQ,EAAE,CAAC;KACnB,CAAC,CAAC;GACJ,CAAC;;EAEF,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,QAAQ,EAAE;IAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;GACjC,CAAC;;EAEF,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,WAAW;IACpC,IAAI,GAAG,CAAC;IACR,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,GAAG,EAAE;MACP,OAAO,GAAG,CAAC;KACZ;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;MAClB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;MAC1E,OAAO,GAAG,CAAC;KACZ;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACjC;GACF,CAAC;;EAEF,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;IACvC,IAAI,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,CAAC;IAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;MAC5E,OAAO;KACR;IACD,MAAM,GAAG,IAAI,CAAC;IACd,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;MACjC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;MAC5B,OAAO;KACR,MAAM,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;MACrD,eAAe,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE;QACnC,IAAI,OAAO,EAAE,GAAG,CAAC;QACjB,IAAI;UACF,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;UAC9B,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACxB,CAAC,OAAO,KAAK,EAAE;UACd,GAAG,GAAG,KAAK,CAAC;UACZ,OAAO,CAAC,GAAG,CAAC,CAAC;SACd;OACF,CAAC;MACF,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;MAC7D,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAC;OACZ;MACD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;MAC/B,OAAO;KACR;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MAC1C,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KACvF;;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;MACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;;MAE7C,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;OAC3B,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;;QAEvC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClF,OAAO,GAAG,CAAC;OACZ,MAAM;QACL,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,0CAA0C,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC;OACZ;KACF,MAAM;MACL,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;MAChC,aAAa,GAAG,EAAE,CAAC;MACnB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;QACnD,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;UACrC,SAAS;SACV;QACD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;OAChD;MACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACxB,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;OAC/D,MAAM;QACL,MAAM,GAAG,aAAa,CAAC;OACxB;KACF,MAAM;MACL,MAAM,GAAG,IAAI,CAAC;KACf;IACD,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;MAClC,OAAO;KACR;IACD,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;MAChC,OAAO;KACR;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;MACpB,IAAI,CAAC,IAAI,CAAC;QACR,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM;QAClB,GAAG,EAAE,MAAM;OACZ,CAAC,CAAC;MACH,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;KACpB,MAAM;MACL,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;MAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAC7B;IACD,OAAO,IAAI,CAAC;GACb,CAAC;;EAEF,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,KAAK,EAAE,GAAG,EAAE;IAC9C,IAAI,qBAAqB,EAAE,yBAAyB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC;IAC7U,MAAM,GAAG,CAAC,KAAK,KAAK;MAClB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;OAC3B,MAAM;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;OAChC;KACF,CAAC;IACF,QAAQ,GAAG,CAAC,KAAK,KAAK;MACpB,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;OAC7B,MAAM;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;OAClC;KACF,CAAC;IACF,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK;MAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACtB,OAAO,KAAK,CAAC;OACd;MACD,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;QAC3B,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;OACzC;MACD,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;OAC5B;MACD,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;OAC5B;MACD,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;OACpC;;MAED,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;QAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;OAChD;MACD,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;QAC1B,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;OAC5G;MACD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;OAC1C;MACD,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACjB,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;OACzB,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC1B,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;OAC3B,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACjC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;OAChD;MACD,OAAO,KAAK,CAAC;KACd,CAAC;IACF,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAChD,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAChD,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;IAC3B,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACjB,CAAC,GAAG,CAAC,CAAC;IACN,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;MAEtD,CAAC,EAAE,CAAC;KACL;IACD,OAAO,CAAC,GAAG,CAAC,EAAE;;MAEZ,IAAI,CAAC,GAAG,EAAE;QACR,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;;;QAIzC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;UAC1R,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC;;SAEhD,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK;UAC/J,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC;;;SAGvE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC,EAAE;UACnN,MAAM;SACP;OACF;MACD,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;MAC3D,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;MACzD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;OACvB;;MAED,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,EAAE;QACrC,WAAW,GAAG,CAAC,CAAC;QAChB,YAAY,GAAG,IAAI,CAAC;;QAEpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;UACvD,YAAY,GAAG,IAAI,CAAC;UACpB,WAAW,IAAI,CAAC,CAAC;SAClB,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE;UAC9G,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;UAC/B,WAAW,IAAI,CAAC,CAAC;SAClB;QACD,IAAI,YAAY,EAAE;UAChB,IAAI,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YAC/D,YAAY,IAAI,IAAI,CAAC;WACtB;UACD,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;UAC3C,IAAI,CAAC,CAAC,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC;SACjD;OACF;;;MAGD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;;;;QAKtD,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnD,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjD,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE;UACjF,CAAC,EAAE,CAAC;UACJ,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;UACvB,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;UACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;WACnB;UACD,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;;UAErB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;WACvB;UACD,CAAC,EAAE,CAAC;UACJ,SAAS;SACV;OACF;;MAED,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACrD,IAAI,IAAI,CAAC,CAAC,CAAC,oBAAoB,KAAK,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;UAClE,OAAO,IAAI,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;SACzE;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;;;;;;;UAOlB,kBAAkB,GAAG,KAAK,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,MAAM,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;UAClF,yBAAyB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACnG,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;WAC9C,CAAC,CAAC;UACH,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;UACtG,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;UAC9D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,yBAAyB,IAAI,CAAC,qBAAqB,IAAI,CAAC,kBAAkB,EAAE;YACnI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;cACtB,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;cACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;gBAChB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;eACvD;aACF,MAAM;cACL,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChL,OAAO,GAAG,CAAC;eACZ;aACF;WACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,KAAK,kBAAkB,EAAE;YAC1D,CAAC,EAAE,CAAC;YACJ,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACnC,SAAS;WACV,MAAM;YACL,CAAC,EAAE,CAAC;YACJ,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;cAClB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;cAC3C,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,SAAS;WACV;SACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;UACxB,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;UACtB,CAAC,EAAE,CAAC;UACJ,SAAS;SACV,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;UACxD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YACvE,OAAO,GAAG,CAAC;WACZ;SACF;OACF;;MAED,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;QACxF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;OAC1C,CAAC,CAAC;MACH,IAAI,cAAc,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;OACd;;MAED,aAAa,GAAG,KAAK,CAAC;MACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QAC1I,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;OAC1B,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,cAAc,EAAE;QAC9C,aAAa,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC;OAC3B;MACD,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;MACxF,IAAI,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE;QAC/B,IAAI,WAAW,IAAI,cAAc,EAAE;UACjC,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,KAAK,CAAC;SACrC,MAAM;UACL,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE;YACjC,CAAC,EAAE,CAAC;YACJ,SAAS;WACV,MAAM;YACL,OAAO,IAAI,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;WACzE;SACF;OACF;MACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,IAAI,cAAc,CAAC,EAAE;QAC5E,IAAI,cAAc,EAAE;UAClB,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;YACnE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;WAC1C,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACd;;QAED,IAAI,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE;UACxE,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAClD,CAAC,IAAI,oBAAoB,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClC,SAAS;WACV;SACF;QACD,IAAI,KAAK,EAAE;UACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC;WAC1E;SACF;QACD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,IAAI,WAAW,EAAE;UACf,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;UACnC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;UAClC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC3B,cAAc,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;WACtB;SACF;QACD,IAAI,cAAc,EAAE;UAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;YACxB,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,GAAG,EAAE;cACP,OAAO,GAAG,CAAC;aACZ;WACF;UACD,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;WAC7B;;UAED,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;UACjB,CAAC,IAAI,oBAAoB,CAAC;UAC1B,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;UAClC,SAAS;SACV;OACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;QACnF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;;UAExB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;QACD,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;UAC7B,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;SACtB;QACD,CAAC,EAAE,CAAC;OACL,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;QAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;UACxB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;QACrB,CAAC,EAAE,CAAC;OACL,MAAM;QACL,CAAC,EAAE,CAAC;OACL;MACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACtH,OAAO,KAAK,CAAC,CAAC,8CAA8C,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;OACjJ;MACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACrH,OAAO,KAAK,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;OAClG;KACF;;IAED,IAAI,GAAG,EAAE;MACP,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,KAAK,EAAE,CAAC;OACd;MACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;QACxB,IAAI,KAAK,EAAE;UACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC;WAC1E;SACF;QACD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;OACrB;MACD,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QAChG,OAAO,KAAK,CAAC,CAAC,gCAAgC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;OAC3F;MACD,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QAC5D,OAAO,KAAK,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;OAClG;KACF;;IAED,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;GACb,CAAC;;EAEF,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE;IACrC,IAAI,GAAG,CAAC;IACR,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;MACvC,OAAO,GAAG,CAAC;KACZ,MAAM;MACL,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;QACxB,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;OACxB;KACF;IACD,OAAO,IAAI,CAAC;GACb,CAAC;;;EAGF,YAAY,GAAG,SAAS,IAAI,EAAE;IAC5B,IAAI,KAAK,CAAC;IACV,KAAK,GAAG,IAAI,CAAC;IACb,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;MACpE,OAAO,KAAK,CAAC;KACd,MAAM;MACL,OAAO,CAAC,WAAW;QACjB,OAAO,CAAC,KAAK,EAAE;UACb,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE;YACxE,MAAM;WACP;SACF;QACD,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;OAC9C,GAAG,CAAC;KACN;GACF,CAAC;;;ECzsBK,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;MAChCJ,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,qBAAqB;MACrCA,uBAAe,CAAC,sBAAsB;MACtCA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,sBAAsB;MACtCA,uBAAe,CAAC,gCAAgC;MAChDA,uBAAe,CAAC,kCAAkC;MAClDA,uBAAe,CAAC,uBAAuB;MACvCA,uBAAe,CAAC,uBAAuB;MACvCA,uBAAe,CAAC,sBAAsB;MACtCA,uBAAe,CAAC,kBAAkB;MAClCA,uBAAe,CAAC,kBAAkB;MAClCA,uBAAe,CAAC,eAAe;GAChC,CAAC,CAAC;AAEH,EAAO,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;MAClCA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,oCAAoC;MACpDA,uBAAe,CAAC,eAAe;MAC/BA,uBAAe,CAAC,gBAAgB;MAChCA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,qBAAqB;MACrCA,uBAAe,CAAC,sBAAsB;MACtCA,uBAAe,CAAC,mBAAmB;MACnCA,uBAAe,CAAC,aAAa;MAC7BA,uBAAe,CAAC,YAAY;MAC5BA,uBAAe,CAAC,mCAAmC;MACnDA,uBAAe,CAAC,sCAAsC;MACtDA,uBAAe,CAAC,+BAA+B;MAC/CA,uBAAe,CAAC,8BAA8B;MAC9CA,uBAAe,CAAC,8BAA8B;MAC9CA,uBAAe,CAAC,aAAa;MAC7BA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,wBAAwB;MACxCA,uBAAe,CAAC,WAAW;MAC3BA,uBAAe,CAAC,WAAW;MAC3BA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,UAAU;MAC1BA,uBAAe,CAAC,gBAAgB;MAChCA,uBAAe,CAAC,SAAS;MACzBA,uBAAe,CAAC,eAAe;MAC/BA,uBAAe,CAAC,YAAY;MAC5BA,uBAAe,CAAC,aAAa;MAC7BA,uBAAe,CAAC,yBAAyB;MACzCA,uBAAe,CAAC,gBAAgB;MAChCA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,cAAc;MAC9BA,uBAAe,CAAC,eAAe;GAChC,CAAC,CAAC;AAEH,EAAO,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;MACjCA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,6BAA6B;MAC7CA,uBAAe,CAAC,6BAA6B;MAC7CA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,kCAAkC;MAClDA,uBAAe,CAAC,wBAAwB;MACxCA,uBAAe,CAAC,wBAAwB;MACxCA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,uBAAuB;MACvCA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,yBAAyB;MACzCA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,0BAA0B;MAC1CA,uBAAe,CAAC,cAAc;MAC9BA,uBAAe,CAAC,qBAAqB;MACrCA,uBAAe,CAAC,gBAAgB;MAChCA,uBAAe,CAAC,6BAA6B;MAC7CA,uBAAe,CAAC,oBAAoB;MACpCA,uBAAe,CAAC,gBAAgB;GACjC,CAAC,CAAC;;ECxEH,MAAM,UAAU,GAAG;MACjB,UAAU,EAAE,uBAAuB;MACnC,SAAS,EAAE,qBAAqB;MAChC,YAAY,EAAE,wBAAwB;MACtC,UAAU,EAAE,6BAA6B;MACzC,WAAW,EAAE,uBAAuB;MACpC,QAAQ,EAAE,kCAAkC;MAC5C,aAAa,EAAE,yBAAyB;MACxC,YAAY,EAAE,wBAAwB;MACtC,gBAAgB,EAAE,4BAA4B;MAC9C,mBAAmB,EAAE,qCAAqC;MAC1D,oBAAoB,EAAE,+BAA+B;MACrD,iBAAiB,EAAE,qBAAqB;MACxC,YAAY,EAAE,+BAA+B;MAC7C,eAAe,EAAE,2BAA2B;MAC5C,cAAc,EAAE,0CAA0C;MAC1D,UAAU,EAAE,qCAAqC;MACjD,cAAc,EAAE,0BAA0B;MAC1C,cAAc,EAAE,uCAAuC;MACvD,UAAU,EAAE,kCAAkC;MAC9C,kBAAkB,EAAE,+BAA+B;MACnD,WAAW,EAAE,+BAA+B;GAC7C,CAAC;EAEF,MAAM,gBAAgB,GAAG,EAAE,CAAC;EAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,oBAAyB,GAAW;MAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;MAE9B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;UAClC,KAAK,CAAC,GAAG,EAAE,CAAC;OACb;MAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;MAChD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;MAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC;MAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;MAE/C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM;UACrC,QAAQ;UACR,IAAI;OACL,CAAC,CAAC,CAAC;EACN,CAAC;EAED,mBAAmB,KAAe;MAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAC9B,MAAM,OAAO,GAAG;UACd,SAAS,EAAE,IAAI;UACf,IAAI,EAAE,CAAC;UACP,kBAAkB,EAAE,IAAI;OACzB,CAAC;MAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;UACjCQ,GAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAQ,EAAE,MAAgB;cAC9C,IAAI,GAAG,EAAE;kBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;eACpB;cAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;cAElC,MAAM,IAAI,GAAG,IAAI;mBACd,GAAG,CAAC,CAAC,GAAG;kBACP,MAAM,GAAG,GAAG,EAAkB,CAAC;kBAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;sBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAqB,CAAC;sBACpD,IAAI,KAAK,GAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;sBAExB,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;0BAC1B,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;uBAC7B;sBAED,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;0BAC5B,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;uBAC3B;sBAED,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;0BAC3B,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC;uBACvB;sBAED,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;mBACrB;kBAED,OAAO,GAAG,CAAC;eACZ,CAAC,CAAC;cAEL,OAAO,CAAC,IAAI,CAAC,CAAC;WACf,CAAC,CAAC;OACJ,CAAC,CAAC;EACL,CAAC;AAAA,EAED,mBAAmB,MAAgB,EAAE,KAAa;MAChD,IAAI,KAAK,CAAC;MAEV,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;UACtB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;UAEzB,IAAI,KAAK,EAAE;cACT,MAAM;WACP;OACF;MAED,IAAI,CAAC,KAAK,EAAE;UACV,OAAO,KAAK,CAAC;OACd;MAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;EAClB,CAAC;AAAA,EAED,uBAAuB,OAAiB,EAAE,OAAiB;MACzD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;MAEtC,OAAO;UACL,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;UAClD,OAAO,EAAE;cACP,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;cACzC,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;cACzD,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;cACrD,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;WAC7D;UACD,MAAM,EAAE;cACN,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;cAC9C,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;WAC7D;UACD,QAAQ,EAAE;cACR,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC;cAChD,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;cAC9C,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC;WACvD;UACD,OAAO,EAAE;cACP,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC;cAC3E,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC;cACpF,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;cACvE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;cAC7D,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC;WACtD;UACD,gBAAgB,EAAE;cAChB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;cACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;WACjD;UACD,MAAM,EAAE;cACN,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;WACrD;UACD,gBAAgB,EAAE;cAChB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;cACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;WACjD;UACD,MAAM,EAAE;cACN,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC;WAC7D;OACF,CAAC;EACJ,CAAC;;;;;;;;;;;;;"}
\ No newline at end of file
+{"version":3,"file":"flight-log-parser.js","sources":["../src/types.ts","../src/field-types.ts","../src/parser.ts"],"sourcesContent":["export enum FlightLogHeader {\n DateTime = 'Date/Time (UTC)',\n ElapsedTime = 'Elapsed Time (sec)',\n Info = 'Info',\n DeviceLatitude = 'Device Latitude (Degrees)',\n DeviceLongitude = 'Device Longitude (Degrees)',\n DeviceLocationLastUpdated = 'Device Location Last Updated (ms)',\n AircraftBatteryPowerPercent = 'Aircraft Battery Power (%)',\n AircraftBatteryCharge = 'Aircraft Battery Charge (mAh)',\n AircraftBatteryCurrent = 'Aircraft Battery Current (mA)',\n AircraftBatteryVoltage = 'Aircraft Battery Voltage (mV)',\n AircraftBatteryTemperature = 'Aircraft Battery Temperature (Fahrenheit)',\n AircraftBatteryLastUpdated = 'Aircraft Battery Last Updated (ms)',\n AircraftBatteryCell1Voltage = 'Aircraft Battery Cell 1 Voltage',\n AircraftBatteryCell2Voltage = 'Aircraft Battery Cell 2 Voltage',\n AircraftBatteryCell3Voltage = 'Aircraft Battery Cell 3 Voltage',\n AircraftBatteryCell4Voltage = 'Aircraft Battery Cell 4 Voltage',\n AircraftBatteryCellVoltageLastUpdated = 'Aircraft Battery Cell Voltage Last Updated (ms)',\n AircraftLatitude = 'Aircraft Latitude (Degrees)',\n AircraftLongitude = 'Aircraft Longitude (Degrees)',\n AircraftSpeed = 'Aircraft Speed (mph)',\n AircraftBarometricAltitude = 'Aircraft Barometric Altitude (ft)',\n AircraftHeading = 'Aircraft Heading (Degrees)',\n AircraftVelocityX = 'Aircraft Vel - X (mph)',\n AircraftVelocityY = 'Aircraft Vel - Y (mph)',\n AircraftVelocityZ = 'Aircraft Vel - Z (mph)',\n AircraftPitch = 'Aircraft Pitch (Degrees)',\n AircraftRoll = 'Aircraft Roll (Degrees)',\n AircraftSatellites = 'Aircraft Satellites',\n AircraftMotorsOn = 'Aircraft Motors On',\n AircraftFlying = 'Aircraft Flying',\n AircraftFlightMode = 'Aircraft Flight Mode',\n AircraftFlightModeValue = 'Aircraft Flight Mode Value',\n AircraftIMUPreheating = 'Aircraft IMU Preheating',\n AircraftUltrasonicOn = 'Aircraft Ultrasonic On',\n AircraftUltrasonicAltitude = 'Aircraft Ultrasonic Altitude (ft)',\n AircraftVisionOn = 'Aircraft Vision On',\n AircraftGPSSignal = 'Aircraft GPS Signal',\n AircraftGPSSignalValue = 'Aircraft GPS Signal Value',\n AircraftNoFly = 'Aircraft No-fly',\n AircraftNoFlyValue = 'Aircraft No-fly Value',\n AircraftNoFlyLatitude = 'Aircraft No-fly Latitude (Degrees)',\n AircraftNoFlyLongitude = 'Aircraft No-fly Longitude (Degrees)',\n AircraftNoFlyRadius = 'Aircraft No-fly Radius (ft)',\n HomeLatitude = 'Home Latitude (Degrees)',\n HomeLongitude = 'Home Longitude (Degrees)',\n AircraftSmartGoHomeFlightTimeRemaining = 'Aircraft Smart Go-home Flight Time Remaining (sec)',\n AircraftSmartGoHomeFlightReturnTime = 'Aircraft Smart Go-home Flight Return Time (sec)',\n AircraftSmartGoHomeLandingTime = 'Aircraft Smart Go-home Landing Time (sec)',\n AircraftSmartGoHomeReturnPower = 'Aircraft Smart Go-home Return Power (%)',\n AircraftSmartGoHomeLandingPower = 'Aircraft Smart Go-home Landing Power (%)',\n AircraftSmartGoHomeRadius = 'Aircraft Smart Go-home Radius (ft)',\n AircraftSmartGoHomeCountdown = 'Aircraft Smart Go-home Countdown (sec)',\n AircraftSmartGoHomeRequesting = 'Aircraft Smart Go-home Requesting',\n AircraftSystemStateLastUpdated = 'Aircraft System State Last Updated (ms)',\n GimbalPitch = 'Gimbal Pitch (Degrees)',\n GimbalRoll = 'Gimbal Roll (Degrees)',\n GimbalYaw = 'Gimbal Yaw (Degrees)',\n GimbalMode = 'Gimbal Mode',\n GimbalModeValue = 'Gimbal Mode Value',\n GimbalPitchAtStop = 'Gimbal Pitch at Stop',\n GimbalRollAtStop = 'Gimbal Roll at Stop',\n GimbalYawAtStop = 'Gimbal Yaw at Stop',\n GimbalStatusLastUpdated = 'Gimbal Status Last Updated (ms)',\n LandingGearIsMovable = 'Landing Gear is Movable',\n LandingGearStatus = 'Landing Gear Status',\n LandingGearStatusValue = 'Landing Gear Status Value',\n LandingGearMode = 'Landing Gear Mode',\n LandingGearModeValue = 'Landing Gear Mode Value',\n LandingGearLastUpdated = 'Landing Gear Last Updated (ms)',\n RCState = 'RC State',\n RCStateValue = 'RC State Value',\n RCLeftHorizontal = 'RC Left Horizontal',\n RCLeftVertical = 'RC Left Vertical',\n RCRightHorizontal = 'RC Right Horizontal',\n RCRightVertical = 'RC Right Vertical',\n RCLeftWheel = 'RC Left Wheel',\n RCRightWheel = 'RC Right Wheel',\n RCLandingGear = 'RC Landing Gear',\n RCLandingGearValue = 'RC Landing Gear Value',\n RCGoHome = 'RC Go Home',\n RCRecord = 'RC Record ',\n RCShutter = 'RC Shutter',\n RCPlayback = 'RC Playback',\n RCPause = 'RC Pause',\n RCCustom1 = 'RC Custom 1',\n RCCustom2 = 'RC Custom 2',\n RCStateLastUpdated = 'RC State Last Updated (ms)',\n RCBatteryPercentRemaining = 'RC Battery (%)',\n RCBatteryStateLastUpdated = 'RC Battery State Last Updated (ms)',\n RCSattelites = 'RC Sattelites',\n RCHorizontalAccuaracy = 'RC Horizontal Accuaracy (ft)',\n RCLatitude = 'RC Latitude (Degrees)',\n RCLongitude = 'RC Longitude (Degrees)',\n RCGSPDataIsValid = 'RC GSP Data is Valid',\n RCGPSStateLastUpdated = 'RC GPS State Last Updated (ms)',\n RCSignal1 = 'RC Signal 1',\n RCSignal2 = 'RC Signal 2',\n RCSignalLastUpdated = 'RC Signal Last Updated (ms)',\n LBSignal1 = 'LB Signal 1',\n LBSignal2 = 'LB Signal 2',\n LBSignalLastUpdated = 'LB Signal Last Updated (ms)',\n AircraftCameraMode = 'Aircraft Camera Mode',\n AircraftCameraModeValue = 'Aircraft Camera Mode Value',\n AircraftCameraOverheated = 'Aircraft Camera Overheated',\n AircraftCameraSensorError = 'Aircraft Camera Sensor Error',\n AircraftCameraRecording = 'Aircraft Camera Recording',\n AircraftCameraRawCapture = 'Aircraft Camera Raw Capture',\n AircraftCameraIntervalCapture = 'Aircraft Camera Interval Capture',\n AircraftCameraBurstCapture = 'Aircraft Camera Burst Capture',\n AircraftCameraSingleCapture = 'Aircraft Camera Single Capture',\n AircraftCameraStoringPhoto = 'Aircraft Camera Storing Photo',\n AircraftCameraStateLastUpdated = 'Aircraft Camera State Last Updated (ms)',\n AircraftCameraSDCardExists = 'Aircraft Camera SD Card Exists',\n AircraftCameraSDCardRemainingPercent = 'Aircraft Camera SD Card Remaining (%)',\n AircraftCameraSDCardStateLastUpdated = 'Aircraft Camera SD Card State Last Updated (ms)',\n AircraftCameraChangeableLensSupported = 'Aircraft Camera Changeable Lens Supported',\n AircraftCameraLensInstalled = 'Aircraft Camera Lens Installed',\n AircraftCameraLensType = 'Aircraft Camera Lens Type',\n AircraftCameraLensAFEnabled = 'Aircraft Camera Lens AF Enabled',\n AircraftCameraLensFocusMode = 'Aircraft Camera Lens Focus Mode',\n AircraftCameraLensFocusModeValue = 'Aircraft Camera Lens Focus Mode Value',\n AircraftCameraLensFocusStatus = 'Aircraft Camera Lens Focus Status',\n AircraftCameraLensFocusStatusValue = 'Aircraft Camera Lens Focus Status Value',\n AircraftCameraLensMFAssistant = 'Aircraft Camera Lens MF Assistant',\n AircraftCameraLensAFAssistant = 'Aircraft Camera Lens AF Assistant',\n AircraftCameraLensAssistantWorking = 'Aircraft Camera Lens Assistant Working',\n AircraftCameraLensStateLastUpdated = 'Aircraft Camera Lens State Last Updated (ms)',\n DeviceToAircraftDistance = 'Device > Aircraft Distance - XY (ft)',\n}\n\nexport type FlightLogRow = {\n [prop in FlightLogHeader]: any // because csv\n};\n\nexport type FlightLogMetaData = {\n appVersion: string;\n session: {\n id: string;\n start: Date;\n end: Date;\n elapsed: number;\n };\n device: {\n model: string;\n os: string;\n };\n aircraft: {\n model: string;\n name: string;\n firmware: string;\n };\n battery: {\n chargeVolume: number;\n remainingLifePercent: number;\n discharges: number;\n cells: number;\n firmware: string;\n serialNumber: string;\n };\n flightController: {\n serialNumber: string;\n firmware: string;\n };\n gimbal: {\n firmware: string;\n };\n remoteController: {\n serialNumber: string;\n firmware: string;\n };\n camera: {\n serialNumber: string;\n };\n};\n\nexport type FlightLog = {\n metaData: FlightLogMetaData;\n rows: FlightLogRow[];\n};\n\n// based off of types in ios/android SDK FlightMode enums\nexport const FLIGHT_MODE_MAPPING = {\n 0: 'Manual',\n 1: 'Attitude',\n 2: 'Attitude Course Lock',\n 3: 'Attitude Hover',\n 4: 'Hover',\n 5: 'GPS Blake',\n 6: 'GPS Attitude',\n 7: 'GPS Course Lock',\n 8: 'GPS Home',\n 9: 'GPS Hotpoint',\n 10: 'Assisted Takeoff',\n 11: 'Auto Takeoff',\n 12: 'Auto Landing',\n 13: 'Attitude Landing',\n 14: 'GPS Waypoint',\n 15: 'Go Home',\n 16: 'Click Go',\n 17: 'Joystick',\n 18: 'Attitude Limited',\n 19: 'Cinematic',\n 23: 'Attitude Limited',\n 24: 'Draw',\n 25: 'GPS Follow Me',\n 26: 'ActiveTrack',\n 27: 'TapFly',\n 28: 'Pano',\n 29: 'Farming',\n 30: 'FPV',\n 31: 'GPS Sport',\n 32: 'GPS Novice',\n 33: 'Confirm Landing',\n 35: 'Terrain Follow',\n 36: 'Palm Control',\n 37: 'Quick Shot',\n 38: 'Tripod',\n 39: 'ActiveTrack Spotlight',\n 41: 'Motors Just Started',\n 43: 'GPS Gentle',\n 255: 'Unknown',\n};\n","import { FlightLogHeader } from './types';\n\nexport const INT_FIELDS = new Set([\n FlightLogHeader.AircraftBatteryCell1Voltage,\n FlightLogHeader.AircraftBatteryCell2Voltage,\n FlightLogHeader.AircraftBatteryCell3Voltage,\n FlightLogHeader.AircraftBatteryCell4Voltage,\n FlightLogHeader.AircraftBatteryCharge,\n FlightLogHeader.AircraftBatteryCurrent,\n FlightLogHeader.AircraftBatteryTemperature,\n FlightLogHeader.AircraftBatteryVoltage,\n FlightLogHeader.AircraftCameraLensFocusModeValue,\n FlightLogHeader.AircraftCameraLensFocusStatusValue,\n FlightLogHeader.AircraftCameraModeValue,\n FlightLogHeader.AircraftFlightModeValue,\n FlightLogHeader.AircraftGPSSignalValue,\n FlightLogHeader.AircraftNoFlyValue,\n FlightLogHeader.AircraftSatellites,\n FlightLogHeader.GimbalModeValue,\n FlightLogHeader.AircraftSmartGoHomeRadius,\n FlightLogHeader.AircraftSmartGoHomeCountdown,\n FlightLogHeader.AircraftVelocityX,\n FlightLogHeader.AircraftVelocityY,\n FlightLogHeader.AircraftVelocityZ,\n FlightLogHeader.RCHorizontalAccuaracy,\n FlightLogHeader.RCLatitude,\n FlightLogHeader.RCLongitude,\n FlightLogHeader.LandingGearStatusValue,\n FlightLogHeader.LandingGearModeValue,\n FlightLogHeader.RCStateValue,\n FlightLogHeader.RCLandingGearValue,\n]);\n\nexport const FLOAT_FIELDS = new Set([\n FlightLogHeader.AircraftBarometricAltitude,\n FlightLogHeader.AircraftBatteryPowerPercent,\n FlightLogHeader.AircraftCameraSDCardRemainingPercent,\n FlightLogHeader.AircraftHeading,\n FlightLogHeader.AircraftLatitude,\n FlightLogHeader.AircraftLongitude,\n FlightLogHeader.AircraftNoFlyLatitude,\n FlightLogHeader.AircraftNoFlyLongitude,\n FlightLogHeader.AircraftNoFlyRadius,\n FlightLogHeader.AircraftPitch,\n FlightLogHeader.AircraftRoll,\n FlightLogHeader.AircraftSmartGoHomeFlightReturnTime,\n FlightLogHeader.AircraftSmartGoHomeFlightTimeRemaining,\n FlightLogHeader.AircraftSmartGoHomeLandingPower,\n FlightLogHeader.AircraftSmartGoHomeLandingTime,\n FlightLogHeader.AircraftSmartGoHomeReturnPower,\n FlightLogHeader.AircraftSpeed,\n FlightLogHeader.AircraftUltrasonicAltitude,\n FlightLogHeader.DeviceToAircraftDistance,\n FlightLogHeader.ElapsedTime,\n FlightLogHeader.GimbalPitch,\n FlightLogHeader.GimbalPitchAtStop,\n FlightLogHeader.GimbalRoll,\n FlightLogHeader.GimbalRollAtStop,\n FlightLogHeader.GimbalYaw,\n FlightLogHeader.GimbalYawAtStop,\n FlightLogHeader.HomeLatitude,\n FlightLogHeader.HomeLongitude,\n FlightLogHeader.RCBatteryPercentRemaining,\n FlightLogHeader.RCLeftHorizontal,\n FlightLogHeader.RCRightHorizontal,\n FlightLogHeader.RCLeftVertical,\n FlightLogHeader.RCRightVertical,\n]);\n\nexport const BOOL_FIELDS = new Set([\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraIntervalCapture,\n FlightLogHeader.AircraftCameraLensAFAssistant,\n FlightLogHeader.AircraftCameraLensAFEnabled,\n FlightLogHeader.AircraftCameraLensAssistantWorking,\n FlightLogHeader.AircraftCameraOverheated,\n FlightLogHeader.AircraftCameraRawCapture,\n FlightLogHeader.AircraftCameraBurstCapture,\n FlightLogHeader.AircraftCameraRecording,\n FlightLogHeader.AircraftCameraSDCardExists,\n FlightLogHeader.AircraftCameraSensorError,\n FlightLogHeader.AircraftCameraSingleCapture,\n FlightLogHeader.AircraftCameraStoringPhoto,\n FlightLogHeader.AircraftFlying,\n FlightLogHeader.AircraftIMUPreheating,\n FlightLogHeader.AircraftMotorsOn,\n FlightLogHeader.AircraftSmartGoHomeRequesting,\n FlightLogHeader.AircraftUltrasonicOn,\n FlightLogHeader.AircraftVisionOn,\n FlightLogHeader.LandingGearIsMovable,\n FlightLogHeader.RCGoHome,\n FlightLogHeader.RCRecord,\n FlightLogHeader.RCShutter,\n FlightLogHeader.RCPlayback,\n FlightLogHeader.RCPause,\n FlightLogHeader.RCCustom1,\n FlightLogHeader.RCCustom2,\n FlightLogHeader.RCSattelites,\n FlightLogHeader.RCGSPDataIsValid,\n FlightLogHeader.RCLeftHorizontal,\n FlightLogHeader.RCRightHorizontal,\n FlightLogHeader.RCLeftVertical,\n FlightLogHeader.RCRightVertical,\n FlightLogHeader.AircraftCameraChangeableLensSupported,\n FlightLogHeader.AircraftCameraLensInstalled,\n FlightLogHeader.AircraftCameraLensMFAssistant,\n]);\n","const parse = require('csv-parse');\n\nimport { FlightLogRow, FlightLogHeader, FlightLogMetaData, FlightLog } from './types';\nimport { INT_FIELDS, BOOL_FIELDS, FLOAT_FIELDS } from './field-types';\n\nconst META_REGEX = {\n appVersion: /^#DroneDeploy\\s+(.+)$/,\n sessionId: /^Session ID\\s+(.+)$/,\n sessionStart: /^Session Start\\s+(.+)$/,\n sessionEnd: /^Date\\/Time \\(UTC\\)\\s+(.+)$/,\n deviceModel: /^Device Model\\s+(.+)$/,\n deviceOS: /^Device Operating System\\s+(.+)$/,\n aircraftModel: /^Aircraft Model\\s+(.+)$/,\n aircraftName: /^Aircraft Name\\s+(.+)$/,\n aircraftFirmware: /^Aircraft Firmware\\s+(.+)$/,\n batteryChargeVolume: /^Full Charge Volume \\(mAh\\)\\s+(.+)$/,\n batteryRemainingLife: /^Remaining Life \\(%\\)\\s+(.+)$/,\n batteryDischarges: /^Discharges\\s+(.+)$/,\n batteryCells: /^Battery Cells Number\\s+(.+)$/,\n batterySerialNumber: /^Battery Serial Number\\s+(.+)$/,\n batteryFirmware: /^Battery Firmware\\s+(.+)$/,\n fcSerialNumber: /^Flight Controller Serial Number\\s+(.+)$/,\n fcFirmware: /^Flight Controller Firmware\\s+(.+)$/,\n gimbalFirmware: /^Gimbal Firmware\\s+(.+)$/,\n rcSerialNumber: /^Remote Control Serial Number\\s+(.+)$/,\n rcFirmware: /^Remote Control Firmware\\s+(.+)$/,\n cameraSerialNumber: /^Camera Serial Number\\s+(.+)$/,\n elapsedTime: /^Elapsed Time \\(sec\\)\\s+(.+)$/,\n};\n\nconst LOG_HEADER_LINES = 27;\nconst LOG_FOOTER_LINES = 3;\n\nexport function parseLog(log: String): Promise {\n const lines = log.split('\\n');\n\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const header = lines.slice(0, LOG_HEADER_LINES);\n const footer = lines.slice(-LOG_FOOTER_LINES);\n const body = lines.slice(LOG_HEADER_LINES, -LOG_FOOTER_LINES);\n const metaData = parseMetaData(header, footer);\n\n return parseBody(body).then((rows) => ({\n metaData,\n rows,\n }));\n}\n\nfunction parseBody(lines: string[]): Promise {\n const text = lines.join('\\n');\n const options = {\n delimiter: '\\t',\n from: 1,\n relax_column_count: true,\n };\n\n return new Promise((resolve, reject) => {\n parse(text, options, (err: any, result: string[]) => {\n if (err) {\n return reject(err);\n }\n\n const [headers, ...rows] = result;\n\n const logs = rows.map((row) => {\n const log = {} as FlightLogRow;\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i].trim() as FlightLogHeader;\n let value: any = row[i];\n\n if (INT_FIELDS.has(header)) {\n value = parseInt(value, 10);\n }\n\n if (FLOAT_FIELDS.has(header)) {\n value = parseFloat(value);\n }\n\n if (BOOL_FIELDS.has(header)) {\n value = value !== '0';\n }\n\n log[header] = value;\n }\n\n return log;\n });\n\n resolve(logs);\n });\n });\n}\n\nfunction findMatch(search: string[], regex: RegExp, isNum?: boolean) {\n let match;\n for (let str of search) {\n match = str.match(regex);\n if (match) {\n break;\n }\n }\n\n if (!match) {\n return isNum ? '0' : 'N/A';\n }\n\n return match[1];\n}\n\nfunction parseMetaData(headers: string[], footers: string[]): FlightLogMetaData {\n const meta = [...headers, ...footers];\n let end = findMatch(meta, META_REGEX.sessionEnd);\n let elapsed = findMatch(meta, META_REGEX.elapsedTime);\n\n // if we weren't able to parse an end date or an elapsed time from our footer (which is really just the last three\n // lines of the log file), it's likely that we have a truncated log file. if that's the case, we can still salvage\n // some valid data by parsing the date and elapsed time from the very last log row in the file, which is what we're\n // doing below. it's pretty brittle, but it's preferred to having an invalid end date and a NaN elapsed time.\n if (end === 'N/A' || elapsed === 'N/A') {\n const lastLine = footers[footers.length - 1];\n const pieces = lastLine.split('\\t');\n\n // if we don't have at least two pieces, i don't know what is in `footer` so i'm just going to leave it alone\n if (pieces.length >= 2) {\n end = pieces[0];\n elapsed = pieces[1];\n }\n }\n\n return {\n appVersion: findMatch(meta, META_REGEX.appVersion),\n session: {\n id: findMatch(meta, META_REGEX.sessionId),\n start: new Date(findMatch(meta, META_REGEX.sessionStart)),\n end: new Date(end),\n elapsed: elapsed === 'N/A' ? 0 : parseFloat(elapsed),\n },\n device: {\n model: findMatch(meta, META_REGEX.deviceModel),\n os: findMatch(meta, META_REGEX.deviceOS).replace(/\\t/g, ' '),\n },\n aircraft: {\n model: findMatch(meta, META_REGEX.aircraftModel),\n name: findMatch(meta, META_REGEX.aircraftName),\n firmware: findMatch(meta, META_REGEX.aircraftFirmware),\n },\n battery: {\n chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume, true), 10),\n remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife, true), 10),\n discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges, true), 10),\n cells: parseInt(findMatch(meta, META_REGEX.batteryCells, true), 10),\n firmware: findMatch(meta, META_REGEX.batteryFirmware),\n serialNumber: findMatch(meta, META_REGEX.batterySerialNumber),\n },\n flightController: {\n serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),\n firmware: findMatch(meta, META_REGEX.fcFirmware),\n },\n gimbal: {\n firmware: findMatch(meta, META_REGEX.gimbalFirmware),\n },\n remoteController: {\n serialNumber: findMatch(meta, META_REGEX.rcSerialNumber),\n firmware: findMatch(meta, META_REGEX.rcFirmware),\n },\n camera: {\n serialNumber: findMatch(meta, META_REGEX.cameraSerialNumber),\n },\n };\n}\n"],"names":["FlightLogHeader"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/lib/cli.js b/dist/lib/cli.js
new file mode 100755
index 0000000..66cd9a0
--- /dev/null
+++ b/dist/lib/cli.js
@@ -0,0 +1,45 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs_1 = require("fs");
+const yargs_1 = require("yargs");
+const parser_1 = require("./parser");
+const types_1 = require("./types");
+const relevantArgs = yargs_1.argv;
+const { fields, file: path } = relevantArgs;
+function showHelp(stream) {
+ stream.write(`
+Usage: flight-log-parser [flags]
+
+Parses DroneDeploy flight logs into JSON.
+
+Options:
+
+ --file Path to the flight log file, required
+
+ --fields Comma delimited string of fields to extract
+ from logs, optional. If not provided, will
+ output all fields. Valid fields can be
+ found in the FlightLogHeader enum located
+ at src/types.ts.
+`);
+}
+if (!path) {
+ showHelp(process.stderr);
+ process.exit(1);
+}
+const content = fs_1.readFileSync(path).toString('utf8');
+parser_1.parseLog(content).then((flightLog) => {
+ if (fields) {
+ const fieldsArray = fields.split(',').map((field) => types_1.FlightLogHeader[field.trim()]);
+ const rows = flightLog.rows;
+ for (const row of flightLog.rows) {
+ for (const key of Object.keys(row)) {
+ if (fieldsArray.indexOf(key) === -1) {
+ delete row[key];
+ }
+ }
+ }
+ }
+ process.stdout.write(JSON.stringify(flightLog) + '\n');
+});
+//# sourceMappingURL=cli.js.map
\ No newline at end of file
diff --git a/dist/lib/cli.js.map b/dist/lib/cli.js.map
new file mode 100644
index 0000000..aff1afe
--- /dev/null
+++ b/dist/lib/cli.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;AAAA,2BAAkC;AAClC,iCAA6B;AAE7B,qCAAoC;AACpC,mCAA0C;AAE1C,MAAM,YAAY,GAAI,YAAgD,CAAC;AACvE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;AAE5C,SAAS,QAAQ,CAAC,MAA0B;IAC1C,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;CAcd,CAAC,CAAC;AACH,CAAC;AAED,IAAI,CAAC,IAAI,EAAE;IACT,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,MAAM,OAAO,GAAG,iBAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpD,iBAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;IACnC,IAAI,MAAM,EAAE;QACV,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,uBAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE;YAChC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAClC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;oBACnC,OAAO,GAAG,CAAC,GAAsB,CAAC,CAAC;iBACpC;aACF;SACF;KACF;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/dist/lib/field-types.js b/dist/lib/field-types.js
index 99191d0..5d96bc4 100644
--- a/dist/lib/field-types.js
+++ b/dist/lib/field-types.js
@@ -18,6 +18,18 @@ exports.INT_FIELDS = new Set([
types_1.FlightLogHeader.AircraftNoFlyValue,
types_1.FlightLogHeader.AircraftSatellites,
types_1.FlightLogHeader.GimbalModeValue,
+ types_1.FlightLogHeader.AircraftSmartGoHomeRadius,
+ types_1.FlightLogHeader.AircraftSmartGoHomeCountdown,
+ types_1.FlightLogHeader.AircraftVelocityX,
+ types_1.FlightLogHeader.AircraftVelocityY,
+ types_1.FlightLogHeader.AircraftVelocityZ,
+ types_1.FlightLogHeader.RCHorizontalAccuaracy,
+ types_1.FlightLogHeader.RCLatitude,
+ types_1.FlightLogHeader.RCLongitude,
+ types_1.FlightLogHeader.LandingGearStatusValue,
+ types_1.FlightLogHeader.LandingGearModeValue,
+ types_1.FlightLogHeader.RCStateValue,
+ types_1.FlightLogHeader.RCLandingGearValue,
]);
exports.FLOAT_FIELDS = new Set([
types_1.FlightLogHeader.AircraftBarometricAltitude,
@@ -74,5 +86,22 @@ exports.BOOL_FIELDS = new Set([
types_1.FlightLogHeader.AircraftSmartGoHomeRequesting,
types_1.FlightLogHeader.AircraftUltrasonicOn,
types_1.FlightLogHeader.AircraftVisionOn,
+ types_1.FlightLogHeader.LandingGearIsMovable,
+ types_1.FlightLogHeader.RCGoHome,
+ types_1.FlightLogHeader.RCRecord,
+ types_1.FlightLogHeader.RCShutter,
+ types_1.FlightLogHeader.RCPlayback,
+ types_1.FlightLogHeader.RCPause,
+ types_1.FlightLogHeader.RCCustom1,
+ types_1.FlightLogHeader.RCCustom2,
+ types_1.FlightLogHeader.RCSattelites,
+ types_1.FlightLogHeader.RCGSPDataIsValid,
+ types_1.FlightLogHeader.RCLeftHorizontal,
+ types_1.FlightLogHeader.RCRightHorizontal,
+ types_1.FlightLogHeader.RCLeftVertical,
+ types_1.FlightLogHeader.RCRightVertical,
+ types_1.FlightLogHeader.AircraftCameraChangeableLensSupported,
+ types_1.FlightLogHeader.AircraftCameraLensInstalled,
+ types_1.FlightLogHeader.AircraftCameraLensMFAssistant,
]);
//# sourceMappingURL=field-types.js.map
\ No newline at end of file
diff --git a/dist/lib/field-types.js.map b/dist/lib/field-types.js.map
index d6c7d01..57fe5f2 100644
--- a/dist/lib/field-types.js.map
+++ b/dist/lib/field-types.js.map
@@ -1 +1 @@
-{"version":3,"file":"field-types.js","sourceRoot":"","sources":["../../src/field-types.ts"],"names":[],"mappings":";;AAAA,mCAA0C;AAE7B,QAAA,UAAU,GAAG,IAAI,GAAG,CAAC;IAChC,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,qBAAqB;IACrC,uBAAe,CAAC,sBAAsB;IACtC,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,sBAAsB;IACtC,uBAAe,CAAC,gCAAgC;IAChD,uBAAe,CAAC,kCAAkC;IAClD,uBAAe,CAAC,uBAAuB;IACvC,uBAAe,CAAC,uBAAuB;IACvC,uBAAe,CAAC,sBAAsB;IACtC,uBAAe,CAAC,kBAAkB;IAClC,uBAAe,CAAC,kBAAkB;IAClC,uBAAe,CAAC,eAAe;CAChC,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,IAAI,GAAG,CAAC;IAClC,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,oCAAoC;IACpD,uBAAe,CAAC,eAAe;IAC/B,uBAAe,CAAC,gBAAgB;IAChC,uBAAe,CAAC,iBAAiB;IACjC,uBAAe,CAAC,qBAAqB;IACrC,uBAAe,CAAC,sBAAsB;IACtC,uBAAe,CAAC,mBAAmB;IACnC,uBAAe,CAAC,aAAa;IAC7B,uBAAe,CAAC,YAAY;IAC5B,uBAAe,CAAC,mCAAmC;IACnD,uBAAe,CAAC,sCAAsC;IACtD,uBAAe,CAAC,+BAA+B;IAC/C,uBAAe,CAAC,8BAA8B;IAC9C,uBAAe,CAAC,8BAA8B;IAC9C,uBAAe,CAAC,aAAa;IAC7B,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,wBAAwB;IACxC,uBAAe,CAAC,WAAW;IAC3B,uBAAe,CAAC,WAAW;IAC3B,uBAAe,CAAC,iBAAiB;IACjC,uBAAe,CAAC,UAAU;IAC1B,uBAAe,CAAC,gBAAgB;IAChC,uBAAe,CAAC,SAAS;IACzB,uBAAe,CAAC,eAAe;IAC/B,uBAAe,CAAC,YAAY;IAC5B,uBAAe,CAAC,aAAa;IAC7B,uBAAe,CAAC,yBAAyB;IACzC,uBAAe,CAAC,gBAAgB;IAChC,uBAAe,CAAC,iBAAiB;IACjC,uBAAe,CAAC,cAAc;IAC9B,uBAAe,CAAC,eAAe;CAChC,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,6BAA6B;IAC7C,uBAAe,CAAC,6BAA6B;IAC7C,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,kCAAkC;IAClD,uBAAe,CAAC,wBAAwB;IACxC,uBAAe,CAAC,wBAAwB;IACxC,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,uBAAuB;IACvC,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,yBAAyB;IACzC,uBAAe,CAAC,2BAA2B;IAC3C,uBAAe,CAAC,0BAA0B;IAC1C,uBAAe,CAAC,cAAc;IAC9B,uBAAe,CAAC,qBAAqB;IACrC,uBAAe,CAAC,gBAAgB;IAChC,uBAAe,CAAC,6BAA6B;IAC7C,uBAAe,CAAC,oBAAoB;IACpC,uBAAe,CAAC,gBAAgB;CACjC,CAAC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"field-types.js","sourceRoot":"","sources":["../../src/field-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/lib/flight-log-parser.js.map b/dist/lib/flight-log-parser.js.map
index 6090e83..d49f57a 100644
--- a/dist/lib/flight-log-parser.js.map
+++ b/dist/lib/flight-log-parser.js.map
@@ -1 +1 @@
-{"version":3,"file":"flight-log-parser.js","sourceRoot":"","sources":["../../src/flight-log-parser.ts"],"names":[],"mappings":";;AAAA,iCAA2G;AAAvF,kCAAA,eAAe,CAAA;AAAmC,sCAAA,mBAAmB,CAAA;AACzF,mCAAoC;AAA3B,4BAAA,QAAQ,CAAA"}
\ No newline at end of file
+{"version":3,"file":"flight-log-parser.js","sourceRoot":"","sources":["../../src/flight-log-parser.ts"],"names":[],"mappings":";;AAAA,iCAMiB;AAJf,kCAAA,eAAe,CAAA;AAGf,sCAAA,mBAAmB,CAAA;AAErB,mCAAoC;AAA3B,4BAAA,QAAQ,CAAA"}
\ No newline at end of file
diff --git a/dist/lib/parser.js b/dist/lib/parser.js
index d9998ab..713a06a 100644
--- a/dist/lib/parser.js
+++ b/dist/lib/parser.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-const csv_parse_1 = require("csv-parse");
+const parse = require('csv-parse');
const field_types_1 = require("./field-types");
const META_REGEX = {
appVersion: /^#DroneDeploy\s+(.+)$/,
@@ -16,6 +16,7 @@ const META_REGEX = {
batteryRemainingLife: /^Remaining Life \(%\)\s+(.+)$/,
batteryDischarges: /^Discharges\s+(.+)$/,
batteryCells: /^Battery Cells Number\s+(.+)$/,
+ batterySerialNumber: /^Battery Serial Number\s+(.+)$/,
batteryFirmware: /^Battery Firmware\s+(.+)$/,
fcSerialNumber: /^Flight Controller Serial Number\s+(.+)$/,
fcFirmware: /^Flight Controller Firmware\s+(.+)$/,
@@ -50,13 +51,12 @@ function parseBody(lines) {
relax_column_count: true,
};
return new Promise((resolve, reject) => {
- csv_parse_1.default(text, options, (err, result) => {
+ parse(text, options, (err, result) => {
if (err) {
return reject(err);
}
const [headers, ...rows] = result;
- const logs = rows
- .map((row) => {
+ const logs = rows.map((row) => {
const log = {};
for (let i = 0; i < headers.length; i++) {
const header = headers[i].trim();
@@ -78,8 +78,7 @@ function parseBody(lines) {
});
});
}
-;
-function findMatch(search, regex) {
+function findMatch(search, regex, isNum) {
let match;
for (let str of search) {
match = str.match(regex);
@@ -88,20 +87,34 @@ function findMatch(search, regex) {
}
}
if (!match) {
- return 'N/A';
+ return isNum ? '0' : 'N/A';
}
return match[1];
}
-;
function parseMetaData(headers, footers) {
const meta = [...headers, ...footers];
+ let end = findMatch(meta, META_REGEX.sessionEnd);
+ let elapsed = findMatch(meta, META_REGEX.elapsedTime);
+ // if we weren't able to parse an end date or an elapsed time from our footer (which is really just the last three
+ // lines of the log file), it's likely that we have a truncated log file. if that's the case, we can still salvage
+ // some valid data by parsing the date and elapsed time from the very last log row in the file, which is what we're
+ // doing below. it's pretty brittle, but it's preferred to having an invalid end date and a NaN elapsed time.
+ if (end === 'N/A' || elapsed === 'N/A') {
+ const lastLine = footers[footers.length - 1];
+ const pieces = lastLine.split('\t');
+ // if we don't have at least two pieces, i don't know what is in `footer` so i'm just going to leave it alone
+ if (pieces.length >= 2) {
+ end = pieces[0];
+ elapsed = pieces[1];
+ }
+ }
return {
appVersion: findMatch(meta, META_REGEX.appVersion),
session: {
id: findMatch(meta, META_REGEX.sessionId),
start: new Date(findMatch(meta, META_REGEX.sessionStart)),
- end: new Date(findMatch(meta, META_REGEX.sessionEnd)),
- elapsed: parseFloat(findMatch(meta, META_REGEX.elapsedTime)),
+ end: new Date(end),
+ elapsed: elapsed === 'N/A' ? 0 : parseFloat(elapsed),
},
device: {
model: findMatch(meta, META_REGEX.deviceModel),
@@ -113,11 +126,12 @@ function parseMetaData(headers, footers) {
firmware: findMatch(meta, META_REGEX.aircraftFirmware),
},
battery: {
- chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume), 10),
- remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife), 10),
- discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges), 10),
- cells: parseInt(findMatch(meta, META_REGEX.batteryCells), 10),
+ chargeVolume: parseInt(findMatch(meta, META_REGEX.batteryChargeVolume, true), 10),
+ remainingLifePercent: parseInt(findMatch(meta, META_REGEX.batteryRemainingLife, true), 10),
+ discharges: parseInt(findMatch(meta, META_REGEX.batteryDischarges, true), 10),
+ cells: parseInt(findMatch(meta, META_REGEX.batteryCells, true), 10),
firmware: findMatch(meta, META_REGEX.batteryFirmware),
+ serialNumber: findMatch(meta, META_REGEX.batterySerialNumber),
},
flightController: {
serialNumber: findMatch(meta, META_REGEX.fcSerialNumber),
@@ -135,5 +149,4 @@ function parseMetaData(headers, footers) {
},
};
}
-;
//# sourceMappingURL=parser.js.map
\ No newline at end of file
diff --git a/dist/lib/parser.js.map b/dist/lib/parser.js.map
index bd7d298..cc006a5 100644
--- a/dist/lib/parser.js.map
+++ b/dist/lib/parser.js.map
@@ -1 +1 @@
-{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/lib/types.js.map b/dist/lib/types.js.map
index dc16219..9a09248 100644
--- a/dist/lib/types.js.map
+++ b/dist/lib/types.js.map
@@ -1 +1 @@
-{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/types/cli.d.ts b/dist/types/cli.d.ts
new file mode 100644
index 0000000..509db18
--- /dev/null
+++ b/dist/types/cli.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/dist/types/field-types.d.ts b/dist/types/field-types.d.ts
index 0e56cb7..444c742 100644
--- a/dist/types/field-types.d.ts
+++ b/dist/types/field-types.d.ts
@@ -1,4 +1,4 @@
-import { FlightLogHeader } from './types';
-export declare const INT_FIELDS: Set;
-export declare const FLOAT_FIELDS: Set;
-export declare const BOOL_FIELDS: Set;
+import { FlightLogHeader } from './types';
+export declare const INT_FIELDS: Set;
+export declare const FLOAT_FIELDS: Set;
+export declare const BOOL_FIELDS: Set;
diff --git a/dist/types/flight-log-parser.d.ts b/dist/types/flight-log-parser.d.ts
index 9163e2d..6caf658 100644
--- a/dist/types/flight-log-parser.d.ts
+++ b/dist/types/flight-log-parser.d.ts
@@ -1,2 +1,2 @@
-export { FlightLog, FlightLogHeader, FlightLogMetaData, FlightLogRow, FLIGHT_MODE_MAPPING } from './types';
-export { parseLog } from './parser';
+export { FlightLog, FlightLogHeader, FlightLogMetaData, FlightLogRow, FLIGHT_MODE_MAPPING, } from './types';
+export { parseLog } from './parser';
diff --git a/dist/types/parser.d.ts b/dist/types/parser.d.ts
index 5522ab7..7611120 100644
--- a/dist/types/parser.d.ts
+++ b/dist/types/parser.d.ts
@@ -1,2 +1,2 @@
-import { FlightLog } from './types';
-export declare function parseLog(log: String): Promise;
+import { FlightLog } from './types';
+export declare function parseLog(log: String): Promise;
diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts
index cd0bfe9..671010b 100644
--- a/dist/types/types.d.ts
+++ b/dist/types/types.d.ts
@@ -1,217 +1,218 @@
-export declare enum FlightLogHeader {
- DateTime = "Date/Time (UTC)",
- ElapsedTime = "Elapsed Time (sec)",
- Info = "Info",
- DeviceLatitude = "Device Latitude (Degrees)",
- DeviceLongitude = "Device Longitude (Degrees)",
- DeviceLocationLastUpdated = "Device Location Last Updated (ms)",
- AircraftBatteryPowerPercent = "Aircraft Battery Power (%)",
- AircraftBatteryCharge = "Aircraft Battery Charge (mAh)",
- AircraftBatteryCurrent = "Aircraft Battery Current (mA)",
- AircraftBatteryVoltage = "Aircraft Battery Voltage (mV)",
- AircraftBatteryTemperature = "Aircraft Battery Temperature (Fahrenheit)",
- AircraftBatteryLastUpdated = "Aircraft Battery Last Updated (ms)",
- AircraftBatteryCell1Voltage = "Aircraft Battery Cell 1 Voltage",
- AircraftBatteryCell2Voltage = "Aircraft Battery Cell 2 Voltage",
- AircraftBatteryCell3Voltage = "Aircraft Battery Cell 3 Voltage",
- AircraftBatteryCell4Voltage = "Aircraft Battery Cell 4 Voltage",
- AircraftBatteryCellVoltageLastUpdated = "Aircraft Battery Cell Voltage Last Updated (ms)",
- AircraftLatitude = "Aircraft Latitude (Degrees)",
- AircraftLongitude = "Aircraft Longitude (Degrees)",
- AircraftSpeed = "Aircraft Speed (mph)",
- AircraftBarometricAltitude = "Aircraft Barometric Altitude (ft)",
- AircraftHeading = "Aircraft Heading (Degrees)",
- AircraftVelocityX = "Aircraft Vel - X (mph)",
- AircraftVelocityY = "Aircraft Vel - Y (mph)",
- AircraftVelocityZ = "Aircraft Vel - Z (mph)",
- AircraftPitch = "Aircraft Pitch (Degrees)",
- AircraftRoll = "Aircraft Roll (Degrees)",
- AircraftSatellites = "Aircraft Satellites",
- AircraftMotorsOn = "Aircraft Motors On",
- AircraftFlying = "Aircraft Flying",
- AircraftFlightMode = "Aircraft Flight Mode",
- AircraftFlightModeValue = "Aircraft Flight Mode Value",
- AircraftIMUPreheating = "Aircraft IMU Preheating",
- AircraftUltrasonicOn = "Aircraft Ultrasonic On",
- AircraftUltrasonicAltitude = "Aircraft Ultrasonic Altitude (ft)",
- AircraftVisionOn = "Aircraft Vision On",
- AircraftGPSSignal = "Aircraft GPS Signal",
- AircraftGPSSignalValue = "Aircraft GPS Signal Value",
- AircraftNoFly = "Aircraft No-fly",
- AircraftNoFlyValue = "Aircraft No-fly Value",
- AircraftNoFlyLatitude = "Aircraft No-fly Latitude (Degrees)",
- AircraftNoFlyLongitude = "Aircraft No-fly Longitude (Degrees)",
- AircraftNoFlyRadius = "Aircraft No-fly Radius (ft)",
- HomeLatitude = "Home Latitude (Degrees)",
- HomeLongitude = "Home Longitude (Degrees)",
- AircraftSmartGoHomeFlightTimeRemaining = "Aircraft Smart Go-home Flight Time Remaining (sec)",
- AircraftSmartGoHomeFlightReturnTime = "Aircraft Smart Go-home Flight Return Time (sec)",
- AircraftSmartGoHomeLandingTime = "Aircraft Smart Go-home Landing Time (sec)",
- AircraftSmartGoHomeReturnPower = "Aircraft Smart Go-home Return Power (%)",
- AircraftSmartGoHomeLandingPower = "Aircraft Smart Go-home Landing Power (%)",
- AircraftSmartGoHomeRadius = "Aircraft Smart Go-home Radius (ft)",
- AircraftSmartGoHomeCountdown = "Aircraft Smart Go-home Countdown (sec)",
- AircraftSmartGoHomeRequesting = "Aircraft Smart Go-home Requesting",
- AircraftSystemStateLastUpdated = "Aircraft System State Last Updated (ms)",
- GimbalPitch = "Gimbal Pitch (Degrees)",
- GimbalRoll = "Gimbal Roll (Degrees)",
- GimbalYaw = "Gimbal Yaw (Degrees)",
- GimbalMode = "Gimbal Mode",
- GimbalModeValue = "Gimbal Mode Value",
- GimbalPitchAtStop = "Gimbal Pitch at Stop",
- GimbalRollAtStop = "Gimbal Roll at Stop",
- GimbalYawAtStop = "Gimbal Yaw at Stop",
- GimbalStatusLastUpdated = "Gimbal Status Last Updated (ms)",
- LandingGearIsMovable = "Landing Gear is Movable",
- LandingGearStatus = "Landing Gear Status",
- LandingGearStatusValue = "Landing Gear Status Value",
- LandingGearMode = "Landing Gear Mode",
- LandingGearModeValue = "Landing Gear Mode Value",
- LandingGearLastUpdated = "Landing Gear Last Updated (ms)",
- RCState = "RC State",
- RCStateValue = "RC State Value",
- RCLeftHorizontal = "RC Left Horizontal",
- RCLeftVertical = "RC Left Vertical",
- RCRightHorizontal = "RC Right Horizontal",
- RCRightVertical = "RC Right Vertical",
- RCLeftWheel = "RC Left Wheel",
- RCRightWheel = "RC Right Wheel",
- RCLandingGear = "RC Landing Gear",
- RCLandingGearValue = "RC Landing Gear Value",
- RCGoHome = "RC Go Home",
- RCRecord = "RC Record ",
- RCShutter = "RC Shutter",
- RCPlayback = "RC Playback",
- RCPause = "RC Pause",
- RCCustom1 = "RC Custom 1",
- RCCustom2 = "RC Custom 2",
- RCStateLastUpdated = "RC State Last Updated (ms)",
- RCBatteryPercentRemaining = "RC Battery (%)",
- RCBatteryStateLastUpdated = "RC Battery State Last Updated (ms)",
- RCSattelites = "RC Sattelites",
- RCHorizontalAccuaracy = "RC Horizontal Accuaracy (ft)",
- RCLatitude = "RC Latitude (Degrees)",
- RCLongitude = "RC Longitude (Degrees)",
- RCGSPDataIsValid = "RC GSP Data is Valid",
- RCGPSStateLastUpdated = "RC GPS State Last Updated (ms)",
- RCSignal1 = "RC Signal 1",
- RCSignal2 = "RC Signal 2",
- RCSignalLastUpdated = "RC Signal Last Updated (ms)",
- LBSignal1 = "LB Signal 1",
- LBSignal2 = "LB Signal 2",
- LBSignalLastUpdated = "LB Signal Last Updated (ms)",
- AircraftCameraMode = "Aircraft Camera Mode",
- AircraftCameraModeValue = "Aircraft Camera Mode Value",
- AircraftCameraOverheated = "Aircraft Camera Overheated",
- AircraftCameraSensorError = "Aircraft Camera Sensor Error",
- AircraftCameraRecording = "Aircraft Camera Recording",
- AircraftCameraRawCapture = "Aircraft Camera Raw Capture",
- AircraftCameraIntervalCapture = "Aircraft Camera Interval Capture",
- AircraftCameraBurstCapture = "Aircraft Camera Burst Capture",
- AircraftCameraSingleCapture = "Aircraft Camera Single Capture",
- AircraftCameraStoringPhoto = "Aircraft Camera Storing Photo",
- AircraftCameraStateLastUpdated = "Aircraft Camera State Last Updated (ms)",
- AircraftCameraSDCardExists = "Aircraft Camera SD Card Exists",
- AircraftCameraSDCardRemainingPercent = "Aircraft Camera SD Card Remaining (%)",
- AircraftCameraSDCardStateLastUpdated = "Aircraft Camera SD Card State Last Updated (ms)",
- AircraftCameraChangeableLensSupported = "Aircraft Camera Changeable Lens Supported",
- AircraftCameraLensInstalled = "Aircraft Camera Lens Installed",
- AircraftCameraLensType = "Aircraft Camera Lens Type",
- AircraftCameraLensAFEnabled = "Aircraft Camera Lens AF Enabled",
- AircraftCameraLensFocusMode = "Aircraft Camera Lens Focus Mode",
- AircraftCameraLensFocusModeValue = "Aircraft Camera Lens Focus Mode Value",
- AircraftCameraLensFocusStatus = "Aircraft Camera Lens Focus Status",
- AircraftCameraLensFocusStatusValue = "Aircraft Camera Lens Focus Status Value",
- AircraftCameraLensMFAssistant = "Aircraft Camera Lens MF Assistant",
- AircraftCameraLensAFAssistant = "Aircraft Camera Lens AF Assistant",
- AircraftCameraLensAssistantWorking = "Aircraft Camera Lens Assistant Working",
- AircraftCameraLensStateLastUpdated = "Aircraft Camera Lens State Last Updated (ms)",
- DeviceToAircraftDistance = "Device > Aircraft Distance - XY (ft)",
-}
-export declare type FlightLogRow = {
- [prop in FlightLogHeader]: any;
-};
-export declare type FlightLogMetaData = {
- appVersion: string;
- session: {
- id: string;
- start: Date;
- end: Date;
- elapsed: number;
- };
- device: {
- model: string;
- os: string;
- };
- aircraft: {
- model: string;
- name: string;
- firmware: string;
- };
- battery: {
- chargeVolume: number;
- remainingLifePercent: number;
- discharges: number;
- cells: number;
- firmware: string;
- };
- flightController: {
- serialNumber: string;
- firmware: string;
- };
- gimbal: {
- firmware: string;
- };
- remoteController: {
- serialNumber: string;
- firmware: string;
- };
- camera: {
- serialNumber: string;
- };
-};
-export declare type FlightLog = {
- metaData: FlightLogMetaData;
- rows: FlightLogRow[];
-};
-export declare const FLIGHT_MODE_MAPPING: {
- 0: string;
- 1: string;
- 2: string;
- 3: string;
- 4: string;
- 5: string;
- 6: string;
- 7: string;
- 8: string;
- 9: string;
- 10: string;
- 11: string;
- 12: string;
- 13: string;
- 14: string;
- 15: string;
- 16: string;
- 17: string;
- 18: string;
- 19: string;
- 23: string;
- 24: string;
- 25: string;
- 26: string;
- 27: string;
- 28: string;
- 29: string;
- 30: string;
- 31: string;
- 32: string;
- 33: string;
- 35: string;
- 36: string;
- 37: string;
- 38: string;
- 39: string;
- 41: string;
- 43: string;
- 255: string;
-};
+export declare enum FlightLogHeader {
+ DateTime = "Date/Time (UTC)",
+ ElapsedTime = "Elapsed Time (sec)",
+ Info = "Info",
+ DeviceLatitude = "Device Latitude (Degrees)",
+ DeviceLongitude = "Device Longitude (Degrees)",
+ DeviceLocationLastUpdated = "Device Location Last Updated (ms)",
+ AircraftBatteryPowerPercent = "Aircraft Battery Power (%)",
+ AircraftBatteryCharge = "Aircraft Battery Charge (mAh)",
+ AircraftBatteryCurrent = "Aircraft Battery Current (mA)",
+ AircraftBatteryVoltage = "Aircraft Battery Voltage (mV)",
+ AircraftBatteryTemperature = "Aircraft Battery Temperature (Fahrenheit)",
+ AircraftBatteryLastUpdated = "Aircraft Battery Last Updated (ms)",
+ AircraftBatteryCell1Voltage = "Aircraft Battery Cell 1 Voltage",
+ AircraftBatteryCell2Voltage = "Aircraft Battery Cell 2 Voltage",
+ AircraftBatteryCell3Voltage = "Aircraft Battery Cell 3 Voltage",
+ AircraftBatteryCell4Voltage = "Aircraft Battery Cell 4 Voltage",
+ AircraftBatteryCellVoltageLastUpdated = "Aircraft Battery Cell Voltage Last Updated (ms)",
+ AircraftLatitude = "Aircraft Latitude (Degrees)",
+ AircraftLongitude = "Aircraft Longitude (Degrees)",
+ AircraftSpeed = "Aircraft Speed (mph)",
+ AircraftBarometricAltitude = "Aircraft Barometric Altitude (ft)",
+ AircraftHeading = "Aircraft Heading (Degrees)",
+ AircraftVelocityX = "Aircraft Vel - X (mph)",
+ AircraftVelocityY = "Aircraft Vel - Y (mph)",
+ AircraftVelocityZ = "Aircraft Vel - Z (mph)",
+ AircraftPitch = "Aircraft Pitch (Degrees)",
+ AircraftRoll = "Aircraft Roll (Degrees)",
+ AircraftSatellites = "Aircraft Satellites",
+ AircraftMotorsOn = "Aircraft Motors On",
+ AircraftFlying = "Aircraft Flying",
+ AircraftFlightMode = "Aircraft Flight Mode",
+ AircraftFlightModeValue = "Aircraft Flight Mode Value",
+ AircraftIMUPreheating = "Aircraft IMU Preheating",
+ AircraftUltrasonicOn = "Aircraft Ultrasonic On",
+ AircraftUltrasonicAltitude = "Aircraft Ultrasonic Altitude (ft)",
+ AircraftVisionOn = "Aircraft Vision On",
+ AircraftGPSSignal = "Aircraft GPS Signal",
+ AircraftGPSSignalValue = "Aircraft GPS Signal Value",
+ AircraftNoFly = "Aircraft No-fly",
+ AircraftNoFlyValue = "Aircraft No-fly Value",
+ AircraftNoFlyLatitude = "Aircraft No-fly Latitude (Degrees)",
+ AircraftNoFlyLongitude = "Aircraft No-fly Longitude (Degrees)",
+ AircraftNoFlyRadius = "Aircraft No-fly Radius (ft)",
+ HomeLatitude = "Home Latitude (Degrees)",
+ HomeLongitude = "Home Longitude (Degrees)",
+ AircraftSmartGoHomeFlightTimeRemaining = "Aircraft Smart Go-home Flight Time Remaining (sec)",
+ AircraftSmartGoHomeFlightReturnTime = "Aircraft Smart Go-home Flight Return Time (sec)",
+ AircraftSmartGoHomeLandingTime = "Aircraft Smart Go-home Landing Time (sec)",
+ AircraftSmartGoHomeReturnPower = "Aircraft Smart Go-home Return Power (%)",
+ AircraftSmartGoHomeLandingPower = "Aircraft Smart Go-home Landing Power (%)",
+ AircraftSmartGoHomeRadius = "Aircraft Smart Go-home Radius (ft)",
+ AircraftSmartGoHomeCountdown = "Aircraft Smart Go-home Countdown (sec)",
+ AircraftSmartGoHomeRequesting = "Aircraft Smart Go-home Requesting",
+ AircraftSystemStateLastUpdated = "Aircraft System State Last Updated (ms)",
+ GimbalPitch = "Gimbal Pitch (Degrees)",
+ GimbalRoll = "Gimbal Roll (Degrees)",
+ GimbalYaw = "Gimbal Yaw (Degrees)",
+ GimbalMode = "Gimbal Mode",
+ GimbalModeValue = "Gimbal Mode Value",
+ GimbalPitchAtStop = "Gimbal Pitch at Stop",
+ GimbalRollAtStop = "Gimbal Roll at Stop",
+ GimbalYawAtStop = "Gimbal Yaw at Stop",
+ GimbalStatusLastUpdated = "Gimbal Status Last Updated (ms)",
+ LandingGearIsMovable = "Landing Gear is Movable",
+ LandingGearStatus = "Landing Gear Status",
+ LandingGearStatusValue = "Landing Gear Status Value",
+ LandingGearMode = "Landing Gear Mode",
+ LandingGearModeValue = "Landing Gear Mode Value",
+ LandingGearLastUpdated = "Landing Gear Last Updated (ms)",
+ RCState = "RC State",
+ RCStateValue = "RC State Value",
+ RCLeftHorizontal = "RC Left Horizontal",
+ RCLeftVertical = "RC Left Vertical",
+ RCRightHorizontal = "RC Right Horizontal",
+ RCRightVertical = "RC Right Vertical",
+ RCLeftWheel = "RC Left Wheel",
+ RCRightWheel = "RC Right Wheel",
+ RCLandingGear = "RC Landing Gear",
+ RCLandingGearValue = "RC Landing Gear Value",
+ RCGoHome = "RC Go Home",
+ RCRecord = "RC Record ",
+ RCShutter = "RC Shutter",
+ RCPlayback = "RC Playback",
+ RCPause = "RC Pause",
+ RCCustom1 = "RC Custom 1",
+ RCCustom2 = "RC Custom 2",
+ RCStateLastUpdated = "RC State Last Updated (ms)",
+ RCBatteryPercentRemaining = "RC Battery (%)",
+ RCBatteryStateLastUpdated = "RC Battery State Last Updated (ms)",
+ RCSattelites = "RC Sattelites",
+ RCHorizontalAccuaracy = "RC Horizontal Accuaracy (ft)",
+ RCLatitude = "RC Latitude (Degrees)",
+ RCLongitude = "RC Longitude (Degrees)",
+ RCGSPDataIsValid = "RC GSP Data is Valid",
+ RCGPSStateLastUpdated = "RC GPS State Last Updated (ms)",
+ RCSignal1 = "RC Signal 1",
+ RCSignal2 = "RC Signal 2",
+ RCSignalLastUpdated = "RC Signal Last Updated (ms)",
+ LBSignal1 = "LB Signal 1",
+ LBSignal2 = "LB Signal 2",
+ LBSignalLastUpdated = "LB Signal Last Updated (ms)",
+ AircraftCameraMode = "Aircraft Camera Mode",
+ AircraftCameraModeValue = "Aircraft Camera Mode Value",
+ AircraftCameraOverheated = "Aircraft Camera Overheated",
+ AircraftCameraSensorError = "Aircraft Camera Sensor Error",
+ AircraftCameraRecording = "Aircraft Camera Recording",
+ AircraftCameraRawCapture = "Aircraft Camera Raw Capture",
+ AircraftCameraIntervalCapture = "Aircraft Camera Interval Capture",
+ AircraftCameraBurstCapture = "Aircraft Camera Burst Capture",
+ AircraftCameraSingleCapture = "Aircraft Camera Single Capture",
+ AircraftCameraStoringPhoto = "Aircraft Camera Storing Photo",
+ AircraftCameraStateLastUpdated = "Aircraft Camera State Last Updated (ms)",
+ AircraftCameraSDCardExists = "Aircraft Camera SD Card Exists",
+ AircraftCameraSDCardRemainingPercent = "Aircraft Camera SD Card Remaining (%)",
+ AircraftCameraSDCardStateLastUpdated = "Aircraft Camera SD Card State Last Updated (ms)",
+ AircraftCameraChangeableLensSupported = "Aircraft Camera Changeable Lens Supported",
+ AircraftCameraLensInstalled = "Aircraft Camera Lens Installed",
+ AircraftCameraLensType = "Aircraft Camera Lens Type",
+ AircraftCameraLensAFEnabled = "Aircraft Camera Lens AF Enabled",
+ AircraftCameraLensFocusMode = "Aircraft Camera Lens Focus Mode",
+ AircraftCameraLensFocusModeValue = "Aircraft Camera Lens Focus Mode Value",
+ AircraftCameraLensFocusStatus = "Aircraft Camera Lens Focus Status",
+ AircraftCameraLensFocusStatusValue = "Aircraft Camera Lens Focus Status Value",
+ AircraftCameraLensMFAssistant = "Aircraft Camera Lens MF Assistant",
+ AircraftCameraLensAFAssistant = "Aircraft Camera Lens AF Assistant",
+ AircraftCameraLensAssistantWorking = "Aircraft Camera Lens Assistant Working",
+ AircraftCameraLensStateLastUpdated = "Aircraft Camera Lens State Last Updated (ms)",
+ DeviceToAircraftDistance = "Device > Aircraft Distance - XY (ft)"
+}
+export declare type FlightLogRow = {
+ [prop in FlightLogHeader]: any;
+};
+export declare type FlightLogMetaData = {
+ appVersion: string;
+ session: {
+ id: string;
+ start: Date;
+ end: Date;
+ elapsed: number;
+ };
+ device: {
+ model: string;
+ os: string;
+ };
+ aircraft: {
+ model: string;
+ name: string;
+ firmware: string;
+ };
+ battery: {
+ chargeVolume: number;
+ remainingLifePercent: number;
+ discharges: number;
+ cells: number;
+ firmware: string;
+ serialNumber: string;
+ };
+ flightController: {
+ serialNumber: string;
+ firmware: string;
+ };
+ gimbal: {
+ firmware: string;
+ };
+ remoteController: {
+ serialNumber: string;
+ firmware: string;
+ };
+ camera: {
+ serialNumber: string;
+ };
+};
+export declare type FlightLog = {
+ metaData: FlightLogMetaData;
+ rows: FlightLogRow[];
+};
+export declare const FLIGHT_MODE_MAPPING: {
+ 0: string;
+ 1: string;
+ 2: string;
+ 3: string;
+ 4: string;
+ 5: string;
+ 6: string;
+ 7: string;
+ 8: string;
+ 9: string;
+ 10: string;
+ 11: string;
+ 12: string;
+ 13: string;
+ 14: string;
+ 15: string;
+ 16: string;
+ 17: string;
+ 18: string;
+ 19: string;
+ 23: string;
+ 24: string;
+ 25: string;
+ 26: string;
+ 27: string;
+ 28: string;
+ 29: string;
+ 30: string;
+ 31: string;
+ 32: string;
+ 33: string;
+ 35: string;
+ 36: string;
+ 37: string;
+ 38: string;
+ 39: string;
+ 41: string;
+ 43: string;
+ 255: string;
+};
diff --git a/package-lock.json b/package-lock.json
index 038de90..bf7bdc6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "flight-log-parser",
+ "name": "@dronedeploy/flight-log-parser",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
@@ -24,27 +24,101 @@
"js-tokens": "^3.0.0"
}
},
- "@types/csv-parse": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@types/csv-parse/-/csv-parse-1.1.11.tgz",
- "integrity": "sha512-c4kjQ7avmOV22T+xH2BAE/n4F52mGm+ELyHOk5PrGc/26Ps6RagP5lVKfDoLx+jmRnFKQlq6XIS33tp9Dco0Ug==",
+ "@babel/parser": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
+ "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==",
+ "dev": true
+ },
+ "@babel/runtime": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
+ "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "regenerator-runtime": "^0.13.2"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+ "dev": true
+ }
}
},
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "dev": true
+ },
"@types/estree": {
"version": "0.0.38",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.38.tgz",
"integrity": "sha512-F/v7t1LwS4vnXuPooJQGBRKRGIoxWUTmA4VHfqjOccFsNDThD5bfUNpITive6s352O7o384wcpEaDV8rHCehDA==",
"dev": true
},
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/jest": {
+ "version": "23.3.14",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.14.tgz",
+ "integrity": "sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug==",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
"@types/node": {
"version": "10.1.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.3.tgz",
"integrity": "sha512-GiCx7dRvta0hbxXoJFAUxz+CKX6bZSCKjM5slq2vPp/5zwK01T4ibYZkGr6EN4F2QmxDQR76/ZHg6q+7iFWCWw==",
"dev": true
},
+ "@types/yargs": {
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz",
+ "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz",
+ "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==",
+ "dev": true
+ },
"abab": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
@@ -83,6 +157,7 @@
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2",
"longest": "^1.0.1",
@@ -111,7 +186,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -465,6 +539,21 @@
"integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
"dev": true
},
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
"array-unique": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
@@ -951,6 +1040,12 @@
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
},
+ "byline": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
+ "dev": true
+ },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -976,6 +1071,12 @@
}
}
},
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
"callsites": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
@@ -1137,7 +1238,6 @@
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
"integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
- "dev": true,
"requires": {
"color-name": "^1.1.1"
}
@@ -1145,8 +1245,7 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"combined-stream": {
"version": "1.0.6",
@@ -1251,9 +1350,9 @@
}
},
"csv-parse": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-2.4.0.tgz",
- "integrity": "sha512-C/Biz45WWkL7yGvzyD4ONDMaQFHC/nIrSCOh9YCEBLsDQ4JOSDsgp7oyTFvOaMwvI/OVfJ7qLIPcx00Dk/7USw=="
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-2.5.0.tgz",
+ "integrity": "sha512-4OcjOJQByI0YDU5COYw9HAqjo8/MOLLmT9EKyMCXUzgvh30vS1SlMK+Ho84IH5exN44cSnrYecw/7Zpu2m4lkA=="
},
"dashdash": {
"version": "1.14.1",
@@ -1287,8 +1386,7 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"decode-uri-component": {
"version": "0.2.0",
@@ -1401,6 +1499,32 @@
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
+ "dir-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+ "dev": true,
+ "requires": {
+ "path-type": "^3.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
"doctrine": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
@@ -1450,6 +1574,11 @@
"jsbn": "~0.1.0"
}
},
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ },
"error-ex": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
@@ -1589,6 +1718,12 @@
"fill-range": "^2.1.0"
}
},
+ "expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "dev": true
+ },
"expect": {
"version": "22.4.3",
"resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz",
@@ -1651,6 +1786,332 @@
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
"dev": true
},
+ "fast-glob": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
@@ -1763,6 +2224,16 @@
"map-cache": "^0.2.2"
}
},
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
"fs-extra": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz",
@@ -1800,7 +2271,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
@@ -1821,12 +2293,14 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -1841,17 +2315,20 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
@@ -1968,7 +2445,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"ini": {
"version": "1.3.5",
@@ -1980,6 +2458,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -1994,6 +2473,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -2001,12 +2481,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -2025,6 +2507,7 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -2105,7 +2588,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
@@ -2117,6 +2601,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"wrappy": "1"
}
@@ -2202,7 +2687,8 @@
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -2238,6 +2724,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -2257,6 +2744,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -2300,12 +2788,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -2375,6 +2865,12 @@
"is-glob": "^2.0.0"
}
},
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
"glob2base": {
"version": "0.0.12",
"resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
@@ -2390,6 +2886,50 @@
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
+ "globby": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
+ "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^1.0.2",
+ "dir-glob": "^2.2.2",
+ "fast-glob": "^2.2.6",
+ "glob": "^7.1.3",
+ "ignore": "^4.0.3",
+ "pify": "^4.0.1",
+ "slash": "^2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ }
+ }
+ },
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
@@ -2573,6 +3113,12 @@
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
"dev": true
},
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
"import-local": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
@@ -2605,6 +3151,16 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
+ "into-stream": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.0.tgz",
+ "integrity": "sha512-cbDhb8qlxKMxPBk/QxTtYg1DQ4CwXmadu7quG3B7nrJsgSncEreF2kwWKZFdnjc/lSNNIkFPsjI7SM0Cx/QXPw==",
+ "dev": true,
+ "requires": {
+ "from2": "^2.3.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -2747,8 +3303,7 @@
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
"is-generator-fn": {
"version": "1.0.0",
@@ -3038,6 +3593,23 @@
"jest-cli": "^22.4.4"
},
"dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
"jest-cli": {
"version": "22.4.4",
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz",
@@ -3078,6 +3650,37 @@
"strip-ansi": "^4.0.0",
"which": "^1.2.12",
"yargs": "^10.0.3"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
+ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.1.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
+ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
}
}
}
@@ -3303,11 +3906,57 @@
"yargs": "^10.0.3"
},
"dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
"strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
+ },
+ "yargs": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
+ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
+ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
}
}
},
@@ -3591,7 +4240,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"loose-envify": {
"version": "1.3.1",
@@ -3681,6 +4331,12 @@
"readable-stream": "^2.0.1"
}
},
+ "merge2": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz",
+ "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==",
+ "dev": true
+ },
"micromatch": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
@@ -3774,6 +4430,16 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "multistream": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz",
+ "integrity": "sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.5"
+ }
+ },
"nan": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
@@ -4051,6 +4717,12 @@
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
+ "p-is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+ "dev": true
+ },
"p-limit": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
@@ -4108,11 +4780,16 @@
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true
},
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
},
"path-is-absolute": {
"version": "1.0.1",
@@ -4170,6 +4847,92 @@
"pinkie": "^2.0.0"
}
},
+ "pkg": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.4.0.tgz",
+ "integrity": "sha512-bFNJ3v56QwqB6JtAl/YrczlmEKBPBVJ3n5nW905kgvG1ex9DajODpTs0kLAFxyLwoubDQux/RPJFL6WrnD/vpg==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "~7.4.4",
+ "@babel/runtime": "~7.4.4",
+ "chalk": "~2.4.2",
+ "escodegen": "~1.11.1",
+ "fs-extra": "~7.0.1",
+ "globby": "~9.2.0",
+ "into-stream": "~5.1.0",
+ "minimist": "~1.2.0",
+ "multistream": "~2.1.1",
+ "pkg-fetch": "~2.6.2",
+ "progress": "~2.0.3",
+ "resolve": "1.6.0",
+ "stream-meter": "~1.0.4"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "escodegen": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
+ "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
+ "dev": true,
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz",
+ "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
"pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -4179,6 +4942,167 @@
"find-up": "^2.1.0"
}
},
+ "pkg-fetch": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.2.tgz",
+ "integrity": "sha512-7DN6YYP1Kct02mSkhfblK0HkunJ7BJjGBkSkFdIW/QKIovtAMaICidS7feX+mHfnZ98OP7xFJvBluVURlrHJxA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "~7.4.4",
+ "byline": "~5.0.0",
+ "chalk": "~2.4.1",
+ "expand-template": "~2.0.3",
+ "fs-extra": "~7.0.1",
+ "minimist": "~1.2.0",
+ "progress": "~2.0.0",
+ "request": "~2.88.0",
+ "request-progress": "~3.0.0",
+ "semver": "~6.0.0",
+ "unique-temp-dir": "~1.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "semver": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ }
+ }
+ },
"pn": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
@@ -4239,12 +5163,24 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
+ "psl": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
+ "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
+ "dev": true
+ },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -4440,6 +5376,15 @@
"uuid": "^3.1.0"
}
},
+ "request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=",
+ "dev": true,
+ "requires": {
+ "throttleit": "^1.0.0"
+ }
+ },
"request-promise-core": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
@@ -4463,8 +5408,7 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
},
"require-main-filename": {
"version": "1.0.1",
@@ -4585,6 +5529,15 @@
}
}
},
+ "rollup-plugin-preserve-shebang": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-preserve-shebang/-/rollup-plugin-preserve-shebang-0.1.6.tgz",
+ "integrity": "sha512-b+psdlXZOjmlnKmL6/YAkR8PR15VPcUNXdT35urBRJ8jE6UxHyb4HXeeN3qRZJbMJJaX1eRP72XwH6IvGFh5Jw==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.22.4"
+ }
+ },
"rollup-plugin-sourcemaps": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz",
@@ -4974,8 +5927,7 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"set-immediate-shim": {
"version": "1.0.1",
@@ -5298,6 +6250,15 @@
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
"dev": true
},
+ "stream-meter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz",
+ "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.4"
+ }
+ },
"string-length": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
@@ -5686,6 +6647,12 @@
"integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
"dev": true
},
+ "throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+ "dev": true
+ },
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@@ -5969,10 +6936,9 @@
}
},
"typescript": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz",
- "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==",
- "dev": true
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
+ "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"uglify-js": {
"version": "2.8.29",
@@ -6008,6 +6974,12 @@
"dev": true,
"optional": true
},
+ "uid2": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
+ "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
@@ -6043,6 +7015,17 @@
}
}
},
+ "unique-temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz",
+ "integrity": "sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1",
+ "os-tmpdir": "^1.0.1",
+ "uid2": "0.0.3"
+ }
+ },
"universalify": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
@@ -6095,6 +7078,15 @@
}
}
},
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
@@ -6247,8 +7239,7 @@
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
},
"window-size": {
"version": "0.1.0",
@@ -6350,52 +7341,133 @@
"dev": true
},
"yargs": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
- "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
- "dev": true,
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
+ "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
+ "require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
+ "string-width": "^3.0.0",
"which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^8.1.0"
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.1"
},
"dependencies": {
- "cliui": {
+ "ansi-regex": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
}
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
}
}
},
"yargs-parser": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
- "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
- "dev": true,
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
"requires": {
- "camelcase": "^4.1.0"
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
},
"dependencies": {
"camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
}
}
},
diff --git a/package.json b/package.json
index 36bf7ce..297dad5 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,8 @@
"repository": "https://www.github.com/dronedeploy/flight-log-parser",
"license": "MIT",
"scripts": {
- "build": "tsc --module commonjs && rollup -c rollup.config.ts",
+ "build": "tsc --module commonjs && rollup -c rollup.config.ts && npm run build:bin",
+ "build:bin": "pkg dist/lib/cli.js --targets node8-macos,node8-linux --out-path ./bin",
"lint": "tslint -t codeFrame 'src/**/*.ts' 'test/**/*.ts'",
"test": "jest"
},
@@ -26,26 +27,29 @@
]
},
"dependencies": {
- "csv-parse": "^2.4.0"
+ "csv-parse": "^2.5.0",
+ "typescript": "^3.5.3",
+ "yargs": "^13.3.0"
},
"devDependencies": {
- "@types/csv-parse": "^1.1.11",
"@types/jest": "^23.0.0",
"@types/node": "^10.1.2",
+ "@types/yargs": "^13.0.2",
"jest": "^22.4.4",
"lodash.camelcase": "^4.3.0",
+ "pkg": "^4.4.0",
"prettier": "^1.13.7",
"rollup": "^0.58.0",
"rollup-plugin-commonjs": "^9.0.0",
"rollup-plugin-json": "^3.0.0",
"rollup-plugin-node-resolve": "^3.0.0",
+ "rollup-plugin-preserve-shebang": "^0.1.6",
"rollup-plugin-sourcemaps": "^0.4.2",
"rollup-plugin-typescript2": "^0.11.1",
"ts-jest": "^22.0.0",
"ts-node": "^6.0.0",
"tslint": "^5.10.0",
"tslint-config-prettier": "^1.1.0",
- "tslint-config-standard": "^7.0.0",
- "typescript": "^2.8.3"
+ "tslint-config-standard": "^7.0.0"
}
}
diff --git a/src/cli.ts b/src/cli.ts
new file mode 100644
index 0000000..164b57b
--- /dev/null
+++ b/src/cli.ts
@@ -0,0 +1,50 @@
+import { readFileSync } from 'fs';
+import { argv } from 'yargs';
+
+import { parseLog } from './parser';
+import { FlightLogHeader } from './types';
+
+const relevantArgs = (argv as any) as { fields: string, file: string };
+const { fields, file: path } = relevantArgs;
+
+function showHelp(stream: NodeJS.WriteStream) {
+ stream.write(`
+Usage: flight-log-parser [flags]
+
+Parses DroneDeploy flight logs into JSON.
+
+Options:
+
+ --file Path to the flight log file, required
+
+ --fields Comma delimited string of fields to extract
+ from logs, optional. If not provided, will
+ output all fields. Valid fields can be
+ found in the FlightLogHeader enum located
+ at src/types.ts.
+`);
+}
+
+if (!path) {
+ showHelp(process.stderr);
+ process.exit(1);
+}
+
+const content = readFileSync(path).toString('utf8');
+
+parseLog(content).then((flightLog) => {
+ if (fields) {
+ const fieldsArray = fields.split(',').map((field: any) => FlightLogHeader[field.trim()]);
+ const rows = flightLog.rows;
+
+ for (const row of flightLog.rows) {
+ for (const key of Object.keys(row)) {
+ if (fieldsArray.indexOf(key) === -1) {
+ delete row[key as FlightLogHeader];
+ }
+ }
+ }
+ }
+
+ process.stdout.write(JSON.stringify(flightLog) + '\n');
+});
diff --git a/src/parser.ts b/src/parser.ts
index de130f4..fe58c44 100644
--- a/src/parser.ts
+++ b/src/parser.ts
@@ -1,4 +1,4 @@
-import parse from 'csv-parse';
+const parse = require('csv-parse');
import { FlightLogRow, FlightLogHeader, FlightLogMetaData, FlightLog } from './types';
import { INT_FIELDS, BOOL_FIELDS, FLOAT_FIELDS } from './field-types';
diff --git a/tsconfig.json b/tsconfig.json
index 222a37b..dc7f7e2 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,7 +18,7 @@
"node_modules/@types",
],
"exclude": [
- "src/tests"
+ "src/__test__"
],
"atom": {
"rewriteTsconfig": false
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 3557020..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,3564 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/code-frame@^7.0.0-beta.35":
- version "7.0.0-beta.47"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.47.tgz#d18c2f4c4ba8d093a2bcfab5616593bfe2441a27"
- dependencies:
- "@babel/highlight" "7.0.0-beta.47"
-
-"@babel/highlight@7.0.0-beta.47":
- version "7.0.0-beta.47"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.47.tgz#8fbc83fb2a21f0bd2b95cdbeb238cf9689cad494"
- dependencies:
- chalk "^2.0.0"
- esutils "^2.0.2"
- js-tokens "^3.0.0"
-
-"@types/csv-parse@^1.1.11":
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/@types/csv-parse/-/csv-parse-1.1.11.tgz#47d68b5579e66aa0d55af9dbae76f1d2ff836f1d"
- dependencies:
- "@types/node" "*"
-
-"@types/estree@0.0.38":
- version "0.0.38"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.38.tgz#c1be40aa933723c608820a99a373a16d215a1ca2"
-
-"@types/jest@^23.0.0":
- version "23.0.0"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.0.0.tgz#760cac74f00bb9c3075587716d2b3b4435663bc0"
-
-"@types/node@*", "@types/node@^10.1.2":
- version "10.1.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-10.1.2.tgz#1b928a0baa408fc8ae3ac012cc81375addc147c6"
-
-abab@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-
-acorn-globals@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
- dependencies:
- acorn "^5.0.0"
-
-acorn@^5.0.0, acorn@^5.3.0:
- version "5.5.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
-
-ajv@^5.1.0:
- version "5.5.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.3.0"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-escapes@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- dependencies:
- color-convert "^1.9.0"
-
-anymatch@^1.3.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
- dependencies:
- micromatch "^2.1.5"
- normalize-path "^2.0.0"
-
-anymatch@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- dependencies:
- micromatch "^3.1.4"
- normalize-path "^2.1.1"
-
-append-transform@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
- dependencies:
- default-require-extensions "^1.0.0"
-
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-
-are-we-there-yet@~1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.6"
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-
-arr-flatten@^1.0.1, arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-
-array-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
-
-array-filter@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
-
-array-map@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
-
-array-reduce@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-
-arrify@^1.0.0, arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-
-astral-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
-
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async-limiter@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
-
-async@^1.4.0:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-async@^2.1.4:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
- dependencies:
- lodash "^4.14.0"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-atob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a"
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.6.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
-
-babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3:
- version "6.26.3"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
- dependencies:
- babel-code-frame "^6.26.0"
- babel-generator "^6.26.0"
- babel-helpers "^6.24.1"
- babel-messages "^6.23.0"
- babel-register "^6.26.0"
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- convert-source-map "^1.5.1"
- debug "^2.6.9"
- json5 "^0.5.1"
- lodash "^4.17.4"
- minimatch "^3.0.4"
- path-is-absolute "^1.0.1"
- private "^0.1.8"
- slash "^1.0.0"
- source-map "^0.5.7"
-
-babel-generator@^6.18.0, babel-generator@^6.26.0:
- version "6.26.1"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
- dependencies:
- babel-messages "^6.23.0"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- detect-indent "^4.0.0"
- jsesc "^1.3.0"
- lodash "^4.17.4"
- source-map "^0.5.7"
- trim-right "^1.0.1"
-
-babel-helpers@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
- dependencies:
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-jest@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d"
- dependencies:
- babel-plugin-istanbul "^4.1.5"
- babel-preset-jest "^22.4.4"
-
-babel-messages@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-istanbul@^4.1.5, babel-plugin-istanbul@^4.1.6:
- version "4.1.6"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
- dependencies:
- babel-plugin-syntax-object-rest-spread "^6.13.0"
- find-up "^2.1.0"
- istanbul-lib-instrument "^1.10.1"
- test-exclude "^4.2.1"
-
-babel-plugin-jest-hoist@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b"
-
-babel-plugin-syntax-object-rest-spread@^6.13.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
-
-babel-plugin-transform-es2015-modules-commonjs@^6.26.2:
- version "6.26.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
- dependencies:
- babel-plugin-transform-strict-mode "^6.24.1"
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-types "^6.26.0"
-
-babel-plugin-transform-strict-mode@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-preset-jest@^22.4.3, babel-preset-jest@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39"
- dependencies:
- babel-plugin-jest-hoist "^22.4.4"
- babel-plugin-syntax-object-rest-spread "^6.13.0"
-
-babel-register@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
- dependencies:
- babel-core "^6.26.0"
- babel-runtime "^6.26.0"
- core-js "^2.5.0"
- home-or-tmp "^2.0.0"
- lodash "^4.17.4"
- mkdirp "^0.5.1"
- source-map-support "^0.4.15"
-
-babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.11.0"
-
-babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
- dependencies:
- babel-runtime "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- lodash "^4.17.4"
-
-babel-traverse@^6.18.0, babel-traverse@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
- dependencies:
- babel-code-frame "^6.26.0"
- babel-messages "^6.23.0"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- debug "^2.6.8"
- globals "^9.18.0"
- invariant "^2.2.2"
- lodash "^4.17.4"
-
-babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
- dependencies:
- babel-runtime "^6.26.0"
- esutils "^2.0.2"
- lodash "^4.17.4"
- to-fast-properties "^1.0.3"
-
-babylon@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-binary-extensions@^1.0.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
-
-boom@4.x.x:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-braces@^2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-browser-process-hrtime@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
-
-browser-resolve@^1.11.2:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
- dependencies:
- resolve "1.1.7"
-
-bser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
- dependencies:
- node-int64 "^0.4.0"
-
-buffer-from@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
-
-builtin-modules@^1.0.0, builtin-modules@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-builtin-modules@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e"
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-
-capture-exit@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
- dependencies:
- rsvp "^3.3.3"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chokidar@^1.6.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-chownr@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
-
-ci-info@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2"
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-cliui@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
- dependencies:
- string-width "^2.1.1"
- strip-ansi "^4.0.0"
- wrap-ansi "^2.0.0"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.0"
-
-color-convert@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
- dependencies:
- color-name "^1.1.1"
-
-color-name@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-
-combined-stream@1.0.6, combined-stream@~1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@^2.12.1:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
-
-compare-versions@^3.1.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.2.1.tgz#a49eb7689d4caaf0b6db5220173fd279614000f7"
-
-component-emitter@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-convert-source-map@^1.4.0, convert-source-map@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-
-core-js@^2.4.0, core-js@^2.5.0:
- version "2.5.6"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.6.tgz#0fe6d45bf3cac3ac364a9d72de7576f4eb221b9d"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-cpx@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f"
- dependencies:
- babel-runtime "^6.9.2"
- chokidar "^1.6.0"
- duplexer "^0.1.1"
- glob "^7.0.5"
- glob2base "^0.0.12"
- minimatch "^3.0.2"
- mkdirp "^0.5.1"
- resolve "^1.1.7"
- safe-buffer "^5.0.1"
- shell-quote "^1.6.1"
- subarg "^1.0.0"
-
-cross-spawn@^5.0.1:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
- dependencies:
- lru-cache "^4.0.1"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
-cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
-
-"cssstyle@>= 0.2.37 < 0.3.0":
- version "0.2.37"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
- dependencies:
- cssom "0.3.x"
-
-csv-parse@^2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-2.4.0.tgz#d4c72a1533734b2c2a65f486d13091264cacc115"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-data-urls@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f"
- dependencies:
- abab "^1.0.4"
- whatwg-mimetype "^2.0.0"
- whatwg-url "^6.4.0"
-
-debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-debug@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- dependencies:
- ms "2.0.0"
-
-decamelize@^1.0.0, decamelize@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-
-deep-extend@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f"
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-default-require-extensions@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
- dependencies:
- strip-bom "^2.0.0"
-
-define-properties@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
- dependencies:
- foreach "^2.0.5"
- object-keys "^1.0.8"
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- dependencies:
- is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- dependencies:
- is-descriptor "^1.0.2"
- isobject "^3.0.1"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-detect-indent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
- dependencies:
- repeating "^2.0.0"
-
-detect-libc@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
-
-detect-newline@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
-
-diff@^3.1.0, diff@^3.2.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
-
-doctrine@^0.7.2:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523"
- dependencies:
- esutils "^1.1.6"
- isarray "0.0.1"
-
-domexception@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
- dependencies:
- webidl-conversions "^4.0.2"
-
-duplexer@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-error-ex@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
- dependencies:
- is-arrayish "^0.2.1"
-
-es-abstract@^1.5.1:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681"
- dependencies:
- es-to-primitive "^1.1.1"
- function-bind "^1.1.1"
- has "^1.0.1"
- is-callable "^1.1.3"
- is-regex "^1.0.4"
-
-es-to-primitive@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
- dependencies:
- is-callable "^1.1.1"
- is-date-object "^1.0.1"
- is-symbol "^1.0.1"
-
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
- dependencies:
- esprima "^3.1.3"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.6.1"
-
-esprima@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-
-esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
-
-estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-estree-walker@^0.5.1, estree-walker@^0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39"
-
-esutils@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-exec-sh@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38"
- dependencies:
- merge "^1.1.3"
-
-execa@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
- dependencies:
- cross-spawn "^5.0.1"
- get-stream "^3.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-exit@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- dependencies:
- fill-range "^2.1.0"
-
-expect@^22.4.0:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674"
- dependencies:
- ansi-styles "^3.2.0"
- jest-diff "^22.4.3"
- jest-get-type "^22.4.3"
- jest-matcher-utils "^22.4.3"
- jest-message-util "^22.4.3"
- jest-regex-util "^22.4.3"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extend@~3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- dependencies:
- is-extglob "^1.0.0"
-
-extglob@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
-
-fast-deep-equal@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
-
-fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-
-fast-levenshtein@~2.0.4:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-
-fb-watchman@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
- dependencies:
- bser "^2.0.0"
-
-filename-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-
-fileset@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
- dependencies:
- glob "^7.0.3"
- minimatch "^3.0.3"
-
-fill-range@^2.1.0:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^3.0.0"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-find-index@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
-
-find-up@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
- dependencies:
- path-exists "^2.0.0"
- pinkie-promise "^2.0.0"
-
-find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- dependencies:
- locate-path "^2.0.0"
-
-for-in@^1.0.1, for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- dependencies:
- for-in "^1.0.1"
-
-foreach@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "1.0.6"
- mime-types "^2.1.12"
-
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- dependencies:
- map-cache "^0.2.2"
-
-fs-extra@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.0.tgz#0f0afb290bb3deb87978da816fcd3c7797f3a817"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-extra@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-minipass@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
- dependencies:
- minipass "^2.2.1"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0, fsevents@^1.2.3:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
- dependencies:
- nan "^2.9.2"
- node-pre-gyp "^0.10.0"
-
-function-bind@^1.0.2, function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
-
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-
-get-value@^2.0.3, get-value@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- dependencies:
- is-glob "^2.0.0"
-
-glob2base@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
- dependencies:
- find-index "^0.1.1"
-
-glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^9.18.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-growly@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-
-handlebars@^4.0.3:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
- dependencies:
- async "^1.4.0"
- optimist "^0.6.1"
- source-map "^0.4.4"
- optionalDependencies:
- uglify-js "^2.6"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
- dependencies:
- ajv "^5.1.0"
- har-schema "^2.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
- dependencies:
- function-bind "^1.0.2"
-
-hawk@~6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
-hoek@4.x.x:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
-
-home-or-tmp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.1"
-
-hosted-git-info@^2.1.4:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
-
-html-encoding-sniffer@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
- dependencies:
- whatwg-encoding "^1.0.1"
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-iconv-lite@0.4.19:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
-
-iconv-lite@^0.4.4:
- version "0.4.23"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-ignore-walk@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
- dependencies:
- minimatch "^3.0.4"
-
-import-local@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
- dependencies:
- pkg-dir "^2.0.0"
- resolve-cwd "^2.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-ini@~1.3.0:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
-
-invariant@^2.2.2:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
- dependencies:
- loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
- dependencies:
- kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- dependencies:
- kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-is-builtin-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
- dependencies:
- builtin-modules "^1.0.0"
-
-is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
-
-is-ci@^1.0.10:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
- dependencies:
- ci-info "^1.0.0"
-
-is-data-descriptor@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
- dependencies:
- kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- dependencies:
- kind-of "^6.0.0"
-
-is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-
-is-descriptor@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- dependencies:
- is-accessor-descriptor "^1.0.0"
- is-data-descriptor "^1.0.0"
- kind-of "^6.0.2"
-
-is-dotfile@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- dependencies:
- is-plain-object "^2.0.4"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-finite@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-generator-fn@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- dependencies:
- is-extglob "^1.0.0"
-
-is-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
-
-is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
-
-is-odd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24"
- dependencies:
- is-number "^4.0.0"
-
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- dependencies:
- isobject "^3.0.1"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- dependencies:
- has "^1.0.1"
-
-is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-symbol@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-is-utf8@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-
-is-windows@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isarray@1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-istanbul-api@^1.1.14:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954"
- dependencies:
- async "^2.1.4"
- compare-versions "^3.1.0"
- fileset "^2.0.2"
- istanbul-lib-coverage "^1.2.0"
- istanbul-lib-hook "^1.2.0"
- istanbul-lib-instrument "^1.10.1"
- istanbul-lib-report "^1.1.4"
- istanbul-lib-source-maps "^1.2.4"
- istanbul-reports "^1.3.0"
- js-yaml "^3.7.0"
- mkdirp "^0.5.1"
- once "^1.4.0"
-
-istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341"
-
-istanbul-lib-hook@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c"
- dependencies:
- append-transform "^0.4.0"
-
-istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b"
- dependencies:
- babel-generator "^6.18.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- babylon "^6.18.0"
- istanbul-lib-coverage "^1.2.0"
- semver "^5.3.0"
-
-istanbul-lib-report@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5"
- dependencies:
- istanbul-lib-coverage "^1.2.0"
- mkdirp "^0.5.1"
- path-parse "^1.0.5"
- supports-color "^3.1.2"
-
-istanbul-lib-source-maps@^1.2.1:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6"
- dependencies:
- debug "^3.1.0"
- istanbul-lib-coverage "^1.1.2"
- mkdirp "^0.5.1"
- rimraf "^2.6.1"
- source-map "^0.5.3"
-
-istanbul-lib-source-maps@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7"
- dependencies:
- debug "^3.1.0"
- istanbul-lib-coverage "^1.2.0"
- mkdirp "^0.5.1"
- rimraf "^2.6.1"
- source-map "^0.5.3"
-
-istanbul-reports@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554"
- dependencies:
- handlebars "^4.0.3"
-
-jest-changed-files@^22.2.0:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2"
- dependencies:
- throat "^4.0.0"
-
-jest-cli@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90"
- dependencies:
- ansi-escapes "^3.0.0"
- chalk "^2.0.1"
- exit "^0.1.2"
- glob "^7.1.2"
- graceful-fs "^4.1.11"
- import-local "^1.0.0"
- is-ci "^1.0.10"
- istanbul-api "^1.1.14"
- istanbul-lib-coverage "^1.1.1"
- istanbul-lib-instrument "^1.8.0"
- istanbul-lib-source-maps "^1.2.1"
- jest-changed-files "^22.2.0"
- jest-config "^22.4.4"
- jest-environment-jsdom "^22.4.1"
- jest-get-type "^22.1.0"
- jest-haste-map "^22.4.2"
- jest-message-util "^22.4.0"
- jest-regex-util "^22.1.0"
- jest-resolve-dependencies "^22.1.0"
- jest-runner "^22.4.4"
- jest-runtime "^22.4.4"
- jest-snapshot "^22.4.0"
- jest-util "^22.4.1"
- jest-validate "^22.4.4"
- jest-worker "^22.2.2"
- micromatch "^2.3.11"
- node-notifier "^5.2.1"
- realpath-native "^1.0.0"
- rimraf "^2.5.4"
- slash "^1.0.0"
- string-length "^2.0.0"
- strip-ansi "^4.0.0"
- which "^1.2.12"
- yargs "^10.0.3"
-
-jest-config@^22.4.3, jest-config@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a"
- dependencies:
- chalk "^2.0.1"
- glob "^7.1.1"
- jest-environment-jsdom "^22.4.1"
- jest-environment-node "^22.4.1"
- jest-get-type "^22.1.0"
- jest-jasmine2 "^22.4.4"
- jest-regex-util "^22.1.0"
- jest-resolve "^22.4.2"
- jest-util "^22.4.1"
- jest-validate "^22.4.4"
- pretty-format "^22.4.0"
-
-jest-diff@^22.4.0, jest-diff@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030"
- dependencies:
- chalk "^2.0.1"
- diff "^3.2.0"
- jest-get-type "^22.4.3"
- pretty-format "^22.4.3"
-
-jest-docblock@^22.4.0, jest-docblock@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19"
- dependencies:
- detect-newline "^2.1.0"
-
-jest-environment-jsdom@^22.4.1:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e"
- dependencies:
- jest-mock "^22.4.3"
- jest-util "^22.4.3"
- jsdom "^11.5.1"
-
-jest-environment-node@^22.4.1:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129"
- dependencies:
- jest-mock "^22.4.3"
- jest-util "^22.4.3"
-
-jest-get-type@^22.1.0, jest-get-type@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
-
-jest-haste-map@^22.4.2:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b"
- dependencies:
- fb-watchman "^2.0.0"
- graceful-fs "^4.1.11"
- jest-docblock "^22.4.3"
- jest-serializer "^22.4.3"
- jest-worker "^22.4.3"
- micromatch "^2.3.11"
- sane "^2.0.0"
-
-jest-jasmine2@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23"
- dependencies:
- chalk "^2.0.1"
- co "^4.6.0"
- expect "^22.4.0"
- graceful-fs "^4.1.11"
- is-generator-fn "^1.0.0"
- jest-diff "^22.4.0"
- jest-matcher-utils "^22.4.0"
- jest-message-util "^22.4.0"
- jest-snapshot "^22.4.0"
- jest-util "^22.4.1"
- source-map-support "^0.5.0"
-
-jest-leak-detector@^22.4.0:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35"
- dependencies:
- pretty-format "^22.4.3"
-
-jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff"
- dependencies:
- chalk "^2.0.1"
- jest-get-type "^22.4.3"
- pretty-format "^22.4.3"
-
-jest-message-util@^22.4.0, jest-message-util@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7"
- dependencies:
- "@babel/code-frame" "^7.0.0-beta.35"
- chalk "^2.0.1"
- micromatch "^2.3.11"
- slash "^1.0.0"
- stack-utils "^1.0.1"
-
-jest-mock@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7"
-
-jest-regex-util@^22.1.0, jest-regex-util@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af"
-
-jest-resolve-dependencies@^22.1.0:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e"
- dependencies:
- jest-regex-util "^22.4.3"
-
-jest-resolve@^22.4.2:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea"
- dependencies:
- browser-resolve "^1.11.2"
- chalk "^2.0.1"
-
-jest-runner@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907"
- dependencies:
- exit "^0.1.2"
- jest-config "^22.4.4"
- jest-docblock "^22.4.0"
- jest-haste-map "^22.4.2"
- jest-jasmine2 "^22.4.4"
- jest-leak-detector "^22.4.0"
- jest-message-util "^22.4.0"
- jest-runtime "^22.4.4"
- jest-util "^22.4.1"
- jest-worker "^22.2.2"
- throat "^4.0.0"
-
-jest-runtime@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048"
- dependencies:
- babel-core "^6.0.0"
- babel-jest "^22.4.4"
- babel-plugin-istanbul "^4.1.5"
- chalk "^2.0.1"
- convert-source-map "^1.4.0"
- exit "^0.1.2"
- graceful-fs "^4.1.11"
- jest-config "^22.4.4"
- jest-haste-map "^22.4.2"
- jest-regex-util "^22.1.0"
- jest-resolve "^22.4.2"
- jest-util "^22.4.1"
- jest-validate "^22.4.4"
- json-stable-stringify "^1.0.1"
- micromatch "^2.3.11"
- realpath-native "^1.0.0"
- slash "^1.0.0"
- strip-bom "3.0.0"
- write-file-atomic "^2.1.0"
- yargs "^10.0.3"
-
-jest-serializer@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436"
-
-jest-snapshot@^22.4.0:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2"
- dependencies:
- chalk "^2.0.1"
- jest-diff "^22.4.3"
- jest-matcher-utils "^22.4.3"
- mkdirp "^0.5.1"
- natural-compare "^1.4.0"
- pretty-format "^22.4.3"
-
-jest-util@^22.4.1, jest-util@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac"
- dependencies:
- callsites "^2.0.0"
- chalk "^2.0.1"
- graceful-fs "^4.1.11"
- is-ci "^1.0.10"
- jest-message-util "^22.4.3"
- mkdirp "^0.5.1"
- source-map "^0.6.0"
-
-jest-validate@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d"
- dependencies:
- chalk "^2.0.1"
- jest-config "^22.4.4"
- jest-get-type "^22.1.0"
- leven "^2.1.0"
- pretty-format "^22.4.0"
-
-jest-worker@^22.2.2, jest-worker@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b"
- dependencies:
- merge-stream "^1.0.1"
-
-jest@^22.4.4:
- version "22.4.4"
- resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.4.tgz#ffb36c9654b339a13e10b3d4b338eb3e9d49f6eb"
- dependencies:
- import-local "^1.0.0"
- jest-cli "^22.4.4"
-
-js-tokens@^3.0.0, js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-
-js-yaml@^3.7.0:
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-jsdom@^11.5.1:
- version "11.10.0"
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.10.0.tgz#a42cd54e88895dc765f03f15b807a474962ac3b5"
- dependencies:
- abab "^1.0.4"
- acorn "^5.3.0"
- acorn-globals "^4.1.0"
- array-equal "^1.0.0"
- cssom ">= 0.3.2 < 0.4.0"
- cssstyle ">= 0.2.37 < 0.3.0"
- data-urls "^1.0.0"
- domexception "^1.0.0"
- escodegen "^1.9.0"
- html-encoding-sniffer "^1.0.2"
- left-pad "^1.2.0"
- nwmatcher "^1.4.3"
- parse5 "4.0.0"
- pn "^1.1.0"
- request "^2.83.0"
- request-promise-native "^1.0.5"
- sax "^1.2.4"
- symbol-tree "^3.2.2"
- tough-cookie "^2.3.3"
- w3c-hr-time "^1.0.1"
- webidl-conversions "^4.0.2"
- whatwg-encoding "^1.0.3"
- whatwg-mimetype "^2.1.0"
- whatwg-url "^6.4.0"
- ws "^4.0.0"
- xml-name-validator "^3.0.0"
-
-jsesc@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-
-json-schema-traverse@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-json5@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-
-kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- dependencies:
- invert-kv "^1.0.0"
-
-left-pad@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
-
-leven@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
-
-levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-load-json-file@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
-
-lodash.sortby@^4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
-
-lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.4:
- version "4.17.10"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-loose-envify@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
- dependencies:
- js-tokens "^3.0.0"
-
-lru-cache@^4.0.1:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
- dependencies:
- pseudomap "^1.0.2"
- yallist "^2.1.2"
-
-magic-string@^0.22.4:
- version "0.22.5"
- resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
- dependencies:
- vlq "^0.2.2"
-
-make-error@^1.1.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535"
-
-makeerror@1.0.x:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
- dependencies:
- tmpl "1.0.x"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- dependencies:
- object-visit "^1.0.0"
-
-math-random@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
-
-mem@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
- dependencies:
- mimic-fn "^1.0.0"
-
-merge-stream@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
- dependencies:
- readable-stream "^2.0.1"
-
-merge@^1.1.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
-
-micromatch@^2.1.5, micromatch@^2.3.11:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-micromatch@^3.1.4, micromatch@^3.1.8:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.1"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- extglob "^2.0.4"
- fragment-cache "^0.2.1"
- kind-of "^6.0.2"
- nanomatch "^1.2.9"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.2"
-
-mime-db@~1.33.0:
- version "1.33.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
-
-mime-types@^2.1.12, mime-types@~2.1.17:
- version "2.1.18"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
- dependencies:
- mime-db "~1.33.0"
-
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
-
-minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-
-minipass@^2.2.1, minipass@^2.2.4:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.1.tgz#4e872b959131a672837ab3cb554962bc84b1537d"
- dependencies:
- safe-buffer "^5.1.1"
- yallist "^3.0.0"
-
-minizlib@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
- dependencies:
- minipass "^2.2.1"
-
-mixin-deep@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-mkdirp@^0.5.0, mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-
-nan@^2.9.2:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
-
-nanomatch@^1.2.9:
- version "1.2.9"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2"
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- fragment-cache "^0.2.1"
- is-odd "^2.0.0"
- is-windows "^1.0.2"
- kind-of "^6.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-
-needle@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d"
- dependencies:
- debug "^2.1.2"
- iconv-lite "^0.4.4"
- sax "^1.2.4"
-
-node-int64@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
-
-node-notifier@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
- dependencies:
- growly "^1.3.0"
- semver "^5.4.1"
- shellwords "^0.1.1"
- which "^1.3.0"
-
-node-pre-gyp@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46"
- dependencies:
- detect-libc "^1.0.2"
- mkdirp "^0.5.1"
- needle "^2.2.0"
- nopt "^4.0.1"
- npm-packlist "^1.1.6"
- npmlog "^4.0.2"
- rc "^1.1.7"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^4"
-
-nopt@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
-normalize-package-data@^2.3.2:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
- dependencies:
- hosted-git-info "^2.1.4"
- is-builtin-module "^1.0.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-npm-bundled@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308"
-
-npm-packlist@^1.1.6:
- version "1.1.10"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a"
- dependencies:
- ignore-walk "^3.0.1"
- npm-bundled "^1.0.1"
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- dependencies:
- path-key "^2.0.0"
-
-npmlog@^4.0.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-nwmatcher@^1.4.3:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
-
-oauth-sign@~0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-object-assign@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-keys@^1.0.8:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- dependencies:
- isobject "^3.0.0"
-
-object.getownpropertydescriptors@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.1"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- dependencies:
- isobject "^3.0.1"
-
-once@^1.3.0, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-optimist@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
-
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
- dependencies:
- execa "^0.7.0"
- lcid "^1.0.0"
- mem "^1.1.0"
-
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-osenv@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-
-p-limit@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
- dependencies:
- p-try "^1.0.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- dependencies:
- p-limit "^1.1.0"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- dependencies:
- error-ex "^1.2.0"
-
-parse5@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-
-path-exists@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
- dependencies:
- pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-key@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-path-type@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-pkg-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
- dependencies:
- find-up "^2.1.0"
-
-pn@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-pretty-format@^22.4.0, pretty-format@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f"
- dependencies:
- ansi-regex "^3.0.0"
- ansi-styles "^3.2.0"
-
-private@^0.1.8:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
-
-process-nextick-args@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
-
-pseudomap@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-punycode@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
-
-qs@~6.5.1:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
-
-randomatic@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923"
- dependencies:
- is-number "^4.0.0"
- kind-of "^6.0.0"
- math-random "^1.0.1"
-
-rc@^1.1.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297"
- dependencies:
- deep-extend "^0.5.1"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
-read-pkg@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
- dependencies:
- load-json-file "^1.0.0"
- normalize-package-data "^2.3.2"
- path-type "^1.0.0"
-
-readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
-realpath-native@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0"
- dependencies:
- util.promisify "^1.0.0"
-
-regenerator-runtime@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
-
-regex-cache@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
- dependencies:
- is-equal-shallow "^0.1.3"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- dependencies:
- extend-shallow "^3.0.2"
- safe-regex "^1.1.0"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-
-repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-
-repeat-string@^1.5.2, repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- dependencies:
- is-finite "^1.0.0"
-
-request-promise-core@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
- dependencies:
- lodash "^4.13.1"
-
-request-promise-native@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5"
- dependencies:
- request-promise-core "1.1.1"
- stealthy-require "^1.1.0"
- tough-cookie ">=2.3.3"
-
-request@^2.83.0:
- version "2.86.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.86.0.tgz#2b9497f449b0a32654c081a5cf426bbfb5bf5b69"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
- forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
- performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- tough-cookie "~2.3.3"
- tunnel-agent "^0.6.0"
- uuid "^3.1.0"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
-
-resolve-cwd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
- dependencies:
- resolve-from "^3.0.0"
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-
-resolve@1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-
-resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.5.0:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3"
- dependencies:
- path-parse "^1.0.5"
-
-ret@~0.1.10:
- version "0.1.15"
- resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@^2.5.4, rimraf@^2.6.1:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
- dependencies:
- glob "^7.0.5"
-
-rollup-plugin-commonjs@^9.0.0:
- version "9.1.3"
- resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.3.tgz#37bfbf341292ea14f512438a56df8f9ca3ba4d67"
- dependencies:
- estree-walker "^0.5.1"
- magic-string "^0.22.4"
- resolve "^1.5.0"
- rollup-pluginutils "^2.0.1"
-
-rollup-plugin-json@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-3.0.0.tgz#aeed2ff36e6c4fd0c60c4a8fc3d0884479e9dfce"
- dependencies:
- rollup-pluginutils "^2.2.0"
-
-rollup-plugin-node-resolve@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713"
- dependencies:
- builtin-modules "^2.0.0"
- is-module "^1.0.0"
- resolve "^1.1.6"
-
-rollup-plugin-sourcemaps@^0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz#62125aa94087aadf7b83ef4dfaf629b473135e87"
- dependencies:
- rollup-pluginutils "^2.0.1"
- source-map-resolve "^0.5.0"
-
-rollup-plugin-typescript2@^0.11.1:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.11.1.tgz#c308de734baaed8ed8316dc8501a82a0ced674f4"
- dependencies:
- fs-extra "^5.0.0"
- resolve "^1.5.0"
- rollup-pluginutils "^2.0.1"
- tslib "^1.9.0"
-
-rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz#478ace04bd7f6da2e724356ca798214884738fc4"
- dependencies:
- estree-walker "^0.5.2"
- micromatch "^2.3.11"
-
-rollup@^0.58.0:
- version "0.58.2"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.58.2.tgz#2feddea8c0c022f3e74b35c48e3c21b3433803ce"
- dependencies:
- "@types/estree" "0.0.38"
- "@types/node" "*"
-
-rsvp@^3.3.3:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-
-safe-regex@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
- dependencies:
- ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-
-sane@^2.0.0:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa"
- dependencies:
- anymatch "^2.0.0"
- capture-exit "^1.2.0"
- exec-sh "^0.2.0"
- fb-watchman "^2.0.0"
- micromatch "^3.1.4"
- minimist "^1.1.1"
- walker "~1.0.5"
- watch "~0.18.0"
- optionalDependencies:
- fsevents "^1.2.3"
-
-sax@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-set-value@^0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.1"
- to-object-path "^0.3.0"
-
-set-value@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shell-quote@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
- dependencies:
- array-filter "~0.0.0"
- array-map "~0.0.0"
- array-reduce "~0.0.0"
- jsonify "~0.0.0"
-
-shellwords@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
-
-signal-exit@^3.0.0, signal-exit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-slash@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-
-snapdragon-node@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^3.1.0"
-
-sntp@2.x.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
- dependencies:
- hoek "4.x.x"
-
-source-map-resolve@^0.5.0:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
- dependencies:
- atob "^2.1.1"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@^0.4.15:
- version "0.4.18"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
- dependencies:
- source-map "^0.5.6"
-
-source-map-support@^0.5.0, source-map-support@^0.5.3, source-map-support@^0.5.5:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13"
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
-
-source-map@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-source-map@^0.6.0, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-
-spdx-correct@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
-
-spdx-expression-parse@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- dependencies:
- extend-shallow "^3.0.0"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-stack-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.0"
-
-stealthy-require@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
-
-string-length@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
- dependencies:
- astral-regex "^1.0.0"
- strip-ansi "^4.0.0"
-
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0, string-width@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-bom@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
-strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- dependencies:
- is-utf8 "^0.2.0"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-subarg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
- dependencies:
- minimist "^1.1.0"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.1.2:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- dependencies:
- has-flag "^1.0.0"
-
-supports-color@^5.3.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
- dependencies:
- has-flag "^3.0.0"
-
-symbol-tree@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
-
-tar@^4:
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462"
- dependencies:
- chownr "^1.0.1"
- fs-minipass "^1.2.5"
- minipass "^2.2.4"
- minizlib "^1.1.0"
- mkdirp "^0.5.0"
- safe-buffer "^5.1.2"
- yallist "^3.0.2"
-
-test-exclude@^4.2.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa"
- dependencies:
- arrify "^1.0.1"
- micromatch "^3.1.8"
- object-assign "^4.1.0"
- read-pkg-up "^1.0.1"
- require-main-filename "^1.0.1"
-
-throat@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
-
-tmpl@1.0.x:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
-
-to-fast-properties@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- dependencies:
- kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- dependencies:
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- regex-not "^1.0.2"
- safe-regex "^1.1.0"
-
-tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
- dependencies:
- punycode "^1.4.1"
-
-tr46@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
- dependencies:
- punycode "^2.1.0"
-
-trim-right@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
-
-ts-jest@^22.0.0:
- version "22.4.6"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-22.4.6.tgz#a5d7f5e8b809626d1f4143209d301287472ec344"
- dependencies:
- babel-core "^6.26.3"
- babel-plugin-istanbul "^4.1.6"
- babel-plugin-transform-es2015-modules-commonjs "^6.26.2"
- babel-preset-jest "^22.4.3"
- cpx "^1.5.0"
- fs-extra "6.0.0"
- jest-config "^22.4.3"
- lodash "^4.17.10"
- pkg-dir "^2.0.0"
- source-map-support "^0.5.5"
- yargs "^11.0.0"
-
-ts-node@^6.0.0:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-6.0.5.tgz#977c1c931da7a2b09ae2930101f0104a5c2271e9"
- dependencies:
- arrify "^1.0.0"
- chalk "^2.3.0"
- diff "^3.1.0"
- make-error "^1.1.1"
- minimist "^1.2.0"
- mkdirp "^0.5.1"
- source-map-support "^0.5.3"
- yn "^2.0.0"
-
-tslib@^1.0.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.1.tgz#a5d1f0532a49221c87755cfcc89ca37197242ba7"
-
-tslint-config-prettier@^1.1.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.13.0.tgz#189e821931ad89e0364e4e292d5c44a14e90ecd6"
-
-tslint-config-standard@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/tslint-config-standard/-/tslint-config-standard-7.0.0.tgz#47bbf25578ed2212456f892d51e1abe884a29f15"
- dependencies:
- tslint-eslint-rules "^4.1.1"
-
-tslint-eslint-rules@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz#7c30e7882f26bc276bff91d2384975c69daf88ba"
- dependencies:
- doctrine "^0.7.2"
- tslib "^1.0.0"
- tsutils "^1.4.0"
-
-tslint@^5.10.0:
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.10.0.tgz#11e26bccb88afa02dd0d9956cae3d4540b5f54c3"
- dependencies:
- babel-code-frame "^6.22.0"
- builtin-modules "^1.1.1"
- chalk "^2.3.0"
- commander "^2.12.1"
- diff "^3.2.0"
- glob "^7.1.1"
- js-yaml "^3.7.0"
- minimatch "^3.0.4"
- resolve "^1.3.2"
- semver "^5.3.0"
- tslib "^1.8.0"
- tsutils "^2.12.1"
-
-tsutils@^1.4.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0"
-
-tsutils@^2.12.1:
- version "2.27.1"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.1.tgz#ab0276ac23664f36ce8fd4414daec4aebf4373ee"
- dependencies:
- tslib "^1.8.1"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- dependencies:
- prelude-ls "~1.1.2"
-
-typescript@^2.8.3:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170"
-
-uglify-js@^2.6:
- version "2.8.29"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
- dependencies:
- source-map "~0.5.1"
- yargs "~3.10.0"
- optionalDependencies:
- uglify-to-browserify "~1.0.0"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-union-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^0.4.3"
-
-universalify@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
-
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-
-use@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544"
- dependencies:
- kind-of "^6.0.2"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-util.promisify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
- dependencies:
- define-properties "^1.1.2"
- object.getownpropertydescriptors "^2.0.3"
-
-uuid@^3.1.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
-
-validate-npm-package-license@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-vlq@^0.2.2:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
-
-w3c-hr-time@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
- dependencies:
- browser-process-hrtime "^0.1.2"
-
-walker@~1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
- dependencies:
- makeerror "1.0.x"
-
-watch@~0.18.0:
- version "0.18.0"
- resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
- dependencies:
- exec-sh "^0.2.0"
- minimist "^1.2.0"
-
-webidl-conversions@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
-
-whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3"
- dependencies:
- iconv-lite "0.4.19"
-
-whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4"
-
-whatwg-url@^6.4.0:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.1.tgz#fdb94b440fd4ad836202c16e9737d511f012fd67"
- dependencies:
- lodash.sortby "^4.7.0"
- tr46 "^1.0.1"
- webidl-conversions "^4.0.2"
-
-which-module@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
-
-which@^1.2.12, which@^1.2.9, which@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
- dependencies:
- isexe "^2.0.0"
-
-wide-align@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
- dependencies:
- string-width "^1.0.2"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-write-file-atomic@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
- dependencies:
- graceful-fs "^4.1.11"
- imurmurhash "^0.1.4"
- signal-exit "^3.0.2"
-
-ws@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289"
- dependencies:
- async-limiter "~1.0.0"
- safe-buffer "~5.1.0"
-
-xml-name-validator@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
-
-y18n@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yallist@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-
-yallist@^3.0.0, yallist@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
-
-yargs-parser@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
- dependencies:
- camelcase "^4.1.0"
-
-yargs-parser@^9.0.2:
- version "9.0.2"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
- dependencies:
- camelcase "^4.1.0"
-
-yargs@^10.0.3:
- version "10.1.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
- dependencies:
- cliui "^4.0.0"
- decamelize "^1.1.1"
- find-up "^2.1.0"
- get-caller-file "^1.0.1"
- os-locale "^2.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1"
- yargs-parser "^8.1.0"
-
-yargs@^11.0.0:
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b"
- dependencies:
- cliui "^4.0.0"
- decamelize "^1.1.1"
- find-up "^2.1.0"
- get-caller-file "^1.0.1"
- os-locale "^2.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1"
- yargs-parser "^9.0.2"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"
-
-yn@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"