Skip to content

Commit 51d2f43

Browse files
committed
feat: add Object.entries
1 parent 0ca1873 commit 51d2f43

File tree

9 files changed

+58
-0
lines changed

9 files changed

+58
-0
lines changed

object/entries/implement.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict";
2+
3+
if (!require("./is-implemented")()) {
4+
Object.defineProperty(Object, "entries", {
5+
value: require("./shim"),
6+
configurable: true,
7+
enumerable: false,
8+
writable: true
9+
});
10+
}

object/entries/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
3+
module.exports = require("./is-implemented")() ? Object.entries : require("./shim");

object/entries/is-implemented.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"use strict";
2+
3+
module.exports = function () {
4+
try {
5+
return Object.entries({ foo: 12 })[0][0] === "foo";
6+
} catch (e) {
7+
return false;
8+
}
9+
};

object/entries/shim.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"use strict";
2+
3+
var ensureValue = require("../valid-value");
4+
5+
module.exports = function (object) {
6+
ensureValue(object);
7+
var result = [];
8+
object = Object(object);
9+
for (var key in object) {
10+
if (!propertyIsEnumerable.call(object, key)) continue;
11+
result.push([key, object[key]]);
12+
}
13+
return result;
14+
};

object/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module.exports = {
1818
ensurePlainFunction: require("./ensure-plain-function"),
1919
ensurePromise: require("./ensure-promise"),
2020
ensureThenable: require("./ensure-thenable"),
21+
entries: require("./entries"),
2122
eq: require("./eq"),
2223
every: require("./every"),
2324
filter: require("./filter"),

test/object/entries/implement.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
3+
var isImplemented = require("../../../object/entries/is-implemented");
4+
5+
module.exports = function (a) { a(isImplemented(), true); };

test/object/entries/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
3+
module.exports = require("./shim");

test/object/entries/is-implemented.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
3+
module.exports = function (t, a) {
4+
a(typeof t(), "boolean");
5+
};

test/object/entries/shim.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"use strict";
2+
3+
module.exports = function (t, a) {
4+
a.deep(t({ foo: "bar" }), [["foo", "bar"]], "Object");
5+
a.deep(t("raz"), [["0", "r"], ["1", "a"], ["2", "z"]], "Primitive");
6+
a.throws(function () { t(); }, TypeError, "Undefined");
7+
a.throws(function () { t(null); }, TypeError, "Undefined");
8+
};

0 commit comments

Comments
 (0)