You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
import _ from 'lodash'; |
|
import getBorderCharacters from './getBorderCharacters'; |
|
import validateConfig from './validateConfig'; |
|
|
|
/** |
|
* Merges user provided border characters with the default border ("honeywell") characters. |
|
* |
|
* @param {Object} border |
|
* @returns {Object} |
|
*/ |
|
const makeBorder = (border = {}) => { |
|
return Object.assign({}, getBorderCharacters('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 = (columnCount, columns = {}, columnDefault = {}) => { |
|
_.times(columnCount, (index) => { |
|
if (_.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} |
|
*/ |
|
export default (userConfig = {}) => { |
|
validateConfig('streamConfig.json', userConfig); |
|
|
|
const config = _.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; |
|
};
|
|
|