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.
		
		
		
		
			
				
					56 lines
				
				986 B
			
		
		
			
		
	
	
					56 lines
				
				986 B
			| 
								 
											2 years ago
										 
									 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Simple memoize
							 | 
						||
| 
								 | 
							
								 * wxs doesn't support fn.apply, so this memoize only support up to 2 args
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								/* eslint-disable */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function isPrimitive(value) {
							 | 
						||
| 
								 | 
							
								  var type = typeof value;
							 | 
						||
| 
								 | 
							
								  return (
							 | 
						||
| 
								 | 
							
								    type === 'boolean' ||
							 | 
						||
| 
								 | 
							
								    type === 'number' ||
							 | 
						||
| 
								 | 
							
								    type === 'string' ||
							 | 
						||
| 
								 | 
							
								    type === 'undefined' ||
							 | 
						||
| 
								 | 
							
								    value === null
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// mock simple fn.call in wxs
							 | 
						||
| 
								 | 
							
								function call(fn, args) {
							 | 
						||
| 
								 | 
							
								  if (args.length === 2) {
							 | 
						||
| 
								 | 
							
								    return fn(args[0], args[1]);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (args.length === 1) {
							 | 
						||
| 
								 | 
							
								    return fn(args[0]);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return fn();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function serializer(args) {
							 | 
						||
| 
								 | 
							
								  if (args.length === 1 && isPrimitive(args[0])) {
							 | 
						||
| 
								 | 
							
								    return args[0];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  var obj = {};
							 | 
						||
| 
								 | 
							
								  for (var i = 0; i < args.length; i++) {
							 | 
						||
| 
								 | 
							
								    obj['key' + i] = args[i];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return JSON.stringify(obj);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function memoize(fn) {
							 | 
						||
| 
								 | 
							
								  var cache = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return function() {
							 | 
						||
| 
								 | 
							
								    var key = serializer(arguments);
							 | 
						||
| 
								 | 
							
								    if (cache[key] === undefined) {
							 | 
						||
| 
								 | 
							
								      cache[key] = call(fn, arguments);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return cache[key];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = memoize;
							 |