Skip to content

Commit

Permalink
feat(Symbol.iterator): no longer polyfilled (#3389)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: We are no longer polyfilling `Symbol.iterator`. That would be done by a proper polyfilling library
  • Loading branch information
benlesh authored Mar 7, 2018
1 parent c3d9e1b commit 6319f3c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 131 deletions.
100 changes: 0 additions & 100 deletions spec/symbol/iterator-spec.ts

This file was deleted.

40 changes: 9 additions & 31 deletions src/internal/symbol/iterator.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,16 @@
import { root } from '../util/root';

export function symbolIteratorPonyfill(root: any) {
const Symbol: any = root.Symbol;

if (typeof Symbol === 'function') {
if (!Symbol.iterator) {
Symbol.iterator = Symbol('iterator polyfill');
}
return Symbol.iterator;
} else {
// [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)
const { Set } = root;
if (Set && typeof new Set()['@@iterator'] === 'function') {
return '@@iterator';
}
const { Map } = root;
// required for compatability with es6-shim
if (Map) {
let keys = Object.getOwnPropertyNames(Map.prototype);
for (let i = 0; i < keys.length; ++i) {
let key = keys[i];
// according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.
if (key !== 'entries' && key !== 'size' && Map.prototype[key] === Map.prototype['entries']) {
return key;
}
}
}
return '@@iterator';
}
/* NOTE: Warning users that they don't have a Symbol.iterator
polyfill. We don't want to throw on this, because it's not required
by the library. However it will provide clues to users on older
browsers why things like `from(iterable)` doesn't work. */
if (!Symbol || !Symbol.iterator) {
console.warn('RxJS: Symbol.observable does not exist');
}

export const iterator = symbolIteratorPonyfill(root);
/** The native Symbol.iterator instance or a string */
export const iterator = Symbol && Symbol.iterator || '@@iterator';

/**
* @deprecated use iterator instead
* @deprecated use {@link iterator} instead
*/
export const $$iterator = iterator;

0 comments on commit 6319f3c

Please sign in to comment.