UNPKG

@tamara-solution/checkout

Version:

Script will be embedded in merchant's site to checkout. The merchant's don't need to redirect to tamara's site.

86 lines (71 loc) 1.86 kB
// String conversion methods function separateWords(string, options) { options = options || {} const separator = options.separator || '_' const split = options.split || /(?=[A-Z])/ return string.split(split).join(separator) } const toString = Object.prototype.toString function _isFunction(obj) { return typeof obj === 'function' } function _isObject(obj) { return obj === Object(obj) } function _isArray(obj) { return toString.call(obj) == '[object Array]' } function _isDate(obj) { return toString.call(obj) == '[object Date]' } function _isRegExp(obj) { return toString.call(obj) == '[object RegExp]' } function _isBoolean(obj) { return toString.call(obj) == '[object Boolean]' } function _processKeys(convert, obj, options) { if ( !_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj) ) { return obj } let output let i = 0 let length = 0 if (_isArray(obj)) { output = [] length = obj.length for (i = 0; i < length; i++) { output.push(_processKeys(convert, obj[i], options)) } } else { output = {} for (let key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { output[convert(key, options)] = _processKeys(convert, obj[key], options) } } } return output } function _processor(convert, options) { const callback = options && 'process' in options ? options.process : options if (typeof callback !== 'function') { return convert } return function (string, options) { return callback(string, convert, options) } } function decamelize(string, options) { return separateWords(string, options).toLowerCase() } function decamelizeKeys(object, options) { return _processKeys(_processor(decamelize, options), object, options) } export { decamelize, decamelizeKeys }