var root_1 = require('./root');
function polyfillSymbol(root) {
var Symbol = ensureSymbol(root);
ensureIterator(Symbol, root);
ensureObservable(Symbol);
return Symbol;
}
exports.polyfillSymbol = polyfillSymbol;
function ensureSymbol(root) {
if (!root.Symbol) {
root.Symbol = {
for: symbolForPolyfill
};
}
return root.Symbol;
}
exports.ensureSymbol = ensureSymbol;
function symbolForPolyfill(key) {
return '@@' + key;
}
exports.symbolForPolyfill = symbolForPolyfill;
function ensureIterator(Symbol, root) {
if (!Symbol.iterator) {
if (typeof Symbol.for === 'function') {
Symbol.iterator = Symbol.for('iterator');
}
else if (root.Set && typeof new root.Set()['@@iterator'] === 'function') {
// Bug for mozilla version
Symbol.iterator = '@@iterator';
}
else Eif (root.Map) {
// es6-shim specific logic
var keys = Object.getOwnPropertyNames(root.Map.prototype);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
if (key !== 'entries' && key !== 'size' && root.Map.prototype[key] === root.Map.prototype['entries']) {
Symbol.iterator = key;
break;
}
}
}
else {
Symbol.iterator = '@@iterator';
}
}
}
exports.ensureIterator = ensureIterator;
function ensureObservable(Symbol) {
if (!Symbol.observable) {
Eif (typeof Symbol.for === 'function') {
Symbol.observable = Symbol.for('observable');
}
else {
Symbol.observable = '@@observable';
}
}
}
exports.ensureObservable = ensureObservable;
exports.SymbolShim = polyfillSymbol(root_1.root);
//# sourceMappingURL=SymbolShim.js.map |