-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PoC loading of specific parts of core-js
- Loading branch information
Showing
147 changed files
with
3,924 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
module.exports = function (it) { | ||
if (typeof it != 'function') throw TypeError(it + ' is not a function!'); | ||
return it; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
// 22.1.3.31 Array.prototype[@@unscopables] | ||
var UNSCOPABLES = require('./_wks')('unscopables'); | ||
var ArrayProto = Array.prototype; | ||
if (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {}); | ||
module.exports = function (key) { | ||
ArrayProto[UNSCOPABLES][key] = true; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
module.exports = function (it, Constructor, name, forbiddenField) { | ||
if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { | ||
throw TypeError(name + ': incorrect invocation!'); | ||
} return it; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
var isObject = require('./_is-object'); | ||
module.exports = function (it) { | ||
if (!isObject(it)) throw TypeError(it + ' is not an object!'); | ||
return it; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
var forOf = require('./_for-of'); | ||
|
||
module.exports = function (iter, ITERATOR) { | ||
var result = []; | ||
forOf(iter, false, result.push, result, ITERATOR); | ||
return result; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// false -> Array#indexOf | ||
// true -> Array#includes | ||
var toIObject = require('./_to-iobject'); | ||
var toLength = require('./_to-length'); | ||
var toAbsoluteIndex = require('./_to-absolute-index'); | ||
module.exports = function (IS_INCLUDES) { | ||
return function ($this, el, fromIndex) { | ||
var O = toIObject($this); | ||
var length = toLength(O.length); | ||
var index = toAbsoluteIndex(fromIndex, length); | ||
var value; | ||
// Array#includes uses SameValueZero equality algorithm | ||
// eslint-disable-next-line no-self-compare | ||
if (IS_INCLUDES && el != el) while (length > index) { | ||
value = O[index++]; | ||
// eslint-disable-next-line no-self-compare | ||
if (value != value) return true; | ||
// Array#indexOf ignores holes, Array#includes - not | ||
} else for (;length > index; index++) if (IS_INCLUDES || index in O) { | ||
if (O[index] === el) return IS_INCLUDES || index || 0; | ||
} return !IS_INCLUDES && -1; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// 0 -> Array#forEach | ||
// 1 -> Array#map | ||
// 2 -> Array#filter | ||
// 3 -> Array#some | ||
// 4 -> Array#every | ||
// 5 -> Array#find | ||
// 6 -> Array#findIndex | ||
var ctx = require('./_ctx'); | ||
var IObject = require('./_iobject'); | ||
var toObject = require('./_to-object'); | ||
var toLength = require('./_to-length'); | ||
var asc = require('./_array-species-create'); | ||
module.exports = function (TYPE, $create) { | ||
var IS_MAP = TYPE == 1; | ||
var IS_FILTER = TYPE == 2; | ||
var IS_SOME = TYPE == 3; | ||
var IS_EVERY = TYPE == 4; | ||
var IS_FIND_INDEX = TYPE == 6; | ||
var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; | ||
var create = $create || asc; | ||
return function ($this, callbackfn, that) { | ||
var O = toObject($this); | ||
var self = IObject(O); | ||
var f = ctx(callbackfn, that, 3); | ||
var length = toLength(self.length); | ||
var index = 0; | ||
var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; | ||
var val, res; | ||
for (;length > index; index++) if (NO_HOLES || index in self) { | ||
val = self[index]; | ||
res = f(val, index, O); | ||
if (TYPE) { | ||
if (IS_MAP) result[index] = res; // map | ||
else if (res) switch (TYPE) { | ||
case 3: return true; // some | ||
case 5: return val; // find | ||
case 6: return index; // findIndex | ||
case 2: result.push(val); // filter | ||
} else if (IS_EVERY) return false; // every | ||
} | ||
} | ||
return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
var isObject = require('./_is-object'); | ||
var isArray = require('./_is-array'); | ||
var SPECIES = require('./_wks')('species'); | ||
|
||
module.exports = function (original) { | ||
var C; | ||
if (isArray(original)) { | ||
C = original.constructor; | ||
// cross-realm fallback | ||
if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; | ||
if (isObject(C)) { | ||
C = C[SPECIES]; | ||
if (C === null) C = undefined; | ||
} | ||
} return C === undefined ? Array : C; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
// 9.4.2.3 ArraySpeciesCreate(originalArray, length) | ||
var speciesConstructor = require('./_array-species-constructor'); | ||
|
||
module.exports = function (original, length) { | ||
return new (speciesConstructor(original))(length); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// getting tag from 19.1.3.6 Object.prototype.toString() | ||
var cof = require('./_cof'); | ||
var TAG = require('./_wks')('toStringTag'); | ||
// ES3 wrong here | ||
var ARG = cof(function () { return arguments; }()) == 'Arguments'; | ||
|
||
// fallback for IE11 Script Access Denied error | ||
var tryGet = function (it, key) { | ||
try { | ||
return it[key]; | ||
} catch (e) { /* empty */ } | ||
}; | ||
|
||
module.exports = function (it) { | ||
var O, T, B; | ||
return it === undefined ? 'Undefined' : it === null ? 'Null' | ||
// @@toStringTag case | ||
: typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T | ||
// builtinTag case | ||
: ARG ? cof(O) | ||
// ES3 arguments fallback | ||
: (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
var toString = {}.toString; | ||
|
||
module.exports = function (it) { | ||
return toString.call(it).slice(8, -1); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
'use strict'; | ||
var dP = require('./_object-dp').f; | ||
var create = require('./_object-create'); | ||
var redefineAll = require('./_redefine-all'); | ||
var ctx = require('./_ctx'); | ||
var anInstance = require('./_an-instance'); | ||
var forOf = require('./_for-of'); | ||
var $iterDefine = require('./_iter-define'); | ||
var step = require('./_iter-step'); | ||
var setSpecies = require('./_set-species'); | ||
var DESCRIPTORS = require('./_descriptors'); | ||
var fastKey = require('./_meta').fastKey; | ||
var validate = require('./_validate-collection'); | ||
var SIZE = DESCRIPTORS ? '_s' : 'size'; | ||
|
||
var getEntry = function (that, key) { | ||
// fast case | ||
var index = fastKey(key); | ||
var entry; | ||
if (index !== 'F') return that._i[index]; | ||
// frozen object case | ||
for (entry = that._f; entry; entry = entry.n) { | ||
if (entry.k == key) return entry; | ||
} | ||
}; | ||
|
||
module.exports = { | ||
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { | ||
var C = wrapper(function (that, iterable) { | ||
anInstance(that, C, NAME, '_i'); | ||
that._t = NAME; // collection type | ||
that._i = create(null); // index | ||
that._f = undefined; // first entry | ||
that._l = undefined; // last entry | ||
that[SIZE] = 0; // size | ||
if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); | ||
}); | ||
redefineAll(C.prototype, { | ||
// 23.1.3.1 Map.prototype.clear() | ||
// 23.2.3.2 Set.prototype.clear() | ||
clear: function clear() { | ||
for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { | ||
entry.r = true; | ||
if (entry.p) entry.p = entry.p.n = undefined; | ||
delete data[entry.i]; | ||
} | ||
that._f = that._l = undefined; | ||
that[SIZE] = 0; | ||
}, | ||
// 23.1.3.3 Map.prototype.delete(key) | ||
// 23.2.3.4 Set.prototype.delete(value) | ||
'delete': function (key) { | ||
var that = validate(this, NAME); | ||
var entry = getEntry(that, key); | ||
if (entry) { | ||
var next = entry.n; | ||
var prev = entry.p; | ||
delete that._i[entry.i]; | ||
entry.r = true; | ||
if (prev) prev.n = next; | ||
if (next) next.p = prev; | ||
if (that._f == entry) that._f = next; | ||
if (that._l == entry) that._l = prev; | ||
that[SIZE]--; | ||
} return !!entry; | ||
}, | ||
// 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) | ||
// 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) | ||
forEach: function forEach(callbackfn /* , that = undefined */) { | ||
validate(this, NAME); | ||
var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); | ||
var entry; | ||
while (entry = entry ? entry.n : this._f) { | ||
f(entry.v, entry.k, this); | ||
// revert to the last existing entry | ||
while (entry && entry.r) entry = entry.p; | ||
} | ||
}, | ||
// 23.1.3.7 Map.prototype.has(key) | ||
// 23.2.3.7 Set.prototype.has(value) | ||
has: function has(key) { | ||
return !!getEntry(validate(this, NAME), key); | ||
} | ||
}); | ||
if (DESCRIPTORS) dP(C.prototype, 'size', { | ||
get: function () { | ||
return validate(this, NAME)[SIZE]; | ||
} | ||
}); | ||
return C; | ||
}, | ||
def: function (that, key, value) { | ||
var entry = getEntry(that, key); | ||
var prev, index; | ||
// change existing entry | ||
if (entry) { | ||
entry.v = value; | ||
// create new entry | ||
} else { | ||
that._l = entry = { | ||
i: index = fastKey(key, true), // <- index | ||
k: key, // <- key | ||
v: value, // <- value | ||
p: prev = that._l, // <- previous entry | ||
n: undefined, // <- next entry | ||
r: false // <- removed | ||
}; | ||
if (!that._f) that._f = entry; | ||
if (prev) prev.n = entry; | ||
that[SIZE]++; | ||
// add to index | ||
if (index !== 'F') that._i[index] = entry; | ||
} return that; | ||
}, | ||
getEntry: getEntry, | ||
setStrong: function (C, NAME, IS_MAP) { | ||
// add .keys, .values, .entries, [@@iterator] | ||
// 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 | ||
$iterDefine(C, NAME, function (iterated, kind) { | ||
this._t = validate(iterated, NAME); // target | ||
this._k = kind; // kind | ||
this._l = undefined; // previous | ||
}, function () { | ||
var that = this; | ||
var kind = that._k; | ||
var entry = that._l; | ||
// revert to the last existing entry | ||
while (entry && entry.r) entry = entry.p; | ||
// get next entry | ||
if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { | ||
// or finish the iteration | ||
that._t = undefined; | ||
return step(1); | ||
} | ||
// return step by kind | ||
if (kind == 'keys') return step(0, entry.k); | ||
if (kind == 'values') return step(0, entry.v); | ||
return step(0, [entry.k, entry.v]); | ||
}, IS_MAP ? 'entries' : 'values', !IS_MAP, true); | ||
|
||
// add [@@species], 23.1.2.2, 23.2.2.2 | ||
setSpecies(NAME); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// https://github.com/DavidBruant/Map-Set.prototype.toJSON | ||
var classof = require('./_classof'); | ||
var from = require('./_array-from-iterable'); | ||
module.exports = function (NAME) { | ||
return function toJSON() { | ||
if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic"); | ||
return from(this); | ||
}; | ||
}; |
Oops, something went wrong.