From 4e87195739f2a5d9a05451b48773c8afdc680765 Mon Sep 17 00:00:00 2001
From: akiyamn
Date: Sun, 24 Sep 2023 23:22:21 +1000
Subject: Initial commit (by create-cloudflare CLI)
---
node_modules/as-table/.babelrc | 3 +
node_modules/as-table/.eslintrc | 6 +
node_modules/as-table/.travis.yml | 24 ++++
node_modules/as-table/CHANGELOG.md | 3 +
node_modules/as-table/LICENSE | 21 +++
node_modules/as-table/README.md | 113 ++++++++++++++++
node_modules/as-table/as-table.d.ts | 32 +++++
node_modules/as-table/as-table.js | 89 +++++++++++++
node_modules/as-table/build/as-table.js | 86 ++++++++++++
node_modules/as-table/package.json | 67 ++++++++++
node_modules/as-table/test.js | 223 ++++++++++++++++++++++++++++++++
11 files changed, 667 insertions(+)
create mode 100644 node_modules/as-table/.babelrc
create mode 100644 node_modules/as-table/.eslintrc
create mode 100644 node_modules/as-table/.travis.yml
create mode 100644 node_modules/as-table/CHANGELOG.md
create mode 100644 node_modules/as-table/LICENSE
create mode 100644 node_modules/as-table/README.md
create mode 100644 node_modules/as-table/as-table.d.ts
create mode 100644 node_modules/as-table/as-table.js
create mode 100644 node_modules/as-table/build/as-table.js
create mode 100644 node_modules/as-table/package.json
create mode 100644 node_modules/as-table/test.js
(limited to 'node_modules/as-table')
diff --git a/node_modules/as-table/.babelrc b/node_modules/as-table/.babelrc
new file mode 100644
index 0000000..c8e246a
--- /dev/null
+++ b/node_modules/as-table/.babelrc
@@ -0,0 +1,3 @@
+{
+ "plugins": ["transform-es2015-destructuring", "transform-es2015-spread"]
+}
\ No newline at end of file
diff --git a/node_modules/as-table/.eslintrc b/node_modules/as-table/.eslintrc
new file mode 100644
index 0000000..955b07d
--- /dev/null
+++ b/node_modules/as-table/.eslintrc
@@ -0,0 +1,6 @@
+{
+ "parserOptions": {
+ "ecmaVersion": 6,
+ "sourceType": "script"
+ }
+}
\ No newline at end of file
diff --git a/node_modules/as-table/.travis.yml b/node_modules/as-table/.travis.yml
new file mode 100644
index 0000000..c3b62f5
--- /dev/null
+++ b/node_modules/as-table/.travis.yml
@@ -0,0 +1,24 @@
+language: node_js
+node_js:
+- '8'
+script:
+- set -e
+- npm run test
+- npm run coveralls
+after_success:
+- git config --global user.email "travis@travis-ci.org"
+- git config --global user.name "Travis CI"
+- npm config set git-tag-version=false
+- NPM_VERSION=$(npm version patch)
+- git commit -a -m "${NPM_VERSION:1}" -m "[ci skip]"
+- git remote remove origin
+- git remote add origin https://${GITHUB_TOKEN}@github.com/xpl/as-table.git
+- git push origin HEAD:master
+deploy:
+ provider: npm
+ email: rocket.mind@gmail.com
+ api_key:
+ secure: AVxwMF+0BKyQqTvA/9Va+G+1kgsVUKQ08LgzVhqfUv2yGgh5jWY0P5/IFLQocTuC+uef066KqTlvnWR3SWqB+am5EsqiZeFPzOHmtCgxrML2aZK8crjPoY4W/3ZfPy9H00nU9YPNVguXJY7K7MwEFXZ/SVOM1aQvr+omeqMpbnP6Cl4nQ6Hzbc/uAdUHIQG1qzoEbsnkT1EuQ39v1IQLBEoiBDkUj45bmEdETZXd9Nr42BOviFMYjba0vAn8gsuUgMj+bYXeb0XXedmRwBGjtgcNx76RwwmOXPtiC2IQs6FiDmCzZtCcoYuvrWSOFYhfEgptDeeZ080x38uhBxusYq3p0iRF+XyjWlr3w1A5JaHL8FkUfmdBxKAzKhiPTS5yDqteWL8znqGKSPjR+FJNQo5pbS5+C8I67xkcDHvigMWy30lnnjvCV7tPW4FdJ85kx+F1qNmHU0vYqVfDNet4KZofgWoS0cHMYskzl1BwWC+vofwI9/sKatDtFR25ffFg8f17nW+6vTX/n9uSqIFURUI8DhfFlxqG2giDd73KCB0uZ4Fqd0dqnmcp5qg2hQt0sIftDBOmOaX7xKbVdLbGBTAQ82KZmbQCnj0In10gJQf5O/mKD7rr2dMLHi6fvbBE/cEsWy4u/o50UQ7bDzGfXT3tJ+tktxmx1HfSf6eXilA=
+env:
+ global:
+ secure: KbUFKSmSkbuRb0mQ1kcKL5dA8TdI2SlnZAzyXwRXF/RpK5LDGI31gmPODl7DOKHPzEUTQaIeA/8dI0p8DKM9eTfHyM+pl0kZE+e6wSTdawVlI9FoxLgyBi8hz3UWnA39/YN65uFNvFX+kSYPPeOeV5zJNUaC8CT7Y3HYKR3tGrBaKrQbCnOlXIBsmyFryUHqdapBDmrqrU69Ab1uQca/djS2ztsjYvaP61aEIAKAsUZQRtDk8mP8sUQ5o15CwcpaWp/K1efeb3AuxHjcYOHH0Ci0SZmWpO9ky+wLCPeDqEeV4ZDN4Wfp9yx5dNkV0+ifevSRR5FNS9LHREPML8jz53KzOQQOXK5Fup/SsHPHU0XT6vB2TlG0YwatMSVGY4QIRCMftMkokjFwWsP8oPbuTuVCWhHQouMxRQDPQ/z3Dn/+blASG1lw16S92ksRLc8CCGA8gUZ6CrKh82gFAfyzwAUgLhoFIPEEu2e49W/VdAzeQ1VfAb/TbjwdgX9OR8F8TR48jM3Xpk8BdPANso7t9Rk9vvIw0JxR0Ir+7ufHV1dqCPsGa5KdZjaKrHHs6P/JI+Xl+w4o/6wmn3FhORSKqGuxDJqoQ8cw49Hh5OM0uf9tKfiyUyuFdsApom4vwrOTL+ZRbbD037JH/fzp24C33oaGwOCdyY0Eb/n0LI5ufRg=
diff --git a/node_modules/as-table/CHANGELOG.md b/node_modules/as-table/CHANGELOG.md
new file mode 100644
index 0000000..1e3289c
--- /dev/null
+++ b/node_modules/as-table/CHANGELOG.md
@@ -0,0 +1,3 @@
+# Recent Updates
+
+- Now layouts ANSI-colored strings correctly, thanks to the [`printable-characters`](https://github.com/xpl/printable-characters) module.
\ No newline at end of file
diff --git a/node_modules/as-table/LICENSE b/node_modules/as-table/LICENSE
new file mode 100644
index 0000000..49dbbe1
--- /dev/null
+++ b/node_modules/as-table/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Vitaly Gordon (https://github.com/xpl)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/as-table/README.md b/node_modules/as-table/README.md
new file mode 100644
index 0000000..a6cc5cd
--- /dev/null
+++ b/node_modules/as-table/README.md
@@ -0,0 +1,113 @@
+# as-table
+
+[](https://travis-ci.org/xpl/as-table) [](https://coveralls.io/github/xpl/as-table) [](https://npmjs.com/package/as-table) [](https://david-dm.org/xpl/as-table) [](https://scrutinizer-ci.com/g/xpl/as-table/?branch=master)
+
+A simple function that print objects and arrays as ASCII tables. Supports ANSI styling and weird 💩 Unicode emoji symbols (they won't break the layout), thanks to [`printable-characters`](https://github.com/xpl/printable-characters).
+
+```bash
+npm install as-table
+```
+
+## Printing objects
+
+```javascript
+asTable = require ('as-table')
+
+asTable ([ { foo: true, string: 'abcde', num: 42 },
+ { foo: false, string: 'qwertyuiop', num: 43 },
+ { string: null, num: 44 } ])
+```
+```
+foo string num
+----------------------
+true abcde 42
+false qwertyuiop 43
+ null 44
+```
+
+## Printing arrays
+
+```javascript
+asTable ([['qwe', '123456789', 'zxcvbnm'],
+ ['qwerty', '12', 'zxcvb'],
+ ['qwertyiop', '1234567', 'z']])
+```
+```
+qwe 123456789 zxcvbnm
+qwerty 12 zxcvb
+qwertyiop 1234567 z
+```
+
+## Limiting total width by proportionally trimming cells + setting columns delimiter
+
+```javascript
+asTable.configure ({ maxTotalWidth: 22, delimiter: ' | ' }) (data)
+```
+```
+qwe | 1234… | zxc…
+qwer… | 12 | zxc…
+qwer… | 1234… | z
+```
+
+## Right align
+
+```javascript
+asTable.configure ({ right: true }) (data)
+```
+```
+ foo bar baz
+-----------------------------
+ qwe 123456789 zxcvbnm
+ qwerty 12 zxcvb
+qwertyiop 1234567 z
+```
+
+## Providing a custom object printer
+
+```javascript
+asTable.configure ({ print: x => (typeof x === 'boolean') ? (x ? 'yes' : 'no') : String (x) }) (data)
+```
+```
+foo string num
+--------------------
+yes abcde 42
+no qwertyuiop 43
+ null 44
+```
+
+The callback also receives a field name (in case of objects) or a column index (in case of arrays):
+
+```javascript
+asTable = require ('as-table').configure ({
+ print (x, k) {
+ if (k === 'timestamp') return new Date (x).toGMTString()
+ return String (x)
+ }
+})
+
+asTable ([ { name: 'A', timestamp: 1561202591572 },
+ { name: 'B', timestamp: 1558524240034 } ])
+```
+
+## Obtaining a pre-configured function
+
+```javascript
+asTable = require ('as-table').configure ({ maxTotalWidth: 25, delimiter: ' | ' })
+
+asTable (data)
+```
+
+## Customizing the title rendering and the header separator
+
+With string coloring by [`ansicolor`](https://github.com/xpl/ansicolor) (just for the demo purposes, any library will fit):
+
+```javascript
+asTable = require ('as-table').configure ({ title: x => x.bright, delimiter: ' | '.dim.cyan, dash: '-'.bright.cyan })
+
+console.log (
+ asTable ([ { foo: true, string: 'abcde', num: 42 },
+ { foo: false, string: 'qwertyuiop'.bgMagenta.green.bright, num: 43 } ])
+```
+
+
+
diff --git a/node_modules/as-table/as-table.d.ts b/node_modules/as-table/as-table.d.ts
new file mode 100644
index 0000000..5e31996
--- /dev/null
+++ b/node_modules/as-table/as-table.d.ts
@@ -0,0 +1,32 @@
+
+declare function asTable(rows: any[][]): string
+declare function asTable(objects: {[column: string]: any}[]): string
+declare namespace asTable {
+ interface Config {
+ maxTotalWidth: number
+ minColumnWidths?: number[]
+ delimiter?: string
+ dash: string
+ right: boolean
+ print(value: T, key?: string | number): string
+ title(value: string): string
+ }
+ type OmitPrint = Pick> & {print: undefined}
+ type ValidValueType = {
+ [P in keyof O]: T;
+ }
+ interface Formatter extends Readonly> {
+ (rows: T[][]): string
+ >(objects: O[]): string
+ configure(cfg: Partial>>): Formatter
+ configure(cfg: Partial>): Formatter
+ }
+ function configure(cfg: Partial>): Formatter
+ const maxTotalWidth: number
+ const print: StringConstructor
+ const title: StringConstructor
+ const dash: '-'
+ const right: false
+}
+
+export = asTable
diff --git a/node_modules/as-table/as-table.js b/node_modules/as-table/as-table.js
new file mode 100644
index 0000000..e529987
--- /dev/null
+++ b/node_modules/as-table/as-table.js
@@ -0,0 +1,89 @@
+"use strict";
+
+const O = Object
+ , { first, strlen } = require ('printable-characters') // handles ANSI codes and invisible characters
+ , limit = (s, n) => (first (s, n - 1) + '…')
+
+const asColumns = (rows, cfg_) => {
+
+ const
+
+ zip = (arrs, f) => arrs.reduce ((a, b) => b.map ((b, i) => [...a[i] || [], b]), []).map (args => f (...args)),
+
+ /* Convert cell data to string (converting multiline text to singleline) */
+
+ cells = rows.map (r => r.map (c => c.replace (/\n/g, '\\n'))),
+
+ /* Compute column widths (per row) and max widths (per column) */
+
+ cellWidths = cells.map (r => r.map (strlen)),
+ maxWidths = zip (cellWidths, Math.max),
+
+ /* Default config */
+
+ cfg = O.assign ({
+ delimiter: ' ',
+ minColumnWidths: maxWidths.map (x => 0),
+ maxTotalWidth: 0 }, cfg_),
+
+ delimiterLength = strlen (cfg.delimiter),
+
+ /* Project desired column widths, taking maxTotalWidth and minColumnWidths in account. */
+
+ totalWidth = maxWidths.reduce ((a, b) => a + b, 0),
+ relativeWidths = maxWidths.map (w => w / totalWidth),
+ maxTotalWidth = cfg.maxTotalWidth - (delimiterLength * (maxWidths.length - 1)),
+ excessWidth = Math.max (0, totalWidth - maxTotalWidth),
+ computedWidths = zip ([cfg.minColumnWidths, maxWidths, relativeWidths],
+ (min, max, relative) => Math.max (min, Math.floor (max - excessWidth * relative))),
+
+ /* This is how many symbols we should pad or cut (per column). */
+
+ restCellWidths = cellWidths.map (widths => zip ([computedWidths, widths], (a, b) => a - b))
+
+ /* Perform final composition. */
+
+ return zip ([cells, restCellWidths], (a, b) =>
+ zip ([a, b], (str, w) => (w >= 0)
+ ? (cfg.right ? (' '.repeat (w) + str) : (str + ' '.repeat (w)))
+ : (limit (str, strlen (str) + w))).join (cfg.delimiter))
+}
+
+const asTable = cfg => O.assign (arr => {
+
+/* Print arrays */
+
+ if (arr[0] && Array.isArray (arr[0])) {
+ return asColumns (arr.map (r => r.map (
+ (c, i) => (c === undefined) ? '' : cfg.print (c, i)
+ )
+ ),
+ cfg).join ('\n')
+ }
+
+/* Print objects */
+
+ const colNames = [...new Set ([].concat (...arr.map (O.keys)))],
+ columns = [colNames.map (cfg.title),
+ ...arr.map (o => colNames.map (
+ key => (o[key] === undefined) ? '' : cfg.print (o[key], key)
+ )
+ )
+ ],
+ lines = asColumns (columns, cfg)
+
+ return (cfg.dash ? [lines[0], cfg.dash.repeat (strlen (lines[0])), ...lines.slice (1)] : lines).join ('\n')
+
+}, cfg, {
+
+ configure: newConfig => asTable (O.assign ({}, cfg, newConfig)),
+})
+
+module.exports = asTable ({
+
+ maxTotalWidth: Number.MAX_SAFE_INTEGER,
+ print: String,
+ title: String,
+ dash: '-',
+ right: false
+})
diff --git a/node_modules/as-table/build/as-table.js b/node_modules/as-table/build/as-table.js
new file mode 100644
index 0000000..66be06a
--- /dev/null
+++ b/node_modules/as-table/build/as-table.js
@@ -0,0 +1,86 @@
+"use strict";
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
+
+const O = Object;
+
+var _require = require('printable-characters');
+
+const first = _require.first,
+ strlen = _require.strlen,
+ limit = (s, n) => first(s, n - 1) + '…';
+
+const asColumns = (rows, cfg_) => {
+
+ const zip = (arrs, f) => arrs.reduce((a, b) => b.map((b, i) => [].concat(_toConsumableArray(a[i] || []), [b])), []).map(args => f.apply(undefined, _toConsumableArray(args))),
+
+
+ /* Convert cell data to string (converting multiline text to singleline) */
+
+ cells = rows.map(r => r.map(c => c.replace(/\n/g, '\\n'))),
+
+
+ /* Compute column widths (per row) and max widths (per column) */
+
+ cellWidths = cells.map(r => r.map(strlen)),
+ maxWidths = zip(cellWidths, Math.max),
+
+
+ /* Default config */
+
+ cfg = O.assign({
+ delimiter: ' ',
+ minColumnWidths: maxWidths.map(x => 0),
+ maxTotalWidth: 0 }, cfg_),
+ delimiterLength = strlen(cfg.delimiter),
+
+
+ /* Project desired column widths, taking maxTotalWidth and minColumnWidths in account. */
+
+ totalWidth = maxWidths.reduce((a, b) => a + b, 0),
+ relativeWidths = maxWidths.map(w => w / totalWidth),
+ maxTotalWidth = cfg.maxTotalWidth - delimiterLength * (maxWidths.length - 1),
+ excessWidth = Math.max(0, totalWidth - maxTotalWidth),
+ computedWidths = zip([cfg.minColumnWidths, maxWidths, relativeWidths], (min, max, relative) => Math.max(min, Math.floor(max - excessWidth * relative))),
+
+
+ /* This is how many symbols we should pad or cut (per column). */
+
+ restCellWidths = cellWidths.map(widths => zip([computedWidths, widths], (a, b) => a - b));
+
+ /* Perform final composition. */
+
+ return zip([cells, restCellWidths], (a, b) => zip([a, b], (str, w) => w >= 0 ? cfg.right ? ' '.repeat(w) + str : str + ' '.repeat(w) : limit(str, strlen(str) + w)).join(cfg.delimiter));
+};
+
+const asTable = cfg => O.assign(arr => {
+ var _ref;
+
+ /* Print arrays */
+
+ if (arr[0] && Array.isArray(arr[0])) {
+ return asColumns(arr.map(r => r.map((c, i) => c === undefined ? '' : cfg.print(c, i))), cfg).join('\n');
+ }
+
+ /* Print objects */
+
+ const colNames = [].concat(_toConsumableArray(new Set((_ref = []).concat.apply(_ref, _toConsumableArray(arr.map(O.keys)))))),
+ columns = [colNames.map(cfg.title)].concat(_toConsumableArray(arr.map(o => colNames.map(key => o[key] === undefined ? '' : cfg.print(o[key], key))))),
+ lines = asColumns(columns, cfg);
+
+ return (cfg.dash ? [lines[0], cfg.dash.repeat(strlen(lines[0]))].concat(_toConsumableArray(lines.slice(1))) : lines).join('\n');
+}, cfg, {
+
+ configure: newConfig => asTable(O.assign({}, cfg, newConfig))
+});
+
+module.exports = asTable({
+
+ maxTotalWidth: Number.MAX_SAFE_INTEGER,
+ print: String,
+ title: String,
+ dash: '-',
+ right: false
+});
+
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVUsRUFBVixFQUFjLEdBQWQsRUFBbUIsU0FBbkIsQ0FBVDtBQUZwQixDQXpCZSxDQUF2Qjs7QUE4QkEsT0FBTyxPQUFQLEdBQWlCLFFBQVM7O0FBRXRCLG1CQUFlLE9BQU8sZ0JBRkE7QUFHdEIsV0FBTyxNQUhlO0FBSXRCLFdBQU8sTUFKZTtBQUt0QixVQUFNLEdBTGdCO0FBTXRCLFdBQU87QUFOZSxDQUFULENBQWpCIiwiZmlsZSI6ImFzLXRhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IE8gPSBPYmplY3RcbiAgICAsIHsgZmlyc3QsIHN0cmxlbiB9ID0gcmVxdWlyZSAoJ3ByaW50YWJsZS1jaGFyYWN0ZXJzJykgLy8gaGFuZGxlcyBBTlNJIGNvZGVzIGFuZCBpbnZpc2libGUgY2hhcmFjdGVyc1xuICAgICwgbGltaXQgPSAocywgbikgPT4gKGZpcnN0IChzLCBuIC0gMSkgKyAn4oCmJylcblxuY29uc3QgYXNDb2x1bW5zID0gKHJvd3MsIGNmZ18pID0+IHtcbiAgICBcbiAgICBjb25zdFxuXG4gICAgICAgIHppcCA9IChhcnJzLCBmKSA9PiBhcnJzLnJlZHVjZSAoKGEsIGIpID0+IGIubWFwICgoYiwgaSkgPT4gWy4uLmFbaV0gfHwgW10sIGJdKSwgW10pLm1hcCAoYXJncyA9PiBmICguLi5hcmdzKSksXG5cbiAgICAvKiAgQ29udmVydCBjZWxsIGRhdGEgdG8gc3RyaW5nIChjb252ZXJ0aW5nIG11bHRpbGluZSB0ZXh0IHRvIHNpbmdsZWxpbmUpICovXG5cbiAgICAgICAgY2VsbHMgICAgICAgICAgID0gcm93cy5tYXAgKHIgPT4gci5tYXAgKGMgPT4gYy5yZXBsYWNlICgvXFxuL2csICdcXFxcbicpKSksXG5cbiAgICAvKiAgQ29tcHV0ZSBjb2x1bW4gd2lkdGhzIChwZXIgcm93KSBhbmQgbWF4IHdpZHRocyAocGVyIGNvbHVtbikgICAgICovXG5cbiAgICAgICAgY2VsbFdpZHRocyAgICAgID0gY2VsbHMubWFwIChyID0+IHIubWFwIChzdHJsZW4pKSxcbiAgICAgICAgbWF4V2lkdGhzICAgICAgID0gemlwIChjZWxsV2lkdGhzLCBNYXRoLm1heCksXG5cbiAgICAvKiAgRGVmYXVsdCBjb25maWcgICAgICovXG5cbiAgICAgICAgY2ZnICAgICAgICAgICAgID0gTy5hc3NpZ24gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6ICcgICcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29sdW1uV2lkdGhzOiBtYXhXaWR0aHMubWFwICh4ID0+IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFRvdGFsV2lkdGg6IDAgfSwgY2ZnXyksXG5cbiAgICAgICAgZGVsaW1pdGVyTGVuZ3RoID0gc3RybGVuIChjZmcuZGVsaW1pdGVyKSxcblxuICAgIC8qICBQcm9qZWN0IGRlc2lyZWQgY29sdW1uIHdpZHRocywgdGFraW5nIG1heFRvdGFsV2lkdGggYW5kIG1pbkNvbHVtbldpZHRocyBpbiBhY2NvdW50LiAgICAgKi9cblxuICAgICAgICB0b3RhbFdpZHRoICAgICAgPSBtYXhXaWR0aHMucmVkdWNlICgoYSwgYikgPT4gYSArIGIsIDApLFxuICAgICAgICByZWxhdGl2ZVdpZHRocyAgPSBtYXhXaWR0aHMubWFwICh3ID0+IHcgLyB0b3RhbFdpZHRoKSxcbiAgICAgICAgbWF4VG90YWxXaWR0aCAgID0gY2ZnLm1heFRvdGFsV2lkdGggLSAoZGVsaW1pdGVyTGVuZ3RoICogKG1heFdpZHRocy5sZW5ndGggLSAxKSksXG4gICAgICAgIGV4Y2Vzc1dpZHRoICAgICA9IE1hdGgubWF4ICgwLCB0b3RhbFdpZHRoIC0gbWF4VG90YWxXaWR0aCksXG4gICAgICAgIGNvbXB1dGVkV2lkdGhzICA9IHppcCAoW2NmZy5taW5Db2x1bW5XaWR0aHMsIG1heFdpZHRocywgcmVsYXRpdmVXaWR0aHNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW4sIG1heCwgcmVsYXRpdmUpID0+IE1hdGgubWF4IChtaW4sIE1hdGguZmxvb3IgKG1heCAtIGV4Y2Vzc1dpZHRoICogcmVsYXRpdmUpKSksXG5cbiAgICAvKiAgVGhpcyBpcyBob3cgbWFueSBzeW1ib2xzIHdlIHNob3VsZCBwYWQgb3IgY3V0IChwZXIgY29sdW1uKS4gICovXG5cbiAgICAgICAgcmVzdENlbGxXaWR0aHMgID0gY2VsbFdpZHRocy5tYXAgKHdpZHRocyA9PiB6aXAgKFtjb21wdXRlZFdpZHRocywgd2lkdGhzXSwgKGEsIGIpID0+IGEgLSBiKSlcblxuICAgIC8qICBQZXJmb3JtIGZpbmFsIGNvbXBvc2l0aW9uLiAgICovXG5cbiAgICAgICAgcmV0dXJuIHppcCAoW2NlbGxzLCByZXN0Q2VsbFdpZHRoc10sIChhLCBiKSA9PlxuICAgICAgICAgICAgICAgIHppcCAoW2EsIGJdLCAoc3RyLCB3KSA9PiAodyA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChjZmcucmlnaHQgPyAoJyAnLnJlcGVhdCAodykgKyBzdHIpIDogKHN0ciArICcgJy5yZXBlYXQgKHcpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAobGltaXQgKHN0ciwgc3RybGVuIChzdHIpICsgdykpKS5qb2luIChjZmcuZGVsaW1pdGVyKSlcbn1cblxuY29uc3QgYXNUYWJsZSA9IGNmZyA9PiBPLmFzc2lnbiAoYXJyID0+IHtcblxuLyogIFByaW50IGFycmF5cyAgKi9cblxuICAgIGlmIChhcnJbMF0gJiYgQXJyYXkuaXNBcnJheSAoYXJyWzBdKSkge1xuICAgICAgICByZXR1cm4gYXNDb2x1bW5zIChhcnIubWFwIChyID0+IHIubWFwIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjLCBpKSA9PiAoYyA9PT0gdW5kZWZpbmVkKSA/ICcnIDogY2ZnLnByaW50IChjLCBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcpLmpvaW4gKCdcXG4nKVxuICAgIH1cblxuLyogIFByaW50IG9iamVjdHMgICAqL1xuXG4gICAgY29uc3QgY29sTmFtZXMgPSBbLi4ubmV3IFNldCAoW10uY29uY2F0ICguLi5hcnIubWFwIChPLmtleXMpKSldLFxuICAgICAgICAgIGNvbHVtbnMgID0gW2NvbE5hbWVzLm1hcCAoY2ZnLnRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAuLi5hcnIubWFwIChvID0+IGNvbE5hbWVzLm1hcCAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0+IChvW2tleV0gPT09IHVuZGVmaW5lZCkgPyAnJyA6IGNmZy5wcmludCAob1trZXldLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgIGxpbmVzICAgID0gYXNDb2x1bW5zIChjb2x1bW5zLCBjZmcpXG5cbiAgICByZXR1cm4gKGNmZy5kYXNoID8gW2xpbmVzWzBdLCBjZmcuZGFzaC5yZXBlYXQgKHN0cmxlbiAobGluZXNbMF0pKSwgLi4ubGluZXMuc2xpY2UgKDEpXSA6IGxpbmVzKS5qb2luICgnXFxuJylcblxufSwgY2ZnLCB7XG5cbiAgICBjb25maWd1cmU6IG5ld0NvbmZpZyA9PiBhc1RhYmxlIChPLmFzc2lnbiAoe30sIGNmZywgbmV3Q29uZmlnKSksXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzVGFibGUgKHtcblxuICAgIG1heFRvdGFsV2lkdGg6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgIHByaW50OiBTdHJpbmcsXG4gICAgdGl0bGU6IFN0cmluZyxcbiAgICBkYXNoOiAnLScsXG4gICAgcmlnaHQ6IGZhbHNlXG59KVxuIl19
\ No newline at end of file
diff --git a/node_modules/as-table/package.json b/node_modules/as-table/package.json
new file mode 100644
index 0000000..51b7d80
--- /dev/null
+++ b/node_modules/as-table/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "as-table",
+ "version": "1.0.55",
+ "description": "A simple function that print objects / arrays as ASCII tables. Handles ANSI styling and weird 💩 Unicode emoji symbols – they won't break the layout.",
+ "main": "build/as-table.js",
+ "typings": "./as-table.d.ts",
+ "scripts": {
+ "lint": "eslint as-table.js",
+ "lint-test": "eslint test.js",
+ "babel": "babel as-table.js --source-maps inline --out-file ./build/as-table.js",
+ "build": "npm run lint && npm run lint-test && npm run babel",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls",
+ "test": "npm run build && env AS_TABLE_TEST_FILE='./build/as-table' nyc --reporter=html --reporter=text mocha --reporter spec",
+ "autotest": "env AS_TABLE_TEST_FILE='./as-table' mocha --reporter spec --watch"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/xpl/as-table.git"
+ },
+ "keywords": [
+ "ASCII",
+ "table",
+ "sheet",
+ "grid",
+ "print",
+ "log",
+ "print table",
+ "object as table",
+ "array as table",
+ "text table",
+ "array table",
+ "object table",
+ "array format",
+ "columns",
+ "as table",
+ "tablefy",
+ "columns",
+ "stringify",
+ "print object",
+ "grid",
+ "tty",
+ "terminal",
+ "console",
+ "text",
+ "layout"
+ ],
+ "author": "Vitaly Gordon ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/xpl/as-table/issues"
+ },
+ "homepage": "https://github.com/xpl/as-table",
+ "devDependencies": {
+ "ansicolor": "^1.1.81",
+ "babel-cli": "^6.26.0",
+ "babel-plugin-transform-es2015-destructuring": "^6.23.0",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "coveralls": "^3.0.3",
+ "eslint": "^4.19.1",
+ "istanbul": "^0.4.5",
+ "mocha": "^6.0.2",
+ "nyc": "^13.3.0"
+ },
+ "dependencies": {
+ "printable-characters": "^1.0.42"
+ }
+}
diff --git a/node_modules/as-table/test.js b/node_modules/as-table/test.js
new file mode 100644
index 0000000..abd7f94
--- /dev/null
+++ b/node_modules/as-table/test.js
@@ -0,0 +1,223 @@
+"use strict";
+
+const assert = require ('assert'),
+ asTable = require (process.env.AS_TABLE_TEST_FILE),
+ ansi = require ('ansicolor').nice
+
+describe ('as-table', () => {
+
+ it ('array printing works', () => {
+
+ var testData = [['qwe', '123456789', 'zxcvbnm'],
+ ['qwerty', '12', 'zxcvb'],
+ ['💩wertyiop', '1234567', 'z']]
+
+ assert.equal (asTable (testData),
+
+ 'qwe 123456789 zxcvbnm\n' +
+ 'qwerty 12 zxcvb \n' +
+ '💩wertyiop 1234567 z ')
+
+ assert.equal (asTable.configure ({ maxTotalWidth: 22, delimiter: ' | ' }) (testData),
+
+ 'qwe | 1234… | zxc…\n' +
+ 'qwer… | 12 | zxc…\n' +
+ '💩wer… | 1234… | z ')
+
+ console.log (asTable.configure ({ maxTotalWidth: 22, delimiter: ' | ' }) (testData))
+ })
+
+ it ('object printing works', () => {
+
+ var testData =
+ [ { foo: true, string: 'abcde', num: 42 },
+ { foo: false, string: 'qwertyuiop', num: 43 },
+ { string: null, num: 44 } ]
+
+ assert.equal (asTable (testData),
+
+ 'foo string num\n' +
+ '----------------------\n' +
+ 'true abcde 42 \n' +
+ 'false qwertyuiop 43 \n' +
+ ' null 44 ')
+ })
+
+
+ it ('object printing works (with ANSI styling)', () => {
+
+ var testData =
+ [ { foo: true, string: 'abcde'.cyan.bgYellow, num: 42 },
+ { foo: false, string: 'qwertyuiop', num: 43 },
+ { string: null, num: 44 } ]
+
+ assert.equal (asTable (testData),
+
+ 'foo string num\n' +
+ '----------------------\n' +
+ 'true \u001b[43m\u001b[36mabcde\u001b[39m\u001b[49m 42 \n' +
+ 'false qwertyuiop 43 \n' +
+ ' null 44 ')
+ })
+
+ it ('maxTotalWidth correctly handles object field names', () => {
+
+ assert.equal (
+
+ asTable.configure ({ maxTotalWidth: 15 }) ([{
+
+ '0123456789': '0123456789',
+ 'abcdefxyzw': 'abcdefxyzw' }]),
+
+ '01234… abcde…\n' +
+ '--------------\n' +
+ '01234… abcde…'
+ )
+ })
+
+ it ('maxTotalWidth correctly handles object field names (with ANSI styling)', () => {
+
+ assert.equal (
+
+ asTable.configure ({ maxTotalWidth: 15 }) ([{
+
+ '0123456789': '0123456789',
+ 'abcdefxyzw': 'abcdefxyzw'.cyan.bgYellow.italic.inverse.bright }]),
+
+ '01234… abcde…\n' +
+ '--------------\n' +
+ '01234… ' + 'abcde'.cyan.bgYellow.italic.inverse.bright + '…'
+ )
+ })
+
+ it ('everything renders as singleline', () => {
+
+ assert.equal (asTable ([['fooo\n\nbar']]), 'fooo\\n\\nbar')
+ })
+
+ it ('configuring works', () => {
+
+ const asTable25 = asTable.configure ({ maxTotalWidth: 25 }),
+ asTable25Delim = asTable25.configure ({ delimiter: ' | ' })
+
+ assert.notEqual (asTable25, asTable25Delim)
+ assert.equal (asTable25.maxTotalWidth, 25)
+ assert.equal (asTable25Delim.delimiter, ' | ')
+ })
+
+ it ('degenerate case works', () => {
+
+ assert.equal (asTable ([]), '\n')
+ assert.equal (asTable ([{}]), '\n\n')
+ })
+
+ it ('null/undefined prints correctly', () => {
+
+ assert.equal (asTable.configure ({ delimiter: '|' }) ([[null, undefined, 1, 2, 3]]), 'null||1|2|3')
+ })
+
+ it ('custom printer works', () => {
+
+ var testData =
+ [ { foo: true, string: 'abcde', num: 42 },
+ { foo: false, string: 'qwertyuiop', num: 43 },
+ { string: null, num: 44 } ]
+
+ const formatsBooleansAsYesNo = asTable.configure ({ print: obj => (typeof obj === 'boolean') ? (obj ? 'yes' : 'no') : String (obj) })
+
+ assert.equal (formatsBooleansAsYesNo (testData),
+
+ 'foo string num\n' +
+ '--------------------\n' +
+ 'yes abcde 42 \n' +
+ 'no qwertyuiop 43 \n' +
+ ' null 44 ')
+ })
+
+ it ('custom printer works with object titles', () => {
+
+ var testData =
+ [ { foo: true, string: 'abcde', num: 42, timestamp: 1561202591572 },
+ { foo: false, string: 'qwertyuiop', num: 43, timestamp: 1558524240034 },
+ { string: null, num: 44, timestamp: 1555932240034 } ]
+
+ const formats = asTable.configure ({
+ print: (obj, title) => {
+ if (title === 'foo') {
+ return obj ? 'yes' : 'no';
+ }
+ if (title === 'timestamp') {
+ return new Date(obj).toGMTString();
+ }
+ return String(obj);
+ }
+ })
+
+ assert.equal (formats (testData),
+
+ 'foo string num timestamp \n' +
+ '---------------------------------------------------\n' +
+ 'yes abcde 42 Sat, 22 Jun 2019 11:23:11 GMT\n' +
+ 'no qwertyuiop 43 Wed, 22 May 2019 11:24:00 GMT\n' +
+ ' null 44 Mon, 22 Apr 2019 11:24:00 GMT')
+ })
+
+ it ('custom printer works with array keys', () => {
+
+ var testData =
+ [ [ true, 'abcde', 42, 1561202591572 ],
+ [ false, 'qwertyuiop', 43, 1558524240034 ] ]
+
+ const formats = asTable.configure ({
+ print: (obj, index) => {
+ if (index === 0) {
+ return obj ? 'yes' : 'no';
+ }
+ if (index === 3) {
+ return new Date(obj).toGMTString();
+ }
+ return String(obj);
+ }
+ })
+
+ assert.equal (formats (testData),
+
+ 'yes abcde 42 Sat, 22 Jun 2019 11:23:11 GMT\n' +
+ 'no qwertyuiop 43 Wed, 22 May 2019 11:24:00 GMT')
+ })
+
+
+ it ('right align works', () => {
+
+ var testData =
+ [ { foo: 1234.567, bar: 12 },
+ { foo: '4.567'.bgMagenta.green, bar: 1234.456890 } ]
+
+ assert.equal (asTable.configure ({ right: true }) (testData),
+ ' foo bar\n' +
+ '--------------------\n' +
+ '1234.567 12\n' +
+ ' ' + '4.567'.bgMagenta.green + ' 1234.45689')
+ })
+
+ it ('ANSI coloring works', () => {
+
+ const testData =
+ [ { foo: true, string: 'abcde', num: 42 },
+ { foo: false, string: '💩wertyuiop'.bgMagenta.green.bright, num: 43 } ]
+
+ const d = ' | '.dim.cyan
+ const _ = '-'.bright.cyan
+
+ const result = asTable.configure ({ title: x => x.bright, delimiter: d, dash: _ }) (testData)
+
+ console.log (result)
+
+ assert.equal (result,
+
+ ['foo'.bright + ' ', 'string'.bright + ' ', 'num'.bright].join (d) + '\n' +
+ _.repeat (24) + '\n' +
+ ['true ', 'abcde ', '42 '].join (d) + '\n' +
+ ['false', '💩wertyuiop'.bgMagenta.green.bright, '43 '].join (d))
+ })
+})
--
cgit v1.2.3