From 9a0c31554899f411d31d3b8343c754eb2c19842e Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 2 Sep 2015 22:22:17 +0900 Subject: [PATCH] Implementation. --- implementation.js | 14 ++++++++++++++ index.js | 15 +++++++++++++++ polyfill.js | 7 +++++++ shim.js | 10 ++++++++++ 4 files changed, 46 insertions(+) create mode 100644 implementation.js create mode 100644 index.js create mode 100644 polyfill.js create mode 100644 shim.js diff --git a/implementation.js b/implementation.js new file mode 100644 index 0000000..e017f21 --- /dev/null +++ b/implementation.js @@ -0,0 +1,14 @@ +'use strict'; + +var ES = require('es-abstract/es7'); +var keys = require('object-keys'); + +module.exports = function values(O) { + var obj = ES.RequireObjectCoercible(O); + var objKeys = keys(obj); + var vals = []; + for (var i = 0; i < objKeys.length; ++i) { + vals.push(obj[objKeys[i]]); + } + return vals; +}; diff --git a/index.js b/index.js new file mode 100644 index 0000000..bf2aec5 --- /dev/null +++ b/index.js @@ -0,0 +1,15 @@ +'use strict'; + +var define = require('define-properties'); + +var implementation = require('./implementation'); +var getPolyfill = require('./polyfill'); +var shim = require('./shim'); + +define(implementation, { + getPolyfill: getPolyfill, + implementation: implementation, + shim: shim +}); + +module.exports = implementation; diff --git a/polyfill.js b/polyfill.js new file mode 100644 index 0000000..2790be4 --- /dev/null +++ b/polyfill.js @@ -0,0 +1,7 @@ +'use strict'; + +var implementation = require('./implementation'); + +module.exports = function getPolyfill() { + return typeof Object.values === 'function' ? Object.values : implementation; +}; diff --git a/shim.js b/shim.js new file mode 100644 index 0000000..da315ad --- /dev/null +++ b/shim.js @@ -0,0 +1,10 @@ +'use strict'; + +var getPolyfill = require('./polyfill'); +var define = require('define-properties'); + +module.exports = function shimValues() { + var polyfill = getPolyfill(); + define(Object, { values: polyfill }, { values: function () { return Object.values !== polyfill; } }); + return polyfill; +};