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":"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"} \ 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":";;;;;;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,0CAAuB,CAAA;MACvB,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;EAoDD;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;;EC5NM,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;MAChCA,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;MAC/BA,uBAAe,CAAC,yBAAyB;MACzCA,uBAAe,CAAC,4BAA4B;MAC5CA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,qBAAqB;MACrCA,uBAAe,CAAC,UAAU;MAC1BA,uBAAe,CAAC,WAAW;MAC3BA,uBAAe,CAAC,sBAAsB;MACtCA,uBAAe,CAAC,oBAAoB;MACpCA,uBAAe,CAAC,YAAY;MAC5BA,uBAAe,CAAC,kBAAkB;GACnC,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;MAChCA,uBAAe,CAAC,oBAAoB;MACpCA,uBAAe,CAAC,QAAQ;MACxBA,uBAAe,CAAC,QAAQ;MACxBA,uBAAe,CAAC,SAAS;MACzBA,uBAAe,CAAC,UAAU;MAC1BA,uBAAe,CAAC,OAAO;MACvBA,uBAAe,CAAC,SAAS;MACzBA,uBAAe,CAAC,SAAS;MACzBA,uBAAe,CAAC,YAAY;MAC5BA,uBAAe,CAAC,gBAAgB;MAChCA,uBAAe,CAAC,gBAAgB;MAChCA,uBAAe,CAAC,iBAAiB;MACjCA,uBAAe,CAAC,cAAc;MAC9BA,uBAAe,CAAC,eAAe;MAC/BA,uBAAe,CAAC,qCAAqC;MACrDA,uBAAe,CAAC,2BAA2B;MAC3CA,uBAAe,CAAC,6BAA6B;GAC9C,CAAC,CAAC;;EC1GH,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAGnC,EAEA,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,mBAAmB,EAAE,gCAAgC;MACrD,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,WAAgB,QAAQ,CAAC,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,SAAS,SAAS,CAAC,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;UACjC,KAAK,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,CAAC,GAAG,CAAC,CAAC,GAAG;kBACxB,MAAM,GAAG,GAAG,EAAkB,CAAC;kBAC/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;cAEH,OAAO,CAAC,IAAI,CAAC,CAAC;WACf,CAAC,CAAC;OACJ,CAAC,CAAC;EACL,CAAC;EAED,SAAS,SAAS,CAAC,MAAgB,EAAE,KAAa,EAAE,KAAe;MACjE,IAAI,KAAK,CAAC;MACV,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;UACtB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;UACzB,IAAI,KAAK,EAAE;cACT,MAAM;WACP;OACF;MAED,IAAI,CAAC,KAAK,EAAE;UACV,OAAO,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;OAC5B;MAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;EAClB,CAAC;EAED,SAAS,aAAa,CAAC,OAAiB,EAAE,OAAiB;MACzD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;MACtC,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;MACjD,IAAI,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;;;;;MAMtD,IAAI,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE;UACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;UAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;UAGpC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;cACtB,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;cAChB,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;WACrB;OACF;MAED,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,GAAG,CAAC;cAClB,OAAO,EAAE,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;WACrD;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,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;cACjF,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;cAC1F,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;cAC7E,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;cACnE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC;cACrD,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC;WAC9D;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 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":";;AAAA,yCAA8B;AAG9B,+CAAsE;AAEtE,MAAM,UAAU,GAAG;IACjB,UAAU,EAAE,uBAAuB;IACnC,SAAS,EAAE,qBAAqB;IAChC,YAAY,EAAE,wBAAwB;IACtC,UAAU,EAAE,6BAA6B;IACzC,WAAW,EAAE,uBAAuB;IACpC,QAAQ,EAAE,kCAAkC;IAC5C,aAAa,EAAE,yBAAyB;IACxC,YAAY,EAAE,wBAAwB;IACtC,gBAAgB,EAAE,4BAA4B;IAC9C,mBAAmB,EAAE,qCAAqC;IAC1D,oBAAoB,EAAE,+BAA+B;IACrD,iBAAiB,EAAE,qBAAqB;IACxC,YAAY,EAAE,+BAA+B;IAC7C,eAAe,EAAE,2BAA2B;IAC5C,cAAc,EAAE,0CAA0C;IAC1D,UAAU,EAAE,qCAAqC;IACjD,cAAc,EAAE,0BAA0B;IAC1C,cAAc,EAAE,uCAAuC;IACvD,UAAU,EAAE,kCAAkC;IAC9C,kBAAkB,EAAE,+BAA+B;IACnD,WAAW,EAAE,+BAA+B;CAC7C,CAAC;AAEF,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,kBAAyB,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,KAAK,CAAC,GAAG,EAAE,CAAC;KACb;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,QAAQ;QACR,IAAI;KACL,CAAC,CAAC,CAAC;AACN,CAAC;AAhBD,4BAgBC;AAED,mBAAmB,KAAe;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,CAAC;QACP,kBAAkB,EAAE,IAAI;KACzB,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,mBAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAQ,EAAE,MAAgB,EAAE,EAAE;YAClD,IAAI,GAAG,EAAE;gBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;YAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;YAElC,MAAM,IAAI,GAAG,IAAI;iBACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,MAAM,GAAG,GAAG,EAAkB,CAAC;gBAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAqB,CAAC;oBACpD,IAAI,KAAK,GAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;oBAExB,IAAI,wBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;wBAC1B,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;qBAC7B;oBAED,IAAI,0BAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;wBAC5B,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;qBAC3B;oBAED,IAAI,yBAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;wBAC3B,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC;qBACvB;oBAED,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;iBACrB;gBAED,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;YAEL,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAAA,CAAC;AAEF,mBAAmB,MAAgB,EAAE,KAAa;IAChD,IAAI,KAAK,CAAC;IAEV,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACtB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,EAAE;YACT,MAAM;SACP;KACF;IAED,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,KAAK,CAAC;KACd;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAAA,CAAC;AAEF,uBAAuB,OAAiB,EAAE,OAAiB;IACzD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAEtC,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;QAClD,OAAO,EAAE;YACP,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;YACzC,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;YACzD,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;YACrD,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;SAC7D;QACD,MAAM,EAAE;YACN,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;YAC9C,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SAC7D;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC;YAChD,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;YAC9C,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC;SACvD;QACD,OAAO,EAAE;YACP,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC;YAC3E,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC;YACpF,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACvE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;YAC7D,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC;SACtD;QACD,gBAAgB,EAAE;YAChB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;YACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;SACjD;QACD,MAAM,EAAE;YACN,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;SACrD;QACD,gBAAgB,EAAE;YAChB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;YACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;SACjD;QACD,MAAM,EAAE;YACN,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC;SAC7D;KACF,CAAC;AACJ,CAAC;AAAA,CAAC"} \ No newline at end of file +{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":";;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAGnC,+CAAsE;AAEtE,MAAM,UAAU,GAAG;IACjB,UAAU,EAAE,uBAAuB;IACnC,SAAS,EAAE,qBAAqB;IAChC,YAAY,EAAE,wBAAwB;IACtC,UAAU,EAAE,6BAA6B;IACzC,WAAW,EAAE,uBAAuB;IACpC,QAAQ,EAAE,kCAAkC;IAC5C,aAAa,EAAE,yBAAyB;IACxC,YAAY,EAAE,wBAAwB;IACtC,gBAAgB,EAAE,4BAA4B;IAC9C,mBAAmB,EAAE,qCAAqC;IAC1D,oBAAoB,EAAE,+BAA+B;IACrD,iBAAiB,EAAE,qBAAqB;IACxC,YAAY,EAAE,+BAA+B;IAC7C,mBAAmB,EAAE,gCAAgC;IACrD,eAAe,EAAE,2BAA2B;IAC5C,cAAc,EAAE,0CAA0C;IAC1D,UAAU,EAAE,qCAAqC;IACjD,cAAc,EAAE,0BAA0B;IAC1C,cAAc,EAAE,uCAAuC;IACvD,UAAU,EAAE,kCAAkC;IAC9C,kBAAkB,EAAE,+BAA+B;IACnD,WAAW,EAAE,+BAA+B;CAC7C,CAAC;AAEF,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAgB,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,KAAK,CAAC,GAAG,EAAE,CAAC;KACb;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,QAAQ;QACR,IAAI;KACL,CAAC,CAAC,CAAC;AACN,CAAC;AAhBD,4BAgBC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,CAAC;QACP,kBAAkB,EAAE,IAAI;KACzB,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAQ,EAAE,MAAgB,EAAE,EAAE;YAClD,IAAI,GAAG,EAAE;gBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;YAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;YAElC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAG,EAAkB,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAqB,CAAC;oBACpD,IAAI,KAAK,GAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;oBAExB,IAAI,wBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;wBAC1B,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;qBAC7B;oBAED,IAAI,0BAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;wBAC5B,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;qBAC3B;oBAED,IAAI,yBAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;wBAC3B,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC;qBACvB;oBAED,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;iBACrB;gBAED,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB,EAAE,KAAa,EAAE,KAAe;IACjE,IAAI,KAAK,CAAC;IACV,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACtB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,KAAK,EAAE;YACT,MAAM;SACP;KACF;IAED,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;KAC5B;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,OAAiB,EAAE,OAAiB;IACzD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAEtD,kHAAkH;IAClH,kHAAkH;IAClH,mHAAmH;IACnH,6GAA6G;IAC7G,IAAI,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpC,6GAA6G;QAC7G,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACtB,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SACrB;KACF;IAED,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;QAClD,OAAO,EAAE;YACP,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;YACzC,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;YACzD,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;YAClB,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;SACrD;QACD,MAAM,EAAE;YACN,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;YAC9C,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SAC7D;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC;YAChD,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;YAC9C,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC;SACvD;QACD,OAAO,EAAE;YACP,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACjF,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAC1F,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAC7E,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACnE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC;YACrD,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC;SAC9D;QACD,gBAAgB,EAAE;YAChB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;YACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;SACjD;QACD,MAAM,EAAE;YACN,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;SACrD;QACD,gBAAgB,EAAE;YAChB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;YACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;SACjD;QACD,MAAM,EAAE;YACN,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC;SAC7D;KACF,CAAC;AACJ,CAAC"} \ 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"