{"_id":"@zkochan/table","_rev":"4-f6f3a52e3d27ec3c796bda8898d94e22","name":"@zkochan/table","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"@arcanis/slice-ansi":"^1.0.2","ajv":"^6.12.4","lodash":"^4.17.20","string-width":"^4.2.0"},"description":"Formats data into a string table.","devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.11.4","@babel/node":"^7.10.5","@babel/plugin-transform-flow-strip-types":"^7.10.4","@babel/preset-env":"^7.11.0","@babel/register":"^7.10.5","ajv-cli":"^3.2.1","ajv-keywords":"^3.5.2","babel-plugin-istanbul":"^6.0.0","babel-plugin-lodash":"^3.3.4","babel-plugin-transform-export-default-name":"^2.0.4","chai":"^4.2.0","chalk":"^4.1.0","coveralls":"^3.1.0","eslint":"^7.7.0","eslint-config-canonical":"^23.0.1","flow-bin":"^0.132.0","flow-copy-source":"^2.0.9","gitdown":"^3.1.3","husky":"^4.2.5","mocha":"^8.1.3","nyc":"^15.1.0","semantic-release":"^17.1.1","sinon":"^9.0.3"},"engines":{"node":">=10.0.0"},"husky":{"hooks":{"post-commit":"npm run create-readme && git add README.md && git commit -m 'docs: generate docs' --no-verify","pre-commit":"npm run lint && npm run test && npm run build"}},"keywords":["ascii","text","table","align","ansi"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"@zkochan/table","nyc":{"include":["src/**/*.js"],"instrument":false,"reporter":["text-lcov"],"require":["@babel/register"],"sourceMap":false},"repository":{"type":"git","url":"git+https://github.com/gajus/table.git"},"scripts":{"build":"rm -fr ./dist && NODE_ENV=production babel ./src --out-dir ./dist --copy-files --source-maps && npm run create-validators && flow-copy-source src dist","create-readme":"gitdown ./.README/README.md --output-file ./README.md","create-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","lint":"npm run build && eslint ./src ./test && flow","test":"mocha --require @babel/register"},"version":"1.0.0","gitHead":"9c4b12673ab733d313c55f332db7ccc197c63e6c","bugs":{"url":"https://github.com/gajus/table/issues"},"homepage":"https://github.com/gajus/table#readme","_id":"@zkochan/table@1.0.0","_nodeVersion":"12.18.3","_npmVersion":"7.0.6","dist":{"integrity":"sha512-xLQlpiyapKO00VN3X0FmIzDN5CNCLCaSSnEldb9wAhKrFzQmmfu+FDlMvU0lA0wVDC8pawS8HFYYuGoZR6GdOw==","shasum":"8f23361b74773db632c3cf1000883e41c7a50100","tarball":"https://registry.npmjs.org/@zkochan/table/-/table-1.0.0.tgz","fileCount":79,"unpackedSize":437919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmdXzCRA9TVsSAnZWagAAiCIP/2X+GXhftJv8hZ2QvE/q\ntg3CWU7gFZEW8FNxYMP1I/sHCAAuATtWm9W45qCZd0iIZJRell4NVg9pCgB6\nkU9nge+zPLZ9eUM99sP8RDsZb0Ikjtrk9KH55lfx0V6El3QV0paf+mtUvFtX\nk5lQC/DhdXk9rq8MpztZbx+lLdBW3pId3G52v9vkc0J2VNCPJSpMIfK2jSqR\nwiOkRWiEXf6O0bpWcW8OyvBaZZ6aH19ZX/s8RXpzO1MKkhQpn+lDTT3J6j7p\nv/gRAYn84s8rADDOuUBfSGPzWLHL1XVJrX2/i6ng0YEBErXGkykj7nPtKR0G\nYBiOfLbONyOrMjbiFWFh8p68SD0L6Rn6saf+9HpQTTaalz8LYi/hedQIRzeU\ncnlD8/chwp78D6snqpuVdsvILw+MekA4ryAs12PmQ/PtQJgnuEe2+7pM0GHM\nBivHkvPTF8zziWTLXMGdl3G7EvC5PZvFY8nW7J1Q//Ff7nxc846HxCUxoodS\nm3sQGP5kYJRpXwRCLsJ9yBheyYMaVKFm6c/8DWofh/sWMCV+vYaSvlK5IA5n\nqzkhsswE80A5Y2iRv8xb32K/VElmPIZ/8cEF60OvxB9Xyu5Y32/JFtnHPThw\nRO0gKpScrOpin8jzt2PKkOmSCRmDnL92amv6/Dk/JnS3vXQ2OKspFD0vfGxl\naoRN\r\n=kmKE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCB+sPxNarLNIg+7c+XjLLoRON242cPhXlP5Vup9RVtMQIhAPZqKPx7FHinAQDx8uNJm9y+ZZvAwsNdVQXPMJcjBJzT"}]},"maintainers":[{"name":"zkochan","email":"z@kochan.io"}],"_npmUser":{"name":"zkochan","email":"z@kochan.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/table_1.0.0_1603917299164_0.11768611437076326"},"_hasShrinkwrap":false},"1.0.1":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"ajv":"^8.0.1","lodash.truncate":"^4.4.2","slice-ansi":"npm:@arcanis/slice-ansi@^1.0.2","string-width":"^4.2.3","strip-ansi":"^6.0.1"},"description":"Formats data into a string table.","devDependencies":{"@types/chai":"^4.2.16","@types/lodash.mapvalues":"^4.6.6","@types/lodash.truncate":"^4.4.6","@types/mocha":"^9.0.0","@types/node":"^14.14.37","@types/sinon":"^10.0.0","@types/slice-ansi":"^4.0.0","ajv-cli":"^5.0.0","ajv-keywords":"^5.0.0","chai":"^4.2.0","chalk":"^4.1.0","coveralls":"^3.1.0","eslint":"^7.32.0","eslint-config-canonical":"^25.0.0","gitdown":"^3.1.4","husky":"^4.3.6","js-beautify":"^1.14.0","lodash.mapvalues":"^4.6.0","mkdirp":"^1.0.4","mocha":"^8.2.1","nyc":"^15.1.0","semantic-release":"^17.3.1","sinon":"^12.0.1","ts-node":"^9.1.1","typescript":"4.5.2"},"engines":{"node":">=10.0.0"},"husky":{"hooks":{"post-commit":"npm run create-readme && git add README.md && git commit -m 'docs: generate docs' --no-verify","pre-commit":"npm run build && npm run lint && npm run test"}},"keywords":["ascii","text","table","align","ansi"],"license":"BSD-3-Clause","main":"./dist/src/index.js","name":"@zkochan/table","repository":{"type":"git","url":"git+https://github.com/gajus/table.git"},"scripts":{"prebuild":"rm -fr ./src/generated && mkdirp ./src/generated","build":"npm run create-validators && tsc","create-readme":"gitdown ./.README/README.md --output-file ./README.md","create-validators":"ajv compile --all-errors --inline-refs=false -s src/schemas/config -s src/schemas/streamConfig -r src/schemas/shared -c ajv-keywords/dist/keywords/typeof -o | js-beautify > ./src/generated/validators.js","lint":"eslint ./src ./test","test":"nyc mocha && nyc check-coverage --lines 95"},"version":"1.0.1","types":"./dist/src/index.d.ts","gitHead":"2fef6520c8d77aec144baa9b6c24143b2f4c537a","bugs":{"url":"https://github.com/gajus/table/issues"},"homepage":"https://github.com/gajus/table#readme","_id":"@zkochan/table@1.0.1","_nodeVersion":"16.19.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-5fFH67v0y5x9mmlGIJRTjgweuycymAhdIfuXx39k3sj83xH17gsi/MaXMK+cwiRR4g/kGeO7WwBrXV++zJpUGA==","shasum":"732dbed355df314495ec038bd3e5590f1afb858a","tarball":"https://registry.npmjs.org/@zkochan/table/-/table-1.0.1.tgz","fileCount":111,"unpackedSize":334673,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDGBMok7iODoG3sSzLgND4px0EUAatmsx7S0BK/Kuq9+AiBMNSj/1tqPSKVUsLKaPt42PKHrvON0BBw49ifmNI6PeQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkF4LZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp2uw//Vq0cPo9Xq35yVOFxbGWZ53zHqxkww3jZ0H3Vuk1h6pOOIlWW\r\njJ/M3aoPAIMPLzPRNux4ONSzWnV54qKRy/LQYYX10wcudYkF5pg15DlmyX1C\r\ndyhE+2GUZhAqGGzgp4Q5qZvvik32Ga/C/47a7PKIB0wFr0eLWf7R7egS7SHM\r\naiPhLxsq1PC/K152pD02YnRQaep63U7qXrKDrw+6xPHNUYtVtJb2iWkxGPEi\r\nvP+nWEEEpticgkaI8z2AjhxazW6Zf68tP0GktGXFDKJkeONG+i7nxLBvFGdE\r\nnuUWWNHNtFCmE/SxujU6o8o2AzIDr51+v43pDHw3V/8OmeA3BS5AvskGhuHl\r\nKpZqWIHcL+b+wwZQEArhNnXsDOxIp2ezHJE7MyIIhQwjMF5kYBbohIonly6Z\r\nUCXsP6G4xoDUxocxc6+5pFtq4NZWiDORyz4rbuyiuma5tfM61Jyj79VeHusz\r\n2u0UKPV+l9/Z83S+y60BqY8HvZf1WoO4vL2bRlhVt8HbMis9CECrIB9Vb7IC\r\n+SToE2KYxuIYIvfTlhT802oBvkpPpKiJZLqplO2lhPHB7QIGwDkHk9oj8qRo\r\n1CR8r8xT92+MBa3KO+VIy2AtgodSm3KtPl93GC+ucb4fHLKTMhzBR3VoYPzx\r\nPO5L2EBu6E6PPMJ3f5LBlxBD09IfjkdgIvQ=\r\n=uQ85\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zkochan","email":"z@kochan.io"},"directories":{},"maintainers":[{"name":"zkochan","email":"z@kochan.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/table_1.0.1_1679262425474_0.23004291511896335"},"_hasShrinkwrap":false},"2.0.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"ajv":"^8.0.1","lodash.truncate":"^4.4.2","slice-ansi":"npm:@arcanis/slice-ansi@^1.0.2","string-width":"^4.2.3","strip-ansi":"^6.0.1"},"description":"Formats data into a string table.","devDependencies":{"@types/chai":"^4.2.16","@types/lodash.mapvalues":"^4.6.6","@types/lodash.truncate":"^4.4.6","@types/mocha":"^9.0.0","@types/node":"^14.14.37","@types/sinon":"^10.0.0","@types/slice-ansi":"^4.0.0","ajv-cli":"^5.0.0","ajv-keywords":"^5.0.0","chai":"^4.2.0","chalk":"^4.1.0","coveralls":"^3.1.0","eslint":"^7.32.0","eslint-config-canonical":"^25.0.0","gitdown":"^3.1.4","husky":"^4.3.6","js-beautify":"^1.14.0","lodash.mapvalues":"^4.6.0","mkdirp":"^1.0.4","mocha":"^8.2.1","nyc":"^15.1.0","semantic-release":"^17.3.1","sinon":"^12.0.1","ts-node":"^9.1.1","typescript":"4.5.2"},"engines":{"node":">=16.14"},"husky":{"hooks":{"post-commit":"npm run create-readme && git add README.md && git commit -m 'docs: generate docs' --no-verify","pre-commit":"npm run build && npm run lint && npm run test"}},"keywords":["ascii","text","table","align","ansi"],"license":"BSD-3-Clause","main":"./dist/src/index.js","name":"@zkochan/table","repository":{"type":"git","url":"git+https://github.com/gajus/table.git"},"scripts":{"prebuild":"rm -fr ./src/generated && mkdirp ./src/generated","build":"npm run create-validators && tsc","create-readme":"gitdown ./.README/README.md --output-file ./README.md","create-validators":"ajv compile --all-errors --inline-refs=false -s src/schemas/config -s src/schemas/streamConfig -r src/schemas/shared -c ajv-keywords/dist/keywords/typeof -o | js-beautify > ./src/generated/validators.js","lint":"eslint ./src ./test","test":"nyc mocha && nyc check-coverage --lines 95"},"version":"2.0.0","types":"./dist/src/index.d.ts","gitHead":"8fd9afe82683d44505dea42d6e00da8901f00f08","bugs":{"url":"https://github.com/gajus/table/issues"},"homepage":"https://github.com/gajus/table#readme","_id":"@zkochan/table@2.0.0","_nodeVersion":"16.19.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-XXfLw5hwrr1nVoZdIBLJpuqHGMWJpwHP7GBv3yRPErz18VIDtVCPByo5Gj3mngaYhv+0Dwnwv5SdnY+YOJ2SpA==","shasum":"61cc17fbfe3e72e1d27aee34ad48b4792d700118","tarball":"https://registry.npmjs.org/@zkochan/table/-/table-2.0.0.tgz","fileCount":111,"unpackedSize":332999,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2WlCj/5DyC5WOs5QgCDRAHMccfkFqgIXa7BMzmIgkpgIgdQoDdAjR2+qcfQNVdGudva9gmEjML4IKMp0StbEwezs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkF4lRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqsaQ/7BdcjgbUdSN1BJcZIMIqMIfgKU3HCBgd8mHaW9B91ip6w0hF3\r\nM5jPJ4Q9W2NsQekb7W20LCjgO2cPq/fpEkpqcdiLf64Is1LLGhNHLTMCInSW\r\nLBOPmdybEfYJQ8sEUJNJ1jAo/a6dLxDm4e558K1K/O+/xgVQQp+eUY0tAGs/\r\nq1OTR0N4SMqQYAv4e6gFFXAomrfVW7PQxeqPRhDLwUShFDsYsZXNnAQSLSLV\r\nrPGARWUesCsr7KPcVZ05w441xyqRuNiwMYFVbVML4PUn8zehmhyq0Eut8kfV\r\nmGq69EVY5gSlfZ3LVNieeFHOtiT41FzOP+L6lIea6FNPu5gJBIvCgoKakYzY\r\nBxBSsHlQ0MXSWgmO7zdi02NkHv44XtlQMs0n35gckSZxo+IlJsNGVknrsgT4\r\nDHX/h/fQa1Q97gtzanJphQ8yLsCFz3/hwjWguQ0riD5dhLNCorZjkrxDMk85\r\nfvT3vQentGB6NiP1dvULnEa9//uWTnQ1+xTI+w444iYwAkbhbRrg7fKkUtQW\r\nxxUTrB0SsMW4WSJaFGEFUt6b3mj+Zty9ZPJXZ75MIKdDk1hKv02WDtKQmP1W\r\nYU10gIpHFfG/3A1ADPWY7PpqwwLEpN9ehEEamXzxOMWuFOBvbLAeUBlQ/Uod\r\nG/Hes4FUN03s0T7WUoLDqK1hGjGXnNtjBGM=\r\n=6Zg2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zkochan","email":"z@kochan.io"},"directories":{},"maintainers":[{"name":"zkochan","email":"z@kochan.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/table_2.0.0_1679264081388_0.13645666021583724"},"_hasShrinkwrap":false},"2.0.1":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"ajv":"^8.0.1","lodash.truncate":"^4.4.2","slice-ansi":"npm:@pnpm/slice-ansi@^1.1.1","string-width":"^4.2.3","strip-ansi":"^6.0.1"},"description":"Formats data into a string table.","devDependencies":{"@types/chai":"^4.2.16","@types/lodash.mapvalues":"^4.6.6","@types/lodash.truncate":"^4.4.6","@types/mocha":"^9.0.0","@types/node":"^14.14.37","@types/sinon":"^10.0.0","@types/slice-ansi":"^4.0.0","ajv-cli":"^5.0.0","ajv-keywords":"^5.0.0","chai":"^4.2.0","chalk":"^4.1.0","coveralls":"^3.1.0","eslint":"^7.32.0","eslint-config-canonical":"^25.0.0","gitdown":"^3.1.4","husky":"^4.3.6","js-beautify":"^1.14.0","lodash.mapvalues":"^4.6.0","mkdirp":"^1.0.4","mocha":"^8.2.1","nyc":"^15.1.0","semantic-release":"^17.3.1","sinon":"^12.0.1","ts-node":"^9.1.1","typescript":"4.5.2"},"engines":{"node":">=16.14"},"husky":{"hooks":{"post-commit":"npm run create-readme && git add README.md && git commit -m 'docs: generate docs' --no-verify","pre-commit":"npm run build && npm run lint && npm run test"}},"keywords":["ascii","text","table","align","ansi"],"license":"BSD-3-Clause","main":"./dist/src/index.js","name":"@zkochan/table","repository":{"type":"git","url":"git+https://github.com/gajus/table.git"},"scripts":{"prebuild":"rm -fr ./src/generated && mkdirp ./src/generated","build":"npm run create-validators && tsc","create-readme":"gitdown ./.README/README.md --output-file ./README.md","create-validators":"ajv compile --all-errors --inline-refs=false -s src/schemas/config -s src/schemas/streamConfig -r src/schemas/shared -c ajv-keywords/dist/keywords/typeof -o | js-beautify > ./src/generated/validators.js","lint":"eslint ./src ./test","test":"nyc mocha && nyc check-coverage --lines 95"},"version":"2.0.1","types":"./dist/src/index.d.ts","gitHead":"379f775bd320c39e236bee2080c57715b51c494a","bugs":{"url":"https://github.com/gajus/table/issues"},"homepage":"https://github.com/gajus/table#readme","_id":"@zkochan/table@2.0.1","_nodeVersion":"16.19.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-o+nA2fbYPcngLhCTuBQYkdt0Ef6lb8ppaGpXtz/9qsm1F9g5e9UQe8LGkT6NnkcGtwU/hlMvckuGafRGHP3NxQ==","shasum":"6179cb9ac2b74ea18561b7985fed28964f83b4b5","tarball":"https://registry.npmjs.org/@zkochan/table/-/table-2.0.1.tgz","fileCount":111,"unpackedSize":332996,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQUqq3iChgtQ470dzWtbzCL/g28Xm+g0+Pb3NXCsGitAiEAqosVi5xB3IEHnXsU+itPIemrSNlz51W8lO31otARcOM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkF62vACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpfiRAAnzA1KmcpE/8VuzZNaDkSGRv7rbZBs7fkTvXMwOb829AefWyx\r\nJNXbIpN8+5bbvq2lAxkINOYS+77/4qtrJVCht4bepLbW9RkQTdQPenEzDdmm\r\nZIvVHSekEufDgWWTfPwAulxbfA/v+AS0cpoQw1B+OuFa1OroKWLYr3cUstB5\r\nGlWHlTlzqK95PqlXDP1j9X7b2+iunlFQbjKhh64m4q471k02Okm65bHX/cVW\r\nrIov6v43reM6nWCVM194eeAOp4hXFpZh2nTeKNbsn2gwmEiXfKJJPN/u1Xuy\r\nhytxhJAD/9v2TvQ7Xu0nZqPChDcnNayH/R0Qc2eAeXqjfxeihdoahj95qZjp\r\nZ+Nskagc35+2OlekvTCeHwZTgFl7MgGRP12+j2GJMzdVt6XUrfzQa/Z2st1M\r\n4Gbz7sm66YvKmkY2yXQTXP3gkMi5vKSVHYrka2oqOx1AeeWy4QdEspfEPV0R\r\nMeB3g2L53sVNybfq2Qf/drHkjKhQKJi1Za5CRG0AC/I0li5oqWEDCg5mJicj\r\nlzr1amFdHE/SgvnEDo3wxeQqEoeAchxQeu6FUxdqURA7UKsGlqAWWeUQiwh7\r\n9LDnecF3EMb21yWox4nXzxC4gHiyk0CV4Jxu3oAvIg/C1VeVjmpwkX8zJXkg\r\nvZZFYY4ULJCUnx2BIREgqekWoynQgIFgMWg=\r\n=VhgU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zkochan","email":"z@kochan.io"},"directories":{},"maintainers":[{"name":"zkochan","email":"z@kochan.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/table_2.0.1_1679273391709_0.3141954446358566"},"_hasShrinkwrap":false}},"time":{"created":"2020-10-28T20:34:59.106Z","1.0.0":"2020-10-28T20:34:59.396Z","modified":"2023-03-20T00:49:52.057Z","1.0.1":"2023-03-19T21:47:05.638Z","2.0.0":"2023-03-19T22:14:41.577Z","2.0.1":"2023-03-20T00:49:51.928Z"},"maintainers":[{"name":"zkochan","email":"z@kochan.io"}],"description":"Formats data into a string table.","homepage":"https://github.com/gajus/table#readme","keywords":["ascii","text","table","align","ansi"],"repository":{"type":"git","url":"git+https://github.com/gajus/table.git"},"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"bugs":{"url":"https://github.com/gajus/table/issues"},"license":"BSD-3-Clause","readme":"<a name=\"table\"></a>\n# Table\n\n> Produces a string that represents array data in a text table.\n\n[![Github action status](https://github.com/gajus/table/actions/workflows/main.yml/badge.svg)](https://github.com/gajus/table/actions)\n[![Coveralls](https://img.shields.io/coveralls/gajus/table.svg?style=flat-square)](https://coveralls.io/github/gajus/table)\n[![NPM version](http://img.shields.io/npm/v/table.svg?style=flat-square)](https://www.npmjs.org/package/table)\n[![Canonical Code Style](https://img.shields.io/badge/code%20style-canonical-blue.svg?style=flat-square)](https://github.com/gajus/canonical)\n[![Twitter Follow](https://img.shields.io/twitter/follow/kuizinas.svg?style=social&label=Follow)](https://twitter.com/kuizinas)\n\n* [Table](#table)\n    * [Features](#table-features)\n    * [Install](#table-install)\n    * [Usage](#table-usage)\n    * [API](#table-api)\n        * [table](#table-api-table-1)\n        * [createStream](#table-api-createstream)\n        * [getBorderCharacters](#table-api-getbordercharacters)\n\n\n![Demo of table displaying a list of missions to the Moon.](./.README/demo.png)\n\n<a name=\"table-features\"></a>\n## Features\n\n* Works with strings containing [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) characters.\n* Works with strings containing [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code).\n* Configurable border characters.\n* Configurable content alignment per column.\n* Configurable content padding per column.\n* Configurable column width.\n* Text wrapping.\n\n<a name=\"table-install\"></a>\n## Install\n\n```bash\nnpm install table\n```\n\n[![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/gajus)\n[![Become a Patron](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/gajus)\n\n\n<a name=\"table-usage\"></a>\n## Usage\n\n```js\nimport { table } from 'table';\n\n// Using commonjs?\n// const { table } = require('table');\n\nconst data = [\n    ['0A', '0B', '0C'],\n    ['1A', '1B', '1C'],\n    ['2A', '2B', '2C']\n];\n\nconsole.log(table(data));\n```\n\n```\n╔════╤════╤════╗\n║ 0A │ 0B │ 0C ║\n╟────┼────┼────╢\n║ 1A │ 1B │ 1C ║\n╟────┼────┼────╢\n║ 2A │ 2B │ 2C ║\n╚════╧════╧════╝\n\n```\n\n\n<a name=\"table-api\"></a>\n## API\n\n<a name=\"table-api-table-1\"></a>\n### table\n\nReturns the string in the table format\n\n**Parameters:**\n- **_data_:** The data to display\n  - Type: `any[][]`\n  - Required: `true`\n\n- **_config_:** Table configuration\n  - Type: `object`\n  - Required: `false`\n\n<a name=\"table-api-table-1-config-border\"></a>\n##### config.border\n\nType: `{ [type: string]: string }`\\\nDefault: `honeywell` [template](#getbordercharacters)\n\nCustom borders. The keys are any of:\n- `topLeft`, `topRight`, `topBody`,`topJoin`\n- `bottomLeft`, `bottomRight`, `bottomBody`, `bottomJoin`\n- `joinLeft`, `joinRight`, `joinBody`, `joinJoin`\n- `bodyLeft`, `bodyRight`, `bodyJoin`\n- `headerJoin`\n\n```js\nconst data = [\n  ['0A', '0B', '0C'],\n  ['1A', '1B', '1C'],\n  ['2A', '2B', '2C']\n];\n\nconst config = {\n  border: {\n    topBody: `─`,\n    topJoin: `┬`,\n    topLeft: `┌`,\n    topRight: `┐`,\n\n    bottomBody: `─`,\n    bottomJoin: `┴`,\n    bottomLeft: `└`,\n    bottomRight: `┘`,\n\n    bodyLeft: `│`,\n    bodyRight: `│`,\n    bodyJoin: `│`,\n\n    joinBody: `─`,\n    joinLeft: `├`,\n    joinRight: `┤`,\n    joinJoin: `┼`\n  }\n};\n\nconsole.log(table(data, config));\n```\n\n```\n┌────┬────┬────┐\n│ 0A │ 0B │ 0C │\n├────┼────┼────┤\n│ 1A │ 1B │ 1C │\n├────┼────┼────┤\n│ 2A │ 2B │ 2C │\n└────┴────┴────┘\n```\n\n<a name=\"table-api-table-1-config-drawverticalline\"></a>\n##### config.drawVerticalLine\n\nType: `(lineIndex: number, columnCount: number) => boolean`\\\nDefault: `() => true`\n\nIt is used to tell whether to draw a vertical line. This callback is called for each vertical border of the table.\nIf the table has `n` columns, then the `index` parameter is alternatively received all numbers in range `[0, n]` inclusively.\n\n```js\nconst data = [\n  ['0A', '0B', '0C'],\n  ['1A', '1B', '1C'],\n  ['2A', '2B', '2C'],\n  ['3A', '3B', '3C'],\n  ['4A', '4B', '4C']\n];\n\nconst config = {\n  drawVerticalLine: (lineIndex, columnCount) => {\n    return lineIndex === 0 || lineIndex === columnCount;\n  }\n};\n\nconsole.log(table(data, config));\n\n```\n\n```\n╔════════════╗\n║ 0A  0B  0C ║\n╟────────────╢\n║ 1A  1B  1C ║\n╟────────────╢\n║ 2A  2B  2C ║\n╟────────────╢\n║ 3A  3B  3C ║\n╟────────────╢\n║ 4A  4B  4C ║\n╚════════════╝\n\n```\n\n<a name=\"table-api-table-1-config-drawhorizontalline\"></a>\n##### config.drawHorizontalLine\n\nType: `(lineIndex: number, rowCount: number) => boolean`\\\nDefault: `() => true`\n\nIt is used to tell whether to draw a horizontal line. This callback is called for each horizontal border of the table.\nIf the table has `n` rows, then the `index` parameter is alternatively received all numbers in range `[0, n]` inclusively.\nIf the table has `n` rows and contains the header, then the range will be `[0, n+1]` inclusively.\n\n```js\nconst data = [\n  ['0A', '0B', '0C'],\n  ['1A', '1B', '1C'],\n  ['2A', '2B', '2C'],\n  ['3A', '3B', '3C'],\n  ['4A', '4B', '4C']\n];\n\nconst config = {\n  drawHorizontalLine: (lineIndex, rowCount) => {\n    return lineIndex === 0 || lineIndex === 1 || lineIndex === rowCount - 1 || lineIndex === rowCount;\n  }\n};\n\nconsole.log(table(data, config));\n\n```\n\n```\n╔════╤════╤════╗\n║ 0A │ 0B │ 0C ║\n╟────┼────┼────╢\n║ 1A │ 1B │ 1C ║\n║ 2A │ 2B │ 2C ║\n║ 3A │ 3B │ 3C ║\n╟────┼────┼────╢\n║ 4A │ 4B │ 4C ║\n╚════╧════╧════╝\n\n```\n\n<a name=\"table-api-table-1-config-singleline\"></a>\n##### config.singleLine\n\nType: `boolean`\\\nDefault: `false`\n\nIf `true`, horizontal lines inside the table are not drawn. This option also overrides the `config.drawHorizontalLine` if specified.\n\n```js\nconst data = [\n  ['-rw-r--r--', '1', 'pandorym', 'staff', '1529', 'May 23 11:25', 'LICENSE'],\n  ['-rw-r--r--', '1', 'pandorym', 'staff', '16327', 'May 23 11:58', 'README.md'],\n  ['drwxr-xr-x', '76', 'pandorym', 'staff', '2432', 'May 23 12:02', 'dist'],\n  ['drwxr-xr-x', '634', 'pandorym', 'staff', '20288', 'May 23 11:54', 'node_modules'],\n  ['-rw-r--r--', '1,', 'pandorym', 'staff', '525688', 'May 23 11:52', 'package-lock.json'],\n  ['-rw-r--r--@', '1', 'pandorym', 'staff', '2440', 'May 23 11:25', 'package.json'],\n  ['drwxr-xr-x', '27', 'pandorym', 'staff', '864', 'May 23 11:25', 'src'],\n  ['drwxr-xr-x', '20', 'pandorym', 'staff', '640', 'May 23 11:25', 'test'],\n];\n\nconst config = {\n  singleLine: true\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔═════════════╤═════╤══════════╤═══════╤════════╤══════════════╤═══════════════════╗\n║ -rw-r--r--  │ 1   │ pandorym │ staff │ 1529   │ May 23 11:25 │ LICENSE           ║\n║ -rw-r--r--  │ 1   │ pandorym │ staff │ 16327  │ May 23 11:58 │ README.md         ║\n║ drwxr-xr-x  │ 76  │ pandorym │ staff │ 2432   │ May 23 12:02 │ dist              ║\n║ drwxr-xr-x  │ 634 │ pandorym │ staff │ 20288  │ May 23 11:54 │ node_modules      ║\n║ -rw-r--r--  │ 1,  │ pandorym │ staff │ 525688 │ May 23 11:52 │ package-lock.json ║\n║ -rw-r--r--@ │ 1   │ pandorym │ staff │ 2440   │ May 23 11:25 │ package.json      ║\n║ drwxr-xr-x  │ 27  │ pandorym │ staff │ 864    │ May 23 11:25 │ src               ║\n║ drwxr-xr-x  │ 20  │ pandorym │ staff │ 640    │ May 23 11:25 │ test              ║\n╚═════════════╧═════╧══════════╧═══════╧════════╧══════════════╧═══════════════════╝\n```\n\n\n<a name=\"table-api-table-1-config-columns\"></a>\n##### config.columns\n\nType: `Column[] | { [columnIndex: number]: Column }`\n\nColumn specific configurations.\n\n<a name=\"table-api-table-1-config-columns-config-columns-width\"></a>\n###### config.columns[*].width\n\nType: `number`\\\nDefault: the maximum cell widths of the column\n\nColumn width (excluding the paddings).\n\n```js\n\nconst data = [\n  ['0A', '0B', '0C'],\n  ['1A', '1B', '1C'],\n  ['2A', '2B', '2C']\n];\n\nconst config = {\n  columns: {\n    1: { width: 10 }\n  }\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔════╤════════════╤════╗\n║ 0A │ 0B         │ 0C ║\n╟────┼────────────┼────╢\n║ 1A │ 1B         │ 1C ║\n╟────┼────────────┼────╢\n║ 2A │ 2B         │ 2C ║\n╚════╧════════════╧════╝\n```\n\n<a name=\"table-api-table-1-config-columns-config-columns-alignment\"></a>\n###### config.columns[*].alignment\n\nType: `'center' | 'justify' | 'left' | 'right'`\\\nDefault: `'left'`\n\nCell content horizontal alignment\n\n```js\nconst data = [\n  ['0A', '0B', '0C', '0D 0E 0F'],\n  ['1A', '1B', '1C', '1D 1E 1F'],\n  ['2A', '2B', '2C', '2D 2E 2F'],\n];\n\nconst config = {\n  columnDefault: {\n    width: 10,\n  },\n  columns: [\n    { alignment: 'left' },\n    { alignment: 'center' },\n    { alignment: 'right' },\n    { alignment: 'justify' }\n  ],\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔════════════╤════════════╤════════════╤════════════╗\n║ 0A         │     0B     │         0C │ 0D  0E  0F ║\n╟────────────┼────────────┼────────────┼────────────╢\n║ 1A         │     1B     │         1C │ 1D  1E  1F ║\n╟────────────┼────────────┼────────────┼────────────╢\n║ 2A         │     2B     │         2C │ 2D  2E  2F ║\n╚════════════╧════════════╧════════════╧════════════╝\n```\n\n<a name=\"table-api-table-1-config-columns-config-columns-verticalalignment\"></a>\n###### config.columns[*].verticalAlignment\n\nType: `'top' | 'middle' | 'bottom'`\\\nDefault: `'top'`\n\nCell content vertical alignment\n\n```js\nconst data = [\n  ['A', 'B', 'C', 'DEF'],\n];\n\nconst config = {\n  columnDefault: {\n    width: 1,\n  },\n  columns: [\n    { verticalAlignment: 'top' },\n    { verticalAlignment: 'middle' },\n    { verticalAlignment: 'bottom' },\n  ],\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔═══╤═══╤═══╤═══╗\n║ A │   │   │ D ║\n║   │ B │   │ E ║\n║   │   │ C │ F ║\n╚═══╧═══╧═══╧═══╝\n```\n\n<a name=\"table-api-table-1-config-columns-config-columns-paddingleft\"></a>\n###### config.columns[*].paddingLeft\n\nType: `number`\\\nDefault: `1`\n\nThe number of whitespaces used to pad the content on the left.\n\n<a name=\"table-api-table-1-config-columns-config-columns-paddingright\"></a>\n###### config.columns[*].paddingRight\n\nType: `number`\\\nDefault: `1`\n\nThe number of whitespaces used to pad the content on the right.\n\nThe `paddingLeft` and `paddingRight` options do not count on the column width. So the column has `width = 5`, `paddingLeft = 2` and `paddingRight = 2` will have the total width is `9`.\n\n\n```js\nconst data = [\n  ['0A', 'AABBCC', '0C'],\n  ['1A', '1B', '1C'],\n  ['2A', '2B', '2C']\n];\n\nconst config = {\n  columns: [\n    {\n      paddingLeft: 3\n    },\n    {\n      width: 2,\n      paddingRight: 3\n    }\n  ]\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔══════╤══════╤════╗\n║   0A │ AA   │ 0C ║\n║      │ BB   │    ║\n║      │ CC   │    ║\n╟──────┼──────┼────╢\n║   1A │ 1B   │ 1C ║\n╟──────┼──────┼────╢\n║   2A │ 2B   │ 2C ║\n╚══════╧══════╧════╝\n```\n\n<a name=\"table-api-table-1-config-columns-config-columns-truncate\"></a>\n###### config.columns[*].truncate\n\nType: `number`\\\nDefault: `Infinity`\n\nThe number of characters is which the content will be truncated.\nTo handle a content that overflows the container width, `table` package implements [text wrapping](#config.columns[*].wrapWord). However, sometimes you may want to truncate content that is too long to be displayed in the table.\n\n```js\nconst data = [\n  ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.']\n];\n\nconst config = {\n  columns: [\n    {\n      width: 20,\n      truncate: 100\n    }\n  ]\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔══════════════════════╗\n║ Lorem ipsum dolor si ║\n║ t amet, consectetur  ║\n║ adipiscing elit. Pha ║\n║ sellus pulvinar nibh ║\n║ sed mauris convall…  ║\n╚══════════════════════╝\n```\n\n<a name=\"table-api-table-1-config-columns-config-columns-wrapword\"></a>\n###### config.columns[*].wrapWord\n\nType: `boolean`\\\nDefault: `false`\n\nThe `table` package implements auto text wrapping, i.e., text that has the width greater than the container width will be separated into multiple lines at the nearest space or one of the special characters: `\\|/_.,;-`.\n\nWhen `wrapWord` is `false`:\n\n```js\nconst data = [\n    ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.']\n];\n\nconst config = {\n  columns: [ { width: 20 } ]\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔══════════════════════╗\n║ Lorem ipsum dolor si ║\n║ t amet, consectetur  ║\n║ adipiscing elit. Pha ║\n║ sellus pulvinar nibh ║\n║ sed mauris convallis ║\n║ dapibus. Nunc venena ║\n║ tis tempus nulla sit ║\n║ amet viverra.        ║\n╚══════════════════════╝\n```\n\nWhen `wrapWord` is `true`:\n\n```\n╔══════════════════════╗\n║ Lorem ipsum dolor    ║\n║ sit amet,            ║\n║ consectetur          ║\n║ adipiscing elit.     ║\n║ Phasellus pulvinar   ║\n║ nibh sed mauris      ║\n║ convallis dapibus.   ║\n║ Nunc venenatis       ║\n║ tempus nulla sit     ║\n║ amet viverra.        ║\n╚══════════════════════╝\n\n```\n\n\n<a name=\"table-api-table-1-config-columndefault\"></a>\n##### config.columnDefault\n\nType: `Column`\\\nDefault: `{}`\n\nThe default configuration for all columns. Column-specific settings will overwrite the default values.\n\n\n<a name=\"table-api-table-1-config-header\"></a>\n##### config.header\n\nType: `object`\n\nHeader configuration.\n\n*Deprecated in favor of the new spanning cells API.*\n\nThe header configuration inherits the most of the column's, except:\n- `content` **{string}**: the header content.\n- `width:` calculate based on the content width automatically.\n- `alignment:` `center` be default.\n- `verticalAlignment:` is not supported.\n- `config.border.topJoin` will be `config.border.topBody` for prettier.\n\n```js\nconst data = [\n      ['0A', '0B', '0C'],\n      ['1A', '1B', '1C'],\n      ['2A', '2B', '2C'],\n    ];\n\nconst config = {\n  columnDefault: {\n    width: 10,\n  },\n  header: {\n    alignment: 'center',\n    content: 'THE HEADER\\nThis is the table about something',\n  },\n}\n\nconsole.log(table(data, config));\n```\n\n```\n╔══════════════════════════════════════╗\n║              THE HEADER              ║\n║  This is the table about something   ║\n╟────────────┬────────────┬────────────╢\n║ 0A         │ 0B         │ 0C         ║\n╟────────────┼────────────┼────────────╢\n║ 1A         │ 1B         │ 1C         ║\n╟────────────┼────────────┼────────────╢\n║ 2A         │ 2B         │ 2C         ║\n╚════════════╧════════════╧════════════╝\n```\n\n\n<a name=\"table-api-table-1-config-spanningcells\"></a>\n##### config.spanningCells\n\nType: `SpanningCellConfig[]`\n\nSpanning cells configuration.\n\nThe configuration should be straightforward: just specify an array of minimal cell configurations including the position of top-left cell\nand the number of columns and/or rows will be expanded from it.\n\nThe content of overlap cells will be ignored to make the `data` shape be consistent.\n\nBy default, the configuration of column that the top-left cell belongs to will be applied to the whole spanning cell, except:\n* The `width` will be summed up of all spanning columns.\n* The `paddingRight` will be received from the right-most column intentionally.\n\nAdvances customized column-like styles can be configurable to each spanning cell to overwrite the default behavior.\n\n```js\nconst data = [\n  ['Test Coverage Report', '', '', '', '', ''],\n  ['Module', 'Component', 'Test Cases', 'Failures', 'Durations', 'Success Rate'],\n  ['Services', 'User', '50', '30', '3m 7s', '60.0%'],\n  ['', 'Payment', '100', '80', '7m 15s', '80.0%'],\n  ['Subtotal', '', '150', '110', '10m 22s', '73.3%'],\n  ['Controllers', 'User', '24', '18', '1m 30s', '75.0%'],\n  ['', 'Payment', '30', '24', '50s', '80.0%'],\n  ['Subtotal', '', '54', '42', '2m 20s', '77.8%'],\n  ['Total', '', '204', '152', '12m 42s', '74.5%'],\n];\n\nconst config = {\n  columns: [\n    { alignment: 'center', width: 12 },\n    { alignment: 'center', width: 10 },\n    { alignment: 'right' },\n    { alignment: 'right' },\n    { alignment: 'right' },\n    { alignment: 'right' }\n  ],\n  spanningCells: [\n    { col: 0, row: 0, colSpan: 6 },\n    { col: 0, row: 2, rowSpan: 2, verticalAlignment: 'middle'},\n    { col: 0, row: 4, colSpan: 2, alignment: 'right'},\n    { col: 0, row: 5, rowSpan: 2, verticalAlignment: 'middle'},\n    { col: 0, row: 7, colSpan: 2, alignment: 'right' },\n    { col: 0, row: 8, colSpan: 2, alignment: 'right' }\n  ],\n};\n\nconsole.log(table(data, config));\n```\n\n```\n╔══════════════════════════════════════════════════════════════════════════════╗\n║                             Test Coverage Report                             ║\n╟──────────────┬────────────┬────────────┬──────────┬───────────┬──────────────╢\n║    Module    │ Component  │ Test Cases │ Failures │ Durations │ Success Rate ║\n╟──────────────┼────────────┼────────────┼──────────┼───────────┼──────────────╢\n║              │    User    │         50 │       30 │     3m 7s │        60.0% ║\n║   Services   ├────────────┼────────────┼──────────┼───────────┼──────────────╢\n║              │  Payment   │        100 │       80 │    7m 15s │        80.0% ║\n╟──────────────┴────────────┼────────────┼──────────┼───────────┼──────────────╢\n║                  Subtotal │        150 │      110 │   10m 22s │        73.3% ║\n╟──────────────┬────────────┼────────────┼──────────┼───────────┼──────────────╢\n║              │    User    │         24 │       18 │    1m 30s │        75.0% ║\n║ Controllers  ├────────────┼────────────┼──────────┼───────────┼──────────────╢\n║              │  Payment   │         30 │       24 │       50s │        80.0% ║\n╟──────────────┴────────────┼────────────┼──────────┼───────────┼──────────────╢\n║                  Subtotal │         54 │       42 │    2m 20s │        77.8% ║\n╟───────────────────────────┼────────────┼──────────┼───────────┼──────────────╢\n║                     Total │        204 │      152 │   12m 42s │        74.5% ║\n╚═══════════════════════════╧════════════╧══════════╧═══════════╧══════════════╝\n```\n\n\n<a name=\"table-api-createstream\"></a>\n### createStream\n\n`table` package exports `createStream` function used to draw a table and append rows.\n\n**Parameter:**\n - _**config:**_ the same as `table`'s, except `config.columnDefault.width` and `config.columnCount` must be provided.\n\n\n```js\nimport { createStream } from 'table';\n\nconst config = {\n  columnDefault: {\n    width: 50\n  },\n  columnCount: 1\n};\n\nconst stream = createStream(config);\n\nsetInterval(() => {\n  stream.write([new Date()]);\n}, 500);\n```\n\n![Streaming current date.](./.README/api/stream/streaming.gif)\n\n`table` package uses ANSI escape codes to overwrite the output of the last line when a new row is printed.\n\nThe underlying implementation is explained in this [Stack Overflow answer](http://stackoverflow.com/a/32938658/368691).\n\nStreaming supports all of the configuration properties and functionality of a static table (such as auto text wrapping, alignment and padding), e.g.\n\n```js\nimport { createStream } from 'table';\n\nimport _ from 'lodash';\n\nconst config = {\n  columnDefault: {\n    width: 50\n  },\n  columnCount: 3,\n  columns: [\n    {\n      width: 10,\n      alignment: 'right'\n    },\n    { alignment: 'center' },\n    { width: 10 }\n\n  ]\n};\n\nconst stream = createStream(config);\n\nlet i = 0;\n\nsetInterval(() => {\n  let random;\n\n  random = _.sample('abcdefghijklmnopqrstuvwxyz', _.random(1, 30)).join('');\n\n  stream.write([i++, new Date(), random]);\n}, 500);\n```\n\n![Streaming random data.](./.README/api/stream/streaming-random.gif)\n\n\n<a name=\"table-api-getbordercharacters\"></a>\n### getBorderCharacters\n\n**Parameter:**\n - **_template_**\n   - Type: `'honeywell' | 'norc' | 'ramac' | 'void'`\n   - Required: `true`\n\nYou can load one of the predefined border templates using `getBorderCharacters` function.\n\n```js\nimport { table, getBorderCharacters } from 'table';\n\nconst data = [\n  ['0A', '0B', '0C'],\n  ['1A', '1B', '1C'],\n  ['2A', '2B', '2C']\n];\n\nconst config = {\n  border: getBorderCharacters(`name of the template`)\n};\n\nconsole.log(table(data, config));\n```\n\n```\n# honeywell\n\n╔════╤════╤════╗\n║ 0A │ 0B │ 0C ║\n╟────┼────┼────╢\n║ 1A │ 1B │ 1C ║\n╟────┼────┼────╢\n║ 2A │ 2B │ 2C ║\n╚════╧════╧════╝\n\n# norc\n\n┌────┬────┬────┐\n│ 0A │ 0B │ 0C │\n├────┼────┼────┤\n│ 1A │ 1B │ 1C │\n├────┼────┼────┤\n│ 2A │ 2B │ 2C │\n└────┴────┴────┘\n\n# ramac (ASCII; for use in terminals that do not support Unicode characters)\n\n+----+----+----+\n| 0A | 0B | 0C |\n|----|----|----|\n| 1A | 1B | 1C |\n|----|----|----|\n| 2A | 2B | 2C |\n+----+----+----+\n\n# void (no borders; see \"borderless table\" section of the documentation)\n\n 0A  0B  0C\n\n 1A  1B  1C\n\n 2A  2B  2C\n\n```\n\nRaise [an issue](https://github.com/gajus/table/issues) if you'd like to contribute a new border template.\n\n<a name=\"table-api-getbordercharacters-borderless-table\"></a>\n#### Borderless Table\n\nSimply using `void` border character template creates a table with a lot of unnecessary spacing.\n\nTo create a more pleasant to the eye table, reset the padding and remove the joining rows, e.g.\n\n```js\n\nconst output = table(data, {\n    border: getBorderCharacters('void'),\n    columnDefault: {\n        paddingLeft: 0,\n        paddingRight: 1\n    },\n    drawHorizontalLine: () => false\n    }\n);\n\nconsole.log(output);\n```\n\n```\n0A 0B 0C\n1A 1B 1C\n2A 2B 2C\n```\n\n","readmeFilename":"README.md"}