@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
JavaScript
// 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 }