Browse Source

Create memoizer.js

master
MiningCryptoLive 3 years ago committed by GitHub
parent
commit
b0ab8d5b1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 83
      www/fix/intl-format-cache/lib/memoizer.js

83
www/fix/intl-format-cache/lib/memoizer.js vendored

@ -0,0 +1,83 @@
/*
Copyright (c) 2014, Yahoo! Inc. All rights reserved.
Copyrights licensed under the New BSD License.
See the accompanying LICENSE file for terms.
*/
/* jshint esnext: true */
"use strict";
var src$es5$$ = require("./es5");
exports["default"] = createFormatCache;
// -----------------------------------------------------------------------------
function createFormatCache(FormatConstructor) {
var cache = src$es5$$.objCreate(null);
return function () {
var args = Array.prototype.slice.call(arguments);
var cacheId = getCacheId(args);
var format = cacheId && cache[cacheId];
if (!format) {
format = new (src$es5$$.bind.apply(FormatConstructor, [null].concat(args)))();
if (cacheId) {
cache[cacheId] = format;
}
}
return format;
};
}
// -- Utilities ----------------------------------------------------------------
function getCacheId(inputs) {
// When JSON is not available in the runtime, we will not create a cache id.
if (typeof JSON === 'undefined') { return; }
var cacheId = [];
var i, len, input;
for (i = 0, len = inputs.length; i < len; i += 1) {
input = inputs[i];
if (input && typeof input === 'object') {
cacheId.push(orderedProps(input));
} else {
cacheId.push(input);
}
}
return JSON.stringify(cacheId);
}
function orderedProps(obj) {
var props = [],
keys = [];
var key, i, len, prop;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
keys.push(key);
}
}
var orderedKeys = keys.sort();
for (i = 0, len = orderedKeys.length; i < len; i += 1) {
key = orderedKeys[i];
prop = {};
prop[key] = obj[key];
props[i] = prop;
}
return props;
}
//# sourceMappingURL=memoizer.js.map
Loading…
Cancel
Save