/** * @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) => { const border = drawBorder(columnSizeIndex, { body: parts.topBody, join: parts.topJoin, left: parts.topLeft, right: parts.topRight, }); if (border === '\n') { return ''; } return border; }; /** * @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, }); }; export { drawBorder, drawBorderBottom, drawBorderJoin, drawBorderTop, };