aboutsummaryrefslogtreecommitdiff
path: root/node_modules/table
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/table
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/table')
-rw-r--r--node_modules/table/LICENSE24
-rw-r--r--node_modules/table/README.md671
-rw-r--r--node_modules/table/dist/alignString.js106
-rw-r--r--node_modules/table/dist/alignTableData.js34
-rw-r--r--node_modules/table/dist/calculateCellHeight.js47
-rw-r--r--node_modules/table/dist/calculateCellWidthIndex.js23
-rw-r--r--node_modules/table/dist/calculateMaximumColumnWidthIndex.js37
-rw-r--r--node_modules/table/dist/calculateRowHeightIndex.js48
-rw-r--r--node_modules/table/dist/createStream.js157
-rw-r--r--node_modules/table/dist/drawBorder.js96
-rw-r--r--node_modules/table/dist/drawRow.js21
-rw-r--r--node_modules/table/dist/drawTable.js59
-rw-r--r--node_modules/table/dist/getBorderCharacters.js126
-rw-r--r--node_modules/table/dist/index.js24
-rw-r--r--node_modules/table/dist/makeConfig.js99
-rw-r--r--node_modules/table/dist/makeStreamConfig.js107
-rw-r--r--node_modules/table/dist/mapDataUsingRowHeightIndex.js57
-rw-r--r--node_modules/table/dist/padTableData.js20
-rw-r--r--node_modules/table/dist/schemas/config.json114
-rw-r--r--node_modules/table/dist/schemas/streamConfig.json114
-rw-r--r--node_modules/table/dist/stringifyTableData.js17
-rw-r--r--node_modules/table/dist/table.js133
-rw-r--r--node_modules/table/dist/truncateTableData.js27
-rw-r--r--node_modules/table/dist/validateConfig.js753
-rw-r--r--node_modules/table/dist/validateStreamConfig.js740
-rw-r--r--node_modules/table/dist/validateTableData.js51
-rw-r--r--node_modules/table/dist/wrapString.js42
-rw-r--r--node_modules/table/dist/wrapWord.js52
-rw-r--r--node_modules/table/package.json71
29 files changed, 3870 insertions, 0 deletions
diff --git a/node_modules/table/LICENSE b/node_modules/table/LICENSE
new file mode 100644
index 00000000..7e84ea3a
--- /dev/null
+++ b/node_modules/table/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2016, Gajus Kuizinas (http://gajus.com/)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Gajus Kuizinas (http://gajus.com/) nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL ANUARY BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/table/README.md b/node_modules/table/README.md
new file mode 100644
index 00000000..14e3934e
--- /dev/null
+++ b/node_modules/table/README.md
@@ -0,0 +1,671 @@
+<a name="table"></a>
+# Table
+
+[![Travis build status](http://img.shields.io/travis/gajus/table/master.svg?style=flat)](https://travis-ci.org/gajus/table)
+[![NPM version](http://img.shields.io/npm/v/table.svg?style=flat)](https://www.npmjs.com/package/table)
+[![js-canonical-style](https://img.shields.io/badge/code%20style-canonical-brightgreen.svg?style=flat)](https://github.com/gajus/canonical)
+
+* [Table](#table)
+ * [Features](#table-features)
+ * [Usage](#table-usage)
+ * [Cell Content Alignment](#table-usage-cell-content-alignment)
+ * [Column Width](#table-usage-column-width)
+ * [Custom Border](#table-usage-custom-border)
+ * [Draw Horizontal Line](#table-usage-draw-horizontal-line)
+ * [Padding Cell Content](#table-usage-padding-cell-content)
+ * [Predefined Border Templates](#table-usage-predefined-border-templates)
+ * [Streaming](#table-usage-streaming)
+ * [Text Truncation](#table-usage-text-truncation)
+ * [Text Wrapping](#table-usage-text-wrapping)
+
+
+Produces a string that represents array data in a text table.
+
+![Demo of table displaying a list of missions to the Moon.](./.README/demo.png)
+
+<a name="table-features"></a>
+## Features
+
+* Works with strings containing [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) characters.
+* Works with strings containing [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code).
+* Configurable border characters.
+* Configurable content alignment per column.
+* Configurable content padding per column.
+* Configurable column width.
+* Text wrapping.
+
+<a name="table-usage"></a>
+## Usage
+
+Table data is described using an array (rows) of array (cells).
+
+```js
+import {
+ table
+} from 'table';
+
+// Using commonjs?
+// const {table} = require('table');
+
+let data,
+ output;
+
+data = [
+ ['0A', '0B', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C']
+];
+
+/**
+ * @typedef {string} table~cell
+ */
+
+/**
+ * @typedef {table~cell[]} table~row
+ */
+
+/**
+ * @typedef {Object} table~columns
+ * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left).
+ * @property {number} width Column width (default: auto).
+ * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity).
+ * @property {number} paddingLeft Cell content padding width left (default: 1).
+ * @property {number} paddingRight Cell content padding width right (default: 1).
+ */
+
+/**
+ * @typedef {Object} table~border
+ * @property {string} topBody
+ * @property {string} topJoin
+ * @property {string} topLeft
+ * @property {string} topRight
+ * @property {string} bottomBody
+ * @property {string} bottomJoin
+ * @property {string} bottomLeft
+ * @property {string} bottomRight
+ * @property {string} bodyLeft
+ * @property {string} bodyRight
+ * @property {string} bodyJoin
+ * @property {string} joinBody
+ * @property {string} joinLeft
+ * @property {string} joinRight
+ * @property {string} joinJoin
+ */
+
+/**
+ * Used to dynamically tell table whether to draw a line separating rows or not.
+ * The default behavior is to always return true.
+ *
+ * @typedef {function} drawJoin
+ * @param {number} index
+ * @param {number} size
+ * @return {boolean}
+ */
+
+/**
+ * @typedef {Object} table~config
+ * @property {table~border} border
+ * @property {table~columns[]} columns Column specific configuration.
+ * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values.
+ * @property {table~drawJoin} drawHorizontalLine
+ */
+
+/**
+ * Generates a text table.
+ *
+ * @param {table~row[]} rows
+ * @param {table~config} config
+ * @return {String}
+ */
+output = table(data);
+
+console.log(output);
+```
+
+```
+╔════╤════╤════╗
+║ 0A │ 0B │ 0C ║
+╟────┼────┼────╢
+║ 1A │ 1B │ 1C ║
+╟────┼────┼────╢
+║ 2A │ 2B │ 2C ║
+╚════╧════╧════╝
+```
+
+
+<a name="table-usage-cell-content-alignment"></a>
+### Cell Content Alignment
+
+`{string} config.columns[{number}].alignment` property controls content horizontal alignment within a cell.
+
+Valid values are: "left", "right" and "center".
+
+```js
+let config,
+ data,
+ output;
+
+data = [
+ ['0A', '0B', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C']
+];
+
+config = {
+ columns: {
+ 0: {
+ alignment: 'left',
+ minWidth: 10
+ },
+ 1: {
+ alignment: 'center',
+ minWidth: 10
+ },
+ 2: {
+ alignment: 'right',
+ minWidth: 10
+ }
+ }
+};
+
+output = table(data, config);
+
+console.log(output);
+```
+
+```
+╔════════════╤════════════╤════════════╗
+║ 0A │ 0B │ 0C ║
+╟────────────┼────────────┼────────────╢
+║ 1A │ 1B │ 1C ║
+╟────────────┼────────────┼────────────╢
+║ 2A │ 2B │ 2C ║
+╚════════════╧════════════╧════════════╝
+```
+
+<a name="table-usage-column-width"></a>
+### Column Width
+
+`{number} config.columns[{number}].width` property restricts column width to a fixed width.
+
+```js
+let data,
+ output,
+ options;
+
+data = [
+ ['0A', '0B', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C']
+];
+
+options = {
+ columns: {
+ 1: {
+ width: 10
+ }
+ }
+};
+
+output = table(data, options);
+
+console.log(output);
+```
+
+```
+╔════╤════════════╤════╗
+║ 0A │ 0B │ 0C ║
+╟────┼────────────┼────╢
+║ 1A │ 1B │ 1C ║
+╟────┼────────────┼────╢
+║ 2A │ 2B │ 2C ║
+╚════╧════════════╧════╝
+```
+
+<a name="table-usage-custom-border"></a>
+### Custom Border
+
+`{object} config.border` property describes characters used to draw the table border.
+
+```js
+let config,
+ data,
+ output;
+
+data = [
+ ['0A', '0B', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C']
+];
+
+config = {
+ border: {
+ topBody: `─`,
+ topJoin: `┬`,
+ topLeft: `┌`,
+ topRight: `┐`,
+
+ bottomBody: `─`,
+ bottomJoin: `┴`,
+ bottomLeft: `└`,
+ bottomRight: `┘`,
+
+ bodyLeft: `│`,
+ bodyRight: `│`,
+ bodyJoin: `│`,
+
+ joinBody: `─`,
+ joinLeft: `├`,
+ joinRight: `┤`,
+ joinJoin: `┼`
+ }
+};
+
+output = table(data, config);
+
+console.log(output);
+```
+
+```
+┌────┬────┬────┐
+│ 0A │ 0B │ 0C │
+├────┼────┼────┤
+│ 1A │ 1B │ 1C │
+├────┼────┼────┤
+│ 2A │ 2B │ 2C │
+└────┴────┴────┘
+```
+
+<a name="table-usage-draw-horizontal-line"></a>
+### Draw Horizontal Line
+
+`{function} config.drawHorizontalLine` property is a function that is called for every non-content row in the table. The result of the function `{boolean}` determines whether a row is drawn.
+
+```js
+let data,
+ output,
+ options;
+
+data = [
+ ['0A', '0B', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C'],
+ ['3A', '3B', '3C'],
+ ['4A', '4B', '4C']
+];
+
+options = {
+ /**
+ * @typedef {function} drawJoin
+ * @param {number} index
+ * @param {number} size
+ * @return {boolean}
+ */
+ drawHorizontalLine: (index, size) => {
+ return index === 0 || index === 1 || index === size - 1 || index === size;
+ }
+};
+
+output = table(data, options);
+
+console.log(output);
+```
+
+```
+╔════╤════╤════╗
+║ 0A │ 0B │ 0C ║
+╟────┼────┼────╢
+║ 1A │ 1B │ 1C ║
+║ 2A │ 2B │ 2C ║
+║ 3A │ 3B │ 3C ║
+╟────┼────┼────╢
+║ 4A │ 4B │ 4C ║
+╚════╧════╧════╝
+```
+
+<a name="table-usage-padding-cell-content"></a>
+### Padding Cell Content
+
+`{number} config.columns[{number}].paddingLeft` and `{number} config.columns[{number}].paddingRight` properties control content padding within a cell. Property value represents a number of whitespaces used to pad the content.
+
+```js
+let config,
+ data,
+ output;
+
+data = [
+ ['0A', 'AABBCC', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C']
+];
+
+config = {
+ columns: {
+ 0: {
+ paddingLeft: 3
+ },
+ 1: {
+ width: 2,
+ paddingRight: 3
+ }
+ }
+};
+
+output = table(data, config);
+
+console.log(output);
+```
+
+```
+╔══════╤══════╤════╗
+║ 0A │ AA │ 0C ║
+║ │ BB │ ║
+║ │ CC │ ║
+╟──────┼──────┼────╢
+║ 1A │ 1B │ 1C ║
+╟──────┼──────┼────╢
+║ 2A │ 2B │ 2C ║
+╚══════╧══════╧════╝
+```
+
+<a name="table-usage-predefined-border-templates"></a>
+### Predefined Border Templates
+
+You can load one of the predefined border templates using `getBorderCharacters` function.
+
+```js
+import {
+ table,
+ getBorderCharacters
+} from 'table';
+
+let config,
+ data;
+
+data = [
+ ['0A', '0B', '0C'],
+ ['1A', '1B', '1C'],
+ ['2A', '2B', '2C']
+];
+
+config = {
+ border: getBorderCharacters(`name of the template`)
+};
+
+table(data, config);
+```
+
+```
+# honeywell
+
+╔════╤════╤════╗
+║ 0A │ 0B │ 0C ║
+╟────┼────┼────╢
+║ 1A │ 1B │ 1C ║
+╟────┼────┼────╢
+║ 2A │ 2B │ 2C ║
+╚════╧════╧════╝
+
+# norc
+
+┌────┬────┬────┐
+│ 0A │ 0B │ 0C │
+├────┼────┼────┤
+│ 1A │ 1B │ 1C │
+├────┼────┼────┤
+│ 2A │ 2B │ 2C │
+└────┴────┴────┘
+
+# ramac (ASCII; for use in terminals that do not support Unicode characters)
+
++----+----+----+
+| 0A | 0B | 0C |
+|----|----|----|
+| 1A | 1B | 1C |
+|----|----|----|
+| 2A | 2B | 2C |
++----+----+----+
+
+# void (no borders; see "bordless table" section of the documentation)
+
+ 0A 0B 0C
+
+ 1A 1B 1C
+
+ 2A 2B 2C
+
+```
+
+Raise [an issue](https://github.com/gajus/table/issues) if you'd like to contribute a new border template.
+
+<a name="table-usage-predefined-border-templates-borderless-table"></a>
+#### Borderless Table
+
+Simply using "void" border character template creates a table with a lot of unnecessary spacing.
+
+To create a more plesant to the eye table, reset the padding and remove the joining rows, e.g.
+
+```js
+let output;
+
+output = table(data, {
+ border: getBorderCharacters(`void`),
+ columnDefault: {
+ paddingLeft: 0,
+ paddingRight: 1
+ },
+ drawHorizontalLine: () => {
+ return false
+ }
+});
+
+console.log(output);
+```
+
+```
+0A 0B 0C
+1A 1B 1C
+2A 2B 2C
+```
+
+<a name="table-usage-streaming"></a>
+### Streaming
+
+`table` package exports `createStream` function used to draw a table and append rows.
+
+`createStream` requires `{number} columnDefault.width` and `{number} columnCount` configuration properties.
+
+```js
+import {
+ createStream
+} from 'table';
+
+let config,
+ stream;
+
+config = {
+ columnDefault: {
+ width: 50
+ },
+ columnCount: 1
+};
+
+stream = createStream(config);
+
+setInterval(() => {
+ stream.write([new Date()]);
+}, 500);
+```
+
+![Streaming current date.](./.README/streaming.gif)
+
+`table` package uses ANSI escape codes to overwrite the output of the last line when a new row is printed.
+
+The underlying implementation is explained in this [Stack Overflow answer](http://stackoverflow.com/a/32938658/368691).
+
+Streaming supports all of the configuration properties and functionality of a static table (such as auto text wrapping, alignment and padding), e.g.
+
+```js
+import {
+ createStream
+} from 'table';
+
+import _ from 'lodash';
+
+let config,
+ stream,
+ i;
+
+config = {
+ columnDefault: {
+ width: 50
+ },
+ columnCount: 3,
+ columns: {
+ 0: {
+ width: 10,
+ alignment: 'right'
+ },
+ 1: {
+ alignment: 'center',
+ },
+ 2: {
+ width: 10
+ }
+ }
+};
+
+stream = createStream(config);
+
+i = 0;
+
+setInterval(() => {
+ let random;
+
+ random = _.sample('abcdefghijklmnopqrstuvwxyz', _.random(1, 30)).join('');
+
+ stream.write([i++, new Date(), random]);
+}, 500);
+```
+
+![Streaming random data.](./.README/streaming-random.gif)
+<a name="table-usage-text-truncation"></a>
+### Text Truncation
+
+To handle a content that overflows the container width, `table` package implements [text wrapping](#table-usage-text-wrapping). However, sometimes you may want to truncate content that is too long to be displayed in the table.
+
+`{number} config.columns[{number}].truncate` property (default: `Infinity`) truncates the text at the specified length.
+
+```js
+let config,
+ data,
+ output;
+
+data = [
+ ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.']
+];
+
+config = {
+ columns: {
+ 0: {
+ width: 20,
+ truncate: 100
+ }
+ }
+};
+
+output = table(data, config);
+
+console.log(output);
+```
+
+```
+╔══════════════════════╗
+║ Lorem ipsum dolor si ║
+║ t amet, consectetur ║
+║ adipiscing elit. Pha ║
+║ sellus pulvinar nibh ║
+║ sed mauris conva... ║
+╚══════════════════════╝
+```
+
+<a name="table-usage-text-wrapping"></a>
+### Text Wrapping
+
+`table` package implements auto text wrapping, i.e. text that has width greater than the container width will be separated into multiple lines, e.g.
+
+```js
+let config,
+ data,
+ output;
+
+data = [
+ ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.']
+];
+
+config = {
+ columns: {
+ 0: {
+ width: 20
+ }
+ }
+};
+
+output = table(data, config);
+
+console.log(output);
+```
+
+```
+╔══════════════════════╗
+║ Lorem ipsum dolor si ║
+║ t amet, consectetur ║
+║ adipiscing elit. Pha ║
+║ sellus pulvinar nibh ║
+║ sed mauris convallis ║
+║ dapibus. Nunc venena ║
+║ tis tempus nulla sit ║
+║ amet viverra. ║
+╚══════════════════════╝
+```
+
+When `wrapWord` is `true` the text is broken at the nearest space or one of the special characters ("-", "_", "\", "/", ".", ",", ";"), e.g.
+
+```js
+let config,
+ data,
+ output;
+
+data = [
+ ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.']
+];
+
+config = {
+ columns: {
+ 0: {
+ width: 20,
+ wrapWord: true
+ }
+ }
+};
+
+output = table(data, config);
+
+console.log(output);
+```
+
+```
+╔══════════════════════╗
+║ Lorem ipsum dolor ║
+║ sit amet, ║
+║ consectetur ║
+║ adipiscing elit. ║
+║ Phasellus pulvinar ║
+║ nibh sed mauris ║
+║ convallis dapibus. ║
+║ Nunc venenatis ║
+║ tempus nulla sit ║
+║ amet viverra. ║
+╚══════════════════════╝
+```
+
diff --git a/node_modules/table/dist/alignString.js b/node_modules/table/dist/alignString.js
new file mode 100644
index 00000000..3a948d3a
--- /dev/null
+++ b/node_modules/table/dist/alignString.js
@@ -0,0 +1,106 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _stringWidth = require('string-width');
+
+var _stringWidth2 = _interopRequireDefault(_stringWidth);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const alignments = ['left', 'right', 'center'];
+
+/**
+ * @param {string} subject
+ * @param {number} width
+ * @returns {string}
+ */
+const alignLeft = (subject, width) => {
+ return subject + ' '.repeat(width);
+};
+
+/**
+ * @param {string} subject
+ * @param {number} width
+ * @returns {string}
+ */
+const alignRight = (subject, width) => {
+ return ' '.repeat(width) + subject;
+};
+
+/**
+ * @param {string} subject
+ * @param {number} width
+ * @returns {string}
+ */
+const alignCenter = (subject, width) => {
+ let halfWidth;
+
+ halfWidth = width / 2;
+
+ if (halfWidth % 2 === 0) {
+ return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth);
+ } else {
+ halfWidth = Math.floor(halfWidth);
+
+ return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth + 1);
+ }
+};
+
+/**
+ * Pads a string to the left and/or right to position the subject
+ * text in a desired alignment within a container.
+ *
+ * @param {string} subject
+ * @param {number} containerWidth
+ * @param {string} alignment One of the valid options (left, right, center).
+ * @returns {string}
+ */
+
+exports.default = (subject, containerWidth, alignment) => {
+ if (!_lodash2.default.isString(subject)) {
+ throw new TypeError('Subject parameter value must be a string.');
+ }
+
+ if (!_lodash2.default.isNumber(containerWidth)) {
+ throw new TypeError('Container width parameter value must be a number.');
+ }
+
+ const subjectWidth = (0, _stringWidth2.default)(subject);
+
+ if (subjectWidth > containerWidth) {
+ // console.log('subjectWidth', subjectWidth, 'containerWidth', containerWidth, 'subject', subject);
+
+ throw new Error('Subject parameter value width cannot be greater than the container width.');
+ }
+
+ if (!_lodash2.default.isString(alignment)) {
+ throw new TypeError('Alignment parameter value must be a string.');
+ }
+
+ if (alignments.indexOf(alignment) === -1) {
+ throw new Error('Alignment parameter value must be a known alignment parameter value (left, right, center).');
+ }
+
+ if (subjectWidth === 0) {
+ return ' '.repeat(containerWidth);
+ }
+
+ const availableWidth = containerWidth - subjectWidth;
+
+ if (alignment === 'left') {
+ return alignLeft(subject, availableWidth);
+ }
+
+ if (alignment === 'right') {
+ return alignRight(subject, availableWidth);
+ }
+
+ return alignCenter(subject, availableWidth);
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/alignTableData.js b/node_modules/table/dist/alignTableData.js
new file mode 100644
index 00000000..eb407845
--- /dev/null
+++ b/node_modules/table/dist/alignTableData.js
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _stringWidth = require('string-width');
+
+var _stringWidth2 = _interopRequireDefault(_stringWidth);
+
+var _alignString = require('./alignString');
+
+var _alignString2 = _interopRequireDefault(_alignString);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @param {table~row[]} rows
+ * @param {Object} config
+ * @returns {table~row[]}
+ */
+exports.default = (rows, config) => {
+ return rows.map(cells => {
+ return cells.map((value, index1) => {
+ const column = config.columns[index1];
+
+ if ((0, _stringWidth2.default)(value) === column.width) {
+ return value;
+ } else {
+ return (0, _alignString2.default)(value, column.width, column.alignment);
+ }
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/calculateCellHeight.js b/node_modules/table/dist/calculateCellHeight.js
new file mode 100644
index 00000000..7a897380
--- /dev/null
+++ b/node_modules/table/dist/calculateCellHeight.js
@@ -0,0 +1,47 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _stringWidth = require('string-width');
+
+var _stringWidth2 = _interopRequireDefault(_stringWidth);
+
+var _wrapWord = require('./wrapWord');
+
+var _wrapWord2 = _interopRequireDefault(_wrapWord);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @param {string} value
+ * @param {number} columnWidth
+ * @param {boolean} useWrapWord
+ * @returns {number}
+ */
+exports.default = function (value, columnWidth) {
+ let useWrapWord = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ if (!_lodash2.default.isString(value)) {
+ throw new TypeError('Value must be a string.');
+ }
+
+ if (!Number.isInteger(columnWidth)) {
+ throw new TypeError('Column width must be an integer.');
+ }
+
+ if (columnWidth < 1) {
+ throw new Error('Column width must be greater than 0.');
+ }
+
+ if (useWrapWord) {
+ return (0, _wrapWord2.default)(value, columnWidth).length;
+ }
+
+ return Math.ceil((0, _stringWidth2.default)(value) / columnWidth);
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/calculateCellWidthIndex.js b/node_modules/table/dist/calculateCellWidthIndex.js
new file mode 100644
index 00000000..e6bf927e
--- /dev/null
+++ b/node_modules/table/dist/calculateCellWidthIndex.js
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _stringWidth = require('string-width');
+
+var _stringWidth2 = _interopRequireDefault(_stringWidth);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Calculates width of each cell contents.
+ *
+ * @param {string[]} cells
+ * @returns {number[]}
+ */
+exports.default = cells => {
+ return cells.map(value => {
+ return (0, _stringWidth2.default)(value);
+ });
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/calculateMaximumColumnWidthIndex.js b/node_modules/table/dist/calculateMaximumColumnWidthIndex.js
new file mode 100644
index 00000000..da366c14
--- /dev/null
+++ b/node_modules/table/dist/calculateMaximumColumnWidthIndex.js
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _calculateCellWidthIndex = require('./calculateCellWidthIndex');
+
+var _calculateCellWidthIndex2 = _interopRequireDefault(_calculateCellWidthIndex);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Produces an array of values that describe the largest value length (width) in every column.
+ *
+ * @param {Array[]} rows
+ * @returns {number[]}
+ */
+exports.default = rows => {
+ if (!rows[0]) {
+ throw new Error('Dataset must have at least one row.');
+ }
+
+ const columns = Array(rows[0].length).fill(0);
+
+ rows.forEach(row => {
+ const columnWidthIndex = (0, _calculateCellWidthIndex2.default)(row);
+
+ columnWidthIndex.forEach((valueWidth, index0) => {
+ if (columns[index0] < valueWidth) {
+ columns[index0] = valueWidth;
+ }
+ });
+ });
+
+ return columns;
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/calculateRowHeightIndex.js b/node_modules/table/dist/calculateRowHeightIndex.js
new file mode 100644
index 00000000..2976ec43
--- /dev/null
+++ b/node_modules/table/dist/calculateRowHeightIndex.js
@@ -0,0 +1,48 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _calculateCellHeight = require('./calculateCellHeight');
+
+var _calculateCellHeight2 = _interopRequireDefault(_calculateCellHeight);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Calculates the vertical row span index.
+ *
+ * @param {Array[]} rows
+ * @param {Object} config
+ * @returns {number[]}
+ */
+exports.default = (rows, config) => {
+ const tableWidth = rows[0].length;
+
+ const rowSpanIndex = [];
+
+ rows.forEach(cells => {
+ const cellHeightIndex = Array(tableWidth).fill(1);
+
+ cells.forEach((value, index1) => {
+ if (!_lodash2.default.isNumber(config.columns[index1].width)) {
+ throw new TypeError('column[index].width must be a number.');
+ }
+
+ if (!_lodash2.default.isBoolean(config.columns[index1].wrapWord)) {
+ throw new TypeError('column[index].wrapWord must be a boolean.');
+ }
+
+ cellHeightIndex[index1] = (0, _calculateCellHeight2.default)(value, config.columns[index1].width, config.columns[index1].wrapWord);
+ });
+
+ rowSpanIndex.push(_lodash2.default.max(cellHeightIndex));
+ });
+
+ return rowSpanIndex;
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/createStream.js b/node_modules/table/dist/createStream.js
new file mode 100644
index 00000000..83698f0e
--- /dev/null
+++ b/node_modules/table/dist/createStream.js
@@ -0,0 +1,157 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _makeStreamConfig = require('./makeStreamConfig');
+
+var _makeStreamConfig2 = _interopRequireDefault(_makeStreamConfig);
+
+var _drawRow = require('./drawRow');
+
+var _drawRow2 = _interopRequireDefault(_drawRow);
+
+var _drawBorder = require('./drawBorder');
+
+var _stringifyTableData = require('./stringifyTableData');
+
+var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData);
+
+var _truncateTableData = require('./truncateTableData');
+
+var _truncateTableData2 = _interopRequireDefault(_truncateTableData);
+
+var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex');
+
+var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex);
+
+var _alignTableData = require('./alignTableData');
+
+var _alignTableData2 = _interopRequireDefault(_alignTableData);
+
+var _padTableData = require('./padTableData');
+
+var _padTableData2 = _interopRequireDefault(_padTableData);
+
+var _calculateRowHeightIndex = require('./calculateRowHeightIndex');
+
+var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @param {Array} data
+ * @param {Object} config
+ * @returns {Array}
+ */
+const prepareData = (data, config) => {
+ let rows;
+
+ rows = (0, _stringifyTableData2.default)(data);
+
+ rows = (0, _truncateTableData2.default)(data, config);
+
+ const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config);
+
+ rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config);
+ rows = (0, _alignTableData2.default)(rows, config);
+ rows = (0, _padTableData2.default)(rows, config);
+
+ return rows;
+};
+
+/**
+ * @param {string[]} row
+ * @param {number[]} columnWidthIndex
+ * @param {Object} config
+ * @returns {undefined}
+ */
+const create = (row, columnWidthIndex, config) => {
+ const rows = prepareData([row], config);
+
+ const body = rows.map(literalRow => {
+ return (0, _drawRow2.default)(literalRow, config.border);
+ }).join('');
+
+ let output;
+
+ output = '';
+
+ output += (0, _drawBorder.drawBorderTop)(columnWidthIndex, config.border);
+ output += body;
+ output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border);
+
+ output = _lodash2.default.trimEnd(output);
+
+ process.stdout.write(output);
+};
+
+/**
+ * @param {string[]} row
+ * @param {number[]} columnWidthIndex
+ * @param {Object} config
+ * @returns {undefined}
+ */
+const append = (row, columnWidthIndex, config) => {
+ const rows = prepareData([row], config);
+
+ const body = rows.map(literalRow => {
+ return (0, _drawRow2.default)(literalRow, config.border);
+ }).join('');
+
+ let output;
+
+ output = '\r\u001B[K';
+
+ output += (0, _drawBorder.drawBorderJoin)(columnWidthIndex, config.border);
+ output += body;
+ output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border);
+
+ output = _lodash2.default.trimEnd(output);
+
+ process.stdout.write(output);
+};
+
+/**
+ * @param {Object} userConfig
+ * @returns {Object}
+ */
+
+exports.default = function () {
+ let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ const config = (0, _makeStreamConfig2.default)(userConfig);
+
+ const columnWidthIndex = _lodash2.default.mapValues(config.columns, column => {
+ return column.width + column.paddingLeft + column.paddingRight;
+ });
+
+ let empty;
+
+ empty = true;
+
+ return {
+ /**
+ * @param {string[]} row
+ * @returns {undefined}
+ */
+ write: row => {
+ if (row.length !== config.columnCount) {
+ throw new Error('Row cell count does not match the config.columnCount.');
+ }
+
+ if (empty) {
+ empty = false;
+
+ return create(row, columnWidthIndex, config);
+ } else {
+ return append(row, columnWidthIndex, config);
+ }
+ }
+ };
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/drawBorder.js b/node_modules/table/dist/drawBorder.js
new file mode 100644
index 00000000..beae57f1
--- /dev/null
+++ b/node_modules/table/dist/drawBorder.js
@@ -0,0 +1,96 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+/**
+ * @typedef drawBorder~parts
+ * @property {string} left
+ * @property {string} right
+ * @property {string} body
+ * @property {string} join
+ */
+
+/**
+ * @param {number[]} columnSizeIndex
+ * @param {drawBorder~parts} parts
+ * @returns {string}
+ */
+const drawBorder = (columnSizeIndex, parts) => {
+ const columns = columnSizeIndex.map(size => {
+ return parts.body.repeat(size);
+ }).join(parts.join);
+
+ return parts.left + columns + parts.right + '\n';
+};
+
+/**
+ * @typedef drawBorderTop~parts
+ * @property {string} topLeft
+ * @property {string} topRight
+ * @property {string} topBody
+ * @property {string} topJoin
+ */
+
+/**
+ * @param {number[]} columnSizeIndex
+ * @param {drawBorderTop~parts} parts
+ * @returns {string}
+ */
+const drawBorderTop = (columnSizeIndex, parts) => {
+ return drawBorder(columnSizeIndex, {
+ body: parts.topBody,
+ join: parts.topJoin,
+ left: parts.topLeft,
+ right: parts.topRight
+ });
+};
+
+/**
+ * @typedef drawBorderJoin~parts
+ * @property {string} joinLeft
+ * @property {string} joinRight
+ * @property {string} joinBody
+ * @property {string} joinJoin
+ */
+
+/**
+ * @param {number[]} columnSizeIndex
+ * @param {drawBorderJoin~parts} parts
+ * @returns {string}
+ */
+const drawBorderJoin = (columnSizeIndex, parts) => {
+ return drawBorder(columnSizeIndex, {
+ body: parts.joinBody,
+ join: parts.joinJoin,
+ left: parts.joinLeft,
+ right: parts.joinRight
+ });
+};
+
+/**
+ * @typedef drawBorderBottom~parts
+ * @property {string} topLeft
+ * @property {string} topRight
+ * @property {string} topBody
+ * @property {string} topJoin
+ */
+
+/**
+ * @param {number[]} columnSizeIndex
+ * @param {drawBorderBottom~parts} parts
+ * @returns {string}
+ */
+const drawBorderBottom = (columnSizeIndex, parts) => {
+ return drawBorder(columnSizeIndex, {
+ body: parts.bottomBody,
+ join: parts.bottomJoin,
+ left: parts.bottomLeft,
+ right: parts.bottomRight
+ });
+};
+
+exports.drawBorder = drawBorder;
+exports.drawBorderBottom = drawBorderBottom;
+exports.drawBorderJoin = drawBorderJoin;
+exports.drawBorderTop = drawBorderTop; \ No newline at end of file
diff --git a/node_modules/table/dist/drawRow.js b/node_modules/table/dist/drawRow.js
new file mode 100644
index 00000000..65547fba
--- /dev/null
+++ b/node_modules/table/dist/drawRow.js
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+/**
+ * @typedef {Object} drawRow~border
+ * @property {string} bodyLeft
+ * @property {string} bodyRight
+ * @property {string} bodyJoin
+ */
+
+/**
+ * @param {number[]} columns
+ * @param {drawRow~border} border
+ * @returns {string}
+ */
+exports.default = (columns, border) => {
+ return border.bodyLeft + columns.join(border.bodyJoin) + border.bodyRight + '\n';
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/drawTable.js b/node_modules/table/dist/drawTable.js
new file mode 100644
index 00000000..01e8c3e1
--- /dev/null
+++ b/node_modules/table/dist/drawTable.js
@@ -0,0 +1,59 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _drawBorder = require('./drawBorder');
+
+var _drawRow = require('./drawRow');
+
+var _drawRow2 = _interopRequireDefault(_drawRow);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @param {Array} rows
+ * @param {Object} border
+ * @param {Array} columnSizeIndex
+ * @param {Array} rowSpanIndex
+ * @param {Function} drawHorizontalLine
+ * @returns {string}
+ */
+exports.default = (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine) => {
+ let output;
+ let realRowIndex;
+ let rowHeight;
+
+ const rowCount = rows.length;
+
+ realRowIndex = 0;
+
+ output = '';
+
+ if (drawHorizontalLine(realRowIndex, rowCount)) {
+ output += (0, _drawBorder.drawBorderTop)(columnSizeIndex, border);
+ }
+
+ rows.forEach((row, index0) => {
+ output += (0, _drawRow2.default)(row, border);
+
+ if (!rowHeight) {
+ rowHeight = rowSpanIndex[realRowIndex];
+
+ realRowIndex++;
+ }
+
+ rowHeight--;
+
+ if (rowHeight === 0 && index0 !== rowCount - 1 && drawHorizontalLine(realRowIndex, rowCount)) {
+ output += (0, _drawBorder.drawBorderJoin)(columnSizeIndex, border);
+ }
+ });
+
+ if (drawHorizontalLine(realRowIndex, rowCount)) {
+ output += (0, _drawBorder.drawBorderBottom)(columnSizeIndex, border);
+ }
+
+ return output;
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/getBorderCharacters.js b/node_modules/table/dist/getBorderCharacters.js
new file mode 100644
index 00000000..0a0f599c
--- /dev/null
+++ b/node_modules/table/dist/getBorderCharacters.js
@@ -0,0 +1,126 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+/* eslint-disable sort-keys */
+
+/**
+ * @typedef border
+ * @property {string} topBody
+ * @property {string} topJoin
+ * @property {string} topLeft
+ * @property {string} topRight
+ * @property {string} bottomBody
+ * @property {string} bottomJoin
+ * @property {string} bottomLeft
+ * @property {string} bottomRight
+ * @property {string} bodyLeft
+ * @property {string} bodyRight
+ * @property {string} bodyJoin
+ * @property {string} joinBody
+ * @property {string} joinLeft
+ * @property {string} joinRight
+ * @property {string} joinJoin
+ */
+
+/**
+ * @param {string} name
+ * @returns {border}
+ */
+exports.default = name => {
+ if (name === 'honeywell') {
+ return {
+ topBody: '═',
+ topJoin: '╤',
+ topLeft: '╔',
+ topRight: '╗',
+
+ bottomBody: '═',
+ bottomJoin: '╧',
+ bottomLeft: '╚',
+ bottomRight: '╝',
+
+ bodyLeft: '║',
+ bodyRight: '║',
+ bodyJoin: '│',
+
+ joinBody: '─',
+ joinLeft: '╟',
+ joinRight: '╢',
+ joinJoin: '┼'
+ };
+ }
+
+ if (name === 'norc') {
+ return {
+ topBody: '─',
+ topJoin: '┬',
+ topLeft: '┌',
+ topRight: '┐',
+
+ bottomBody: '─',
+ bottomJoin: '┴',
+ bottomLeft: '└',
+ bottomRight: '┘',
+
+ bodyLeft: '│',
+ bodyRight: '│',
+ bodyJoin: '│',
+
+ joinBody: '─',
+ joinLeft: '├',
+ joinRight: '┤',
+ joinJoin: '┼'
+ };
+ }
+
+ if (name === 'ramac') {
+ return {
+ topBody: '-',
+ topJoin: '+',
+ topLeft: '+',
+ topRight: '+',
+
+ bottomBody: '-',
+ bottomJoin: '+',
+ bottomLeft: '+',
+ bottomRight: '+',
+
+ bodyLeft: '|',
+ bodyRight: '|',
+ bodyJoin: '|',
+
+ joinBody: '-',
+ joinLeft: '|',
+ joinRight: '|',
+ joinJoin: '|'
+ };
+ }
+
+ if (name === 'void') {
+ return {
+ topBody: '',
+ topJoin: '',
+ topLeft: '',
+ topRight: '',
+
+ bottomBody: '',
+ bottomJoin: '',
+ bottomLeft: '',
+ bottomRight: '',
+
+ bodyLeft: '',
+ bodyRight: '',
+ bodyJoin: '',
+
+ joinBody: '',
+ joinLeft: '',
+ joinRight: '',
+ joinJoin: ''
+ };
+ }
+
+ throw new Error('Unknown border template "' + name + '".');
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/index.js b/node_modules/table/dist/index.js
new file mode 100644
index 00000000..169eddf0
--- /dev/null
+++ b/node_modules/table/dist/index.js
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getBorderCharacters = exports.createStream = exports.table = undefined;
+
+var _table = require('./table');
+
+var _table2 = _interopRequireDefault(_table);
+
+var _createStream = require('./createStream');
+
+var _createStream2 = _interopRequireDefault(_createStream);
+
+var _getBorderCharacters = require('./getBorderCharacters');
+
+var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.table = _table2.default;
+exports.createStream = _createStream2.default;
+exports.getBorderCharacters = _getBorderCharacters2.default; \ No newline at end of file
diff --git a/node_modules/table/dist/makeConfig.js b/node_modules/table/dist/makeConfig.js
new file mode 100644
index 00000000..9444ffe0
--- /dev/null
+++ b/node_modules/table/dist/makeConfig.js
@@ -0,0 +1,99 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _getBorderCharacters = require('./getBorderCharacters');
+
+var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters);
+
+var _validateConfig = require('./validateConfig');
+
+var _validateConfig2 = _interopRequireDefault(_validateConfig);
+
+var _calculateMaximumColumnWidthIndex = require('./calculateMaximumColumnWidthIndex');
+
+var _calculateMaximumColumnWidthIndex2 = _interopRequireDefault(_calculateMaximumColumnWidthIndex);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Merges user provided border characters with the default border ("honeywell") characters.
+ *
+ * @param {Object} border
+ * @returns {Object}
+ */
+const makeBorder = function makeBorder() {
+ let border = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ return Object.assign({}, (0, _getBorderCharacters2.default)('honeywell'), border);
+};
+
+/**
+ * Creates a configuration for every column using default
+ * values for the missing configuration properties.
+ *
+ * @param {Array[]} rows
+ * @param {Object} columns
+ * @param {Object} columnDefault
+ * @returns {Object}
+ */
+const makeColumns = function makeColumns(rows) {
+ let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ let columnDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+ const maximumColumnWidthIndex = (0, _calculateMaximumColumnWidthIndex2.default)(rows);
+
+ _lodash2.default.times(rows[0].length, index => {
+ if (_lodash2.default.isUndefined(columns[index])) {
+ columns[index] = {};
+ }
+
+ columns[index] = Object.assign({
+ alignment: 'left',
+ paddingLeft: 1,
+ paddingRight: 1,
+ truncate: Infinity,
+ width: maximumColumnWidthIndex[index],
+ wrapWord: false
+ }, columnDefault, columns[index]);
+ });
+
+ return columns;
+};
+
+/**
+ * Makes a new configuration object out of the userConfig object
+ * using default values for the missing configuration properties.
+ *
+ * @param {Array[]} rows
+ * @param {Object} userConfig
+ * @returns {Object}
+ */
+
+exports.default = function (rows) {
+ let userConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ (0, _validateConfig2.default)('config.json', userConfig);
+
+ const config = _lodash2.default.cloneDeep(userConfig);
+
+ config.border = makeBorder(config.border);
+ config.columns = makeColumns(rows, config.columns, config.columnDefault);
+
+ if (!config.drawHorizontalLine) {
+ /**
+ * @returns {boolean}
+ */
+ config.drawHorizontalLine = () => {
+ return true;
+ };
+ }
+
+ return config;
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/makeStreamConfig.js b/node_modules/table/dist/makeStreamConfig.js
new file mode 100644
index 00000000..479de35a
--- /dev/null
+++ b/node_modules/table/dist/makeStreamConfig.js
@@ -0,0 +1,107 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _getBorderCharacters = require('./getBorderCharacters');
+
+var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters);
+
+var _validateConfig = require('./validateConfig');
+
+var _validateConfig2 = _interopRequireDefault(_validateConfig);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Merges user provided border characters with the default border ("honeywell") characters.
+ *
+ * @param {Object} border
+ * @returns {Object}
+ */
+const makeBorder = function makeBorder() {
+ let border = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ return Object.assign({}, (0, _getBorderCharacters2.default)('honeywell'), border);
+};
+
+/**
+ * Creates a configuration for every column using default
+ * values for the missing configuration properties.
+ *
+ * @param {number} columnCount
+ * @param {Object} columns
+ * @param {Object} columnDefault
+ * @returns {Object}
+ */
+const makeColumns = function makeColumns(columnCount) {
+ let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ let columnDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+ _lodash2.default.times(columnCount, index => {
+ if (_lodash2.default.isUndefined(columns[index])) {
+ columns[index] = {};
+ }
+
+ columns[index] = Object.assign({
+ alignment: 'left',
+ paddingLeft: 1,
+ paddingRight: 1,
+ truncate: Infinity,
+ wrapWord: false
+ }, columnDefault, columns[index]);
+ });
+
+ return columns;
+};
+
+/**
+ * @typedef {Object} columnConfig
+ * @property {string} alignment
+ * @property {number} width
+ * @property {number} truncate
+ * @property {number} paddingLeft
+ * @property {number} paddingRight
+ */
+
+/**
+ * @typedef {Object} streamConfig
+ * @property {columnConfig} columnDefault
+ * @property {Object} border
+ * @property {columnConfig[]}
+ * @property {number} columnCount Number of columns in the table (required).
+ */
+
+/**
+ * Makes a new configuration object out of the userConfig object
+ * using default values for the missing configuration properties.
+ *
+ * @param {streamConfig} userConfig
+ * @returns {Object}
+ */
+
+exports.default = function () {
+ let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ (0, _validateConfig2.default)('streamConfig.json', userConfig);
+
+ const config = _lodash2.default.cloneDeep(userConfig);
+
+ if (!config.columnDefault || !config.columnDefault.width) {
+ throw new Error('Must provide config.columnDefault.width when creating a stream.');
+ }
+
+ if (!config.columnCount) {
+ throw new Error('Must provide config.columnCount.');
+ }
+
+ config.border = makeBorder(config.border);
+ config.columns = makeColumns(config.columnCount, config.columns, config.columnDefault);
+
+ return config;
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/mapDataUsingRowHeightIndex.js b/node_modules/table/dist/mapDataUsingRowHeightIndex.js
new file mode 100644
index 00000000..be0aae4e
--- /dev/null
+++ b/node_modules/table/dist/mapDataUsingRowHeightIndex.js
@@ -0,0 +1,57 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+var _wrapString = require('./wrapString');
+
+var _wrapString2 = _interopRequireDefault(_wrapString);
+
+var _wrapWord = require('./wrapWord');
+
+var _wrapWord2 = _interopRequireDefault(_wrapWord);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @param {Array} unmappedRows
+ * @param {number[]} rowHeightIndex
+ * @param {Object} config
+ * @returns {Array}
+ */
+exports.default = (unmappedRows, rowHeightIndex, config) => {
+ const tableWidth = unmappedRows[0].length;
+
+ const mappedRows = unmappedRows.map((cells, index0) => {
+ const rowHeight = _lodash2.default.times(rowHeightIndex[index0], () => {
+ return Array(tableWidth).fill('');
+ });
+
+ // rowHeight
+ // [{row index within rowSaw; index2}]
+ // [{cell index within a virtual row; index1}]
+
+ cells.forEach((value, index1) => {
+ let chunkedValue;
+
+ if (config.columns[index1].wrapWord) {
+ chunkedValue = (0, _wrapWord2.default)(value, config.columns[index1].width);
+ } else {
+ chunkedValue = (0, _wrapString2.default)(value, config.columns[index1].width);
+ }
+
+ chunkedValue.forEach((part, index2) => {
+ rowHeight[index2][index1] = part;
+ });
+ });
+
+ return rowHeight;
+ });
+
+ return _lodash2.default.flatten(mappedRows);
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/padTableData.js b/node_modules/table/dist/padTableData.js
new file mode 100644
index 00000000..a78ce49b
--- /dev/null
+++ b/node_modules/table/dist/padTableData.js
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+/**
+ * @param {table~row[]} rows
+ * @param {Object} config
+ * @returns {table~row[]}
+ */
+exports.default = (rows, config) => {
+ return rows.map(cells => {
+ return cells.map((value, index1) => {
+ const column = config.columns[index1];
+
+ return ' '.repeat(column.paddingLeft) + value + ' '.repeat(column.paddingRight);
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/schemas/config.json b/node_modules/table/dist/schemas/config.json
new file mode 100644
index 00000000..36074181
--- /dev/null
+++ b/node_modules/table/dist/schemas/config.json
@@ -0,0 +1,114 @@
+{
+ "$id": "config.json",
+ "$schema": "http://json-schema.org/draft-06/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "#/definitions/borders"
+ },
+ "columns": {
+ "$ref": "#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "#/definitions/column"
+ },
+ "drawHorizontalLine": {
+ "typeof": "function"
+ }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "columns": {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ },
+ "column": {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "type": "string",
+ "enum": [
+ "left",
+ "right",
+ "center"
+ ]
+ },
+ "width": {
+ "type": "number"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "number"
+ },
+ "paddingLeft": {
+ "type": "number"
+ },
+ "paddingRight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "borders": {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ },
+ "border": {
+ "type": "string"
+ }
+ }
+}
diff --git a/node_modules/table/dist/schemas/streamConfig.json b/node_modules/table/dist/schemas/streamConfig.json
new file mode 100644
index 00000000..d8402a62
--- /dev/null
+++ b/node_modules/table/dist/schemas/streamConfig.json
@@ -0,0 +1,114 @@
+{
+ "$id": "streamConfig.json",
+ "$schema": "http://json-schema.org/draft-06/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "#/definitions/borders"
+ },
+ "columns": {
+ "$ref": "#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "#/definitions/column"
+ },
+ "columnCount": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "columns": {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ },
+ "column": {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "type": "string",
+ "enum": [
+ "left",
+ "right",
+ "center"
+ ]
+ },
+ "width": {
+ "type": "number"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "number"
+ },
+ "paddingLeft": {
+ "type": "number"
+ },
+ "paddingRight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "borders": {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ },
+ "border": {
+ "type": "string"
+ }
+ }
+}
diff --git a/node_modules/table/dist/stringifyTableData.js b/node_modules/table/dist/stringifyTableData.js
new file mode 100644
index 00000000..46a8b94a
--- /dev/null
+++ b/node_modules/table/dist/stringifyTableData.js
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+/**
+ * Casts all cell values to a string.
+ *
+ * @param {table~row[]} rows
+ * @returns {table~row[]}
+ */
+exports.default = rows => {
+ return rows.map(cells => {
+ return cells.map(String);
+ });
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/table.js b/node_modules/table/dist/table.js
new file mode 100644
index 00000000..fe8c3cfe
--- /dev/null
+++ b/node_modules/table/dist/table.js
@@ -0,0 +1,133 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _drawTable = require('./drawTable');
+
+var _drawTable2 = _interopRequireDefault(_drawTable);
+
+var _calculateCellWidthIndex = require('./calculateCellWidthIndex');
+
+var _calculateCellWidthIndex2 = _interopRequireDefault(_calculateCellWidthIndex);
+
+var _makeConfig = require('./makeConfig');
+
+var _makeConfig2 = _interopRequireDefault(_makeConfig);
+
+var _calculateRowHeightIndex = require('./calculateRowHeightIndex');
+
+var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex);
+
+var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex');
+
+var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex);
+
+var _alignTableData = require('./alignTableData');
+
+var _alignTableData2 = _interopRequireDefault(_alignTableData);
+
+var _padTableData = require('./padTableData');
+
+var _padTableData2 = _interopRequireDefault(_padTableData);
+
+var _validateTableData = require('./validateTableData');
+
+var _validateTableData2 = _interopRequireDefault(_validateTableData);
+
+var _stringifyTableData = require('./stringifyTableData');
+
+var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData);
+
+var _truncateTableData = require('./truncateTableData');
+
+var _truncateTableData2 = _interopRequireDefault(_truncateTableData);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @typedef {string} table~cell
+ */
+
+/**
+ * @typedef {table~cell[]} table~row
+ */
+
+/**
+ * @typedef {Object} table~columns
+ * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left).
+ * @property {number} width Column width (default: auto).
+ * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity).
+ * @property {number} paddingLeft Cell content padding width left (default: 1).
+ * @property {number} paddingRight Cell content padding width right (default: 1).
+ */
+
+/**
+ * @typedef {Object} table~border
+ * @property {string} topBody
+ * @property {string} topJoin
+ * @property {string} topLeft
+ * @property {string} topRight
+ * @property {string} bottomBody
+ * @property {string} bottomJoin
+ * @property {string} bottomLeft
+ * @property {string} bottomRight
+ * @property {string} bodyLeft
+ * @property {string} bodyRight
+ * @property {string} bodyJoin
+ * @property {string} joinBody
+ * @property {string} joinLeft
+ * @property {string} joinRight
+ * @property {string} joinJoin
+ */
+
+/**
+ * Used to tell whether to draw a horizontal line.
+ * This callback is called for each non-content line of the table.
+ * The default behavior is to always return true.
+ *
+ * @typedef {Function} drawHorizontalLine
+ * @param {number} index
+ * @param {number} size
+ * @returns {boolean}
+ */
+
+/**
+ * @typedef {Object} table~config
+ * @property {table~border} border
+ * @property {table~columns[]} columns Column specific configuration.
+ * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values.
+ * @property {table~drawHorizontalLine} drawHorizontalLine
+ */
+
+/**
+ * Generates a text table.
+ *
+ * @param {table~row[]} data
+ * @param {table~config} userConfig
+ * @returns {string}
+ */
+exports.default = function (data) {
+ let userConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ let rows;
+
+ (0, _validateTableData2.default)(data);
+
+ rows = (0, _stringifyTableData2.default)(data);
+
+ const config = (0, _makeConfig2.default)(rows, userConfig);
+
+ rows = (0, _truncateTableData2.default)(data, config);
+
+ const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config);
+
+ rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config);
+ rows = (0, _alignTableData2.default)(rows, config);
+ rows = (0, _padTableData2.default)(rows, config);
+
+ const cellWidthIndex = (0, _calculateCellWidthIndex2.default)(rows[0]);
+
+ return (0, _drawTable2.default)(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine);
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/truncateTableData.js b/node_modules/table/dist/truncateTableData.js
new file mode 100644
index 00000000..748b41cc
--- /dev/null
+++ b/node_modules/table/dist/truncateTableData.js
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _lodash = require('lodash');
+
+var _lodash2 = _interopRequireDefault(_lodash);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @todo Make it work with ASCII content.
+ * @param {table~row[]} rows
+ * @param {Object} config
+ * @returns {table~row[]}
+ */
+exports.default = (rows, config) => {
+ return rows.map(cells => {
+ return cells.map((content, index) => {
+ return _lodash2.default.truncate(content, {
+ length: config.columns[index].truncate
+ });
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/validateConfig.js b/node_modules/table/dist/validateConfig.js
new file mode 100644
index 00000000..3ea3ddea
--- /dev/null
+++ b/node_modules/table/dist/validateConfig.js
@@ -0,0 +1,753 @@
+'use strict';
+var equal = require('ajv/lib/compile/equal');
+var validate = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ var refVal = [];
+ var refVal1 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if (rootData === undefined) rootData = data;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || validate.schema.properties[key0]);
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ if (data.topBody !== undefined) {
+ var errs_1 = errors;
+ if (!refVal2(data.topBody, (dataPath || '') + '.topBody', data, 'topBody', rootData)) {
+ if (vErrors === null) vErrors = refVal2.errors;
+ else vErrors = vErrors.concat(refVal2.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.topJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.topJoin, (dataPath || '') + '.topJoin', data, 'topJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.topLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.topLeft, (dataPath || '') + '.topLeft', data, 'topLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.topRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.topRight, (dataPath || '') + '.topRight', data, 'topRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomBody !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomBody, (dataPath || '') + '.bottomBody', data, 'bottomBody', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomJoin, (dataPath || '') + '.bottomJoin', data, 'bottomJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomLeft, (dataPath || '') + '.bottomLeft', data, 'bottomLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomRight, (dataPath || '') + '.bottomRight', data, 'bottomRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bodyLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bodyLeft, (dataPath || '') + '.bodyLeft', data, 'bodyLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bodyRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bodyRight, (dataPath || '') + '.bodyRight', data, 'bodyRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bodyJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bodyJoin, (dataPath || '') + '.bodyJoin', data, 'bodyJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinBody !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinBody, (dataPath || '') + '.joinBody', data, 'joinBody', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinLeft, (dataPath || '') + '.joinLeft', data, 'joinLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinRight, (dataPath || '') + '.joinRight', data, 'joinRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinJoin, (dataPath || '') + '.joinJoin', data, 'joinJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal1.schema = {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ };
+ refVal1.errors = null;
+ refVal[1] = refVal1;
+ var refVal2 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if (typeof data !== "string") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'string'
+ },
+ message: 'should be string'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal2.schema = {
+ "type": "string"
+ };
+ refVal2.errors = null;
+ refVal[2] = refVal2;
+ var refVal3 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if (rootData === undefined) rootData = data;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || pattern0.test(key0));
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ for (var key0 in data) {
+ if (pattern0.test(key0)) {
+ var errs_1 = errors;
+ if (!refVal4(data[key0], (dataPath || '') + '[\'' + key0 + '\']', data, key0, rootData)) {
+ if (vErrors === null) vErrors = refVal4.errors;
+ else vErrors = vErrors.concat(refVal4.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal3.schema = {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ };
+ refVal3.errors = null;
+ refVal[3] = refVal3;
+ var refVal4 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || validate.schema.properties[key0]);
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ var data1 = data.alignment;
+ if (data1 !== undefined) {
+ var errs_1 = errors;
+ if (typeof data1 !== "string") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.alignment',
+ schemaPath: '#/properties/alignment/type',
+ params: {
+ type: 'string'
+ },
+ message: 'should be string'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var schema1 = validate.schema.properties.alignment.enum;
+ var valid1;
+ valid1 = false;
+ for (var i1 = 0; i1 < schema1.length; i1++)
+ if (equal(data1, schema1[i1])) {
+ valid1 = true;
+ break;
+ }
+ if (!valid1) {
+ var err = {
+ keyword: 'enum',
+ dataPath: (dataPath || '') + '.alignment',
+ schemaPath: '#/properties/alignment/enum',
+ params: {
+ allowedValues: schema1
+ },
+ message: 'should be equal to one of the allowed values'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.width !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.width !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.width',
+ schemaPath: '#/properties/width/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.wrapWord !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.wrapWord !== "boolean") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.wrapWord',
+ schemaPath: '#/properties/wrapWord/type',
+ params: {
+ type: 'boolean'
+ },
+ message: 'should be boolean'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.truncate !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.truncate !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.truncate',
+ schemaPath: '#/properties/truncate/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.paddingLeft !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.paddingLeft !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.paddingLeft',
+ schemaPath: '#/properties/paddingLeft/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.paddingRight !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.paddingRight !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.paddingRight',
+ schemaPath: '#/properties/paddingRight/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal4.schema = {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "type": "string",
+ "enum": ["left", "right", "center"]
+ },
+ "width": {
+ "type": "number"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "number"
+ },
+ "paddingLeft": {
+ "type": "number"
+ },
+ "paddingRight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ };
+ refVal4.errors = null;
+ refVal[4] = refVal4;
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict'; /*# sourceURL=config.json */
+ var vErrors = null;
+ var errors = 0;
+ if (rootData === undefined) rootData = data;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || key0 == 'border' || key0 == 'columns' || key0 == 'columnDefault' || key0 == 'drawHorizontalLine');
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ if (data.border !== undefined) {
+ var errs_1 = errors;
+ if (!refVal1(data.border, (dataPath || '') + '.border', data, 'border', rootData)) {
+ if (vErrors === null) vErrors = refVal1.errors;
+ else vErrors = vErrors.concat(refVal1.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.columns !== undefined) {
+ var errs_1 = errors;
+ if (!refVal3(data.columns, (dataPath || '') + '.columns', data, 'columns', rootData)) {
+ if (vErrors === null) vErrors = refVal3.errors;
+ else vErrors = vErrors.concat(refVal3.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.columnDefault !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[4](data.columnDefault, (dataPath || '') + '.columnDefault', data, 'columnDefault', rootData)) {
+ if (vErrors === null) vErrors = refVal[4].errors;
+ else vErrors = vErrors.concat(refVal[4].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.drawHorizontalLine !== undefined) {
+ var errs_1 = errors;
+ var errs__1 = errors;
+ var valid1;
+ valid1 = typeof data.drawHorizontalLine == "function";
+ if (!valid1) {
+ if (errs__1 == errors) {
+ var err = {
+ keyword: 'typeof',
+ dataPath: (dataPath || '') + '.drawHorizontalLine',
+ schemaPath: '#/properties/drawHorizontalLine/typeof',
+ params: {
+ keyword: 'typeof'
+ },
+ message: 'should pass "typeof" keyword validation'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ } else {
+ for (var i1 = errs__1; i1 < errors; i1++) {
+ var ruleErr1 = vErrors[i1];
+ if (ruleErr1.dataPath === undefined) ruleErr1.dataPath = (dataPath || '') + '.drawHorizontalLine';
+ if (ruleErr1.schemaPath === undefined) {
+ ruleErr1.schemaPath = "#/properties/drawHorizontalLine/typeof";
+ }
+ }
+ }
+ }
+ var valid1 = errors === errs_1;
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+})();
+validate.schema = {
+ "$id": "config.json",
+ "$schema": "http://json-schema.org/draft-06/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "#/definitions/borders"
+ },
+ "columns": {
+ "$ref": "#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "#/definitions/column"
+ },
+ "drawHorizontalLine": {
+ "typeof": "function"
+ }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "columns": {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ },
+ "column": {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "type": "string",
+ "enum": ["left", "right", "center"]
+ },
+ "width": {
+ "type": "number"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "number"
+ },
+ "paddingLeft": {
+ "type": "number"
+ },
+ "paddingRight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "borders": {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ },
+ "border": {
+ "type": "string"
+ }
+ }
+};
+validate.errors = null;
+module.exports = validate; \ No newline at end of file
diff --git a/node_modules/table/dist/validateStreamConfig.js b/node_modules/table/dist/validateStreamConfig.js
new file mode 100644
index 00000000..05c4b04c
--- /dev/null
+++ b/node_modules/table/dist/validateStreamConfig.js
@@ -0,0 +1,740 @@
+'use strict';
+var equal = require('ajv/lib/compile/equal');
+var validate = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ var refVal = [];
+ var refVal1 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if (rootData === undefined) rootData = data;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || validate.schema.properties[key0]);
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ if (data.topBody !== undefined) {
+ var errs_1 = errors;
+ if (!refVal2(data.topBody, (dataPath || '') + '.topBody', data, 'topBody', rootData)) {
+ if (vErrors === null) vErrors = refVal2.errors;
+ else vErrors = vErrors.concat(refVal2.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.topJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.topJoin, (dataPath || '') + '.topJoin', data, 'topJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.topLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.topLeft, (dataPath || '') + '.topLeft', data, 'topLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.topRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.topRight, (dataPath || '') + '.topRight', data, 'topRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomBody !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomBody, (dataPath || '') + '.bottomBody', data, 'bottomBody', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomJoin, (dataPath || '') + '.bottomJoin', data, 'bottomJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomLeft, (dataPath || '') + '.bottomLeft', data, 'bottomLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bottomRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bottomRight, (dataPath || '') + '.bottomRight', data, 'bottomRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bodyLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bodyLeft, (dataPath || '') + '.bodyLeft', data, 'bodyLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bodyRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bodyRight, (dataPath || '') + '.bodyRight', data, 'bodyRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.bodyJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.bodyJoin, (dataPath || '') + '.bodyJoin', data, 'bodyJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinBody !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinBody, (dataPath || '') + '.joinBody', data, 'joinBody', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinLeft !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinLeft, (dataPath || '') + '.joinLeft', data, 'joinLeft', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinRight !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinRight, (dataPath || '') + '.joinRight', data, 'joinRight', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.joinJoin !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[2](data.joinJoin, (dataPath || '') + '.joinJoin', data, 'joinJoin', rootData)) {
+ if (vErrors === null) vErrors = refVal[2].errors;
+ else vErrors = vErrors.concat(refVal[2].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal1.schema = {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ };
+ refVal1.errors = null;
+ refVal[1] = refVal1;
+ var refVal2 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if (typeof data !== "string") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'string'
+ },
+ message: 'should be string'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal2.schema = {
+ "type": "string"
+ };
+ refVal2.errors = null;
+ refVal[2] = refVal2;
+ var refVal3 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if (rootData === undefined) rootData = data;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || pattern0.test(key0));
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ for (var key0 in data) {
+ if (pattern0.test(key0)) {
+ var errs_1 = errors;
+ if (!refVal4(data[key0], (dataPath || '') + '[\'' + key0 + '\']', data, key0, rootData)) {
+ if (vErrors === null) vErrors = refVal4.errors;
+ else vErrors = vErrors.concat(refVal4.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal3.schema = {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ };
+ refVal3.errors = null;
+ refVal[3] = refVal3;
+ var refVal4 = (function() {
+ var pattern0 = new RegExp('^[0-9]+$');
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict';
+ var vErrors = null;
+ var errors = 0;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || validate.schema.properties[key0]);
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ var data1 = data.alignment;
+ if (data1 !== undefined) {
+ var errs_1 = errors;
+ if (typeof data1 !== "string") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.alignment',
+ schemaPath: '#/properties/alignment/type',
+ params: {
+ type: 'string'
+ },
+ message: 'should be string'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var schema1 = validate.schema.properties.alignment.enum;
+ var valid1;
+ valid1 = false;
+ for (var i1 = 0; i1 < schema1.length; i1++)
+ if (equal(data1, schema1[i1])) {
+ valid1 = true;
+ break;
+ }
+ if (!valid1) {
+ var err = {
+ keyword: 'enum',
+ dataPath: (dataPath || '') + '.alignment',
+ schemaPath: '#/properties/alignment/enum',
+ params: {
+ allowedValues: schema1
+ },
+ message: 'should be equal to one of the allowed values'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.width !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.width !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.width',
+ schemaPath: '#/properties/width/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.wrapWord !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.wrapWord !== "boolean") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.wrapWord',
+ schemaPath: '#/properties/wrapWord/type',
+ params: {
+ type: 'boolean'
+ },
+ message: 'should be boolean'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.truncate !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.truncate !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.truncate',
+ schemaPath: '#/properties/truncate/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.paddingLeft !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.paddingLeft !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.paddingLeft',
+ schemaPath: '#/properties/paddingLeft/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.paddingRight !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.paddingRight !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.paddingRight',
+ schemaPath: '#/properties/paddingRight/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+ })();
+ refVal4.schema = {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "type": "string",
+ "enum": ["left", "right", "center"]
+ },
+ "width": {
+ "type": "number"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "number"
+ },
+ "paddingLeft": {
+ "type": "number"
+ },
+ "paddingRight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ };
+ refVal4.errors = null;
+ refVal[4] = refVal4;
+ return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
+ 'use strict'; /*# sourceURL=streamConfig.json */
+ var vErrors = null;
+ var errors = 0;
+ if (rootData === undefined) rootData = data;
+ if ((data && typeof data === "object" && !Array.isArray(data))) {
+ var errs__0 = errors;
+ var valid1 = true;
+ for (var key0 in data) {
+ var isAdditional0 = !(false || key0 == 'border' || key0 == 'columns' || key0 == 'columnDefault' || key0 == 'columnCount');
+ if (isAdditional0) {
+ valid1 = false;
+ var err = {
+ keyword: 'additionalProperties',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/additionalProperties',
+ params: {
+ additionalProperty: '' + key0 + ''
+ },
+ message: 'should NOT have additional properties'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ }
+ if (data.border !== undefined) {
+ var errs_1 = errors;
+ if (!refVal1(data.border, (dataPath || '') + '.border', data, 'border', rootData)) {
+ if (vErrors === null) vErrors = refVal1.errors;
+ else vErrors = vErrors.concat(refVal1.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.columns !== undefined) {
+ var errs_1 = errors;
+ if (!refVal3(data.columns, (dataPath || '') + '.columns', data, 'columns', rootData)) {
+ if (vErrors === null) vErrors = refVal3.errors;
+ else vErrors = vErrors.concat(refVal3.errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.columnDefault !== undefined) {
+ var errs_1 = errors;
+ if (!refVal[4](data.columnDefault, (dataPath || '') + '.columnDefault', data, 'columnDefault', rootData)) {
+ if (vErrors === null) vErrors = refVal[4].errors;
+ else vErrors = vErrors.concat(refVal[4].errors);
+ errors = vErrors.length;
+ }
+ var valid1 = errors === errs_1;
+ }
+ if (data.columnCount !== undefined) {
+ var errs_1 = errors;
+ if (typeof data.columnCount !== "number") {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + '.columnCount',
+ schemaPath: '#/properties/columnCount/type',
+ params: {
+ type: 'number'
+ },
+ message: 'should be number'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ var valid1 = errors === errs_1;
+ }
+ } else {
+ var err = {
+ keyword: 'type',
+ dataPath: (dataPath || '') + "",
+ schemaPath: '#/type',
+ params: {
+ type: 'object'
+ },
+ message: 'should be object'
+ };
+ if (vErrors === null) vErrors = [err];
+ else vErrors.push(err);
+ errors++;
+ }
+ validate.errors = vErrors;
+ return errors === 0;
+ };
+})();
+validate.schema = {
+ "$id": "streamConfig.json",
+ "$schema": "http://json-schema.org/draft-06/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "#/definitions/borders"
+ },
+ "columns": {
+ "$ref": "#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "#/definitions/column"
+ },
+ "columnCount": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "columns": {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ },
+ "column": {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "type": "string",
+ "enum": ["left", "right", "center"]
+ },
+ "width": {
+ "type": "number"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "number"
+ },
+ "paddingLeft": {
+ "type": "number"
+ },
+ "paddingRight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "borders": {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ },
+ "border": {
+ "type": "string"
+ }
+ }
+};
+validate.errors = null;
+module.exports = validate; \ No newline at end of file
diff --git a/node_modules/table/dist/validateTableData.js b/node_modules/table/dist/validateTableData.js
new file mode 100644
index 00000000..b5e103ce
--- /dev/null
+++ b/node_modules/table/dist/validateTableData.js
@@ -0,0 +1,51 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+/**
+ * @typedef {string} cell
+ */
+
+/**
+ * @typedef {cell[]} validateData~column
+ */
+
+/**
+ * @param {column[]} rows
+ * @returns {undefined}
+ */
+exports.default = rows => {
+ if (!Array.isArray(rows)) {
+ throw new TypeError('Table data must be an array.');
+ }
+
+ if (rows.length === 0) {
+ throw new Error('Table must define at least one row.');
+ }
+
+ if (rows[0].length === 0) {
+ throw new Error('Table must define at least one column.');
+ }
+
+ const columnNumber = rows[0].length;
+
+ for (const cells of rows) {
+ if (!Array.isArray(cells)) {
+ throw new TypeError('Table row data must be an array.');
+ }
+
+ if (cells.length !== columnNumber) {
+ throw new Error('Table must have a consistent number of cells.');
+ }
+
+ // @todo Make an exception for newline characters.
+ // @see https://github.com/gajus/table/issues/9
+ for (const cell of cells) {
+ if (/[\u0001-\u001A]/.test(cell)) {
+ throw new Error('Table data must not contain control characters.');
+ }
+ }
+ }
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/wrapString.js b/node_modules/table/dist/wrapString.js
new file mode 100644
index 00000000..eae8ea05
--- /dev/null
+++ b/node_modules/table/dist/wrapString.js
@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _sliceAnsi = require('slice-ansi');
+
+var _sliceAnsi2 = _interopRequireDefault(_sliceAnsi);
+
+var _stringWidth = require('string-width');
+
+var _stringWidth2 = _interopRequireDefault(_stringWidth);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Creates an array of strings split into groups the length of size.
+ * This function works with strings that contain ASCII characters.
+ *
+ * wrapText is different from would-be "chunk" implementation
+ * in that whitespace characters that occur on a chunk size limit are trimmed.
+ *
+ * @param {string} subject
+ * @param {number} size
+ * @returns {Array}
+ */
+exports.default = (subject, size) => {
+ let subjectSlice;
+
+ subjectSlice = subject;
+
+ const chunks = [];
+
+ do {
+ chunks.push((0, _sliceAnsi2.default)(subjectSlice, 0, size));
+
+ subjectSlice = (0, _sliceAnsi2.default)(subjectSlice, size).trim();
+ } while ((0, _stringWidth2.default)(subjectSlice));
+
+ return chunks;
+}; \ No newline at end of file
diff --git a/node_modules/table/dist/wrapWord.js b/node_modules/table/dist/wrapWord.js
new file mode 100644
index 00000000..c0dd9df4
--- /dev/null
+++ b/node_modules/table/dist/wrapWord.js
@@ -0,0 +1,52 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _sliceAnsi = require('slice-ansi');
+
+var _sliceAnsi2 = _interopRequireDefault(_sliceAnsi);
+
+var _stringWidth = require('string-width');
+
+var _stringWidth2 = _interopRequireDefault(_stringWidth);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @param {string} input
+ * @param {number} size
+ * @returns {Array}
+ */
+exports.default = (input, size) => {
+ let subject;
+
+ subject = input;
+
+ const chunks = [];
+
+ // https://regex101.com/r/gY5kZ1/1
+ const re = new RegExp('(^.{1,' + size + '}(\\s+|$))|(^.{1,' + (size - 1) + '}(\\\\|/|_|\\.|,|;|-))');
+
+ do {
+ let chunk;
+
+ chunk = subject.match(re);
+
+ if (chunk) {
+ chunk = chunk[0];
+
+ subject = (0, _sliceAnsi2.default)(subject, (0, _stringWidth2.default)(chunk));
+
+ chunk = chunk.trim();
+ } else {
+ chunk = (0, _sliceAnsi2.default)(subject, 0, size);
+ subject = (0, _sliceAnsi2.default)(subject, size);
+ }
+
+ chunks.push(chunk);
+ } while ((0, _stringWidth2.default)(subject));
+
+ return chunks;
+}; \ No newline at end of file
diff --git a/node_modules/table/package.json b/node_modules/table/package.json
new file mode 100644
index 00000000..3e73c48c
--- /dev/null
+++ b/node_modules/table/package.json
@@ -0,0 +1,71 @@
+{
+ "author": {
+ "email": "gajus@gajus.com",
+ "name": "Gajus Kuizinas",
+ "url": "http://gajus.com"
+ },
+ "dependencies": {
+ "ajv": "^6.0.1",
+ "ajv-keywords": "^3.0.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ },
+ "description": "Formats data into a string table.",
+ "devDependencies": {
+ "ajv-cli": "^3.0.0",
+ "babel": "^6.23.0",
+ "babel-cli": "^6.26.0",
+ "babel-core": "^6.26.0",
+ "babel-plugin-istanbul": "^4.1.5",
+ "babel-preset-es2015-node4": "^2.1.1",
+ "babel-register": "^6.26.0",
+ "chai": "^4.1.2",
+ "eslint": "^4.7.2",
+ "eslint-config-canonical": "^9.3.1",
+ "gitdown": "^2.5.1",
+ "husky": "^0.14.3",
+ "mocha": "^5.0.0",
+ "nyc": "^11.2.1",
+ "sinon": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ },
+ "keywords": [
+ "ascii",
+ "text",
+ "table",
+ "align",
+ "ansi"
+ ],
+ "license": "BSD-3-Clause",
+ "main": "./dist/index.js",
+ "name": "table",
+ "nyc": {
+ "include": [
+ "src/*.js"
+ ],
+ "instrument": false,
+ "lines": 70,
+ "require": [
+ "babel-register"
+ ],
+ "sourceMap": false
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/gajus/table"
+ },
+ "scripts": {
+ "build": "rm -fr ./dist && NODE_ENV=production babel --copy-files ./src --out-dir ./dist && npm run make-validators",
+ "lint": "npm run build && eslint ./src ./tests",
+ "make-readme": "gitdown ./.README/README.md --output-file ./README.md",
+ "make-validators": "ajv compile --all-errors --inline-refs=false -s src/schemas/config -c ajv-keywords/keywords/typeof -o dist/validateConfig.js && ajv compile --all-errors --inline-refs=false -s src/schemas/streamConfig -c ajv-keywords/keywords/typeof -o dist/validateStreamConfig.js",
+ "precommit": "npm run lint && npm run test",
+ "prepublish": "NODE_ENV=production npm run build",
+ "test": "npm run build && nyc --check-coverage mocha"
+ },
+ "version": "4.0.3"
+}