Files
Foundry-VTT-Docker/resources/app/node_modules/intl-format-cache/lib/memoizer.js
2025-01-04 00:34:03 +01:00

75 lines
1.7 KiB
JavaScript

"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