core-js 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/bower.json +1 -1
  3. package/build/config.js +7 -3
  4. package/client/core.js +1463 -1128
  5. package/client/core.min.js +4 -4
  6. package/client/core.min.js.map +1 -1
  7. package/client/library.js +1400 -1074
  8. package/client/library.min.js +4 -4
  9. package/client/library.min.js.map +1 -1
  10. package/client/shim.js +1406 -1071
  11. package/client/shim.min.js +4 -4
  12. package/client/shim.min.js.map +1 -1
  13. package/es7/asap.js +2 -0
  14. package/es7/index.js +4 -0
  15. package/es7/observable.js +7 -0
  16. package/es7/symbol.js +3 -0
  17. package/fn/asap.js +2 -0
  18. package/fn/observable.js +7 -0
  19. package/fn/symbol/async-iterator.js +2 -0
  20. package/fn/symbol/has-instance.js +2 -1
  21. package/fn/symbol/index.js +2 -0
  22. package/fn/symbol/is-concat-spreadable.js +1 -1
  23. package/fn/symbol/iterator.js +1 -1
  24. package/fn/symbol/match.js +1 -1
  25. package/fn/symbol/observable.js +2 -0
  26. package/fn/symbol/replace.js +1 -1
  27. package/fn/symbol/search.js +1 -1
  28. package/fn/symbol/species.js +1 -1
  29. package/fn/symbol/split.js +1 -1
  30. package/fn/symbol/to-primitive.js +1 -1
  31. package/fn/symbol/to-string-tag.js +1 -1
  32. package/fn/symbol/unscopables.js +1 -1
  33. package/library/es7/asap.js +2 -0
  34. package/library/es7/index.js +4 -0
  35. package/library/es7/observable.js +7 -0
  36. package/library/es7/symbol.js +3 -0
  37. package/library/fn/asap.js +2 -0
  38. package/library/fn/observable.js +7 -0
  39. package/library/fn/symbol/async-iterator.js +2 -0
  40. package/library/fn/symbol/has-instance.js +2 -1
  41. package/library/fn/symbol/index.js +2 -0
  42. package/library/fn/symbol/is-concat-spreadable.js +1 -1
  43. package/library/fn/symbol/iterator.js +1 -1
  44. package/library/fn/symbol/match.js +1 -1
  45. package/library/fn/symbol/observable.js +2 -0
  46. package/library/fn/symbol/replace.js +1 -1
  47. package/library/fn/symbol/search.js +1 -1
  48. package/library/fn/symbol/species.js +1 -1
  49. package/library/fn/symbol/split.js +1 -1
  50. package/library/fn/symbol/to-primitive.js +1 -1
  51. package/library/fn/symbol/to-string-tag.js +1 -1
  52. package/library/fn/symbol/unscopables.js +1 -1
  53. package/library/modules/_array-includes.js +1 -1
  54. package/library/modules/_array-species-constructor.js +16 -0
  55. package/library/modules/_array-species-create.js +3 -13
  56. package/library/modules/_core.js +1 -1
  57. package/library/modules/_create-property.js +8 -0
  58. package/library/modules/_for-of.js +12 -6
  59. package/library/modules/_iter-detect.js +1 -1
  60. package/library/modules/_math-expm1.js +8 -2
  61. package/library/modules/_microtask.js +58 -48
  62. package/library/modules/_object-gopn-ext.js +2 -2
  63. package/library/modules/_string-pad.js +1 -2
  64. package/library/modules/_wks-define.js +9 -0
  65. package/library/modules/_wks-ext.js +1 -0
  66. package/library/modules/_wks.js +5 -2
  67. package/library/modules/es6.array.filter.js +9 -9
  68. package/library/modules/es6.array.from.js +11 -9
  69. package/library/modules/es6.array.index-of.js +9 -4
  70. package/library/modules/es6.array.last-index-of.js +10 -6
  71. package/library/modules/es6.array.of.js +3 -2
  72. package/library/modules/es6.math.acosh.js +6 -2
  73. package/library/modules/es6.math.asinh.js +4 -2
  74. package/library/modules/es6.math.atanh.js +4 -2
  75. package/library/modules/es6.math.expm1.js +3 -2
  76. package/library/modules/es6.promise.js +1 -1
  77. package/library/modules/es6.reflect.apply.js +5 -3
  78. package/library/modules/es6.reflect.construct.js +2 -1
  79. package/library/modules/es6.symbol.js +59 -59
  80. package/library/modules/es7.asap.js +12 -0
  81. package/library/modules/es7.object.get-own-property-descriptors.js +7 -11
  82. package/library/modules/es7.observable.js +199 -0
  83. package/library/modules/es7.symbol.async-iterator.js +1 -0
  84. package/library/modules/es7.symbol.observable.js +1 -0
  85. package/library/shim.js +4 -0
  86. package/library/stage/0.js +1 -0
  87. package/library/stage/1.js +3 -2
  88. package/library/stage/2.js +3 -1
  89. package/library/stage/3.js +1 -3
  90. package/library/stage/4.js +3 -1
  91. package/modules/_array-includes.js +1 -1
  92. package/modules/_array-species-constructor.js +16 -0
  93. package/modules/_array-species-create.js +3 -13
  94. package/modules/_core.js +1 -1
  95. package/modules/_create-property.js +8 -0
  96. package/modules/_for-of.js +12 -6
  97. package/modules/_iter-detect.js +1 -1
  98. package/modules/_math-expm1.js +8 -2
  99. package/modules/_microtask.js +58 -48
  100. package/modules/_object-gopn-ext.js +2 -2
  101. package/modules/_string-pad.js +1 -2
  102. package/modules/_wks-define.js +9 -0
  103. package/modules/_wks-ext.js +1 -0
  104. package/modules/_wks.js +5 -2
  105. package/modules/es6.array.filter.js +9 -9
  106. package/modules/es6.array.from.js +11 -9
  107. package/modules/es6.array.index-of.js +9 -4
  108. package/modules/es6.array.last-index-of.js +10 -6
  109. package/modules/es6.array.of.js +3 -2
  110. package/modules/es6.function.name.js +13 -4
  111. package/modules/es6.math.acosh.js +6 -2
  112. package/modules/es6.math.asinh.js +4 -2
  113. package/modules/es6.math.atanh.js +4 -2
  114. package/modules/es6.math.expm1.js +3 -2
  115. package/modules/es6.promise.js +1 -1
  116. package/modules/es6.reflect.apply.js +5 -3
  117. package/modules/es6.reflect.construct.js +2 -1
  118. package/modules/es6.symbol.js +59 -59
  119. package/modules/es7.asap.js +12 -0
  120. package/modules/es7.object.get-own-property-descriptors.js +7 -11
  121. package/modules/es7.observable.js +199 -0
  122. package/modules/es7.symbol.async-iterator.js +1 -0
  123. package/modules/es7.symbol.observable.js +1 -0
  124. package/package.json +14 -12
  125. package/shim.js +4 -0
  126. package/stage/0.js +1 -0
  127. package/stage/1.js +3 -2
  128. package/stage/2.js +3 -1
  129. package/stage/3.js +1 -3
  130. package/stage/4.js +3 -1
  131. package/README.md +0 -1981
@@ -1,18 +1,22 @@
1
1
  'use strict';
2
- var $export = require('./_export')
3
- , toIObject = require('./_to-iobject')
4
- , toInteger = require('./_to-integer')
5
- , toLength = require('./_to-length');
2
+ var $export = require('./_export')
3
+ , toIObject = require('./_to-iobject')
4
+ , toInteger = require('./_to-integer')
5
+ , toLength = require('./_to-length')
6
+ , $native = [].lastIndexOf
7
+ , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
6
8
 
7
- $export($export.P + $export.F * !require('./_strict-method')([].lastIndexOf), 'Array', {
9
+ $export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
8
10
  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
9
11
  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){
12
+ // convert -0 to +0
13
+ if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;
10
14
  var O = toIObject(this)
11
15
  , length = toLength(O.length)
12
16
  , index = length - 1;
13
17
  if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));
14
18
  if(index < 0)index = length + index;
15
- for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index;
19
+ for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;
16
20
  return -1;
17
21
  }
18
22
  });
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
- var $export = require('./_export');
2
+ var $export = require('./_export')
3
+ , createProperty = require('./_create-property');
3
4
 
4
5
  // WebKit Array.of isn't generic
5
6
  $export($export.S + $export.F * require('./_fails')(function(){
@@ -11,7 +12,7 @@ $export($export.S + $export.F * require('./_fails')(function(){
11
12
  var index = 0
12
13
  , aLen = arguments.length
13
14
  , result = new (typeof this == 'function' ? this : Array)(aLen);
14
- while(aLen > index)result[index] = arguments[index++];
15
+ while(aLen > index)createProperty(result, index, arguments[index++]);
15
16
  result.length = aLen;
16
17
  return result;
17
18
  }
@@ -4,8 +4,12 @@ var $export = require('./_export')
4
4
  , sqrt = Math.sqrt
5
5
  , $acosh = Math.acosh;
6
6
 
7
- // V8 bug https://code.google.com/p/v8/issues/detail?id=3509
8
- $export($export.S + $export.F * !($acosh && Math.floor($acosh(Number.MAX_VALUE)) == 710), 'Math', {
7
+ $export($export.S + $export.F * !($acosh
8
+ // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
9
+ && Math.floor($acosh(Number.MAX_VALUE)) == 710
10
+ // Tor Browser bug: Math.acosh(Infinity) -> NaN
11
+ && $acosh(Infinity) == Infinity
12
+ ), 'Math', {
9
13
  acosh: function acosh(x){
10
14
  return (x = +x) < 1 ? NaN : x > 94906265.62425156
11
15
  ? Math.log(x) + Math.LN2
@@ -1,8 +1,10 @@
1
1
  // 20.2.2.5 Math.asinh(x)
2
- var $export = require('./_export');
2
+ var $export = require('./_export')
3
+ , $asinh = Math.asinh;
3
4
 
4
5
  function asinh(x){
5
6
  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
6
7
  }
7
8
 
8
- $export($export.S, 'Math', {asinh: asinh});
9
+ // Tor Browser bug: Math.asinh(0) -> -0
10
+ $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});
@@ -1,7 +1,9 @@
1
1
  // 20.2.2.7 Math.atanh(x)
2
- var $export = require('./_export');
2
+ var $export = require('./_export')
3
+ , $atanh = Math.atanh;
3
4
 
4
- $export($export.S, 'Math', {
5
+ // Tor Browser bug: Math.atanh(-0) -> 0
6
+ $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
5
7
  atanh: function atanh(x){
6
8
  return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
7
9
  }
@@ -1,4 +1,5 @@
1
1
  // 20.2.2.14 Math.expm1(x)
2
- var $export = require('./_export');
2
+ var $export = require('./_export')
3
+ , $expm1 = require('./_math-expm1');
3
4
 
4
- $export($export.S, 'Math', {expm1: require('./_math-expm1')});
5
+ $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});
@@ -12,7 +12,7 @@ var LIBRARY = require('./_library')
12
12
  , setProto = require('./_set-proto').set
13
13
  , speciesConstructor = require('./_species-constructor')
14
14
  , task = require('./_task').set
15
- , microtask = require('./_microtask')
15
+ , microtask = require('./_microtask')()
16
16
  , PROMISE = 'Promise'
17
17
  , TypeError = global.TypeError
18
18
  , process = global.process
@@ -1,9 +1,11 @@
1
1
  // 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
2
- var $export = require('./_export')
3
- , _apply = Function.apply;
2
+ var $export = require('./_export')
3
+ , aFunction = require('./_a-function')
4
+ , anObject = require('./_an-object')
5
+ , _apply = Function.apply;
4
6
 
5
7
  $export($export.S, 'Reflect', {
6
8
  apply: function apply(target, thisArgument, argumentsList){
7
- return _apply.call(target, thisArgument, argumentsList);
9
+ return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));
8
10
  }
9
11
  });
@@ -14,10 +14,11 @@ $export($export.S + $export.F * require('./_fails')(function(){
14
14
  }), 'Reflect', {
15
15
  construct: function construct(Target, args /*, newTarget*/){
16
16
  aFunction(Target);
17
+ anObject(args);
17
18
  var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
18
19
  if(Target == newTarget){
19
20
  // w/o altered newTarget, optimization for 0-4 arguments
20
- if(args != undefined)switch(anObject(args).length){
21
+ switch(args.length){
21
22
  case 0: return new Target;
22
23
  case 1: return new Target(args[0]);
23
24
  case 2: return new Target(args[0], args[1]);
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
  // ECMAScript 6 symbols shim
3
3
  var global = require('./_global')
4
- , core = require('./_core')
5
4
  , has = require('./_has')
6
5
  , DESCRIPTORS = require('./_descriptors')
7
6
  , $export = require('./_export')
@@ -12,6 +11,8 @@ var global = require('./_global')
12
11
  , setToStringTag = require('./_set-to-string-tag')
13
12
  , uid = require('./_uid')
14
13
  , wks = require('./_wks')
14
+ , wksExt = require('./_wks-ext')
15
+ , wksDefine = require('./_wks-define')
15
16
  , keyOf = require('./_keyof')
16
17
  , enumKeys = require('./_enum-keys')
17
18
  , isArray = require('./_is-array')
@@ -23,22 +24,25 @@ var global = require('./_global')
23
24
  , gOPNExt = require('./_object-gopn-ext')
24
25
  , $GOPD = require('./_object-gopd')
25
26
  , $DP = require('./_object-dp')
27
+ , $keys = require('./_object-keys')
26
28
  , gOPD = $GOPD.f
27
29
  , dP = $DP.f
28
30
  , gOPN = gOPNExt.f
29
31
  , $Symbol = global.Symbol
30
32
  , $JSON = global.JSON
31
33
  , _stringify = $JSON && $JSON.stringify
32
- , setter = false
33
34
  , PROTOTYPE = 'prototype'
34
35
  , HIDDEN = wks('_hidden')
35
36
  , TO_PRIMITIVE = wks('toPrimitive')
36
37
  , isEnum = {}.propertyIsEnumerable
37
38
  , SymbolRegistry = shared('symbol-registry')
38
39
  , AllSymbols = shared('symbols')
40
+ , OPSymbols = shared('op-symbols')
39
41
  , ObjectProto = Object[PROTOTYPE]
40
42
  , USE_NATIVE = typeof $Symbol == 'function'
41
43
  , QObject = global.QObject;
44
+ // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
45
+ var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
42
46
 
43
47
  // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
44
48
  var setSymbolDesc = DESCRIPTORS && $fails(function(){
@@ -55,13 +59,6 @@ var setSymbolDesc = DESCRIPTORS && $fails(function(){
55
59
  var wrap = function(tag){
56
60
  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
57
61
  sym._k = tag;
58
- DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, {
59
- configurable: true,
60
- set: function(value){
61
- if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
62
- setSymbolDesc(this, tag, createDesc(1, value));
63
- }
64
- });
65
62
  return sym;
66
63
  };
67
64
 
@@ -72,6 +69,7 @@ var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
72
69
  };
73
70
 
74
71
  var $defineProperty = function defineProperty(it, key, D){
72
+ if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
75
73
  anObject(it);
76
74
  key = toPrimitive(key, true);
77
75
  anObject(D);
@@ -99,10 +97,14 @@ var $create = function create(it, P){
99
97
  };
100
98
  var $propertyIsEnumerable = function propertyIsEnumerable(key){
101
99
  var E = isEnum.call(this, key = toPrimitive(key, true));
100
+ if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
102
101
  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
103
102
  };
104
103
  var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
105
- var D = gOPD(it = toIObject(it), key = toPrimitive(key, true));
104
+ it = toIObject(it);
105
+ key = toPrimitive(key, true);
106
+ if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
107
+ var D = gOPD(it, key);
106
108
  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
107
109
  return D;
108
110
  };
@@ -111,45 +113,33 @@ var $getOwnPropertyNames = function getOwnPropertyNames(it){
111
113
  , result = []
112
114
  , i = 0
113
115
  , key;
114
- while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
115
- return result;
116
+ while(names.length > i){
117
+ if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
118
+ } return result;
116
119
  };
117
120
  var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
118
- var names = gOPN(toIObject(it))
121
+ var IS_OP = it === ObjectProto
122
+ , names = gOPN(IS_OP ? OPSymbols : toIObject(it))
119
123
  , result = []
120
124
  , i = 0
121
125
  , key;
122
- while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);
123
- return result;
124
- };
125
- var $stringify = function stringify(it){
126
- if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
127
- var args = [it]
128
- , i = 1
129
- , replacer, $replacer;
130
- while(arguments.length > i)args.push(arguments[i++]);
131
- replacer = args[1];
132
- if(typeof replacer == 'function')$replacer = replacer;
133
- if($replacer || !isArray(replacer))replacer = function(key, value){
134
- if($replacer)value = $replacer.call(this, key, value);
135
- if(!isSymbol(value))return value;
136
- };
137
- args[1] = replacer;
138
- return _stringify.apply($JSON, args);
126
+ while(names.length > i){
127
+ if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
128
+ } return result;
139
129
  };
140
- var BUGGY_JSON = $fails(function(){
141
- var S = $Symbol();
142
- // MS Edge converts symbol values to JSON as {}
143
- // WebKit converts symbol values to JSON as null
144
- // V8 throws on boxed symbols
145
- return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
146
- });
147
130
 
148
131
  // 19.4.1.1 Symbol([description])
149
132
  if(!USE_NATIVE){
150
133
  $Symbol = function Symbol(){
151
134
  if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
152
- return wrap(uid(arguments.length > 0 ? arguments[0] : undefined));
135
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
136
+ var $set = function(value){
137
+ if(this === ObjectProto)$set.call(OPSymbols, value);
138
+ if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
139
+ setSymbolDesc(this, tag, createDesc(1, value));
140
+ };
141
+ if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
142
+ return wrap(tag);
153
143
  };
154
144
  redefine($Symbol[PROTOTYPE], 'toString', function toString(){
155
145
  return this._k;
@@ -158,38 +148,26 @@ if(!USE_NATIVE){
158
148
  $GOPD.f = $getOwnPropertyDescriptor;
159
149
  $DP.f = $defineProperty;
160
150
  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;
161
- require('./_object-pie').f = $propertyIsEnumerable
151
+ require('./_object-pie').f = $propertyIsEnumerable;
162
152
  require('./_object-gops').f = $getOwnPropertySymbols;
163
153
 
164
154
  if(DESCRIPTORS && !require('./_library')){
165
155
  redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
166
156
  }
157
+
158
+ wksExt.f = function(name){
159
+ return wrap(wks(name));
160
+ }
167
161
  }
168
162
 
169
163
  $export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
170
164
 
171
- // 19.4.2.2 Symbol.hasInstance
172
- // 19.4.2.3 Symbol.isConcatSpreadable
173
- // 19.4.2.4 Symbol.iterator
174
- // 19.4.2.6 Symbol.match
175
- // 19.4.2.8 Symbol.replace
176
- // 19.4.2.9 Symbol.search
177
- // 19.4.2.10 Symbol.species
178
- // 19.4.2.11 Symbol.split
179
- // 19.4.2.12 Symbol.toPrimitive
180
- // 19.4.2.13 Symbol.toStringTag
181
- // 19.4.2.14 Symbol.unscopables
182
165
  for(var symbols = (
166
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
183
167
  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
184
- ).split(','), i = 0; symbols.length > i; ){
185
- var key = symbols[i++]
186
- , Wrapper = core.Symbol
187
- , sym = wks(key);
188
- if(!(key in Wrapper))dP(Wrapper, key, {value: USE_NATIVE ? sym : wrap(sym)});
189
- };
168
+ ).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
190
169
 
191
- // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
192
- if(!QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild)setter = true;
170
+ for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
193
171
 
194
172
  $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
195
173
  // 19.4.2.1 Symbol.for(key)
@@ -223,7 +201,29 @@ $export($export.S + $export.F * !USE_NATIVE, 'Object', {
223
201
  });
224
202
 
225
203
  // 24.3.2 JSON.stringify(value [, replacer [, space]])
226
- $JSON && $export($export.S + $export.F * (!USE_NATIVE || BUGGY_JSON), 'JSON', {stringify: $stringify});
204
+ $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
205
+ var S = $Symbol();
206
+ // MS Edge converts symbol values to JSON as {}
207
+ // WebKit converts symbol values to JSON as null
208
+ // V8 throws on boxed symbols
209
+ return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
210
+ })), 'JSON', {
211
+ stringify: function stringify(it){
212
+ if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
213
+ var args = [it]
214
+ , i = 1
215
+ , replacer, $replacer;
216
+ while(arguments.length > i)args.push(arguments[i++]);
217
+ replacer = args[1];
218
+ if(typeof replacer == 'function')$replacer = replacer;
219
+ if($replacer || !isArray(replacer))replacer = function(key, value){
220
+ if($replacer)value = $replacer.call(this, key, value);
221
+ if(!isSymbol(value))return value;
222
+ };
223
+ args[1] = replacer;
224
+ return _stringify.apply($JSON, args);
225
+ }
226
+ });
227
227
 
228
228
  // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
229
229
  $Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
@@ -0,0 +1,12 @@
1
+ // https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
2
+ var $export = require('./_export')
3
+ , microtask = require('./_microtask')()
4
+ , process = require('./_global').process
5
+ , isNode = require('./_cof')(process) == 'process';
6
+
7
+ $export($export.G, {
8
+ asap: function asap(fn){
9
+ var domain = isNode && process.domain;
10
+ microtask(domain ? domain.bind(fn) : fn);
11
+ }
12
+ });
@@ -1,10 +1,9 @@
1
1
  // https://github.com/tc39/proposal-object-getownpropertydescriptors
2
- var $export = require('./_export')
3
- , ownKeys = require('./_own-keys')
4
- , toIObject = require('./_to-iobject')
5
- , createDesc = require('./_property-desc')
6
- , gOPD = require('./_object-gopd')
7
- , dP = require('./_object-dp');
2
+ var $export = require('./_export')
3
+ , ownKeys = require('./_own-keys')
4
+ , toIObject = require('./_to-iobject')
5
+ , gOPD = require('./_object-gopd')
6
+ , createProperty = require('./_create-property');
8
7
 
9
8
  $export($export.S, 'Object', {
10
9
  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){
@@ -14,10 +13,7 @@ $export($export.S, 'Object', {
14
13
  , result = {}
15
14
  , i = 0
16
15
  , key, D;
17
- while(keys.length > i){
18
- D = getDesc(O, key = keys[i++]);
19
- if(key in result)dP.f(result, key, createDesc(0, D));
20
- else result[key] = D;
21
- } return result;
16
+ while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));
17
+ return result;
22
18
  }
23
19
  });
@@ -0,0 +1,199 @@
1
+ 'use strict';
2
+ // https://github.com/zenparsing/es-observable
3
+ var $export = require('./_export')
4
+ , global = require('./_global')
5
+ , core = require('./_core')
6
+ , microtask = require('./_microtask')()
7
+ , OBSERVABLE = require('./_wks')('observable')
8
+ , aFunction = require('./_a-function')
9
+ , anObject = require('./_an-object')
10
+ , anInstance = require('./_an-instance')
11
+ , redefineAll = require('./_redefine-all')
12
+ , hide = require('./_hide')
13
+ , forOf = require('./_for-of')
14
+ , RETURN = forOf.RETURN;
15
+
16
+ var getMethod = function(fn){
17
+ return fn == null ? undefined : aFunction(fn);
18
+ };
19
+
20
+ var cleanupSubscription = function(subscription){
21
+ var cleanup = subscription._c;
22
+ if(cleanup){
23
+ subscription._c = undefined;
24
+ cleanup();
25
+ }
26
+ };
27
+
28
+ var subscriptionClosed = function(subscription){
29
+ return subscription._o === undefined;
30
+ };
31
+
32
+ var closeSubscription = function(subscription){
33
+ if(!subscriptionClosed(subscription)){
34
+ subscription._o = undefined;
35
+ cleanupSubscription(subscription);
36
+ }
37
+ };
38
+
39
+ var Subscription = function(observer, subscriber){
40
+ anObject(observer);
41
+ this._c = undefined;
42
+ this._o = observer;
43
+ observer = new SubscriptionObserver(this);
44
+ try {
45
+ var cleanup = subscriber(observer)
46
+ , subscription = cleanup;
47
+ if(cleanup != null){
48
+ if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };
49
+ else aFunction(cleanup);
50
+ this._c = cleanup;
51
+ }
52
+ } catch(e){
53
+ observer.error(e);
54
+ return;
55
+ } if(subscriptionClosed(this))cleanupSubscription(this);
56
+ };
57
+
58
+ Subscription.prototype = redefineAll({}, {
59
+ unsubscribe: function unsubscribe(){ closeSubscription(this); }
60
+ });
61
+
62
+ var SubscriptionObserver = function(subscription){
63
+ this._s = subscription;
64
+ };
65
+
66
+ SubscriptionObserver.prototype = redefineAll({}, {
67
+ next: function next(value){
68
+ var subscription = this._s;
69
+ if(!subscriptionClosed(subscription)){
70
+ var observer = subscription._o;
71
+ try {
72
+ var m = getMethod(observer.next);
73
+ if(m)return m.call(observer, value);
74
+ } catch(e){
75
+ try {
76
+ closeSubscription(subscription);
77
+ } finally {
78
+ throw e;
79
+ }
80
+ }
81
+ }
82
+ },
83
+ error: function error(value){
84
+ var subscription = this._s;
85
+ if(subscriptionClosed(subscription))throw value;
86
+ var observer = subscription._o;
87
+ subscription._o = undefined;
88
+ try {
89
+ var m = getMethod(observer.error);
90
+ if(!m)throw value;
91
+ value = m.call(observer, value);
92
+ } catch(e){
93
+ try {
94
+ cleanupSubscription(subscription);
95
+ } finally {
96
+ throw e;
97
+ }
98
+ } cleanupSubscription(subscription);
99
+ return value;
100
+ },
101
+ complete: function complete(value){
102
+ var subscription = this._s;
103
+ if(!subscriptionClosed(subscription)){
104
+ var observer = subscription._o;
105
+ subscription._o = undefined;
106
+ try {
107
+ var m = getMethod(observer.complete);
108
+ value = m ? m.call(observer, value) : undefined;
109
+ } catch(e){
110
+ try {
111
+ cleanupSubscription(subscription);
112
+ } finally {
113
+ throw e;
114
+ }
115
+ } cleanupSubscription(subscription);
116
+ return value;
117
+ }
118
+ }
119
+ });
120
+
121
+ var $Observable = function Observable(subscriber){
122
+ anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
123
+ };
124
+
125
+ redefineAll($Observable.prototype, {
126
+ subscribe: function subscribe(observer){
127
+ return new Subscription(observer, this._f);
128
+ },
129
+ forEach: function forEach(fn){
130
+ var that = this;
131
+ return new (core.Promise || global.Promise)(function(resolve, reject){
132
+ aFunction(fn);
133
+ var subscription = that.subscribe({
134
+ next : function(value){
135
+ try {
136
+ return fn(value);
137
+ } catch(e){
138
+ reject(e);
139
+ subscription.unsubscribe();
140
+ }
141
+ },
142
+ error: reject,
143
+ complete: resolve
144
+ });
145
+ });
146
+ }
147
+ });
148
+
149
+ redefineAll($Observable, {
150
+ from: function from(x){
151
+ var C = typeof this === 'function' ? this : $Observable;
152
+ var method = getMethod(anObject(x)[OBSERVABLE]);
153
+ if(method){
154
+ var observable = anObject(method.call(x));
155
+ return observable.constructor === C ? observable : new C(function(observer){
156
+ return observable.subscribe(observer);
157
+ });
158
+ }
159
+ return new C(function(observer){
160
+ var done = false;
161
+ microtask(function(){
162
+ if(!done){
163
+ try {
164
+ if(forOf(x, false, function(it){
165
+ observer.next(it);
166
+ if(done)return RETURN;
167
+ }) === RETURN)return;
168
+ } catch(e){
169
+ if(done)throw e;
170
+ observer.error(e);
171
+ return;
172
+ } observer.complete();
173
+ }
174
+ });
175
+ return function(){ done = true; };
176
+ });
177
+ },
178
+ of: function of(){
179
+ for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];
180
+ return new (typeof this === 'function' ? this : $Observable)(function(observer){
181
+ var done = false;
182
+ microtask(function(){
183
+ if(!done){
184
+ for(var i = 0; i < items.length; ++i){
185
+ observer.next(items[i]);
186
+ if(done)return;
187
+ } observer.complete();
188
+ }
189
+ });
190
+ return function(){ done = true; };
191
+ });
192
+ }
193
+ });
194
+
195
+ hide($Observable.prototype, OBSERVABLE, function(){ return this; });
196
+
197
+ $export($export.G, {Observable: $Observable});
198
+
199
+ require('./_set-species')('Observable');
@@ -0,0 +1 @@
1
+ require('./_wks-define')('asyncIterator');
@@ -0,0 +1 @@
1
+ require('./_wks-define')('observable');
package/library/shim.js CHANGED
@@ -142,6 +142,8 @@ require('./modules/es7.string.pad-end');
142
142
  require('./modules/es7.string.trim-left');
143
143
  require('./modules/es7.string.trim-right');
144
144
  require('./modules/es7.string.match-all');
145
+ require('./modules/es7.symbol.async-iterator');
146
+ require('./modules/es7.symbol.observable');
145
147
  require('./modules/es7.object.get-own-property-descriptors');
146
148
  require('./modules/es7.object.values');
147
149
  require('./modules/es7.object.entries');
@@ -166,6 +168,8 @@ require('./modules/es7.reflect.get-own-metadata-keys');
166
168
  require('./modules/es7.reflect.has-metadata');
167
169
  require('./modules/es7.reflect.has-own-metadata');
168
170
  require('./modules/es7.reflect.metadata');
171
+ require('./modules/es7.asap');
172
+ require('./modules/es7.observable');
169
173
  require('./modules/web.timers');
170
174
  require('./modules/web.immediate');
171
175
  require('./modules/web.dom.iterable');
@@ -6,4 +6,5 @@ require('../modules/es7.math.iaddh');
6
6
  require('../modules/es7.math.isubh');
7
7
  require('../modules/es7.math.imulh');
8
8
  require('../modules/es7.math.umulh');
9
+ require('../modules/es7.asap');
9
10
  module.exports = require('./1');
@@ -1,5 +1,6 @@
1
1
  require('../modules/es7.string.trim-left');
2
2
  require('../modules/es7.string.trim-right');
3
3
  require('../modules/es7.string.match-all');
4
- require('../modules/es7.system.global');
5
- module.exports = require('./2');
4
+ require('../modules/es7.symbol.observable');
5
+ require('../modules/es7.observable');
6
+ module.exports = require('./2');
@@ -1 +1,3 @@
1
- module.exports = require('./3');
1
+ require('../modules/es7.system.global');
2
+ require('../modules/es7.symbol.async-iterator');
3
+ module.exports = require('./3');
@@ -1,6 +1,4 @@
1
1
  require('../modules/es7.object.get-own-property-descriptors');
2
- require('../modules/es7.object.values');
3
- require('../modules/es7.object.entries');
4
2
  require('../modules/es7.string.pad-start');
5
3
  require('../modules/es7.string.pad-end');
6
- module.exports = require('./4');
4
+ module.exports = require('./4');
@@ -2,5 +2,7 @@ require('../modules/es7.object.define-getter');
2
2
  require('../modules/es7.object.define-setter');
3
3
  require('../modules/es7.object.lookup-getter');
4
4
  require('../modules/es7.object.lookup-setter');
5
+ require('../modules/es7.object.values');
6
+ require('../modules/es7.object.entries');
5
7
  require('../modules/es7.array.includes');
6
- module.exports = require('../modules/_core');
8
+ module.exports = require('../modules/_core');