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.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.4 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| module.exports = function (obj) {
 | |
| 	if (typeof obj === 'string') { return camelCase(obj); }
 | |
| 	return walk(obj);
 | |
| };
 | |
| 
 | |
| function walk(obj) {
 | |
| 	if (!obj || typeof obj !== 'object') { return obj; }
 | |
| 	if (isDate(obj) || isRegex(obj)) { return obj; }
 | |
| 	if (isArray(obj)) { return map(obj, walk); }
 | |
| 	return reduce(objectKeys(obj), function (acc, key) {
 | |
| 		var camel = camelCase(key);
 | |
| 		acc[camel] = walk(obj[key]);
 | |
| 		return acc;
 | |
| 	}, {});
 | |
| }
 | |
| 
 | |
| function camelCase(str) {
 | |
| 	return str.replace(/[_.-](\w|$)/g, function (_, x) {
 | |
| 		return x.toUpperCase();
 | |
| 	});
 | |
| }
 | |
| 
 | |
| var isArray = Array.isArray || function (obj) {
 | |
| 	return Object.prototype.toString.call(obj) === '[object Array]';
 | |
| };
 | |
| 
 | |
| var isDate = function (obj) {
 | |
| 	return Object.prototype.toString.call(obj) === '[object Date]';
 | |
| };
 | |
| 
 | |
| var isRegex = function (obj) {
 | |
| 	return Object.prototype.toString.call(obj) === '[object RegExp]';
 | |
| };
 | |
| 
 | |
| var has = Object.prototype.hasOwnProperty;
 | |
| var objectKeys = Object.keys || function (obj) {
 | |
| 	var keys = [];
 | |
| 	for (var key in obj) {
 | |
| 		if (has.call(obj, key)) { keys.push(key); }
 | |
| 	}
 | |
| 	return keys;
 | |
| };
 | |
| 
 | |
| function map(xs, f) {
 | |
| 	if (xs.map) { return xs.map(f); }
 | |
| 	var res = [];
 | |
| 	for (var i = 0; i < xs.length; i++) {
 | |
| 		res.push(f(xs[i], i));
 | |
| 	}
 | |
| 	return res;
 | |
| }
 | |
| 
 | |
| function reduce(xs, f, acc) {
 | |
| 	if (xs.reduce) { return xs.reduce(f, acc); }
 | |
| 	for (var i = 0; i < xs.length; i++) {
 | |
| 		acc = f(acc, xs[i], i);
 | |
| 	}
 | |
| 	return acc;
 | |
| }
 |