Add eslint-import-plugin to node_modules
Will be used to make sure no default exports are in DevTools.
The PRESUBMIT.py has been updated to skip running the formatting check
if node_modules files are affected, to workaround crbug.com/1068198.
DISABLE_THIRD_PARTY_CHECK=Add plugin to node_modules
Bug: 1068198
Change-Id: I04d4dc813daa01099f21d40edf47aaefcc0b045f
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2135610
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
diff --git a/node_modules/object.values/.eslintrc b/node_modules/object.values/.eslintrc
new file mode 100644
index 0000000..15c95c1
--- /dev/null
+++ b/node_modules/object.values/.eslintrc
@@ -0,0 +1,12 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "id-length": 0,
+ "new-cap": [2, { "capIsNewExceptions": ["RequireObjectCoercible"] }],
+ "no-magic-numbers": [0],
+ "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"]
+ }
+}
diff --git a/node_modules/object.values/.github/workflows/rebase.yml b/node_modules/object.values/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/.travis.yml b/node_modules/object.values/.travis.yml
new file mode 100644
index 0000000..2d1c1d2
--- /dev/null
+++ b/node_modules/object.values/.travis.yml
@@ -0,0 +1,12 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/CHANGELOG.md b/node_modules/object.values/CHANGELOG.md
new file mode 100644
index 0000000..475358f
--- /dev/null
+++ b/node_modules/object.values/CHANGELOG.md
@@ -0,0 +1,44 @@
+1.1.1 / 2019-12-12
+=================
+ * [Refactor] use split-up `es-abstract` (85% bundle size decrease)
+ * [Deps] update `es-abstract`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `functions-have-names`, `tape`, `object-keys`
+ * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops
+ * [Tests] use shared travis-ci configs
+ * [Tests] use `functions-have-names`
+ * [meta] add `funding` field
+ * [actions] add automatic rebasing / merge commit blocking
+
+1.1.0 / 2019-01-01
+=================
+ * [New] add `auto` entry point`
+ * [Deps] update `define-properties`, `es-abstract`, `function-bind`, `has`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape`
+ * [Tests] up to `node` `v11.6`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.16`, `v4.9`; use `nvm install-latest-npm`
+ * [Tests] use `npm audit` instead of `nsp`
+ * [Tests] remove `jscs`
+
+1.0.4 / 2016-12-04
+=================
+ * [Docs] update to reflect ES2017 inclusion
+ * [Deps] update `es-abstract`, `function-bind`, `define-properties`
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] up to `node` `v7.2`, `v6.9`, `v4.6`; improve test matrix.
+
+1.0.3 / 2015-10-06
+=================
+ * [Fix] Not-yet-visited keys made non-enumerable on a `[[Get]]` must not show up in the output (https://github.com/ljharb/proposal-object-values-entries/issues/5)
+
+1.0.2 / 2015-09-25
+=================
+ * [Fix] Not-yet-visited keys deleted on a `[[Get]]` must not show up in the output (#1)
+
+1.0.1 / 2015-09-21
+=================
+ * [Docs] update version badge URL
+ * [Tests] on `io.js` `v3.3`, up to `node` `v4.1`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`
+
+1.0.0 / 2015-09-02
+=================
+ * v1.0.0
diff --git a/node_modules/object.values/LICENSE b/node_modules/object.values/LICENSE
new file mode 100644
index 0000000..b43df44
--- /dev/null
+++ b/node_modules/object.values/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/object.values/README.md b/node_modules/object.values/README.md
new file mode 100644
index 0000000..17fcf07
--- /dev/null
+++ b/node_modules/object.values/README.md
@@ -0,0 +1,59 @@
+# object.values <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+[![browser support][testling-svg]][testling-url]
+
+An ES2017 spec-compliant `Object.values` shim. Invoke its "shim" method to shim `Object.values` if it is unavailable or noncompliant.
+
+This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](https://tc39.github.io/ecma262/#sec-object.values).
+
+Most common usage:
+```js
+var assert = require('assert');
+var values = require('object.values');
+
+var obj = { a: 1, b: 2, c: 3 };
+var expected = [1, 2, 3];
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+ // for environments with Symbol support
+ var sym = Symbol();
+ obj[sym] = 4;
+ obj.d = sym;
+ expected.push(sym);
+}
+
+assert.deepEqual(values(obj), expected);
+
+if (!Object.values) {
+ values.shim();
+}
+
+assert.deepEqual(Object.values(obj), expected);
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.com/package/object.values
+[npm-version-svg]: http://versionbadg.es/es-shims/Object.values.svg
+[travis-svg]: https://travis-ci.org/es-shims/Object.values.svg
+[travis-url]: https://travis-ci.org/es-shims/Object.values
+[deps-svg]: https://david-dm.org/es-shims/Object.values.svg
+[deps-url]: https://david-dm.org/es-shims/Object.values
+[dev-deps-svg]: https://david-dm.org/es-shims/Object.values/dev-status.svg
+[dev-deps-url]: https://david-dm.org/es-shims/Object.values#info=devDependencies
+[testling-svg]: https://ci.testling.com/es-shims/Object.values.png
+[testling-url]: https://ci.testling.com/es-shims/Object.values
+[npm-badge-png]: https://nodei.co/npm/object.values.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/object.values.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/object.values.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=object.values
diff --git a/node_modules/object.values/auto.js b/node_modules/object.values/auto.js
new file mode 100644
index 0000000..8ebf606
--- /dev/null
+++ b/node_modules/object.values/auto.js
@@ -0,0 +1,3 @@
+'use strict';
+
+require('./shim')();
diff --git a/node_modules/object.values/implementation.js b/node_modules/object.values/implementation.js
new file mode 100644
index 0000000..dd3bc07
--- /dev/null
+++ b/node_modules/object.values/implementation.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var has = require('has');
+var RequireObjectCoercible = require('es-abstract/2019/RequireObjectCoercible');
+var callBound = require('es-abstract/helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+module.exports = function values(O) {
+ var obj = RequireObjectCoercible(O);
+ var vals = [];
+ for (var key in obj) {
+ if (has(obj, key) && $isEnumerable(obj, key)) {
+ vals.push(obj[key]);
+ }
+ }
+ return vals;
+};
diff --git a/node_modules/object.values/index.js b/node_modules/object.values/index.js
new file mode 100644
index 0000000..b8ba091
--- /dev/null
+++ b/node_modules/object.values/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var define = require('define-properties');
+
+var implementation = require('./implementation');
+var getPolyfill = require('./polyfill');
+var shim = require('./shim');
+
+var polyfill = getPolyfill();
+
+define(polyfill, {
+ getPolyfill: getPolyfill,
+ implementation: implementation,
+ shim: shim
+});
+
+module.exports = polyfill;
diff --git a/node_modules/object.values/node_modules/es-abstract/.editorconfig b/node_modules/object.values/node_modules/es-abstract/.editorconfig
new file mode 100644
index 0000000..eaa2141
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.editorconfig
@@ -0,0 +1,13 @@
+root = true
+
+[*]
+indent_style = tab;
+insert_final_newline = true;
+quote_type = auto;
+space_after_anonymous_functions = true;
+space_after_control_statements = true;
+spaces_around_operators = true;
+trim_trailing_whitespace = true;
+spaces_in_brackets = false;
+end_of_line = lf;
+
diff --git a/node_modules/object.values/node_modules/es-abstract/.eslintignore b/node_modules/object.values/node_modules/es-abstract/.eslintignore
new file mode 100644
index 0000000..4ebc8ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.eslintignore
@@ -0,0 +1 @@
+coverage
diff --git a/node_modules/object.values/node_modules/es-abstract/.eslintrc b/node_modules/object.values/node_modules/es-abstract/.eslintrc
new file mode 100644
index 0000000..1bac5b7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.eslintrc
@@ -0,0 +1,66 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "env": {
+ "es6": true,
+ },
+
+ "rules": {
+ "array-bracket-newline": 0,
+ "array-element-newline": 0,
+ "complexity": 0,
+ "eqeqeq": [2, "allow-null"],
+ "func-name-matching": 0,
+ "id-length": [2, { "min": 1, "max": 40 }],
+ "max-params": [2, 4],
+ "max-statements-per-line": [2, { "max": 2 }],
+ "multiline-comment-style": 0,
+ "no-magic-numbers": 0,
+ "new-cap": 0,
+ "no-extra-parens": 1,
+ "operator-linebreak": [2, "before"],
+ "sort-keys": 0,
+ },
+
+ "overrides": [
+ {
+ "files": "operations/*",
+ "rules": {
+ "max-lines": 0,
+ },
+ },
+ {
+ "files": "operations/*.js",
+ "parserOptions": {
+ "ecmaVersion": 2020,
+ },
+ "rules": {
+ "no-console": 0,
+ "no-multi-str": 0,
+ },
+ },
+ {
+ "files": "operations/getOps.js",
+ "rules": {
+ "no-console": 0,
+ "no-process-exit": 0,
+ },
+ },
+ {
+ "files": "test/**",
+ "rules": {
+ "id-length": 0,
+ "max-lines": 0,
+ "max-lines-per-function": 0,
+ "max-statements-per-line": [2, { "max": 3 }],
+ "max-statements": 0,
+ "no-implicit-coercion": 0,
+ "no-invalid-this": 1,
+ "object-curly-newline": 0,
+ "prefer-regex-literals": 0,
+ },
+ },
+ ],
+}
diff --git a/node_modules/object.values/node_modules/es-abstract/.gitattributes b/node_modules/object.values/node_modules/es-abstract/.gitattributes
new file mode 100644
index 0000000..9a65c9d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.gitattributes
@@ -0,0 +1,472 @@
+2015/AbstractRelationalComparison.js spackled
+2015/DateFromTime.js spackled
+2015/Day.js spackled
+2015/DayFromYear.js spackled
+2015/DayWithinYear.js spackled
+2015/DaysInYear.js spackled
+2015/HourFromTime.js spackled
+2015/InLeapYear.js spackled
+2015/IsCallable.js spackled
+2015/IsPropertyDescriptor.js spackled
+2015/MakeDate.js spackled
+2015/MakeDay.js spackled
+2015/MakeTime.js spackled
+2015/MinFromTime.js spackled
+2015/MonthFromTime.js spackled
+2015/SameValue.js spackled
+2015/SecFromTime.js spackled
+2015/StrictEqualityComparison.js spackled
+2015/TimeClip.js spackled
+2015/TimeFromYear.js spackled
+2015/TimeWithinDay.js spackled
+2015/ToBoolean.js spackled
+2015/ToInt32.js spackled
+2015/ToPropertyDescriptor.js spackled
+2015/ToUint16.js spackled
+2015/ToUint32.js spackled
+2015/WeekDay.js spackled
+2015/YearFromTime.js spackled
+2015/modulo.js spackled
+2015/msFromTime.js spackled
+2016/AbstractEqualityComparison.js spackled
+2016/AbstractRelationalComparison.js spackled
+2016/AdvanceStringIndex.js spackled
+2016/ArrayCreate.js spackled
+2016/ArraySetLength.js spackled
+2016/ArraySpeciesCreate.js spackled
+2016/Call.js spackled
+2016/CanonicalNumericIndexString.js spackled
+2016/CompletePropertyDescriptor.js spackled
+2016/CreateDataProperty.js spackled
+2016/CreateDataPropertyOrThrow.js spackled
+2016/CreateHTML.js spackled
+2016/CreateIterResultObject.js spackled
+2016/CreateListFromArrayLike.js spackled
+2016/CreateMethodProperty.js spackled
+2016/DateFromTime.js spackled
+2016/Day.js spackled
+2016/DayFromYear.js spackled
+2016/DayWithinYear.js spackled
+2016/DaysInYear.js spackled
+2016/DefinePropertyOrThrow.js spackled
+2016/DeletePropertyOrThrow.js spackled
+2016/EnumerableOwnNames.js spackled
+2016/FromPropertyDescriptor.js spackled
+2016/Get.js spackled
+2016/GetIterator.js spackled
+2016/GetMethod.js spackled
+2016/GetOwnPropertyKeys.js spackled
+2016/GetPrototypeFromConstructor.js spackled
+2016/GetSubstitution.js spackled
+2016/GetV.js spackled
+2016/HasOwnProperty.js spackled
+2016/HasProperty.js spackled
+2016/HourFromTime.js spackled
+2016/InLeapYear.js spackled
+2016/InstanceofOperator.js spackled
+2016/Invoke.js spackled
+2016/IsAccessorDescriptor.js spackled
+2016/IsArray.js spackled
+2016/IsCallable.js spackled
+2016/IsConcatSpreadable.js spackled
+2016/IsConstructor.js spackled
+2016/IsDataDescriptor.js spackled
+2016/IsExtensible.js spackled
+2016/IsGenericDescriptor.js spackled
+2016/IsInteger.js spackled
+2016/IsPromise.js spackled
+2016/IsPropertyDescriptor.js spackled
+2016/IsPropertyKey.js spackled
+2016/IsRegExp.js spackled
+2016/IteratorClose.js spackled
+2016/IteratorComplete.js spackled
+2016/IteratorNext.js spackled
+2016/IteratorStep.js spackled
+2016/IteratorValue.js spackled
+2016/MakeDate.js spackled
+2016/MakeDay.js spackled
+2016/MakeTime.js spackled
+2016/MinFromTime.js spackled
+2016/MonthFromTime.js spackled
+2016/ObjectCreate.js spackled
+2016/OrdinaryDefineOwnProperty.js spackled
+2016/OrdinaryGetOwnProperty.js spackled
+2016/OrdinaryHasInstance.js spackled
+2016/OrdinaryHasProperty.js spackled
+2016/RegExpExec.js spackled
+2016/RequireObjectCoercible.js spackled
+2016/SameValue.js spackled
+2016/SameValueZero.js spackled
+2016/SecFromTime.js spackled
+2016/Set.js spackled
+2016/SetFunctionName.js spackled
+2016/SetIntegrityLevel.js spackled
+2016/SpeciesConstructor.js spackled
+2016/StrictEqualityComparison.js spackled
+2016/SymbolDescriptiveString.js spackled
+2016/TestIntegrityLevel.js spackled
+2016/TimeClip.js spackled
+2016/TimeFromYear.js spackled
+2016/TimeWithinDay.js spackled
+2016/ToBoolean.js spackled
+2016/ToDateString.js spackled
+2016/ToInt16.js spackled
+2016/ToInt32.js spackled
+2016/ToInt8.js spackled
+2016/ToInteger.js spackled
+2016/ToLength.js spackled
+2016/ToNumber.js spackled
+2016/ToObject.js spackled
+2016/ToPrimitive.js spackled
+2016/ToPropertyDescriptor.js spackled
+2016/ToPropertyKey.js spackled
+2016/ToString.js spackled
+2016/ToUint16.js spackled
+2016/ToUint32.js spackled
+2016/ToUint8.js spackled
+2016/ToUint8Clamp.js spackled
+2016/Type.js spackled
+2016/ValidateAndApplyPropertyDescriptor.js spackled
+2016/WeekDay.js spackled
+2016/YearFromTime.js spackled
+2016/modulo.js spackled
+2016/msFromTime.js spackled
+2016/thisBooleanValue.js spackled
+2016/thisNumberValue.js spackled
+2016/thisStringValue.js spackled
+2016/thisTimeValue.js spackled
+2017/AbstractEqualityComparison.js spackled
+2017/AbstractRelationalComparison.js spackled
+2017/AdvanceStringIndex.js spackled
+2017/ArrayCreate.js spackled
+2017/ArraySetLength.js spackled
+2017/ArraySpeciesCreate.js spackled
+2017/Call.js spackled
+2017/CanonicalNumericIndexString.js spackled
+2017/CompletePropertyDescriptor.js spackled
+2017/CreateDataProperty.js spackled
+2017/CreateDataPropertyOrThrow.js spackled
+2017/CreateHTML.js spackled
+2017/CreateIterResultObject.js spackled
+2017/CreateListFromArrayLike.js spackled
+2017/CreateMethodProperty.js spackled
+2017/DateFromTime.js spackled
+2017/Day.js spackled
+2017/DayFromYear.js spackled
+2017/DayWithinYear.js spackled
+2017/DaysInYear.js spackled
+2017/DefinePropertyOrThrow.js spackled
+2017/DeletePropertyOrThrow.js spackled
+2017/FromPropertyDescriptor.js spackled
+2017/Get.js spackled
+2017/GetIterator.js spackled
+2017/GetMethod.js spackled
+2017/GetOwnPropertyKeys.js spackled
+2017/GetPrototypeFromConstructor.js spackled
+2017/GetSubstitution.js spackled
+2017/GetV.js spackled
+2017/HasOwnProperty.js spackled
+2017/HasProperty.js spackled
+2017/HourFromTime.js spackled
+2017/InLeapYear.js spackled
+2017/InstanceofOperator.js spackled
+2017/Invoke.js spackled
+2017/IsAccessorDescriptor.js spackled
+2017/IsArray.js spackled
+2017/IsCallable.js spackled
+2017/IsConcatSpreadable.js spackled
+2017/IsConstructor.js spackled
+2017/IsDataDescriptor.js spackled
+2017/IsExtensible.js spackled
+2017/IsGenericDescriptor.js spackled
+2017/IsInteger.js spackled
+2017/IsPromise.js spackled
+2017/IsPropertyDescriptor.js spackled
+2017/IsPropertyKey.js spackled
+2017/IsRegExp.js spackled
+2017/IteratorClose.js spackled
+2017/IteratorComplete.js spackled
+2017/IteratorNext.js spackled
+2017/IteratorStep.js spackled
+2017/IteratorValue.js spackled
+2017/MakeDate.js spackled
+2017/MakeDay.js spackled
+2017/MakeTime.js spackled
+2017/MinFromTime.js spackled
+2017/MonthFromTime.js spackled
+2017/ObjectCreate.js spackled
+2017/OrdinaryDefineOwnProperty.js spackled
+2017/OrdinaryGetOwnProperty.js spackled
+2017/OrdinaryGetPrototypeOf.js spackled
+2017/OrdinaryHasInstance.js spackled
+2017/OrdinaryHasProperty.js spackled
+2017/OrdinarySetPrototypeOf.js spackled
+2017/RegExpExec.js spackled
+2017/RequireObjectCoercible.js spackled
+2017/SameValue.js spackled
+2017/SameValueNonNumber.js spackled
+2017/SameValueZero.js spackled
+2017/SecFromTime.js spackled
+2017/Set.js spackled
+2017/SetFunctionName.js spackled
+2017/SetIntegrityLevel.js spackled
+2017/SpeciesConstructor.js spackled
+2017/StrictEqualityComparison.js spackled
+2017/SymbolDescriptiveString.js spackled
+2017/TestIntegrityLevel.js spackled
+2017/TimeClip.js spackled
+2017/TimeFromYear.js spackled
+2017/TimeWithinDay.js spackled
+2017/ToBoolean.js spackled
+2017/ToDateString.js spackled
+2017/ToInt16.js spackled
+2017/ToInt32.js spackled
+2017/ToInt8.js spackled
+2017/ToInteger.js spackled
+2017/ToLength.js spackled
+2017/ToNumber.js spackled
+2017/ToObject.js spackled
+2017/ToPrimitive.js spackled
+2017/ToPropertyDescriptor.js spackled
+2017/ToPropertyKey.js spackled
+2017/ToString.js spackled
+2017/ToUint16.js spackled
+2017/ToUint32.js spackled
+2017/ToUint8.js spackled
+2017/ToUint8Clamp.js spackled
+2017/Type.js spackled
+2017/ValidateAndApplyPropertyDescriptor.js spackled
+2017/WeekDay.js spackled
+2017/YearFromTime.js spackled
+2017/modulo.js spackled
+2017/msFromTime.js spackled
+2017/thisBooleanValue.js spackled
+2017/thisNumberValue.js spackled
+2017/thisStringValue.js spackled
+2017/thisTimeValue.js spackled
+2018/AbstractEqualityComparison.js spackled
+2018/AbstractRelationalComparison.js spackled
+2018/AdvanceStringIndex.js spackled
+2018/ArrayCreate.js spackled
+2018/ArraySetLength.js spackled
+2018/ArraySpeciesCreate.js spackled
+2018/Call.js spackled
+2018/CanonicalNumericIndexString.js spackled
+2018/CompletePropertyDescriptor.js spackled
+2018/CreateDataProperty.js spackled
+2018/CreateDataPropertyOrThrow.js spackled
+2018/CreateHTML.js spackled
+2018/CreateIterResultObject.js spackled
+2018/CreateListFromArrayLike.js spackled
+2018/CreateMethodProperty.js spackled
+2018/DateFromTime.js spackled
+2018/Day.js spackled
+2018/DayFromYear.js spackled
+2018/DayWithinYear.js spackled
+2018/DaysInYear.js spackled
+2018/DefinePropertyOrThrow.js spackled
+2018/DeletePropertyOrThrow.js spackled
+2018/FromPropertyDescriptor.js spackled
+2018/Get.js spackled
+2018/GetIterator.js spackled
+2018/GetMethod.js spackled
+2018/GetOwnPropertyKeys.js spackled
+2018/GetPrototypeFromConstructor.js spackled
+2018/GetV.js spackled
+2018/HasOwnProperty.js spackled
+2018/HasProperty.js spackled
+2018/HourFromTime.js spackled
+2018/InLeapYear.js spackled
+2018/InstanceofOperator.js spackled
+2018/Invoke.js spackled
+2018/IsAccessorDescriptor.js spackled
+2018/IsArray.js spackled
+2018/IsCallable.js spackled
+2018/IsConcatSpreadable.js spackled
+2018/IsConstructor.js spackled
+2018/IsDataDescriptor.js spackled
+2018/IsExtensible.js spackled
+2018/IsGenericDescriptor.js spackled
+2018/IsInteger.js spackled
+2018/IsPromise.js spackled
+2018/IsPropertyKey.js spackled
+2018/IsRegExp.js spackled
+2018/IterableToList.js spackled
+2018/IteratorClose.js spackled
+2018/IteratorComplete.js spackled
+2018/IteratorNext.js spackled
+2018/IteratorStep.js spackled
+2018/IteratorValue.js spackled
+2018/MakeDate.js spackled
+2018/MakeDay.js spackled
+2018/MakeTime.js spackled
+2018/MinFromTime.js spackled
+2018/MonthFromTime.js spackled
+2018/ObjectCreate.js spackled
+2018/OrdinaryDefineOwnProperty.js spackled
+2018/OrdinaryGetOwnProperty.js spackled
+2018/OrdinaryGetPrototypeOf.js spackled
+2018/OrdinaryHasInstance.js spackled
+2018/OrdinaryHasProperty.js spackled
+2018/OrdinarySetPrototypeOf.js spackled
+2018/RegExpExec.js spackled
+2018/RequireObjectCoercible.js spackled
+2018/SameValue.js spackled
+2018/SameValueNonNumber.js spackled
+2018/SameValueZero.js spackled
+2018/SecFromTime.js spackled
+2018/Set.js spackled
+2018/SetFunctionName.js spackled
+2018/SetIntegrityLevel.js spackled
+2018/SpeciesConstructor.js spackled
+2018/StrictEqualityComparison.js spackled
+2018/SymbolDescriptiveString.js spackled
+2018/TestIntegrityLevel.js spackled
+2018/TimeClip.js spackled
+2018/TimeFromYear.js spackled
+2018/TimeWithinDay.js spackled
+2018/ToBoolean.js spackled
+2018/ToDateString.js spackled
+2018/ToIndex.js spackled
+2018/ToInt16.js spackled
+2018/ToInt32.js spackled
+2018/ToInt8.js spackled
+2018/ToInteger.js spackled
+2018/ToLength.js spackled
+2018/ToNumber.js spackled
+2018/ToObject.js spackled
+2018/ToPrimitive.js spackled
+2018/ToPropertyDescriptor.js spackled
+2018/ToPropertyKey.js spackled
+2018/ToString.js spackled
+2018/ToUint16.js spackled
+2018/ToUint32.js spackled
+2018/ToUint8.js spackled
+2018/ToUint8Clamp.js spackled
+2018/Type.js spackled
+2018/ValidateAndApplyPropertyDescriptor.js spackled
+2018/WeekDay.js spackled
+2018/YearFromTime.js spackled
+2018/modulo.js spackled
+2018/msFromTime.js spackled
+2018/thisBooleanValue.js spackled
+2018/thisNumberValue.js spackled
+2018/thisStringValue.js spackled
+2018/thisTimeValue.js spackled
+2019/AbstractEqualityComparison.js spackled
+2019/AbstractRelationalComparison.js spackled
+2019/AdvanceStringIndex.js spackled
+2019/ArrayCreate.js spackled
+2019/ArraySetLength.js spackled
+2019/ArraySpeciesCreate.js spackled
+2019/Call.js spackled
+2019/CanonicalNumericIndexString.js spackled
+2019/CompletePropertyDescriptor.js spackled
+2019/CopyDataProperties.js spackled
+2019/CreateDataProperty.js spackled
+2019/CreateDataPropertyOrThrow.js spackled
+2019/CreateHTML.js spackled
+2019/CreateIterResultObject.js spackled
+2019/CreateListFromArrayLike.js spackled
+2019/CreateMethodProperty.js spackled
+2019/DateFromTime.js spackled
+2019/DateString.js spackled
+2019/Day.js spackled
+2019/DayFromYear.js spackled
+2019/DayWithinYear.js spackled
+2019/DaysInYear.js spackled
+2019/DefinePropertyOrThrow.js spackled
+2019/DeletePropertyOrThrow.js spackled
+2019/EnumerableOwnPropertyNames.js spackled
+2019/FromPropertyDescriptor.js spackled
+2019/Get.js spackled
+2019/GetIterator.js spackled
+2019/GetMethod.js spackled
+2019/GetOwnPropertyKeys.js spackled
+2019/GetPrototypeFromConstructor.js spackled
+2019/GetSubstitution.js spackled
+2019/GetV.js spackled
+2019/HasOwnProperty.js spackled
+2019/HasProperty.js spackled
+2019/HourFromTime.js spackled
+2019/InLeapYear.js spackled
+2019/InstanceofOperator.js spackled
+2019/Invoke.js spackled
+2019/IsAccessorDescriptor.js spackled
+2019/IsArray.js spackled
+2019/IsCallable.js spackled
+2019/IsConcatSpreadable.js spackled
+2019/IsConstructor.js spackled
+2019/IsDataDescriptor.js spackled
+2019/IsExtensible.js spackled
+2019/IsGenericDescriptor.js spackled
+2019/IsInteger.js spackled
+2019/IsPromise.js spackled
+2019/IsPropertyKey.js spackled
+2019/IsRegExp.js spackled
+2019/IsStringPrefix.js spackled
+2019/IterableToList.js spackled
+2019/IteratorClose.js spackled
+2019/IteratorComplete.js spackled
+2019/IteratorNext.js spackled
+2019/IteratorStep.js spackled
+2019/IteratorValue.js spackled
+2019/MakeDate.js spackled
+2019/MakeDay.js spackled
+2019/MakeTime.js spackled
+2019/MinFromTime.js spackled
+2019/MonthFromTime.js spackled
+2019/NumberToString.js spackled
+2019/ObjectCreate.js spackled
+2019/OrdinaryDefineOwnProperty.js spackled
+2019/OrdinaryGetOwnProperty.js spackled
+2019/OrdinaryGetPrototypeOf.js spackled
+2019/OrdinaryHasInstance.js spackled
+2019/OrdinaryHasProperty.js spackled
+2019/OrdinarySetPrototypeOf.js spackled
+2019/PromiseResolve.js spackled
+2019/RegExpExec.js spackled
+2019/RequireObjectCoercible.js spackled
+2019/SameValue.js spackled
+2019/SameValueNonNumber.js spackled
+2019/SameValueZero.js spackled
+2019/SecFromTime.js spackled
+2019/Set.js spackled
+2019/SetFunctionName.js spackled
+2019/SetIntegrityLevel.js spackled
+2019/SpeciesConstructor.js spackled
+2019/StrictEqualityComparison.js spackled
+2019/SymbolDescriptiveString.js spackled
+2019/TestIntegrityLevel.js spackled
+2019/TimeClip.js spackled
+2019/TimeFromYear.js spackled
+2019/TimeString.js spackled
+2019/TimeWithinDay.js spackled
+2019/ToBoolean.js spackled
+2019/ToDateString.js spackled
+2019/ToIndex.js spackled
+2019/ToInt16.js spackled
+2019/ToInt32.js spackled
+2019/ToInt8.js spackled
+2019/ToInteger.js spackled
+2019/ToLength.js spackled
+2019/ToNumber.js spackled
+2019/ToObject.js spackled
+2019/ToPrimitive.js spackled
+2019/ToPropertyDescriptor.js spackled
+2019/ToPropertyKey.js spackled
+2019/ToString.js spackled
+2019/ToUint16.js spackled
+2019/ToUint32.js spackled
+2019/ToUint8.js spackled
+2019/ToUint8Clamp.js spackled
+2019/Type.js spackled
+2019/ValidateAndApplyPropertyDescriptor.js spackled
+2019/WeekDay.js spackled
+2019/YearFromTime.js spackled
+2019/modulo.js spackled
+2019/msFromTime.js spackled
+2019/thisBooleanValue.js spackled
+2019/thisNumberValue.js spackled
+2019/thisStringValue.js spackled
+2019/thisSymbolValue.js spackled
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/es-abstract/.github/FUNDING.yml b/node_modules/object.values/node_modules/es-abstract/.github/FUNDING.yml
new file mode 100644
index 0000000..beeb7a2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/es-abstract
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with a single custom sponsorship URL
diff --git a/node_modules/object.values/node_modules/es-abstract/.github/workflows/rebase.yml b/node_modules/object.values/node_modules/es-abstract/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/node_modules/es-abstract/.nycrc b/node_modules/object.values/node_modules/es-abstract/.nycrc
new file mode 100644
index 0000000..d316b4d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.nycrc
@@ -0,0 +1,14 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "operations",
+ "test"
+ ]
+}
diff --git a/node_modules/object.values/node_modules/es-abstract/.travis.yml b/node_modules/object.values/node_modules/es-abstract/.travis.yml
new file mode 100644
index 0000000..5c34024
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/.travis.yml
@@ -0,0 +1,32 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+cache:
+ directories:
+ - "$HOME/.npm"
+ - "$(nvm cache dir)"
+ - "$(nvm_version_path $(nvm_version_remote 0.4))"
+ - "$(nvm_version_path $(nvm_version_remote 0.6))"
+ - "$(nvm_version_path $(nvm_version_remote 0.10))"
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+script:
+ - 'if [ -n "${COVERAGE-}" ]; then npm run coverage && bash <(curl -s https://codecov.io/bash) -f coverage/*.json; fi'
+matrix:
+ include:
+ - node_js: "8"
+ env: COVERAGE=true
+ - node_js: "4"
+ env: COVERAGE=true
+ - node_js: "0.12"
+ env: COVERAGE=true
+ - node_js: "0.8"
+ env: COVERAGE=true
+ exclude:
+ - node_js: "0.12"
+ env: TEST=true
+ - node_js: "0.8"
+ env: TEST=true
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/AbstractEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2015/AbstractEqualityComparison.js
new file mode 100644
index 0000000..40b3909
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/AbstractRelationalComparison.js b/node_modules/object.values/node_modules/es-abstract/2015/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/AdvanceStringIndex.js b/node_modules/object.values/node_modules/es-abstract/2015/AdvanceStringIndex.js
new file mode 100644
index 0000000..666f578
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/AdvanceStringIndex.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+ throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+ }
+ if (Type(unicode) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+ }
+ if (!unicode) {
+ return index + 1;
+ }
+ var length = S.length;
+ if ((index + 1) >= length) {
+ return index + 1;
+ }
+
+ var first = $charCodeAt(S, index);
+ if (first < 0xD800 || first > 0xDBFF) {
+ return index + 1;
+ }
+
+ var second = $charCodeAt(S, index + 1);
+ if (second < 0xDC00 || second > 0xDFFF) {
+ return index + 1;
+ }
+
+ return index + 2;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ArrayCreate.js b/node_modules/object.values/node_modules/es-abstract/2015/ArrayCreate.js
new file mode 100644
index 0000000..fc9a7cf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ArrayCreate.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsInteger = require('./IsInteger');
+
+var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+
+var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayPrototype
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+ }
+ if (length > MAX_ARRAY_LENGTH) {
+ throw new $RangeError('length is greater than (2**32 - 1)');
+ }
+ var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+ var A = []; // steps 5 - 7, and 9
+ if (proto !== $ArrayPrototype) { // step 8
+ if (!$setProto) {
+ throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ $setProto(A, proto);
+ }
+ if (length !== 0) { // bypasses the need for step 2
+ A.length = length;
+ }
+ /* step 10, the above as a shortcut for the below
+ OrdinaryDefineOwnProperty(A, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': true
+ });
+ */
+ return A;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ArraySetLength.js b/node_modules/object.values/node_modules/es-abstract/2015/ArraySetLength.js
new file mode 100644
index 0000000..c9134c6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ArraySetLength.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsArray = require('./IsArray');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+ if (!IsArray(A)) {
+ throw new $TypeError('Assertion failed: A must be an Array');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!('[[Value]]' in Desc)) {
+ return OrdinaryDefineOwnProperty(A, 'length', Desc);
+ }
+ var newLenDesc = assign({}, Desc);
+ var newLen = ToUint32(Desc['[[Value]]']);
+ var numberLen = ToNumber(Desc['[[Value]]']);
+ if (newLen !== numberLen) {
+ throw new $RangeError('Invalid array length');
+ }
+ newLenDesc['[[Value]]'] = newLen;
+ var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+ if (!IsDataDescriptor(oldLenDesc)) {
+ throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+ }
+ var oldLen = oldLenDesc['[[Value]]'];
+ if (newLen >= oldLen) {
+ return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ }
+ if (!oldLenDesc['[[Writable]]']) {
+ return false;
+ }
+ var newWritable;
+ if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+ newWritable = true;
+ } else {
+ newWritable = false;
+ newLenDesc['[[Writable]]'] = true;
+ }
+ var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ if (!succeeded) {
+ return false;
+ }
+ while (newLen < oldLen) {
+ oldLen -= 1;
+ // eslint-disable-next-line no-param-reassign
+ var deleteSucceeded = delete A[ToString(oldLen)];
+ if (!deleteSucceeded) {
+ newLenDesc['[[Value]]'] = oldLen + 1;
+ if (!newWritable) {
+ newLenDesc['[[Writable]]'] = false;
+ OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ return false;
+ }
+ }
+ }
+ if (!newWritable) {
+ return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ArraySpeciesCreate.js b/node_modules/object.values/node_modules/es-abstract/2015/ArraySpeciesCreate.js
new file mode 100644
index 0000000..98b9b56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ArraySpeciesCreate.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: length must be an integer >= 0');
+ }
+ var len = length === 0 ? 0 : length;
+ var C;
+ var isArray = IsArray(originalArray);
+ if (isArray) {
+ C = Get(originalArray, 'constructor');
+ // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+ // if (IsConstructor(C)) {
+ // if C is another realm's Array, C = undefined
+ // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+ // }
+ if ($species && Type(C) === 'Object') {
+ C = Get(C, $species);
+ if (C === null) {
+ C = void 0;
+ }
+ }
+ }
+ if (typeof C === 'undefined') {
+ return $Array(len);
+ }
+ if (!IsConstructor(C)) {
+ throw new $TypeError('C must be a constructor');
+ }
+ return new C(len); // Construct(C, len);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/Call.js b/node_modules/object.values/node_modules/es-abstract/2015/Call.js
new file mode 100644
index 0000000..f31960d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/Call.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsCallable = require('./IsCallable');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+ var args = arguments.length > 2 ? arguments[2] : [];
+ if (!IsCallable(F)) {
+ throw new $TypeError(inspect(F) + ' is not a function');
+ }
+ return F.apply(V, args);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CanonicalNumericIndexString.js b/node_modules/object.values/node_modules/es-abstract/2015/CanonicalNumericIndexString.js
new file mode 100644
index 0000000..625f853
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CanonicalNumericIndexString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+ if (Type(argument) !== 'String') {
+ throw new $TypeError('Assertion failed: `argument` must be a String');
+ }
+ if (argument === '-0') { return -0; }
+ var n = ToNumber(argument);
+ if (SameValue(ToString(n), argument)) { return n; }
+ return void 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CompletePropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/CompletePropertyDescriptor.js
new file mode 100644
index 0000000..548bf41
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CompletePropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+ /* eslint no-param-reassign: 0 */
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (!has(Desc, '[[Value]]')) {
+ Desc['[[Value]]'] = void 0;
+ }
+ if (!has(Desc, '[[Writable]]')) {
+ Desc['[[Writable]]'] = false;
+ }
+ } else {
+ if (!has(Desc, '[[Get]]')) {
+ Desc['[[Get]]'] = void 0;
+ }
+ if (!has(Desc, '[[Set]]')) {
+ Desc['[[Set]]'] = void 0;
+ }
+ }
+ if (!has(Desc, '[[Enumerable]]')) {
+ Desc['[[Enumerable]]'] = false;
+ }
+ if (!has(Desc, '[[Configurable]]')) {
+ Desc['[[Configurable]]'] = false;
+ }
+ return Desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CreateDataProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/CreateDataProperty.js
new file mode 100644
index 0000000..32a86ef
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CreateDataProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var oldDesc = OrdinaryGetOwnProperty(O, P);
+ var extensible = !oldDesc || IsExtensible(O);
+ var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
+ if (immutable || !extensible) {
+ return false;
+ }
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ }
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js
new file mode 100644
index 0000000..9feaec8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var CreateDataProperty = require('./CreateDataProperty');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var success = CreateDataProperty(O, P, V);
+ if (!success) {
+ throw new $TypeError('unable to create data property');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CreateHTML.js b/node_modules/object.values/node_modules/es-abstract/2015/CreateHTML.js
new file mode 100644
index 0000000..536c92d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CreateHTML.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+ if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+ throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+ }
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var p1 = '<' + tag;
+ if (attribute !== '') {
+ var V = ToString(value);
+ var escapedV = $replace(V, /\x22/g, '"');
+ p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+ }
+ return p1 + '>' + S + '</' + tag + '>';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CreateIterResultObject.js b/node_modules/object.values/node_modules/es-abstract/2015/CreateIterResultObject.js
new file mode 100644
index 0000000..aef1d22
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CreateIterResultObject.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+ if (Type(done) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+ }
+ return {
+ value: value,
+ done: done
+ };
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CreateListFromArrayLike.js b/node_modules/object.values/node_modules/es-abstract/2015/CreateListFromArrayLike.js
new file mode 100644
index 0000000..d6b44b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CreateListFromArrayLike.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBound = require('../helpers/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+var $push = callBound('Array.prototype.push');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
+module.exports = function CreateListFromArrayLike(obj) {
+ var elementTypes = arguments.length > 1
+ ? arguments[1]
+ : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ if (!IsArray(elementTypes)) {
+ throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+ }
+ var len = ToLength(Get(obj, 'length'));
+ var list = [];
+ var index = 0;
+ while (index < len) {
+ var indexName = ToString(index);
+ var next = Get(obj, indexName);
+ var nextType = Type(next);
+ if ($indexOf(elementTypes, nextType) < 0) {
+ throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+ }
+ $push(list, next);
+ index += 1;
+ }
+ return list;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/CreateMethodProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/CreateMethodProperty.js
new file mode 100644
index 0000000..5b599ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/CreateMethodProperty.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var newDesc = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ };
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ newDesc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/DateFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/Day.js b/node_modules/object.values/node_modules/es-abstract/2015/Day.js
new file mode 100644
index 0000000..00df813
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/Day.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return $floor(t / msPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/DayFromYear.js b/node_modules/object.values/node_modules/es-abstract/2015/DayFromYear.js
new file mode 100644
index 0000000..08dd5af
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/DayFromYear.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/DayWithinYear.js b/node_modules/object.values/node_modules/es-abstract/2015/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/DaysInYear.js b/node_modules/object.values/node_modules/es-abstract/2015/DaysInYear.js
new file mode 100644
index 0000000..db32251
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (mod(y, 4) !== 0) {
+ return 365;
+ }
+ if (mod(y, 100) !== 0) {
+ return 366;
+ }
+ if (mod(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/DefinePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2015/DefinePropertyOrThrow.js
new file mode 100644
index 0000000..7977f6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/DefinePropertyOrThrow.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var Desc = isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, desc) ? desc : ToPropertyDescriptor(desc);
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+ }
+
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/DeletePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2015/DeletePropertyOrThrow.js
new file mode 100644
index 0000000..b476817
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/DeletePropertyOrThrow.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ var success = delete O[P];
+ if (!success) {
+ throw new $TypeError('Attempt to delete property failed.');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/EnumerableOwnNames.js b/node_modules/object.values/node_modules/es-abstract/2015/EnumerableOwnNames.js
new file mode 100644
index 0000000..d068584
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/EnumerableOwnNames.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var keys = require('object-keys');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
+
+module.exports = function EnumerableOwnNames(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return keys(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/FromPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/FromPropertyDescriptor.js
new file mode 100644
index 0000000..5ec200e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/FromPropertyDescriptor.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ var obj = {};
+ if ('[[Value]]' in Desc) {
+ obj.value = Desc['[[Value]]'];
+ }
+ if ('[[Writable]]' in Desc) {
+ obj.writable = Desc['[[Writable]]'];
+ }
+ if ('[[Get]]' in Desc) {
+ obj.get = Desc['[[Get]]'];
+ }
+ if ('[[Set]]' in Desc) {
+ obj.set = Desc['[[Set]]'];
+ }
+ if ('[[Enumerable]]' in Desc) {
+ obj.enumerable = Desc['[[Enumerable]]'];
+ }
+ if ('[[Configurable]]' in Desc) {
+ obj.configurable = Desc['[[Configurable]]'];
+ }
+ return obj;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/Get.js b/node_modules/object.values/node_modules/es-abstract/2015/Get.js
new file mode 100644
index 0000000..5b9ad78
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/Get.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+/**
+ * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
+ * 1. Assert: Type(O) is Object.
+ * 2. Assert: IsPropertyKey(P) is true.
+ * 3. Return O.[[Get]](P, O).
+ */
+
+module.exports = function Get(O, P) {
+ // 7.3.1.1
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ // 7.3.1.2
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
+ }
+ // 7.3.1.3
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/GetIterator.js b/node_modules/object.values/node_modules/es-abstract/2015/GetIterator.js
new file mode 100644
index 0000000..7beddac
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/GetIterator.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, method) {
+ var actualMethod = method;
+ if (arguments.length < 2) {
+ actualMethod = getIteratorMethod(
+ {
+ AdvanceStringIndex: AdvanceStringIndex,
+ GetMethod: GetMethod,
+ IsArray: IsArray,
+ Type: Type
+ },
+ obj
+ );
+ }
+ var iterator = Call(actualMethod, obj);
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('iterator must return an object');
+ }
+
+ return iterator;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/GetMethod.js b/node_modules/object.values/node_modules/es-abstract/2015/GetMethod.js
new file mode 100644
index 0000000..aef8cbc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/GetMethod.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var IsPropertyKey = require('./IsPropertyKey');
+
+/**
+ * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let func be GetV(O, P).
+ * 3. ReturnIfAbrupt(func).
+ * 4. If func is either undefined or null, return undefined.
+ * 5. If IsCallable(func) is false, throw a TypeError exception.
+ * 6. Return func.
+ */
+
+module.exports = function GetMethod(O, P) {
+ // 7.3.9.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.9.2
+ var func = GetV(O, P);
+
+ // 7.3.9.4
+ if (func == null) {
+ return void 0;
+ }
+
+ // 7.3.9.5
+ if (!IsCallable(func)) {
+ throw new $TypeError(P + 'is not a function');
+ }
+
+ // 7.3.9.6
+ return func;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/GetOwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/2015/GetOwnPropertyKeys.js
new file mode 100644
index 0000000..8d7e5ee
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/GetOwnPropertyKeys.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
+var keys = require('object-keys');
+
+var esType = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+ if (esType(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (Type === 'Symbol') {
+ return $gOPS ? $gOPS(O) : [];
+ }
+ if (Type === 'String') {
+ if (!$gOPN) {
+ return keys(O);
+ }
+ return $gOPN(O);
+ }
+ throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js b/node_modules/object.values/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js
new file mode 100644
index 0000000..62da8fb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+ var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ if (!IsConstructor(constructor)) {
+ throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+ }
+ var proto = Get(constructor, 'prototype');
+ if (Type(proto) !== 'Object') {
+ if (!(constructor instanceof $Function)) {
+ // ignore other realms, for now
+ throw new $TypeError('cross-realm constructors not currently supported');
+ }
+ proto = intrinsic;
+ }
+ return proto;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/GetSubstitution.js b/node_modules/object.values/node_modules/es-abstract/2015/GetSubstitution.js
new file mode 100644
index 0000000..de41b01
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/GetSubstitution.js
@@ -0,0 +1,104 @@
+
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $parseInt = GetIntrinsic('%parseInt%');
+
+var inspect = require('object-inspect');
+
+var regexTester = require('../helpers/regexTester');
+var callBound = require('../helpers/callBound');
+var every = require('../helpers/every');
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+
+var IsArray = require('./IsArray');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var isStringOrHole = function (capture, index, arr) {
+ return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
+};
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, replacement) {
+ if (Type(matched) !== 'String') {
+ throw new $TypeError('Assertion failed: `matched` must be a String');
+ }
+ var matchLength = matched.length;
+
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `str` must be a String');
+ }
+ var stringLength = str.length;
+
+ if (!IsInteger(position) || position < 0 || position > stringLength) {
+ throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+ }
+
+ if (!IsArray(captures) || !every(captures, isStringOrHole)) {
+ throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures));
+ }
+
+ if (Type(replacement) !== 'String') {
+ throw new $TypeError('Assertion failed: `replacement` must be a String');
+ }
+
+ var tailPos = position + matchLength;
+ var m = captures.length;
+
+ var result = '';
+ for (var i = 0; i < replacement.length; i += 1) {
+ // if this is a $, and it's not the end of the replacement
+ var current = $charAt(replacement, i);
+ var isLast = (i + 1) >= replacement.length;
+ var nextIsLast = (i + 2) >= replacement.length;
+ if (current === '$' && !isLast) {
+ var next = $charAt(replacement, i + 1);
+ if (next === '$') {
+ result += '$';
+ i += 1;
+ } else if (next === '&') {
+ result += matched;
+ i += 1;
+ } else if (next === '`') {
+ result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+ i += 1;
+ } else if (next === "'") {
+ result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+ i += 1;
+ } else {
+ var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+ if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+ // $1 through $9, and not followed by a digit
+ var n = $parseInt(next, 10);
+ // if (n > m, impl-defined)
+ result += (n <= m && Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
+ i += 1;
+ } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+ // $00 through $99
+ var nn = next + nextNext;
+ var nnI = $parseInt(nn, 10) - 1;
+ // if nn === '00' or nn > m, impl-defined
+ result += (nn <= m && Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
+ i += 2;
+ } else {
+ result += '$';
+ }
+ }
+ } else {
+ // the final $, or else not a $
+ result += $charAt(replacement, i);
+ }
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/GetV.js b/node_modules/object.values/node_modules/es-abstract/2015/GetV.js
new file mode 100644
index 0000000..7b5139a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/GetV.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var ToObject = require('./ToObject');
+
+/**
+ * 7.3.2 GetV (V, P)
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let O be ToObject(V).
+ * 3. ReturnIfAbrupt(O).
+ * 4. Return O.[[Get]](P, V).
+ */
+
+module.exports = function GetV(V, P) {
+ // 7.3.2.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.2.2-3
+ var O = ToObject(V);
+
+ // 7.3.2.4
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/HasOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/HasOwnProperty.js
new file mode 100644
index 0000000..679059f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/HasOwnProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var has = require('has');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return has(O, P);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/HasProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/HasProperty.js
new file mode 100644
index 0000000..5f2d212
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/HasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/HourFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/HourFromTime.js
new file mode 100644
index 0000000..957ce32
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/HourFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return mod($floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/InLeapYear.js b/node_modules/object.values/node_modules/es-abstract/2015/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/InstanceofOperator.js b/node_modules/object.values/node_modules/es-abstract/2015/InstanceofOperator.js
new file mode 100644
index 0000000..ebd308c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/InstanceofOperator.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+ if (typeof instOfHandler !== 'undefined') {
+ return ToBoolean(Call(instOfHandler, C, [O]));
+ }
+ if (!IsCallable(C)) {
+ throw new $TypeError('`C` is not Callable');
+ }
+ return OrdinaryHasInstance(C, O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/Invoke.js b/node_modules/object.values/node_modules/es-abstract/2015/Invoke.js
new file mode 100644
index 0000000..769f0e3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/Invoke.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $arraySlice = require('../helpers/callBound')('Array.prototype.slice');
+
+var Call = require('./Call');
+var GetV = require('./GetV');
+var IsPropertyKey = require('./IsPropertyKey');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('P must be a Property Key');
+ }
+ var argumentsList = $arraySlice(arguments, 2);
+ var func = GetV(O, P);
+ return Call(func, O, argumentsList);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsAccessorDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/IsAccessorDescriptor.js
new file mode 100644
index 0000000..5139464
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsArray.js b/node_modules/object.values/node_modules/es-abstract/2015/IsArray.js
new file mode 100644
index 0000000..7b25f37
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsArray.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('../helpers/callBound')('Object.prototype.toString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
+
+module.exports = $Array.isArray || function IsArray(argument) {
+ return toStr(argument) === '[object Array]';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsCallable.js b/node_modules/object.values/node_modules/es-abstract/2015/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsConcatSpreadable.js b/node_modules/object.values/node_modules/es-abstract/2015/IsConcatSpreadable.js
new file mode 100644
index 0000000..dc8aae1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsConcatSpreadable.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ if ($isConcatSpreadable) {
+ var spreadable = Get(O, $isConcatSpreadable);
+ if (typeof spreadable !== 'undefined') {
+ return ToBoolean(spreadable);
+ }
+ }
+ return IsArray(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsConstructor.js b/node_modules/object.values/node_modules/es-abstract/2015/IsConstructor.js
new file mode 100644
index 0000000..00ea52c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsConstructor.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
+
+module.exports = function IsConstructor(argument) {
+ return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsDataDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/IsDataDescriptor.js
new file mode 100644
index 0000000..0ad3045
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsExtensible.js b/node_modules/object.values/node_modules/es-abstract/2015/IsExtensible.js
new file mode 100644
index 0000000..0c4c8a6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsExtensible.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $preventExtensions = $Object.preventExtensions;
+var $isExtensible = $Object.isExtensible;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+ ? function IsExtensible(obj) {
+ return !isPrimitive(obj) && $isExtensible(obj);
+ }
+ : function IsExtensible(obj) {
+ return !isPrimitive(obj);
+ };
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsGenericDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/IsGenericDescriptor.js
new file mode 100644
index 0000000..8618ce4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsInteger.js b/node_modules/object.values/node_modules/es-abstract/2015/IsInteger.js
new file mode 100644
index 0000000..0f488b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsInteger.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
+
+module.exports = function IsInteger(argument) {
+ if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
+ return false;
+ }
+ var abs = $abs(argument);
+ return $floor(abs) === abs;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsPromise.js b/node_modules/object.values/node_modules/es-abstract/2015/IsPromise.js
new file mode 100644
index 0000000..e8e92a2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsPromise.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+ if (Type(x) !== 'Object') {
+ return false;
+ }
+ if (!$PromiseThen) { // Promises are not supported
+ return false;
+ }
+ try {
+ $PromiseThen(x); // throws if not a promise
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/IsPropertyDescriptor.js
new file mode 100644
index 0000000..2a96c63
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsPropertyDescriptor.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function IsPropertyDescriptor(Desc) {
+ return isPropertyDescriptor({
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor,
+ Type: Type
+ }, Desc);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2015/IsPropertyKey.js
new file mode 100644
index 0000000..74b8d95
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsPropertyKey.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+ return typeof argument === 'string' || typeof argument === 'symbol';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IsRegExp.js b/node_modules/object.values/node_modules/es-abstract/2015/IsRegExp.js
new file mode 100644
index 0000000..fdf2323
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IsRegExp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+ if (!argument || typeof argument !== 'object') {
+ return false;
+ }
+ if ($match) {
+ var isRegExp = argument[$match];
+ if (typeof isRegExp !== 'undefined') {
+ return ToBoolean(isRegExp);
+ }
+ }
+ return hasRegExpMatcher(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IteratorClose.js b/node_modules/object.values/node_modules/es-abstract/2015/IteratorClose.js
new file mode 100644
index 0000000..35c8c2b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IteratorClose.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+ }
+ if (!IsCallable(completion)) {
+ throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
+ }
+ var completionThunk = completion;
+
+ var iteratorReturn = GetMethod(iterator, 'return');
+
+ if (typeof iteratorReturn === 'undefined') {
+ return completionThunk();
+ }
+
+ var completionRecord;
+ try {
+ var innerResult = Call(iteratorReturn, iterator, []);
+ } catch (e) {
+ // if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+ // if the completion is of type "throw", this will throw.
+ completionThunk();
+ completionThunk = null; // ensure it's not called twice.
+
+ // if not, then return the innerResult completion
+ throw e;
+ }
+ completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+ completionThunk = null; // ensure it's not called twice.
+
+ if (Type(innerResult) !== 'Object') {
+ throw new $TypeError('iterator .return must return an object');
+ }
+
+ return completionRecord;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IteratorComplete.js b/node_modules/object.values/node_modules/es-abstract/2015/IteratorComplete.js
new file mode 100644
index 0000000..a62b9bf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IteratorComplete.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return ToBoolean(Get(iterResult, 'done'));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IteratorNext.js b/node_modules/object.values/node_modules/es-abstract/2015/IteratorNext.js
new file mode 100644
index 0000000..7e59915
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IteratorNext.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Invoke = require('./Invoke');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+ var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+ if (Type(result) !== 'Object') {
+ throw new $TypeError('iterator next must return an object');
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IteratorStep.js b/node_modules/object.values/node_modules/es-abstract/2015/IteratorStep.js
new file mode 100644
index 0000000..41b9d1b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IteratorStep.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+ var result = IteratorNext(iterator);
+ var done = IteratorComplete(result);
+ return done === true ? false : result;
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/IteratorValue.js b/node_modules/object.values/node_modules/es-abstract/2015/IteratorValue.js
new file mode 100644
index 0000000..5e71a44
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/IteratorValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return Get(iterResult, 'value');
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/MakeDate.js b/node_modules/object.values/node_modules/es-abstract/2015/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/MakeDay.js b/node_modules/object.values/node_modules/es-abstract/2015/MakeDay.js
new file mode 100644
index 0000000..f1ab810
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var mod = require('../helpers/mod');
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + $floor(m / 12);
+ var mn = mod(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/MakeTime.js b/node_modules/object.values/node_modules/es-abstract/2015/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/MinFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/MinFromTime.js
new file mode 100644
index 0000000..e80e191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/MinFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return mod($floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/MonthFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ObjectCreate.js b/node_modules/object.values/node_modules/es-abstract/2015/ObjectCreate.js
new file mode 100644
index 0000000..e2445b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ObjectCreate.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var Type = require('./Type');
+
+var hasProto = !({ __proto__: null } instanceof Object);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
+
+module.exports = function ObjectCreate(proto, internalSlotsList) {
+ if (proto !== null && Type(proto) !== 'Object') {
+ throw new $TypeError('Assertion failed: `proto` must be null or an object');
+ }
+ var slots = arguments.length < 2 ? [] : internalSlotsList;
+ if (slots.length > 0) {
+ throw new $SyntaxError('es-abstract does not yet support internal slots');
+ }
+
+ if ($ObjectCreate) {
+ return $ObjectCreate(proto);
+ }
+ if (hasProto) {
+ return { __proto__: proto };
+ }
+
+ if (proto === null) {
+ throw new $SyntaxError('native Object.create support is required to create null objects');
+ }
+ var T = function T() {};
+ T.prototype = proto;
+ return new T();
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js
new file mode 100644
index 0000000..59780b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js
@@ -0,0 +1,61 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!$gOPD) {
+ // ES3/IE 8 fallback
+ if (IsAccessorDescriptor(Desc)) {
+ throw new $SyntaxError('This environment does not support accessor property descriptors.');
+ }
+ var creatingNormalDataProperty = !(P in O)
+ && Desc['[[Writable]]']
+ && Desc['[[Enumerable]]']
+ && Desc['[[Configurable]]']
+ && '[[Value]]' in Desc;
+ var settingExistingDataProperty = (P in O)
+ && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+ && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+ && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+ && '[[Value]]' in Desc;
+ if (creatingNormalDataProperty || settingExistingDataProperty) {
+ O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+ return SameValue(O[P], Desc['[[Value]]']);
+ }
+ throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+ }
+ var desc = $gOPD(O, P);
+ var current = desc && ToPropertyDescriptor(desc);
+ var extensible = IsExtensible(O);
+ return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js
new file mode 100644
index 0000000..b9882e5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var has = require('has');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!has(O, P)) {
+ return void 0;
+ }
+ if (!$gOPD) {
+ // ES3 / IE 8 fallback
+ var arrayLength = IsArray(O) && P === 'length';
+ var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+ return {
+ '[[Configurable]]': !(arrayLength || regexLastIndex),
+ '[[Enumerable]]': $isEnumerable(O, P),
+ '[[Value]]': O[P],
+ '[[Writable]]': true
+ };
+ }
+ return ToPropertyDescriptor($gOPD(O, P));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryHasInstance.js b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryHasInstance.js
new file mode 100644
index 0000000..51abe26
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryHasInstance.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+ if (IsCallable(C) === false) {
+ return false;
+ }
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ var P = Get(C, 'prototype');
+ if (Type(P) !== 'Object') {
+ throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return O instanceof C;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryHasProperty.js b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryHasProperty.js
new file mode 100644
index 0000000..076c25a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/OrdinaryHasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/RegExpExec.js b/node_modules/object.values/node_modules/es-abstract/2015/RegExpExec.js
new file mode 100644
index 0000000..15c9186
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/RegExpExec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var regexExec = require('../helpers/callBound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+ if (Type(R) !== 'Object') {
+ throw new $TypeError('Assertion failed: `R` must be an Object');
+ }
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ var exec = Get(R, 'exec');
+ if (IsCallable(exec)) {
+ var result = Call(exec, R, [S]);
+ if (result === null || Type(result) === 'Object') {
+ return result;
+ }
+ throw new $TypeError('"exec" method must return `null` or an Object');
+ }
+ return regexExec(R, S);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/RequireObjectCoercible.js b/node_modules/object.values/node_modules/es-abstract/2015/RequireObjectCoercible.js
new file mode 100644
index 0000000..9008359
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/RequireObjectCoercible.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../5/CheckObjectCoercible');
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SameValue.js b/node_modules/object.values/node_modules/es-abstract/2015/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SameValueZero.js b/node_modules/object.values/node_modules/es-abstract/2015/SameValueZero.js
new file mode 100644
index 0000000..0dedcd2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SameValueZero.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+ return (x === y) || ($isNaN(x) && $isNaN(y));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SecFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/SecFromTime.js
new file mode 100644
index 0000000..7190011
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SecFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return mod($floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/Set.js b/node_modules/object.values/node_modules/es-abstract/2015/Set.js
new file mode 100644
index 0000000..18ebd99
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/Set.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ if (Type(Throw) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+ }
+ if (Throw) {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return true;
+ } else {
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ } catch (e) {
+ return false;
+ }
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SetFunctionName.js b/node_modules/object.values/node_modules/es-abstract/2015/SetFunctionName.js
new file mode 100644
index 0000000..f93324a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SetFunctionName.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getSymbolDescription = require('../helpers/getSymbolDescription');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+ if (typeof F !== 'function') {
+ throw new $TypeError('Assertion failed: `F` must be a function');
+ }
+ if (!IsExtensible(F) || has(F, 'name')) {
+ throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+ }
+ var nameType = Type(name);
+ if (nameType !== 'Symbol' && nameType !== 'String') {
+ throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+ }
+ if (nameType === 'Symbol') {
+ var description = getSymbolDescription(name);
+ // eslint-disable-next-line no-param-reassign
+ name = typeof description === 'undefined' ? '' : '[' + description + ']';
+ }
+ if (arguments.length > 2) {
+ var prefix = arguments[2];
+ // eslint-disable-next-line no-param-reassign
+ name = prefix + ' ' + name;
+ }
+ return DefinePropertyOrThrow(F, 'name', {
+ '[[Value]]': name,
+ '[[Writable]]': false,
+ '[[Enumerable]]': false,
+ '[[Configurable]]': true
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SetIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2015/SetIntegrityLevel.js
new file mode 100644
index 0000000..3d5c81d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SetIntegrityLevel.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ if (!$preventExtensions) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+ }
+ var status = $preventExtensions(O);
+ if (!status) {
+ return false;
+ }
+ if (!$gOPN) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+ }
+ var theKeys = $gOPN(O);
+ if (level === 'sealed') {
+ forEach(theKeys, function (k) {
+ DefinePropertyOrThrow(O, k, { configurable: false });
+ });
+ } else if (level === 'frozen') {
+ forEach(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ var desc;
+ if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+ desc = { configurable: false };
+ } else {
+ desc = { configurable: false, writable: false };
+ }
+ DefinePropertyOrThrow(O, k, desc);
+ }
+ });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SpeciesConstructor.js b/node_modules/object.values/node_modules/es-abstract/2015/SpeciesConstructor.js
new file mode 100644
index 0000000..3cdcd74
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SpeciesConstructor.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var C = O.constructor;
+ if (typeof C === 'undefined') {
+ return defaultConstructor;
+ }
+ if (Type(C) !== 'Object') {
+ throw new $TypeError('O.constructor is not an Object');
+ }
+ var S = $species ? C[$species] : void 0;
+ if (S == null) {
+ return defaultConstructor;
+ }
+ if (IsConstructor(S)) {
+ return S;
+ }
+ throw new $TypeError('no constructor found');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/StrictEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2015/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/SymbolDescriptiveString.js b/node_modules/object.values/node_modules/es-abstract/2015/SymbolDescriptiveString.js
new file mode 100644
index 0000000..7bd8191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/SymbolDescriptiveString.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+ if (Type(sym) !== 'Symbol') {
+ throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+ }
+ return $SymbolToString(sym);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/TestIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2015/TestIntegrityLevel.js
new file mode 100644
index 0000000..7a57397
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/TestIntegrityLevel.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var every = require('../helpers/every');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ var status = IsExtensible(O);
+ if (status) {
+ return false;
+ }
+ var theKeys = $gOPN(O);
+ return theKeys.length === 0 || every(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ if (currentDesc.configurable) {
+ return false;
+ }
+ if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+ return false;
+ }
+ }
+ return true;
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/TimeClip.js b/node_modules/object.values/node_modules/es-abstract/2015/TimeClip.js
new file mode 100644
index 0000000..57aa08c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+var $abs = GetIntrinsic('%Math.abs%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || $abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/TimeFromYear.js b/node_modules/object.values/node_modules/es-abstract/2015/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/TimeWithinDay.js b/node_modules/object.values/node_modules/es-abstract/2015/TimeWithinDay.js
new file mode 100644
index 0000000..c5b21d3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/TimeWithinDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return mod(t, msPerDay);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToBoolean.js b/node_modules/object.values/node_modules/es-abstract/2015/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToDateString.js b/node_modules/object.values/node_modules/es-abstract/2015/ToDateString.js
new file mode 100644
index 0000000..7a6d4c4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToDateString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Date = GetIntrinsic('%Date%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+ if (Type(tv) !== 'Number') {
+ throw new $TypeError('Assertion failed: `tv` must be a Number');
+ }
+ if ($isNaN(tv)) {
+ return 'Invalid Date';
+ }
+ return $Date(tv);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToInt16.js b/node_modules/object.values/node_modules/es-abstract/2015/ToInt16.js
new file mode 100644
index 0000000..5a112c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToInt16.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+ var int16bit = ToUint16(argument);
+ return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToInt32.js b/node_modules/object.values/node_modules/es-abstract/2015/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToInt8.js b/node_modules/object.values/node_modules/es-abstract/2015/ToInt8.js
new file mode 100644
index 0000000..d103123
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToInt8.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+ var int8bit = ToUint8(argument);
+ return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToInteger.js b/node_modules/object.values/node_modules/es-abstract/2015/ToInteger.js
new file mode 100644
index 0000000..16f7db9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToInteger.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ return ES5ToInteger(number);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToLength.js b/node_modules/object.values/node_modules/es-abstract/2015/ToLength.js
new file mode 100644
index 0000000..1bef9be
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToLength.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var ToInteger = require('./ToInteger');
+
+module.exports = function ToLength(argument) {
+ var len = ToInteger(argument);
+ if (len <= 0) { return 0; } // includes converting -0 to +0
+ if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+ return len;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToNumber.js b/node_modules/object.values/node_modules/es-abstract/2015/ToNumber.js
new file mode 100644
index 0000000..7a3cdc8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToNumber.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+// whitespace from: https://es5.github.io/#x15.5.4.20
+// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+var ws = [
+ '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
+ '\u2029\uFEFF'
+].join('');
+var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
+var $replace = callBound('String.prototype.replace');
+var $trim = function (value) {
+ return $replace(value, trimRegex, '');
+};
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+ var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (typeof value === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a number');
+ }
+ if (typeof value === 'string') {
+ if (isBinary(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 2));
+ } else if (isOctal(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 8));
+ } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+ return NaN;
+ } else {
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+ }
+ }
+ return $Number(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToObject.js b/node_modules/object.values/node_modules/es-abstract/2015/ToObject.js
new file mode 100644
index 0000000..50d5b94
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
+
+module.exports = function ToObject(value) {
+ RequireObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToPrimitive.js b/node_modules/object.values/node_modules/es-abstract/2015/ToPrimitive.js
new file mode 100644
index 0000000..81c655d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToPrimitive.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+ if (arguments.length > 1) {
+ return toPrimitive(input, arguments[1]);
+ }
+ return toPrimitive(input);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/ToPropertyDescriptor.js
new file mode 100644
index 0000000..38e536e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2015/ToPropertyKey.js
new file mode 100644
index 0000000..38f40dd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToPropertyKey.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+ var key = ToPrimitive(argument, $String);
+ return typeof key === 'symbol' ? key : ToString(key);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToString.js b/node_modules/object.values/node_modules/es-abstract/2015/ToString.js
new file mode 100644
index 0000000..a345431
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToString.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+ if (typeof argument === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a string');
+ }
+ return $String(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToUint16.js b/node_modules/object.values/node_modules/es-abstract/2015/ToUint16.js
new file mode 100644
index 0000000..c8a408b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToUint16.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x10000);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToUint32.js b/node_modules/object.values/node_modules/es-abstract/2015/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToUint8.js b/node_modules/object.values/node_modules/es-abstract/2015/ToUint8.js
new file mode 100644
index 0000000..bf84753
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToUint8.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+module.exports = function ToUint8(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x100);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ToUint8Clamp.js b/node_modules/object.values/node_modules/es-abstract/2015/ToUint8Clamp.js
new file mode 100644
index 0000000..c7f9f56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ToUint8Clamp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+
+var $floor = $Math.floor;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number <= 0) { return 0; }
+ if (number >= 0xFF) { return 0xFF; }
+ var f = $floor(argument);
+ if (f + 0.5 < number) { return f + 1; }
+ if (number < f + 0.5) { return f; }
+ if (f % 2 !== 0) { return f + 1; }
+ return f;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/Type.js b/node_modules/object.values/node_modules/es-abstract/2015/Type.js
new file mode 100644
index 0000000..6c99376
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/Type.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function Type(x) {
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ return ES5Type(x);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js
new file mode 100644
index 0000000..d4b9007
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js
@@ -0,0 +1,170 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
+// https://www.ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements, max-params
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+ // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+ var oType = Type(O);
+ if (oType !== 'Undefined' && oType !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be undefined or an Object');
+ }
+ if (Type(extensible) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: extensible must be a Boolean');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (Type(current) !== 'Undefined' && !isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, current)) {
+ throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+ }
+ if (oType !== 'Undefined' && !IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+ }
+ if (Type(current) === 'Undefined') {
+ if (!extensible) {
+ return false;
+ }
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': Desc['[[Configurable]]'],
+ '[[Enumerable]]': Desc['[[Enumerable]]'],
+ '[[Value]]': Desc['[[Value]]'],
+ '[[Writable]]': Desc['[[Writable]]']
+ }
+ );
+ }
+ } else {
+ if (!IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ }
+ return true;
+ }
+ if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+ return true;
+ }
+ if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+ return true; // removed by ES2017, but should still be correct
+ }
+ // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+ if (!current['[[Configurable]]']) {
+ if (Desc['[[Configurable]]']) {
+ return false;
+ }
+ if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+ return false;
+ }
+ }
+ if (IsGenericDescriptor(Desc)) {
+ // no further validation is required.
+ } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ return false;
+ }
+ if (IsDataDescriptor(current)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Get]]': undefined
+ }
+ );
+ }
+ } else if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Value]]': undefined
+ }
+ );
+ }
+ } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+ if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+ return false;
+ }
+ if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+ return false;
+ }
+ if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else {
+ throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/WeekDay.js b/node_modules/object.values/node_modules/es-abstract/2015/WeekDay.js
new file mode 100644
index 0000000..2973e02
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/WeekDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+var Day = require('./Day');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/YearFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/modulo.js b/node_modules/object.values/node_modules/es-abstract/2015/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/msFromTime.js b/node_modules/object.values/node_modules/es-abstract/2015/msFromTime.js
new file mode 100644
index 0000000..c31eda0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/msFromTime.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return mod(t, msPerSecond);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/thisBooleanValue.js b/node_modules/object.values/node_modules/es-abstract/2015/thisBooleanValue.js
new file mode 100644
index 0000000..3ffac9c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/thisBooleanValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $BooleanValueOf = require('../helpers/callBound')('Boolean.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+ if (Type(value) === 'Boolean') {
+ return value;
+ }
+
+ return $BooleanValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/thisNumberValue.js b/node_modules/object.values/node_modules/es-abstract/2015/thisNumberValue.js
new file mode 100644
index 0000000..0345e52
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/thisNumberValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var Type = require('./Type');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+ if (Type(value) === 'Number') {
+ return value;
+ }
+
+ return $NumberValueOf(value);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/thisStringValue.js b/node_modules/object.values/node_modules/es-abstract/2015/thisStringValue.js
new file mode 100644
index 0000000..3b99b6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/thisStringValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $StringValueOf = require('../helpers/callBound')('String.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+ if (Type(value) === 'String') {
+ return value;
+ }
+
+ return $StringValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2015/thisTimeValue.js b/node_modules/object.values/node_modules/es-abstract/2015/thisTimeValue.js
new file mode 100644
index 0000000..d7cda28
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2015/thisTimeValue.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $DateValueOf = require('../helpers/callBound')('Date.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
+
+module.exports = function thisTimeValue(value) {
+ return $DateValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/AbstractEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2016/AbstractEqualityComparison.js
new file mode 100644
index 0000000..40b3909
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/AbstractRelationalComparison.js b/node_modules/object.values/node_modules/es-abstract/2016/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/AdvanceStringIndex.js b/node_modules/object.values/node_modules/es-abstract/2016/AdvanceStringIndex.js
new file mode 100644
index 0000000..666f578
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/AdvanceStringIndex.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+ throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+ }
+ if (Type(unicode) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+ }
+ if (!unicode) {
+ return index + 1;
+ }
+ var length = S.length;
+ if ((index + 1) >= length) {
+ return index + 1;
+ }
+
+ var first = $charCodeAt(S, index);
+ if (first < 0xD800 || first > 0xDBFF) {
+ return index + 1;
+ }
+
+ var second = $charCodeAt(S, index + 1);
+ if (second < 0xDC00 || second > 0xDFFF) {
+ return index + 1;
+ }
+
+ return index + 2;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ArrayCreate.js b/node_modules/object.values/node_modules/es-abstract/2016/ArrayCreate.js
new file mode 100644
index 0000000..fc9a7cf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ArrayCreate.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsInteger = require('./IsInteger');
+
+var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+
+var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayPrototype
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+ }
+ if (length > MAX_ARRAY_LENGTH) {
+ throw new $RangeError('length is greater than (2**32 - 1)');
+ }
+ var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+ var A = []; // steps 5 - 7, and 9
+ if (proto !== $ArrayPrototype) { // step 8
+ if (!$setProto) {
+ throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ $setProto(A, proto);
+ }
+ if (length !== 0) { // bypasses the need for step 2
+ A.length = length;
+ }
+ /* step 10, the above as a shortcut for the below
+ OrdinaryDefineOwnProperty(A, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': true
+ });
+ */
+ return A;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ArraySetLength.js b/node_modules/object.values/node_modules/es-abstract/2016/ArraySetLength.js
new file mode 100644
index 0000000..c9134c6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ArraySetLength.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsArray = require('./IsArray');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+ if (!IsArray(A)) {
+ throw new $TypeError('Assertion failed: A must be an Array');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!('[[Value]]' in Desc)) {
+ return OrdinaryDefineOwnProperty(A, 'length', Desc);
+ }
+ var newLenDesc = assign({}, Desc);
+ var newLen = ToUint32(Desc['[[Value]]']);
+ var numberLen = ToNumber(Desc['[[Value]]']);
+ if (newLen !== numberLen) {
+ throw new $RangeError('Invalid array length');
+ }
+ newLenDesc['[[Value]]'] = newLen;
+ var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+ if (!IsDataDescriptor(oldLenDesc)) {
+ throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+ }
+ var oldLen = oldLenDesc['[[Value]]'];
+ if (newLen >= oldLen) {
+ return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ }
+ if (!oldLenDesc['[[Writable]]']) {
+ return false;
+ }
+ var newWritable;
+ if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+ newWritable = true;
+ } else {
+ newWritable = false;
+ newLenDesc['[[Writable]]'] = true;
+ }
+ var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ if (!succeeded) {
+ return false;
+ }
+ while (newLen < oldLen) {
+ oldLen -= 1;
+ // eslint-disable-next-line no-param-reassign
+ var deleteSucceeded = delete A[ToString(oldLen)];
+ if (!deleteSucceeded) {
+ newLenDesc['[[Value]]'] = oldLen + 1;
+ if (!newWritable) {
+ newLenDesc['[[Writable]]'] = false;
+ OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ return false;
+ }
+ }
+ }
+ if (!newWritable) {
+ return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ArraySpeciesCreate.js b/node_modules/object.values/node_modules/es-abstract/2016/ArraySpeciesCreate.js
new file mode 100644
index 0000000..98b9b56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ArraySpeciesCreate.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: length must be an integer >= 0');
+ }
+ var len = length === 0 ? 0 : length;
+ var C;
+ var isArray = IsArray(originalArray);
+ if (isArray) {
+ C = Get(originalArray, 'constructor');
+ // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+ // if (IsConstructor(C)) {
+ // if C is another realm's Array, C = undefined
+ // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+ // }
+ if ($species && Type(C) === 'Object') {
+ C = Get(C, $species);
+ if (C === null) {
+ C = void 0;
+ }
+ }
+ }
+ if (typeof C === 'undefined') {
+ return $Array(len);
+ }
+ if (!IsConstructor(C)) {
+ throw new $TypeError('C must be a constructor');
+ }
+ return new C(len); // Construct(C, len);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/Call.js b/node_modules/object.values/node_modules/es-abstract/2016/Call.js
new file mode 100644
index 0000000..f31960d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/Call.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsCallable = require('./IsCallable');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+ var args = arguments.length > 2 ? arguments[2] : [];
+ if (!IsCallable(F)) {
+ throw new $TypeError(inspect(F) + ' is not a function');
+ }
+ return F.apply(V, args);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CanonicalNumericIndexString.js b/node_modules/object.values/node_modules/es-abstract/2016/CanonicalNumericIndexString.js
new file mode 100644
index 0000000..625f853
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CanonicalNumericIndexString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+ if (Type(argument) !== 'String') {
+ throw new $TypeError('Assertion failed: `argument` must be a String');
+ }
+ if (argument === '-0') { return -0; }
+ var n = ToNumber(argument);
+ if (SameValue(ToString(n), argument)) { return n; }
+ return void 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CompletePropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/CompletePropertyDescriptor.js
new file mode 100644
index 0000000..548bf41
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CompletePropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+ /* eslint no-param-reassign: 0 */
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (!has(Desc, '[[Value]]')) {
+ Desc['[[Value]]'] = void 0;
+ }
+ if (!has(Desc, '[[Writable]]')) {
+ Desc['[[Writable]]'] = false;
+ }
+ } else {
+ if (!has(Desc, '[[Get]]')) {
+ Desc['[[Get]]'] = void 0;
+ }
+ if (!has(Desc, '[[Set]]')) {
+ Desc['[[Set]]'] = void 0;
+ }
+ }
+ if (!has(Desc, '[[Enumerable]]')) {
+ Desc['[[Enumerable]]'] = false;
+ }
+ if (!has(Desc, '[[Configurable]]')) {
+ Desc['[[Configurable]]'] = false;
+ }
+ return Desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CreateDataProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/CreateDataProperty.js
new file mode 100644
index 0000000..32a86ef
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CreateDataProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var oldDesc = OrdinaryGetOwnProperty(O, P);
+ var extensible = !oldDesc || IsExtensible(O);
+ var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
+ if (immutable || !extensible) {
+ return false;
+ }
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ }
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js
new file mode 100644
index 0000000..9feaec8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var CreateDataProperty = require('./CreateDataProperty');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var success = CreateDataProperty(O, P, V);
+ if (!success) {
+ throw new $TypeError('unable to create data property');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CreateHTML.js b/node_modules/object.values/node_modules/es-abstract/2016/CreateHTML.js
new file mode 100644
index 0000000..536c92d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CreateHTML.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+ if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+ throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+ }
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var p1 = '<' + tag;
+ if (attribute !== '') {
+ var V = ToString(value);
+ var escapedV = $replace(V, /\x22/g, '"');
+ p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+ }
+ return p1 + '>' + S + '</' + tag + '>';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CreateIterResultObject.js b/node_modules/object.values/node_modules/es-abstract/2016/CreateIterResultObject.js
new file mode 100644
index 0000000..aef1d22
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CreateIterResultObject.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+ if (Type(done) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+ }
+ return {
+ value: value,
+ done: done
+ };
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CreateListFromArrayLike.js b/node_modules/object.values/node_modules/es-abstract/2016/CreateListFromArrayLike.js
new file mode 100644
index 0000000..d6b44b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CreateListFromArrayLike.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBound = require('../helpers/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+var $push = callBound('Array.prototype.push');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
+module.exports = function CreateListFromArrayLike(obj) {
+ var elementTypes = arguments.length > 1
+ ? arguments[1]
+ : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ if (!IsArray(elementTypes)) {
+ throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+ }
+ var len = ToLength(Get(obj, 'length'));
+ var list = [];
+ var index = 0;
+ while (index < len) {
+ var indexName = ToString(index);
+ var next = Get(obj, indexName);
+ var nextType = Type(next);
+ if ($indexOf(elementTypes, nextType) < 0) {
+ throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+ }
+ $push(list, next);
+ index += 1;
+ }
+ return list;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/CreateMethodProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/CreateMethodProperty.js
new file mode 100644
index 0000000..5b599ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/CreateMethodProperty.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var newDesc = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ };
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ newDesc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/DateFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/Day.js b/node_modules/object.values/node_modules/es-abstract/2016/Day.js
new file mode 100644
index 0000000..00df813
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/Day.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return $floor(t / msPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/DayFromYear.js b/node_modules/object.values/node_modules/es-abstract/2016/DayFromYear.js
new file mode 100644
index 0000000..08dd5af
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/DayFromYear.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/DayWithinYear.js b/node_modules/object.values/node_modules/es-abstract/2016/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/DaysInYear.js b/node_modules/object.values/node_modules/es-abstract/2016/DaysInYear.js
new file mode 100644
index 0000000..db32251
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (mod(y, 4) !== 0) {
+ return 365;
+ }
+ if (mod(y, 100) !== 0) {
+ return 366;
+ }
+ if (mod(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/DefinePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2016/DefinePropertyOrThrow.js
new file mode 100644
index 0000000..7977f6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/DefinePropertyOrThrow.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var Desc = isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, desc) ? desc : ToPropertyDescriptor(desc);
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+ }
+
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/DeletePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2016/DeletePropertyOrThrow.js
new file mode 100644
index 0000000..b476817
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/DeletePropertyOrThrow.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ var success = delete O[P];
+ if (!success) {
+ throw new $TypeError('Attempt to delete property failed.');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/EnumerableOwnNames.js b/node_modules/object.values/node_modules/es-abstract/2016/EnumerableOwnNames.js
new file mode 100644
index 0000000..d068584
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/EnumerableOwnNames.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var keys = require('object-keys');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
+
+module.exports = function EnumerableOwnNames(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return keys(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/FromPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/FromPropertyDescriptor.js
new file mode 100644
index 0000000..5ec200e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/FromPropertyDescriptor.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ var obj = {};
+ if ('[[Value]]' in Desc) {
+ obj.value = Desc['[[Value]]'];
+ }
+ if ('[[Writable]]' in Desc) {
+ obj.writable = Desc['[[Writable]]'];
+ }
+ if ('[[Get]]' in Desc) {
+ obj.get = Desc['[[Get]]'];
+ }
+ if ('[[Set]]' in Desc) {
+ obj.set = Desc['[[Set]]'];
+ }
+ if ('[[Enumerable]]' in Desc) {
+ obj.enumerable = Desc['[[Enumerable]]'];
+ }
+ if ('[[Configurable]]' in Desc) {
+ obj.configurable = Desc['[[Configurable]]'];
+ }
+ return obj;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/Get.js b/node_modules/object.values/node_modules/es-abstract/2016/Get.js
new file mode 100644
index 0000000..5b9ad78
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/Get.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+/**
+ * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
+ * 1. Assert: Type(O) is Object.
+ * 2. Assert: IsPropertyKey(P) is true.
+ * 3. Return O.[[Get]](P, O).
+ */
+
+module.exports = function Get(O, P) {
+ // 7.3.1.1
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ // 7.3.1.2
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
+ }
+ // 7.3.1.3
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/GetIterator.js b/node_modules/object.values/node_modules/es-abstract/2016/GetIterator.js
new file mode 100644
index 0000000..7beddac
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/GetIterator.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, method) {
+ var actualMethod = method;
+ if (arguments.length < 2) {
+ actualMethod = getIteratorMethod(
+ {
+ AdvanceStringIndex: AdvanceStringIndex,
+ GetMethod: GetMethod,
+ IsArray: IsArray,
+ Type: Type
+ },
+ obj
+ );
+ }
+ var iterator = Call(actualMethod, obj);
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('iterator must return an object');
+ }
+
+ return iterator;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/GetMethod.js b/node_modules/object.values/node_modules/es-abstract/2016/GetMethod.js
new file mode 100644
index 0000000..aef8cbc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/GetMethod.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var IsPropertyKey = require('./IsPropertyKey');
+
+/**
+ * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let func be GetV(O, P).
+ * 3. ReturnIfAbrupt(func).
+ * 4. If func is either undefined or null, return undefined.
+ * 5. If IsCallable(func) is false, throw a TypeError exception.
+ * 6. Return func.
+ */
+
+module.exports = function GetMethod(O, P) {
+ // 7.3.9.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.9.2
+ var func = GetV(O, P);
+
+ // 7.3.9.4
+ if (func == null) {
+ return void 0;
+ }
+
+ // 7.3.9.5
+ if (!IsCallable(func)) {
+ throw new $TypeError(P + 'is not a function');
+ }
+
+ // 7.3.9.6
+ return func;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/GetOwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/2016/GetOwnPropertyKeys.js
new file mode 100644
index 0000000..8d7e5ee
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/GetOwnPropertyKeys.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
+var keys = require('object-keys');
+
+var esType = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+ if (esType(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (Type === 'Symbol') {
+ return $gOPS ? $gOPS(O) : [];
+ }
+ if (Type === 'String') {
+ if (!$gOPN) {
+ return keys(O);
+ }
+ return $gOPN(O);
+ }
+ throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js b/node_modules/object.values/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js
new file mode 100644
index 0000000..62da8fb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+ var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ if (!IsConstructor(constructor)) {
+ throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+ }
+ var proto = Get(constructor, 'prototype');
+ if (Type(proto) !== 'Object') {
+ if (!(constructor instanceof $Function)) {
+ // ignore other realms, for now
+ throw new $TypeError('cross-realm constructors not currently supported');
+ }
+ proto = intrinsic;
+ }
+ return proto;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/GetSubstitution.js b/node_modules/object.values/node_modules/es-abstract/2016/GetSubstitution.js
new file mode 100644
index 0000000..de41b01
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/GetSubstitution.js
@@ -0,0 +1,104 @@
+
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $parseInt = GetIntrinsic('%parseInt%');
+
+var inspect = require('object-inspect');
+
+var regexTester = require('../helpers/regexTester');
+var callBound = require('../helpers/callBound');
+var every = require('../helpers/every');
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+
+var IsArray = require('./IsArray');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var isStringOrHole = function (capture, index, arr) {
+ return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
+};
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, replacement) {
+ if (Type(matched) !== 'String') {
+ throw new $TypeError('Assertion failed: `matched` must be a String');
+ }
+ var matchLength = matched.length;
+
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `str` must be a String');
+ }
+ var stringLength = str.length;
+
+ if (!IsInteger(position) || position < 0 || position > stringLength) {
+ throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+ }
+
+ if (!IsArray(captures) || !every(captures, isStringOrHole)) {
+ throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures));
+ }
+
+ if (Type(replacement) !== 'String') {
+ throw new $TypeError('Assertion failed: `replacement` must be a String');
+ }
+
+ var tailPos = position + matchLength;
+ var m = captures.length;
+
+ var result = '';
+ for (var i = 0; i < replacement.length; i += 1) {
+ // if this is a $, and it's not the end of the replacement
+ var current = $charAt(replacement, i);
+ var isLast = (i + 1) >= replacement.length;
+ var nextIsLast = (i + 2) >= replacement.length;
+ if (current === '$' && !isLast) {
+ var next = $charAt(replacement, i + 1);
+ if (next === '$') {
+ result += '$';
+ i += 1;
+ } else if (next === '&') {
+ result += matched;
+ i += 1;
+ } else if (next === '`') {
+ result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+ i += 1;
+ } else if (next === "'") {
+ result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+ i += 1;
+ } else {
+ var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+ if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+ // $1 through $9, and not followed by a digit
+ var n = $parseInt(next, 10);
+ // if (n > m, impl-defined)
+ result += (n <= m && Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
+ i += 1;
+ } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+ // $00 through $99
+ var nn = next + nextNext;
+ var nnI = $parseInt(nn, 10) - 1;
+ // if nn === '00' or nn > m, impl-defined
+ result += (nn <= m && Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
+ i += 2;
+ } else {
+ result += '$';
+ }
+ }
+ } else {
+ // the final $, or else not a $
+ result += $charAt(replacement, i);
+ }
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/GetV.js b/node_modules/object.values/node_modules/es-abstract/2016/GetV.js
new file mode 100644
index 0000000..7b5139a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/GetV.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var ToObject = require('./ToObject');
+
+/**
+ * 7.3.2 GetV (V, P)
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let O be ToObject(V).
+ * 3. ReturnIfAbrupt(O).
+ * 4. Return O.[[Get]](P, V).
+ */
+
+module.exports = function GetV(V, P) {
+ // 7.3.2.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.2.2-3
+ var O = ToObject(V);
+
+ // 7.3.2.4
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/HasOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/HasOwnProperty.js
new file mode 100644
index 0000000..679059f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/HasOwnProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var has = require('has');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return has(O, P);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/HasProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/HasProperty.js
new file mode 100644
index 0000000..5f2d212
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/HasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/HourFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/HourFromTime.js
new file mode 100644
index 0000000..957ce32
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/HourFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return mod($floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/InLeapYear.js b/node_modules/object.values/node_modules/es-abstract/2016/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/InstanceofOperator.js b/node_modules/object.values/node_modules/es-abstract/2016/InstanceofOperator.js
new file mode 100644
index 0000000..ebd308c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/InstanceofOperator.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+ if (typeof instOfHandler !== 'undefined') {
+ return ToBoolean(Call(instOfHandler, C, [O]));
+ }
+ if (!IsCallable(C)) {
+ throw new $TypeError('`C` is not Callable');
+ }
+ return OrdinaryHasInstance(C, O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/Invoke.js b/node_modules/object.values/node_modules/es-abstract/2016/Invoke.js
new file mode 100644
index 0000000..769f0e3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/Invoke.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $arraySlice = require('../helpers/callBound')('Array.prototype.slice');
+
+var Call = require('./Call');
+var GetV = require('./GetV');
+var IsPropertyKey = require('./IsPropertyKey');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('P must be a Property Key');
+ }
+ var argumentsList = $arraySlice(arguments, 2);
+ var func = GetV(O, P);
+ return Call(func, O, argumentsList);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsAccessorDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/IsAccessorDescriptor.js
new file mode 100644
index 0000000..5139464
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsArray.js b/node_modules/object.values/node_modules/es-abstract/2016/IsArray.js
new file mode 100644
index 0000000..7b25f37
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsArray.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('../helpers/callBound')('Object.prototype.toString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
+
+module.exports = $Array.isArray || function IsArray(argument) {
+ return toStr(argument) === '[object Array]';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsCallable.js b/node_modules/object.values/node_modules/es-abstract/2016/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsConcatSpreadable.js b/node_modules/object.values/node_modules/es-abstract/2016/IsConcatSpreadable.js
new file mode 100644
index 0000000..dc8aae1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsConcatSpreadable.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ if ($isConcatSpreadable) {
+ var spreadable = Get(O, $isConcatSpreadable);
+ if (typeof spreadable !== 'undefined') {
+ return ToBoolean(spreadable);
+ }
+ }
+ return IsArray(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsConstructor.js b/node_modules/object.values/node_modules/es-abstract/2016/IsConstructor.js
new file mode 100644
index 0000000..00ea52c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsConstructor.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
+
+module.exports = function IsConstructor(argument) {
+ return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsDataDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/IsDataDescriptor.js
new file mode 100644
index 0000000..0ad3045
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsExtensible.js b/node_modules/object.values/node_modules/es-abstract/2016/IsExtensible.js
new file mode 100644
index 0000000..0c4c8a6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsExtensible.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $preventExtensions = $Object.preventExtensions;
+var $isExtensible = $Object.isExtensible;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+ ? function IsExtensible(obj) {
+ return !isPrimitive(obj) && $isExtensible(obj);
+ }
+ : function IsExtensible(obj) {
+ return !isPrimitive(obj);
+ };
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsGenericDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/IsGenericDescriptor.js
new file mode 100644
index 0000000..8618ce4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsInteger.js b/node_modules/object.values/node_modules/es-abstract/2016/IsInteger.js
new file mode 100644
index 0000000..0f488b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsInteger.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
+
+module.exports = function IsInteger(argument) {
+ if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
+ return false;
+ }
+ var abs = $abs(argument);
+ return $floor(abs) === abs;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsPromise.js b/node_modules/object.values/node_modules/es-abstract/2016/IsPromise.js
new file mode 100644
index 0000000..e8e92a2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsPromise.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+ if (Type(x) !== 'Object') {
+ return false;
+ }
+ if (!$PromiseThen) { // Promises are not supported
+ return false;
+ }
+ try {
+ $PromiseThen(x); // throws if not a promise
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/IsPropertyDescriptor.js
new file mode 100644
index 0000000..2a96c63
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsPropertyDescriptor.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function IsPropertyDescriptor(Desc) {
+ return isPropertyDescriptor({
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor,
+ Type: Type
+ }, Desc);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2016/IsPropertyKey.js
new file mode 100644
index 0000000..74b8d95
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsPropertyKey.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+ return typeof argument === 'string' || typeof argument === 'symbol';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IsRegExp.js b/node_modules/object.values/node_modules/es-abstract/2016/IsRegExp.js
new file mode 100644
index 0000000..fdf2323
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IsRegExp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+ if (!argument || typeof argument !== 'object') {
+ return false;
+ }
+ if ($match) {
+ var isRegExp = argument[$match];
+ if (typeof isRegExp !== 'undefined') {
+ return ToBoolean(isRegExp);
+ }
+ }
+ return hasRegExpMatcher(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IterableToArrayLike.js b/node_modules/object.values/node_modules/es-abstract/2016/IterableToArrayLike.js
new file mode 100644
index 0000000..2f26159
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IterableToArrayLike.js
@@ -0,0 +1,74 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $iterator = GetIntrinsic('%Symbol.iterator%', true);
+
+var callBound = require('../helpers/callBound');
+
+var $arrayJoin = callBound('Array.prototype.join');
+var $arrayPush = callBound('Array.prototype.push');
+var $stringSlice = callBound('String.prototype.slice');
+var $stringSplit = callBound('String.prototype.split');
+
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var GetIterator = require('./GetIterator');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+var ToObject = require('./ToObject');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/7.0/#sec-iterabletoarraylike
+
+module.exports = function IterableToArrayLike(items) {
+ var usingIterator;
+ if ($iterator) {
+ usingIterator = GetMethod(items, $iterator);
+ } else if (IsArray(items)) {
+ usingIterator = function () {
+ var i = -1;
+ var arr = this; // eslint-disable-line no-invalid-this
+ return {
+ next: function () {
+ i += 1;
+ return {
+ done: i >= arr.length,
+ value: arr[i]
+ };
+ }
+ };
+ };
+ } else if (Type(items) === 'String') {
+ usingIterator = function () {
+ var i = 0;
+ return {
+ next: function () {
+ var nextIndex = AdvanceStringIndex(items, i, true);
+ var value = $arrayJoin($stringSplit($stringSlice(items, i, nextIndex), ''), '');
+ i = nextIndex;
+ return {
+ done: nextIndex > items.length,
+ value: value
+ };
+ }
+ };
+ };
+ }
+ if (typeof usingIterator !== 'undefined') {
+ var iterator = GetIterator(items, usingIterator);
+ var values = [];
+ var next = true;
+ while (next) {
+ next = IteratorStep(iterator);
+ if (next) {
+ var nextValue = IteratorValue(next);
+ $arrayPush(values, nextValue);
+ }
+ }
+ return values;
+ }
+
+ return ToObject(items);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IteratorClose.js b/node_modules/object.values/node_modules/es-abstract/2016/IteratorClose.js
new file mode 100644
index 0000000..35c8c2b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IteratorClose.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+ }
+ if (!IsCallable(completion)) {
+ throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
+ }
+ var completionThunk = completion;
+
+ var iteratorReturn = GetMethod(iterator, 'return');
+
+ if (typeof iteratorReturn === 'undefined') {
+ return completionThunk();
+ }
+
+ var completionRecord;
+ try {
+ var innerResult = Call(iteratorReturn, iterator, []);
+ } catch (e) {
+ // if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+ // if the completion is of type "throw", this will throw.
+ completionThunk();
+ completionThunk = null; // ensure it's not called twice.
+
+ // if not, then return the innerResult completion
+ throw e;
+ }
+ completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+ completionThunk = null; // ensure it's not called twice.
+
+ if (Type(innerResult) !== 'Object') {
+ throw new $TypeError('iterator .return must return an object');
+ }
+
+ return completionRecord;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IteratorComplete.js b/node_modules/object.values/node_modules/es-abstract/2016/IteratorComplete.js
new file mode 100644
index 0000000..a62b9bf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IteratorComplete.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return ToBoolean(Get(iterResult, 'done'));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IteratorNext.js b/node_modules/object.values/node_modules/es-abstract/2016/IteratorNext.js
new file mode 100644
index 0000000..7e59915
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IteratorNext.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Invoke = require('./Invoke');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+ var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+ if (Type(result) !== 'Object') {
+ throw new $TypeError('iterator next must return an object');
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IteratorStep.js b/node_modules/object.values/node_modules/es-abstract/2016/IteratorStep.js
new file mode 100644
index 0000000..41b9d1b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IteratorStep.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+ var result = IteratorNext(iterator);
+ var done = IteratorComplete(result);
+ return done === true ? false : result;
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/IteratorValue.js b/node_modules/object.values/node_modules/es-abstract/2016/IteratorValue.js
new file mode 100644
index 0000000..5e71a44
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/IteratorValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return Get(iterResult, 'value');
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/MakeDate.js b/node_modules/object.values/node_modules/es-abstract/2016/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/MakeDay.js b/node_modules/object.values/node_modules/es-abstract/2016/MakeDay.js
new file mode 100644
index 0000000..f1ab810
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var mod = require('../helpers/mod');
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + $floor(m / 12);
+ var mn = mod(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/MakeTime.js b/node_modules/object.values/node_modules/es-abstract/2016/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/MinFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/MinFromTime.js
new file mode 100644
index 0000000..e80e191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/MinFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return mod($floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/MonthFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ObjectCreate.js b/node_modules/object.values/node_modules/es-abstract/2016/ObjectCreate.js
new file mode 100644
index 0000000..e2445b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ObjectCreate.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var Type = require('./Type');
+
+var hasProto = !({ __proto__: null } instanceof Object);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
+
+module.exports = function ObjectCreate(proto, internalSlotsList) {
+ if (proto !== null && Type(proto) !== 'Object') {
+ throw new $TypeError('Assertion failed: `proto` must be null or an object');
+ }
+ var slots = arguments.length < 2 ? [] : internalSlotsList;
+ if (slots.length > 0) {
+ throw new $SyntaxError('es-abstract does not yet support internal slots');
+ }
+
+ if ($ObjectCreate) {
+ return $ObjectCreate(proto);
+ }
+ if (hasProto) {
+ return { __proto__: proto };
+ }
+
+ if (proto === null) {
+ throw new $SyntaxError('native Object.create support is required to create null objects');
+ }
+ var T = function T() {};
+ T.prototype = proto;
+ return new T();
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js
new file mode 100644
index 0000000..59780b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js
@@ -0,0 +1,61 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!$gOPD) {
+ // ES3/IE 8 fallback
+ if (IsAccessorDescriptor(Desc)) {
+ throw new $SyntaxError('This environment does not support accessor property descriptors.');
+ }
+ var creatingNormalDataProperty = !(P in O)
+ && Desc['[[Writable]]']
+ && Desc['[[Enumerable]]']
+ && Desc['[[Configurable]]']
+ && '[[Value]]' in Desc;
+ var settingExistingDataProperty = (P in O)
+ && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+ && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+ && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+ && '[[Value]]' in Desc;
+ if (creatingNormalDataProperty || settingExistingDataProperty) {
+ O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+ return SameValue(O[P], Desc['[[Value]]']);
+ }
+ throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+ }
+ var desc = $gOPD(O, P);
+ var current = desc && ToPropertyDescriptor(desc);
+ var extensible = IsExtensible(O);
+ return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js
new file mode 100644
index 0000000..b9882e5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var has = require('has');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!has(O, P)) {
+ return void 0;
+ }
+ if (!$gOPD) {
+ // ES3 / IE 8 fallback
+ var arrayLength = IsArray(O) && P === 'length';
+ var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+ return {
+ '[[Configurable]]': !(arrayLength || regexLastIndex),
+ '[[Enumerable]]': $isEnumerable(O, P),
+ '[[Value]]': O[P],
+ '[[Writable]]': true
+ };
+ }
+ return ToPropertyDescriptor($gOPD(O, P));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js
new file mode 100644
index 0000000..344077a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $getProto = require('../helpers/getProto');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!$getProto) {
+ throw new $TypeError('This environment does not support fetching prototypes.');
+ }
+ return $getProto(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryHasInstance.js b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryHasInstance.js
new file mode 100644
index 0000000..51abe26
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryHasInstance.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+ if (IsCallable(C) === false) {
+ return false;
+ }
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ var P = Get(C, 'prototype');
+ if (Type(P) !== 'Object') {
+ throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return O instanceof C;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryHasProperty.js b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryHasProperty.js
new file mode 100644
index 0000000..076c25a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/OrdinaryHasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js
new file mode 100644
index 0000000..3541331
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $setProto = require('../helpers/setProto');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+ if (Type(V) !== 'Object' && Type(V) !== 'Null') {
+ throw new $TypeError('Assertion failed: V must be Object or Null');
+ }
+ /*
+ var extensible = IsExtensible(O);
+ var current = OrdinaryGetPrototypeOf(O);
+ if (SameValue(V, current)) {
+ return true;
+ }
+ if (!extensible) {
+ return false;
+ }
+ */
+ try {
+ $setProto(O, V);
+ } catch (e) {
+ return false;
+ }
+ return OrdinaryGetPrototypeOf(O) === V;
+ /*
+ var p = V;
+ var done = false;
+ while (!done) {
+ if (p === null) {
+ done = true;
+ } else if (SameValue(p, O)) {
+ return false;
+ } else {
+ if (wat) {
+ done = true;
+ } else {
+ p = p.[[Prototype]];
+ }
+ }
+ }
+ O.[[Prototype]] = V;
+ return true;
+ */
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/RegExpExec.js b/node_modules/object.values/node_modules/es-abstract/2016/RegExpExec.js
new file mode 100644
index 0000000..15c9186
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/RegExpExec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var regexExec = require('../helpers/callBound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+ if (Type(R) !== 'Object') {
+ throw new $TypeError('Assertion failed: `R` must be an Object');
+ }
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ var exec = Get(R, 'exec');
+ if (IsCallable(exec)) {
+ var result = Call(exec, R, [S]);
+ if (result === null || Type(result) === 'Object') {
+ return result;
+ }
+ throw new $TypeError('"exec" method must return `null` or an Object');
+ }
+ return regexExec(R, S);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/RequireObjectCoercible.js b/node_modules/object.values/node_modules/es-abstract/2016/RequireObjectCoercible.js
new file mode 100644
index 0000000..9008359
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/RequireObjectCoercible.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../5/CheckObjectCoercible');
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SameValue.js b/node_modules/object.values/node_modules/es-abstract/2016/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SameValueNonNumber.js b/node_modules/object.values/node_modules/es-abstract/2016/SameValueNonNumber.js
new file mode 100644
index 0000000..5668752
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SameValueNonNumber.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+
+// https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
+
+module.exports = function SameValueNonNumber(x, y) {
+ if (typeof x === 'number' || typeof x !== typeof y) {
+ throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.');
+ }
+ return SameValue(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SameValueZero.js b/node_modules/object.values/node_modules/es-abstract/2016/SameValueZero.js
new file mode 100644
index 0000000..0dedcd2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SameValueZero.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+ return (x === y) || ($isNaN(x) && $isNaN(y));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SecFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/SecFromTime.js
new file mode 100644
index 0000000..7190011
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SecFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return mod($floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/Set.js b/node_modules/object.values/node_modules/es-abstract/2016/Set.js
new file mode 100644
index 0000000..18ebd99
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/Set.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ if (Type(Throw) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+ }
+ if (Throw) {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return true;
+ } else {
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ } catch (e) {
+ return false;
+ }
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SetFunctionName.js b/node_modules/object.values/node_modules/es-abstract/2016/SetFunctionName.js
new file mode 100644
index 0000000..f93324a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SetFunctionName.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getSymbolDescription = require('../helpers/getSymbolDescription');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+ if (typeof F !== 'function') {
+ throw new $TypeError('Assertion failed: `F` must be a function');
+ }
+ if (!IsExtensible(F) || has(F, 'name')) {
+ throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+ }
+ var nameType = Type(name);
+ if (nameType !== 'Symbol' && nameType !== 'String') {
+ throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+ }
+ if (nameType === 'Symbol') {
+ var description = getSymbolDescription(name);
+ // eslint-disable-next-line no-param-reassign
+ name = typeof description === 'undefined' ? '' : '[' + description + ']';
+ }
+ if (arguments.length > 2) {
+ var prefix = arguments[2];
+ // eslint-disable-next-line no-param-reassign
+ name = prefix + ' ' + name;
+ }
+ return DefinePropertyOrThrow(F, 'name', {
+ '[[Value]]': name,
+ '[[Writable]]': false,
+ '[[Enumerable]]': false,
+ '[[Configurable]]': true
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SetIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2016/SetIntegrityLevel.js
new file mode 100644
index 0000000..3d5c81d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SetIntegrityLevel.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ if (!$preventExtensions) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+ }
+ var status = $preventExtensions(O);
+ if (!status) {
+ return false;
+ }
+ if (!$gOPN) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+ }
+ var theKeys = $gOPN(O);
+ if (level === 'sealed') {
+ forEach(theKeys, function (k) {
+ DefinePropertyOrThrow(O, k, { configurable: false });
+ });
+ } else if (level === 'frozen') {
+ forEach(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ var desc;
+ if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+ desc = { configurable: false };
+ } else {
+ desc = { configurable: false, writable: false };
+ }
+ DefinePropertyOrThrow(O, k, desc);
+ }
+ });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SpeciesConstructor.js b/node_modules/object.values/node_modules/es-abstract/2016/SpeciesConstructor.js
new file mode 100644
index 0000000..3cdcd74
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SpeciesConstructor.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var C = O.constructor;
+ if (typeof C === 'undefined') {
+ return defaultConstructor;
+ }
+ if (Type(C) !== 'Object') {
+ throw new $TypeError('O.constructor is not an Object');
+ }
+ var S = $species ? C[$species] : void 0;
+ if (S == null) {
+ return defaultConstructor;
+ }
+ if (IsConstructor(S)) {
+ return S;
+ }
+ throw new $TypeError('no constructor found');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/StrictEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2016/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/SymbolDescriptiveString.js b/node_modules/object.values/node_modules/es-abstract/2016/SymbolDescriptiveString.js
new file mode 100644
index 0000000..7bd8191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/SymbolDescriptiveString.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+ if (Type(sym) !== 'Symbol') {
+ throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+ }
+ return $SymbolToString(sym);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/TestIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2016/TestIntegrityLevel.js
new file mode 100644
index 0000000..7a57397
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/TestIntegrityLevel.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var every = require('../helpers/every');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ var status = IsExtensible(O);
+ if (status) {
+ return false;
+ }
+ var theKeys = $gOPN(O);
+ return theKeys.length === 0 || every(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ if (currentDesc.configurable) {
+ return false;
+ }
+ if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+ return false;
+ }
+ }
+ return true;
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/TimeClip.js b/node_modules/object.values/node_modules/es-abstract/2016/TimeClip.js
new file mode 100644
index 0000000..57aa08c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+var $abs = GetIntrinsic('%Math.abs%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || $abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/TimeFromYear.js b/node_modules/object.values/node_modules/es-abstract/2016/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/TimeWithinDay.js b/node_modules/object.values/node_modules/es-abstract/2016/TimeWithinDay.js
new file mode 100644
index 0000000..c5b21d3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/TimeWithinDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return mod(t, msPerDay);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToBoolean.js b/node_modules/object.values/node_modules/es-abstract/2016/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToDateString.js b/node_modules/object.values/node_modules/es-abstract/2016/ToDateString.js
new file mode 100644
index 0000000..7a6d4c4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToDateString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Date = GetIntrinsic('%Date%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+ if (Type(tv) !== 'Number') {
+ throw new $TypeError('Assertion failed: `tv` must be a Number');
+ }
+ if ($isNaN(tv)) {
+ return 'Invalid Date';
+ }
+ return $Date(tv);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToInt16.js b/node_modules/object.values/node_modules/es-abstract/2016/ToInt16.js
new file mode 100644
index 0000000..5a112c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToInt16.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+ var int16bit = ToUint16(argument);
+ return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToInt32.js b/node_modules/object.values/node_modules/es-abstract/2016/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToInt8.js b/node_modules/object.values/node_modules/es-abstract/2016/ToInt8.js
new file mode 100644
index 0000000..d103123
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToInt8.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+ var int8bit = ToUint8(argument);
+ return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToInteger.js b/node_modules/object.values/node_modules/es-abstract/2016/ToInteger.js
new file mode 100644
index 0000000..16f7db9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToInteger.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ return ES5ToInteger(number);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToLength.js b/node_modules/object.values/node_modules/es-abstract/2016/ToLength.js
new file mode 100644
index 0000000..1bef9be
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToLength.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var ToInteger = require('./ToInteger');
+
+module.exports = function ToLength(argument) {
+ var len = ToInteger(argument);
+ if (len <= 0) { return 0; } // includes converting -0 to +0
+ if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+ return len;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToNumber.js b/node_modules/object.values/node_modules/es-abstract/2016/ToNumber.js
new file mode 100644
index 0000000..7a3cdc8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToNumber.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+// whitespace from: https://es5.github.io/#x15.5.4.20
+// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+var ws = [
+ '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
+ '\u2029\uFEFF'
+].join('');
+var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
+var $replace = callBound('String.prototype.replace');
+var $trim = function (value) {
+ return $replace(value, trimRegex, '');
+};
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+ var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (typeof value === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a number');
+ }
+ if (typeof value === 'string') {
+ if (isBinary(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 2));
+ } else if (isOctal(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 8));
+ } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+ return NaN;
+ } else {
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+ }
+ }
+ return $Number(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToObject.js b/node_modules/object.values/node_modules/es-abstract/2016/ToObject.js
new file mode 100644
index 0000000..50d5b94
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
+
+module.exports = function ToObject(value) {
+ RequireObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToPrimitive.js b/node_modules/object.values/node_modules/es-abstract/2016/ToPrimitive.js
new file mode 100644
index 0000000..81c655d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToPrimitive.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+ if (arguments.length > 1) {
+ return toPrimitive(input, arguments[1]);
+ }
+ return toPrimitive(input);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/ToPropertyDescriptor.js
new file mode 100644
index 0000000..38e536e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2016/ToPropertyKey.js
new file mode 100644
index 0000000..38f40dd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToPropertyKey.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+ var key = ToPrimitive(argument, $String);
+ return typeof key === 'symbol' ? key : ToString(key);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToString.js b/node_modules/object.values/node_modules/es-abstract/2016/ToString.js
new file mode 100644
index 0000000..a345431
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToString.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+ if (typeof argument === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a string');
+ }
+ return $String(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToUint16.js b/node_modules/object.values/node_modules/es-abstract/2016/ToUint16.js
new file mode 100644
index 0000000..c8a408b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToUint16.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x10000);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToUint32.js b/node_modules/object.values/node_modules/es-abstract/2016/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToUint8.js b/node_modules/object.values/node_modules/es-abstract/2016/ToUint8.js
new file mode 100644
index 0000000..bf84753
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToUint8.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+module.exports = function ToUint8(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x100);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ToUint8Clamp.js b/node_modules/object.values/node_modules/es-abstract/2016/ToUint8Clamp.js
new file mode 100644
index 0000000..c7f9f56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ToUint8Clamp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+
+var $floor = $Math.floor;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number <= 0) { return 0; }
+ if (number >= 0xFF) { return 0xFF; }
+ var f = $floor(argument);
+ if (f + 0.5 < number) { return f + 1; }
+ if (number < f + 0.5) { return f; }
+ if (f % 2 !== 0) { return f + 1; }
+ return f;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/Type.js b/node_modules/object.values/node_modules/es-abstract/2016/Type.js
new file mode 100644
index 0000000..6c99376
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/Type.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function Type(x) {
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ return ES5Type(x);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js
new file mode 100644
index 0000000..d4b9007
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js
@@ -0,0 +1,170 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
+// https://www.ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements, max-params
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+ // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+ var oType = Type(O);
+ if (oType !== 'Undefined' && oType !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be undefined or an Object');
+ }
+ if (Type(extensible) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: extensible must be a Boolean');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (Type(current) !== 'Undefined' && !isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, current)) {
+ throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+ }
+ if (oType !== 'Undefined' && !IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+ }
+ if (Type(current) === 'Undefined') {
+ if (!extensible) {
+ return false;
+ }
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': Desc['[[Configurable]]'],
+ '[[Enumerable]]': Desc['[[Enumerable]]'],
+ '[[Value]]': Desc['[[Value]]'],
+ '[[Writable]]': Desc['[[Writable]]']
+ }
+ );
+ }
+ } else {
+ if (!IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ }
+ return true;
+ }
+ if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+ return true;
+ }
+ if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+ return true; // removed by ES2017, but should still be correct
+ }
+ // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+ if (!current['[[Configurable]]']) {
+ if (Desc['[[Configurable]]']) {
+ return false;
+ }
+ if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+ return false;
+ }
+ }
+ if (IsGenericDescriptor(Desc)) {
+ // no further validation is required.
+ } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ return false;
+ }
+ if (IsDataDescriptor(current)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Get]]': undefined
+ }
+ );
+ }
+ } else if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Value]]': undefined
+ }
+ );
+ }
+ } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+ if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+ return false;
+ }
+ if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+ return false;
+ }
+ if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else {
+ throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/WeekDay.js b/node_modules/object.values/node_modules/es-abstract/2016/WeekDay.js
new file mode 100644
index 0000000..2973e02
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/WeekDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+var Day = require('./Day');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/YearFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/modulo.js b/node_modules/object.values/node_modules/es-abstract/2016/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/msFromTime.js b/node_modules/object.values/node_modules/es-abstract/2016/msFromTime.js
new file mode 100644
index 0000000..c31eda0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/msFromTime.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return mod(t, msPerSecond);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/thisBooleanValue.js b/node_modules/object.values/node_modules/es-abstract/2016/thisBooleanValue.js
new file mode 100644
index 0000000..3ffac9c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/thisBooleanValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $BooleanValueOf = require('../helpers/callBound')('Boolean.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+ if (Type(value) === 'Boolean') {
+ return value;
+ }
+
+ return $BooleanValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/thisNumberValue.js b/node_modules/object.values/node_modules/es-abstract/2016/thisNumberValue.js
new file mode 100644
index 0000000..0345e52
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/thisNumberValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var Type = require('./Type');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+ if (Type(value) === 'Number') {
+ return value;
+ }
+
+ return $NumberValueOf(value);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/thisStringValue.js b/node_modules/object.values/node_modules/es-abstract/2016/thisStringValue.js
new file mode 100644
index 0000000..3b99b6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/thisStringValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $StringValueOf = require('../helpers/callBound')('String.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+ if (Type(value) === 'String') {
+ return value;
+ }
+
+ return $StringValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2016/thisTimeValue.js b/node_modules/object.values/node_modules/es-abstract/2016/thisTimeValue.js
new file mode 100644
index 0000000..d7cda28
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2016/thisTimeValue.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $DateValueOf = require('../helpers/callBound')('Date.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
+
+module.exports = function thisTimeValue(value) {
+ return $DateValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/AbstractEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2017/AbstractEqualityComparison.js
new file mode 100644
index 0000000..40b3909
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/AbstractRelationalComparison.js b/node_modules/object.values/node_modules/es-abstract/2017/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/AdvanceStringIndex.js b/node_modules/object.values/node_modules/es-abstract/2017/AdvanceStringIndex.js
new file mode 100644
index 0000000..666f578
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/AdvanceStringIndex.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+ throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+ }
+ if (Type(unicode) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+ }
+ if (!unicode) {
+ return index + 1;
+ }
+ var length = S.length;
+ if ((index + 1) >= length) {
+ return index + 1;
+ }
+
+ var first = $charCodeAt(S, index);
+ if (first < 0xD800 || first > 0xDBFF) {
+ return index + 1;
+ }
+
+ var second = $charCodeAt(S, index + 1);
+ if (second < 0xDC00 || second > 0xDFFF) {
+ return index + 1;
+ }
+
+ return index + 2;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ArrayCreate.js b/node_modules/object.values/node_modules/es-abstract/2017/ArrayCreate.js
new file mode 100644
index 0000000..fc9a7cf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ArrayCreate.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsInteger = require('./IsInteger');
+
+var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+
+var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayPrototype
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+ }
+ if (length > MAX_ARRAY_LENGTH) {
+ throw new $RangeError('length is greater than (2**32 - 1)');
+ }
+ var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+ var A = []; // steps 5 - 7, and 9
+ if (proto !== $ArrayPrototype) { // step 8
+ if (!$setProto) {
+ throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ $setProto(A, proto);
+ }
+ if (length !== 0) { // bypasses the need for step 2
+ A.length = length;
+ }
+ /* step 10, the above as a shortcut for the below
+ OrdinaryDefineOwnProperty(A, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': true
+ });
+ */
+ return A;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ArraySetLength.js b/node_modules/object.values/node_modules/es-abstract/2017/ArraySetLength.js
new file mode 100644
index 0000000..c9134c6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ArraySetLength.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsArray = require('./IsArray');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+ if (!IsArray(A)) {
+ throw new $TypeError('Assertion failed: A must be an Array');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!('[[Value]]' in Desc)) {
+ return OrdinaryDefineOwnProperty(A, 'length', Desc);
+ }
+ var newLenDesc = assign({}, Desc);
+ var newLen = ToUint32(Desc['[[Value]]']);
+ var numberLen = ToNumber(Desc['[[Value]]']);
+ if (newLen !== numberLen) {
+ throw new $RangeError('Invalid array length');
+ }
+ newLenDesc['[[Value]]'] = newLen;
+ var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+ if (!IsDataDescriptor(oldLenDesc)) {
+ throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+ }
+ var oldLen = oldLenDesc['[[Value]]'];
+ if (newLen >= oldLen) {
+ return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ }
+ if (!oldLenDesc['[[Writable]]']) {
+ return false;
+ }
+ var newWritable;
+ if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+ newWritable = true;
+ } else {
+ newWritable = false;
+ newLenDesc['[[Writable]]'] = true;
+ }
+ var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ if (!succeeded) {
+ return false;
+ }
+ while (newLen < oldLen) {
+ oldLen -= 1;
+ // eslint-disable-next-line no-param-reassign
+ var deleteSucceeded = delete A[ToString(oldLen)];
+ if (!deleteSucceeded) {
+ newLenDesc['[[Value]]'] = oldLen + 1;
+ if (!newWritable) {
+ newLenDesc['[[Writable]]'] = false;
+ OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ return false;
+ }
+ }
+ }
+ if (!newWritable) {
+ return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ArraySpeciesCreate.js b/node_modules/object.values/node_modules/es-abstract/2017/ArraySpeciesCreate.js
new file mode 100644
index 0000000..98b9b56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ArraySpeciesCreate.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: length must be an integer >= 0');
+ }
+ var len = length === 0 ? 0 : length;
+ var C;
+ var isArray = IsArray(originalArray);
+ if (isArray) {
+ C = Get(originalArray, 'constructor');
+ // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+ // if (IsConstructor(C)) {
+ // if C is another realm's Array, C = undefined
+ // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+ // }
+ if ($species && Type(C) === 'Object') {
+ C = Get(C, $species);
+ if (C === null) {
+ C = void 0;
+ }
+ }
+ }
+ if (typeof C === 'undefined') {
+ return $Array(len);
+ }
+ if (!IsConstructor(C)) {
+ throw new $TypeError('C must be a constructor');
+ }
+ return new C(len); // Construct(C, len);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/Call.js b/node_modules/object.values/node_modules/es-abstract/2017/Call.js
new file mode 100644
index 0000000..f31960d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/Call.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsCallable = require('./IsCallable');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+ var args = arguments.length > 2 ? arguments[2] : [];
+ if (!IsCallable(F)) {
+ throw new $TypeError(inspect(F) + ' is not a function');
+ }
+ return F.apply(V, args);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CanonicalNumericIndexString.js b/node_modules/object.values/node_modules/es-abstract/2017/CanonicalNumericIndexString.js
new file mode 100644
index 0000000..625f853
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CanonicalNumericIndexString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+ if (Type(argument) !== 'String') {
+ throw new $TypeError('Assertion failed: `argument` must be a String');
+ }
+ if (argument === '-0') { return -0; }
+ var n = ToNumber(argument);
+ if (SameValue(ToString(n), argument)) { return n; }
+ return void 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CompletePropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/CompletePropertyDescriptor.js
new file mode 100644
index 0000000..548bf41
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CompletePropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+ /* eslint no-param-reassign: 0 */
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (!has(Desc, '[[Value]]')) {
+ Desc['[[Value]]'] = void 0;
+ }
+ if (!has(Desc, '[[Writable]]')) {
+ Desc['[[Writable]]'] = false;
+ }
+ } else {
+ if (!has(Desc, '[[Get]]')) {
+ Desc['[[Get]]'] = void 0;
+ }
+ if (!has(Desc, '[[Set]]')) {
+ Desc['[[Set]]'] = void 0;
+ }
+ }
+ if (!has(Desc, '[[Enumerable]]')) {
+ Desc['[[Enumerable]]'] = false;
+ }
+ if (!has(Desc, '[[Configurable]]')) {
+ Desc['[[Configurable]]'] = false;
+ }
+ return Desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CreateDataProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/CreateDataProperty.js
new file mode 100644
index 0000000..32a86ef
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CreateDataProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var oldDesc = OrdinaryGetOwnProperty(O, P);
+ var extensible = !oldDesc || IsExtensible(O);
+ var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
+ if (immutable || !extensible) {
+ return false;
+ }
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ }
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js
new file mode 100644
index 0000000..9feaec8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var CreateDataProperty = require('./CreateDataProperty');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var success = CreateDataProperty(O, P, V);
+ if (!success) {
+ throw new $TypeError('unable to create data property');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CreateHTML.js b/node_modules/object.values/node_modules/es-abstract/2017/CreateHTML.js
new file mode 100644
index 0000000..536c92d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CreateHTML.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+ if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+ throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+ }
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var p1 = '<' + tag;
+ if (attribute !== '') {
+ var V = ToString(value);
+ var escapedV = $replace(V, /\x22/g, '"');
+ p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+ }
+ return p1 + '>' + S + '</' + tag + '>';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CreateIterResultObject.js b/node_modules/object.values/node_modules/es-abstract/2017/CreateIterResultObject.js
new file mode 100644
index 0000000..aef1d22
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CreateIterResultObject.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+ if (Type(done) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+ }
+ return {
+ value: value,
+ done: done
+ };
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CreateListFromArrayLike.js b/node_modules/object.values/node_modules/es-abstract/2017/CreateListFromArrayLike.js
new file mode 100644
index 0000000..d6b44b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CreateListFromArrayLike.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBound = require('../helpers/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+var $push = callBound('Array.prototype.push');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
+module.exports = function CreateListFromArrayLike(obj) {
+ var elementTypes = arguments.length > 1
+ ? arguments[1]
+ : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ if (!IsArray(elementTypes)) {
+ throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+ }
+ var len = ToLength(Get(obj, 'length'));
+ var list = [];
+ var index = 0;
+ while (index < len) {
+ var indexName = ToString(index);
+ var next = Get(obj, indexName);
+ var nextType = Type(next);
+ if ($indexOf(elementTypes, nextType) < 0) {
+ throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+ }
+ $push(list, next);
+ index += 1;
+ }
+ return list;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/CreateMethodProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/CreateMethodProperty.js
new file mode 100644
index 0000000..5b599ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/CreateMethodProperty.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var newDesc = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ };
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ newDesc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/DateFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/Day.js b/node_modules/object.values/node_modules/es-abstract/2017/Day.js
new file mode 100644
index 0000000..00df813
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/Day.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return $floor(t / msPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/DayFromYear.js b/node_modules/object.values/node_modules/es-abstract/2017/DayFromYear.js
new file mode 100644
index 0000000..08dd5af
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/DayFromYear.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/DayWithinYear.js b/node_modules/object.values/node_modules/es-abstract/2017/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/DaysInYear.js b/node_modules/object.values/node_modules/es-abstract/2017/DaysInYear.js
new file mode 100644
index 0000000..db32251
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (mod(y, 4) !== 0) {
+ return 365;
+ }
+ if (mod(y, 100) !== 0) {
+ return 366;
+ }
+ if (mod(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/DefinePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2017/DefinePropertyOrThrow.js
new file mode 100644
index 0000000..7977f6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/DefinePropertyOrThrow.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var Desc = isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, desc) ? desc : ToPropertyDescriptor(desc);
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+ }
+
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/DeletePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2017/DeletePropertyOrThrow.js
new file mode 100644
index 0000000..b476817
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/DeletePropertyOrThrow.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ var success = delete O[P];
+ if (!success) {
+ throw new $TypeError('Attempt to delete property failed.');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/EnumerableOwnProperties.js b/node_modules/object.values/node_modules/es-abstract/2017/EnumerableOwnProperties.js
new file mode 100644
index 0000000..e2ed722
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/EnumerableOwnProperties.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var objectKeys = require('object-keys');
+
+var callBound = require('../helpers/callBound');
+
+var callBind = require('../helpers/callBind');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
+
+var forEach = require('../helpers/forEach');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties
+
+module.exports = function EnumerableOwnProperties(O, kind) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ var keys = objectKeys(O);
+ if (kind === 'key') {
+ return keys;
+ }
+ if (kind === 'value' || kind === 'key+value') {
+ var results = [];
+ forEach(keys, function (key) {
+ if ($isEnumerable(O, key)) {
+ $pushApply(results, [
+ kind === 'value' ? O[key] : [key, O[key]]
+ ]);
+ }
+ });
+ return results;
+ }
+ throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/FromPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/FromPropertyDescriptor.js
new file mode 100644
index 0000000..5ec200e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/FromPropertyDescriptor.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ var obj = {};
+ if ('[[Value]]' in Desc) {
+ obj.value = Desc['[[Value]]'];
+ }
+ if ('[[Writable]]' in Desc) {
+ obj.writable = Desc['[[Writable]]'];
+ }
+ if ('[[Get]]' in Desc) {
+ obj.get = Desc['[[Get]]'];
+ }
+ if ('[[Set]]' in Desc) {
+ obj.set = Desc['[[Set]]'];
+ }
+ if ('[[Enumerable]]' in Desc) {
+ obj.enumerable = Desc['[[Enumerable]]'];
+ }
+ if ('[[Configurable]]' in Desc) {
+ obj.configurable = Desc['[[Configurable]]'];
+ }
+ return obj;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/Get.js b/node_modules/object.values/node_modules/es-abstract/2017/Get.js
new file mode 100644
index 0000000..5b9ad78
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/Get.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+/**
+ * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
+ * 1. Assert: Type(O) is Object.
+ * 2. Assert: IsPropertyKey(P) is true.
+ * 3. Return O.[[Get]](P, O).
+ */
+
+module.exports = function Get(O, P) {
+ // 7.3.1.1
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ // 7.3.1.2
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
+ }
+ // 7.3.1.3
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/GetIterator.js b/node_modules/object.values/node_modules/es-abstract/2017/GetIterator.js
new file mode 100644
index 0000000..7beddac
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/GetIterator.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, method) {
+ var actualMethod = method;
+ if (arguments.length < 2) {
+ actualMethod = getIteratorMethod(
+ {
+ AdvanceStringIndex: AdvanceStringIndex,
+ GetMethod: GetMethod,
+ IsArray: IsArray,
+ Type: Type
+ },
+ obj
+ );
+ }
+ var iterator = Call(actualMethod, obj);
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('iterator must return an object');
+ }
+
+ return iterator;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/GetMethod.js b/node_modules/object.values/node_modules/es-abstract/2017/GetMethod.js
new file mode 100644
index 0000000..aef8cbc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/GetMethod.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var IsPropertyKey = require('./IsPropertyKey');
+
+/**
+ * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let func be GetV(O, P).
+ * 3. ReturnIfAbrupt(func).
+ * 4. If func is either undefined or null, return undefined.
+ * 5. If IsCallable(func) is false, throw a TypeError exception.
+ * 6. Return func.
+ */
+
+module.exports = function GetMethod(O, P) {
+ // 7.3.9.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.9.2
+ var func = GetV(O, P);
+
+ // 7.3.9.4
+ if (func == null) {
+ return void 0;
+ }
+
+ // 7.3.9.5
+ if (!IsCallable(func)) {
+ throw new $TypeError(P + 'is not a function');
+ }
+
+ // 7.3.9.6
+ return func;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/GetOwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/2017/GetOwnPropertyKeys.js
new file mode 100644
index 0000000..8d7e5ee
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/GetOwnPropertyKeys.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
+var keys = require('object-keys');
+
+var esType = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+ if (esType(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (Type === 'Symbol') {
+ return $gOPS ? $gOPS(O) : [];
+ }
+ if (Type === 'String') {
+ if (!$gOPN) {
+ return keys(O);
+ }
+ return $gOPN(O);
+ }
+ throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js b/node_modules/object.values/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js
new file mode 100644
index 0000000..62da8fb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+ var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ if (!IsConstructor(constructor)) {
+ throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+ }
+ var proto = Get(constructor, 'prototype');
+ if (Type(proto) !== 'Object') {
+ if (!(constructor instanceof $Function)) {
+ // ignore other realms, for now
+ throw new $TypeError('cross-realm constructors not currently supported');
+ }
+ proto = intrinsic;
+ }
+ return proto;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/GetSubstitution.js b/node_modules/object.values/node_modules/es-abstract/2017/GetSubstitution.js
new file mode 100644
index 0000000..de41b01
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/GetSubstitution.js
@@ -0,0 +1,104 @@
+
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $parseInt = GetIntrinsic('%parseInt%');
+
+var inspect = require('object-inspect');
+
+var regexTester = require('../helpers/regexTester');
+var callBound = require('../helpers/callBound');
+var every = require('../helpers/every');
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+
+var IsArray = require('./IsArray');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var isStringOrHole = function (capture, index, arr) {
+ return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
+};
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, replacement) {
+ if (Type(matched) !== 'String') {
+ throw new $TypeError('Assertion failed: `matched` must be a String');
+ }
+ var matchLength = matched.length;
+
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `str` must be a String');
+ }
+ var stringLength = str.length;
+
+ if (!IsInteger(position) || position < 0 || position > stringLength) {
+ throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+ }
+
+ if (!IsArray(captures) || !every(captures, isStringOrHole)) {
+ throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures));
+ }
+
+ if (Type(replacement) !== 'String') {
+ throw new $TypeError('Assertion failed: `replacement` must be a String');
+ }
+
+ var tailPos = position + matchLength;
+ var m = captures.length;
+
+ var result = '';
+ for (var i = 0; i < replacement.length; i += 1) {
+ // if this is a $, and it's not the end of the replacement
+ var current = $charAt(replacement, i);
+ var isLast = (i + 1) >= replacement.length;
+ var nextIsLast = (i + 2) >= replacement.length;
+ if (current === '$' && !isLast) {
+ var next = $charAt(replacement, i + 1);
+ if (next === '$') {
+ result += '$';
+ i += 1;
+ } else if (next === '&') {
+ result += matched;
+ i += 1;
+ } else if (next === '`') {
+ result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+ i += 1;
+ } else if (next === "'") {
+ result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+ i += 1;
+ } else {
+ var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+ if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+ // $1 through $9, and not followed by a digit
+ var n = $parseInt(next, 10);
+ // if (n > m, impl-defined)
+ result += (n <= m && Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
+ i += 1;
+ } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+ // $00 through $99
+ var nn = next + nextNext;
+ var nnI = $parseInt(nn, 10) - 1;
+ // if nn === '00' or nn > m, impl-defined
+ result += (nn <= m && Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
+ i += 2;
+ } else {
+ result += '$';
+ }
+ }
+ } else {
+ // the final $, or else not a $
+ result += $charAt(replacement, i);
+ }
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/GetV.js b/node_modules/object.values/node_modules/es-abstract/2017/GetV.js
new file mode 100644
index 0000000..7b5139a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/GetV.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var ToObject = require('./ToObject');
+
+/**
+ * 7.3.2 GetV (V, P)
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let O be ToObject(V).
+ * 3. ReturnIfAbrupt(O).
+ * 4. Return O.[[Get]](P, V).
+ */
+
+module.exports = function GetV(V, P) {
+ // 7.3.2.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.2.2-3
+ var O = ToObject(V);
+
+ // 7.3.2.4
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/HasOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/HasOwnProperty.js
new file mode 100644
index 0000000..679059f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/HasOwnProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var has = require('has');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return has(O, P);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/HasProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/HasProperty.js
new file mode 100644
index 0000000..5f2d212
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/HasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/HourFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/HourFromTime.js
new file mode 100644
index 0000000..957ce32
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/HourFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return mod($floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/InLeapYear.js b/node_modules/object.values/node_modules/es-abstract/2017/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/InstanceofOperator.js b/node_modules/object.values/node_modules/es-abstract/2017/InstanceofOperator.js
new file mode 100644
index 0000000..ebd308c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/InstanceofOperator.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+ if (typeof instOfHandler !== 'undefined') {
+ return ToBoolean(Call(instOfHandler, C, [O]));
+ }
+ if (!IsCallable(C)) {
+ throw new $TypeError('`C` is not Callable');
+ }
+ return OrdinaryHasInstance(C, O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/Invoke.js b/node_modules/object.values/node_modules/es-abstract/2017/Invoke.js
new file mode 100644
index 0000000..769f0e3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/Invoke.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $arraySlice = require('../helpers/callBound')('Array.prototype.slice');
+
+var Call = require('./Call');
+var GetV = require('./GetV');
+var IsPropertyKey = require('./IsPropertyKey');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('P must be a Property Key');
+ }
+ var argumentsList = $arraySlice(arguments, 2);
+ var func = GetV(O, P);
+ return Call(func, O, argumentsList);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsAccessorDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/IsAccessorDescriptor.js
new file mode 100644
index 0000000..5139464
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsArray.js b/node_modules/object.values/node_modules/es-abstract/2017/IsArray.js
new file mode 100644
index 0000000..7b25f37
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsArray.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('../helpers/callBound')('Object.prototype.toString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
+
+module.exports = $Array.isArray || function IsArray(argument) {
+ return toStr(argument) === '[object Array]';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsCallable.js b/node_modules/object.values/node_modules/es-abstract/2017/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsConcatSpreadable.js b/node_modules/object.values/node_modules/es-abstract/2017/IsConcatSpreadable.js
new file mode 100644
index 0000000..dc8aae1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsConcatSpreadable.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ if ($isConcatSpreadable) {
+ var spreadable = Get(O, $isConcatSpreadable);
+ if (typeof spreadable !== 'undefined') {
+ return ToBoolean(spreadable);
+ }
+ }
+ return IsArray(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsConstructor.js b/node_modules/object.values/node_modules/es-abstract/2017/IsConstructor.js
new file mode 100644
index 0000000..00ea52c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsConstructor.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
+
+module.exports = function IsConstructor(argument) {
+ return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsDataDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/IsDataDescriptor.js
new file mode 100644
index 0000000..0ad3045
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsExtensible.js b/node_modules/object.values/node_modules/es-abstract/2017/IsExtensible.js
new file mode 100644
index 0000000..0c4c8a6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsExtensible.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $preventExtensions = $Object.preventExtensions;
+var $isExtensible = $Object.isExtensible;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+ ? function IsExtensible(obj) {
+ return !isPrimitive(obj) && $isExtensible(obj);
+ }
+ : function IsExtensible(obj) {
+ return !isPrimitive(obj);
+ };
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsGenericDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/IsGenericDescriptor.js
new file mode 100644
index 0000000..8618ce4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsInteger.js b/node_modules/object.values/node_modules/es-abstract/2017/IsInteger.js
new file mode 100644
index 0000000..0f488b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsInteger.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
+
+module.exports = function IsInteger(argument) {
+ if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
+ return false;
+ }
+ var abs = $abs(argument);
+ return $floor(abs) === abs;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsPromise.js b/node_modules/object.values/node_modules/es-abstract/2017/IsPromise.js
new file mode 100644
index 0000000..e8e92a2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsPromise.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+ if (Type(x) !== 'Object') {
+ return false;
+ }
+ if (!$PromiseThen) { // Promises are not supported
+ return false;
+ }
+ try {
+ $PromiseThen(x); // throws if not a promise
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/IsPropertyDescriptor.js
new file mode 100644
index 0000000..2a96c63
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsPropertyDescriptor.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function IsPropertyDescriptor(Desc) {
+ return isPropertyDescriptor({
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor,
+ Type: Type
+ }, Desc);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2017/IsPropertyKey.js
new file mode 100644
index 0000000..74b8d95
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsPropertyKey.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+ return typeof argument === 'string' || typeof argument === 'symbol';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IsRegExp.js b/node_modules/object.values/node_modules/es-abstract/2017/IsRegExp.js
new file mode 100644
index 0000000..fdf2323
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IsRegExp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+ if (!argument || typeof argument !== 'object') {
+ return false;
+ }
+ if ($match) {
+ var isRegExp = argument[$match];
+ if (typeof isRegExp !== 'undefined') {
+ return ToBoolean(isRegExp);
+ }
+ }
+ return hasRegExpMatcher(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IterableToList.js b/node_modules/object.values/node_modules/es-abstract/2017/IterableToList.js
new file mode 100644
index 0000000..0b8cdcf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IterableToList.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+var $arrayPush = callBound('Array.prototype.push');
+
+var GetIterator = require('./GetIterator');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-iterabletolist
+
+module.exports = function IterableToList(items, method) {
+ var iterator = GetIterator(items, method);
+ var values = [];
+ var next = true;
+ while (next) {
+ next = IteratorStep(iterator);
+ if (next) {
+ var nextValue = IteratorValue(next);
+ $arrayPush(values, nextValue);
+ }
+ }
+ return values;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IteratorClose.js b/node_modules/object.values/node_modules/es-abstract/2017/IteratorClose.js
new file mode 100644
index 0000000..35c8c2b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IteratorClose.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+ }
+ if (!IsCallable(completion)) {
+ throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
+ }
+ var completionThunk = completion;
+
+ var iteratorReturn = GetMethod(iterator, 'return');
+
+ if (typeof iteratorReturn === 'undefined') {
+ return completionThunk();
+ }
+
+ var completionRecord;
+ try {
+ var innerResult = Call(iteratorReturn, iterator, []);
+ } catch (e) {
+ // if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+ // if the completion is of type "throw", this will throw.
+ completionThunk();
+ completionThunk = null; // ensure it's not called twice.
+
+ // if not, then return the innerResult completion
+ throw e;
+ }
+ completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+ completionThunk = null; // ensure it's not called twice.
+
+ if (Type(innerResult) !== 'Object') {
+ throw new $TypeError('iterator .return must return an object');
+ }
+
+ return completionRecord;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IteratorComplete.js b/node_modules/object.values/node_modules/es-abstract/2017/IteratorComplete.js
new file mode 100644
index 0000000..a62b9bf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IteratorComplete.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return ToBoolean(Get(iterResult, 'done'));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IteratorNext.js b/node_modules/object.values/node_modules/es-abstract/2017/IteratorNext.js
new file mode 100644
index 0000000..7e59915
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IteratorNext.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Invoke = require('./Invoke');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+ var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+ if (Type(result) !== 'Object') {
+ throw new $TypeError('iterator next must return an object');
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IteratorStep.js b/node_modules/object.values/node_modules/es-abstract/2017/IteratorStep.js
new file mode 100644
index 0000000..41b9d1b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IteratorStep.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+ var result = IteratorNext(iterator);
+ var done = IteratorComplete(result);
+ return done === true ? false : result;
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/IteratorValue.js b/node_modules/object.values/node_modules/es-abstract/2017/IteratorValue.js
new file mode 100644
index 0000000..5e71a44
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/IteratorValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return Get(iterResult, 'value');
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/MakeDate.js b/node_modules/object.values/node_modules/es-abstract/2017/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/MakeDay.js b/node_modules/object.values/node_modules/es-abstract/2017/MakeDay.js
new file mode 100644
index 0000000..f1ab810
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var mod = require('../helpers/mod');
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + $floor(m / 12);
+ var mn = mod(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/MakeTime.js b/node_modules/object.values/node_modules/es-abstract/2017/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/MinFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/MinFromTime.js
new file mode 100644
index 0000000..e80e191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/MinFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return mod($floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/MonthFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ObjectCreate.js b/node_modules/object.values/node_modules/es-abstract/2017/ObjectCreate.js
new file mode 100644
index 0000000..e2445b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ObjectCreate.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var Type = require('./Type');
+
+var hasProto = !({ __proto__: null } instanceof Object);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
+
+module.exports = function ObjectCreate(proto, internalSlotsList) {
+ if (proto !== null && Type(proto) !== 'Object') {
+ throw new $TypeError('Assertion failed: `proto` must be null or an object');
+ }
+ var slots = arguments.length < 2 ? [] : internalSlotsList;
+ if (slots.length > 0) {
+ throw new $SyntaxError('es-abstract does not yet support internal slots');
+ }
+
+ if ($ObjectCreate) {
+ return $ObjectCreate(proto);
+ }
+ if (hasProto) {
+ return { __proto__: proto };
+ }
+
+ if (proto === null) {
+ throw new $SyntaxError('native Object.create support is required to create null objects');
+ }
+ var T = function T() {};
+ T.prototype = proto;
+ return new T();
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js
new file mode 100644
index 0000000..59780b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js
@@ -0,0 +1,61 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!$gOPD) {
+ // ES3/IE 8 fallback
+ if (IsAccessorDescriptor(Desc)) {
+ throw new $SyntaxError('This environment does not support accessor property descriptors.');
+ }
+ var creatingNormalDataProperty = !(P in O)
+ && Desc['[[Writable]]']
+ && Desc['[[Enumerable]]']
+ && Desc['[[Configurable]]']
+ && '[[Value]]' in Desc;
+ var settingExistingDataProperty = (P in O)
+ && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+ && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+ && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+ && '[[Value]]' in Desc;
+ if (creatingNormalDataProperty || settingExistingDataProperty) {
+ O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+ return SameValue(O[P], Desc['[[Value]]']);
+ }
+ throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+ }
+ var desc = $gOPD(O, P);
+ var current = desc && ToPropertyDescriptor(desc);
+ var extensible = IsExtensible(O);
+ return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js
new file mode 100644
index 0000000..b9882e5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var has = require('has');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!has(O, P)) {
+ return void 0;
+ }
+ if (!$gOPD) {
+ // ES3 / IE 8 fallback
+ var arrayLength = IsArray(O) && P === 'length';
+ var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+ return {
+ '[[Configurable]]': !(arrayLength || regexLastIndex),
+ '[[Enumerable]]': $isEnumerable(O, P),
+ '[[Value]]': O[P],
+ '[[Writable]]': true
+ };
+ }
+ return ToPropertyDescriptor($gOPD(O, P));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js
new file mode 100644
index 0000000..344077a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $getProto = require('../helpers/getProto');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!$getProto) {
+ throw new $TypeError('This environment does not support fetching prototypes.');
+ }
+ return $getProto(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryHasInstance.js b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryHasInstance.js
new file mode 100644
index 0000000..51abe26
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryHasInstance.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+ if (IsCallable(C) === false) {
+ return false;
+ }
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ var P = Get(C, 'prototype');
+ if (Type(P) !== 'Object') {
+ throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return O instanceof C;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryHasProperty.js b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryHasProperty.js
new file mode 100644
index 0000000..076c25a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/OrdinaryHasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js
new file mode 100644
index 0000000..3541331
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $setProto = require('../helpers/setProto');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+ if (Type(V) !== 'Object' && Type(V) !== 'Null') {
+ throw new $TypeError('Assertion failed: V must be Object or Null');
+ }
+ /*
+ var extensible = IsExtensible(O);
+ var current = OrdinaryGetPrototypeOf(O);
+ if (SameValue(V, current)) {
+ return true;
+ }
+ if (!extensible) {
+ return false;
+ }
+ */
+ try {
+ $setProto(O, V);
+ } catch (e) {
+ return false;
+ }
+ return OrdinaryGetPrototypeOf(O) === V;
+ /*
+ var p = V;
+ var done = false;
+ while (!done) {
+ if (p === null) {
+ done = true;
+ } else if (SameValue(p, O)) {
+ return false;
+ } else {
+ if (wat) {
+ done = true;
+ } else {
+ p = p.[[Prototype]];
+ }
+ }
+ }
+ O.[[Prototype]] = V;
+ return true;
+ */
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/RegExpExec.js b/node_modules/object.values/node_modules/es-abstract/2017/RegExpExec.js
new file mode 100644
index 0000000..15c9186
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/RegExpExec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var regexExec = require('../helpers/callBound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+ if (Type(R) !== 'Object') {
+ throw new $TypeError('Assertion failed: `R` must be an Object');
+ }
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ var exec = Get(R, 'exec');
+ if (IsCallable(exec)) {
+ var result = Call(exec, R, [S]);
+ if (result === null || Type(result) === 'Object') {
+ return result;
+ }
+ throw new $TypeError('"exec" method must return `null` or an Object');
+ }
+ return regexExec(R, S);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/RequireObjectCoercible.js b/node_modules/object.values/node_modules/es-abstract/2017/RequireObjectCoercible.js
new file mode 100644
index 0000000..9008359
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/RequireObjectCoercible.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../5/CheckObjectCoercible');
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SameValue.js b/node_modules/object.values/node_modules/es-abstract/2017/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SameValueNonNumber.js b/node_modules/object.values/node_modules/es-abstract/2017/SameValueNonNumber.js
new file mode 100644
index 0000000..5668752
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SameValueNonNumber.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+
+// https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
+
+module.exports = function SameValueNonNumber(x, y) {
+ if (typeof x === 'number' || typeof x !== typeof y) {
+ throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.');
+ }
+ return SameValue(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SameValueZero.js b/node_modules/object.values/node_modules/es-abstract/2017/SameValueZero.js
new file mode 100644
index 0000000..0dedcd2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SameValueZero.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+ return (x === y) || ($isNaN(x) && $isNaN(y));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SecFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/SecFromTime.js
new file mode 100644
index 0000000..7190011
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SecFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return mod($floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/Set.js b/node_modules/object.values/node_modules/es-abstract/2017/Set.js
new file mode 100644
index 0000000..18ebd99
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/Set.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ if (Type(Throw) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+ }
+ if (Throw) {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return true;
+ } else {
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ } catch (e) {
+ return false;
+ }
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SetFunctionName.js b/node_modules/object.values/node_modules/es-abstract/2017/SetFunctionName.js
new file mode 100644
index 0000000..f93324a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SetFunctionName.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getSymbolDescription = require('../helpers/getSymbolDescription');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+ if (typeof F !== 'function') {
+ throw new $TypeError('Assertion failed: `F` must be a function');
+ }
+ if (!IsExtensible(F) || has(F, 'name')) {
+ throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+ }
+ var nameType = Type(name);
+ if (nameType !== 'Symbol' && nameType !== 'String') {
+ throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+ }
+ if (nameType === 'Symbol') {
+ var description = getSymbolDescription(name);
+ // eslint-disable-next-line no-param-reassign
+ name = typeof description === 'undefined' ? '' : '[' + description + ']';
+ }
+ if (arguments.length > 2) {
+ var prefix = arguments[2];
+ // eslint-disable-next-line no-param-reassign
+ name = prefix + ' ' + name;
+ }
+ return DefinePropertyOrThrow(F, 'name', {
+ '[[Value]]': name,
+ '[[Writable]]': false,
+ '[[Enumerable]]': false,
+ '[[Configurable]]': true
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SetIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2017/SetIntegrityLevel.js
new file mode 100644
index 0000000..3d5c81d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SetIntegrityLevel.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ if (!$preventExtensions) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+ }
+ var status = $preventExtensions(O);
+ if (!status) {
+ return false;
+ }
+ if (!$gOPN) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+ }
+ var theKeys = $gOPN(O);
+ if (level === 'sealed') {
+ forEach(theKeys, function (k) {
+ DefinePropertyOrThrow(O, k, { configurable: false });
+ });
+ } else if (level === 'frozen') {
+ forEach(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ var desc;
+ if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+ desc = { configurable: false };
+ } else {
+ desc = { configurable: false, writable: false };
+ }
+ DefinePropertyOrThrow(O, k, desc);
+ }
+ });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SpeciesConstructor.js b/node_modules/object.values/node_modules/es-abstract/2017/SpeciesConstructor.js
new file mode 100644
index 0000000..3cdcd74
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SpeciesConstructor.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var C = O.constructor;
+ if (typeof C === 'undefined') {
+ return defaultConstructor;
+ }
+ if (Type(C) !== 'Object') {
+ throw new $TypeError('O.constructor is not an Object');
+ }
+ var S = $species ? C[$species] : void 0;
+ if (S == null) {
+ return defaultConstructor;
+ }
+ if (IsConstructor(S)) {
+ return S;
+ }
+ throw new $TypeError('no constructor found');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/StrictEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2017/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/SymbolDescriptiveString.js b/node_modules/object.values/node_modules/es-abstract/2017/SymbolDescriptiveString.js
new file mode 100644
index 0000000..7bd8191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/SymbolDescriptiveString.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+ if (Type(sym) !== 'Symbol') {
+ throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+ }
+ return $SymbolToString(sym);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/TestIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2017/TestIntegrityLevel.js
new file mode 100644
index 0000000..7a57397
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/TestIntegrityLevel.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var every = require('../helpers/every');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ var status = IsExtensible(O);
+ if (status) {
+ return false;
+ }
+ var theKeys = $gOPN(O);
+ return theKeys.length === 0 || every(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ if (currentDesc.configurable) {
+ return false;
+ }
+ if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+ return false;
+ }
+ }
+ return true;
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/TimeClip.js b/node_modules/object.values/node_modules/es-abstract/2017/TimeClip.js
new file mode 100644
index 0000000..57aa08c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+var $abs = GetIntrinsic('%Math.abs%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || $abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/TimeFromYear.js b/node_modules/object.values/node_modules/es-abstract/2017/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/TimeWithinDay.js b/node_modules/object.values/node_modules/es-abstract/2017/TimeWithinDay.js
new file mode 100644
index 0000000..c5b21d3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/TimeWithinDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return mod(t, msPerDay);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToBoolean.js b/node_modules/object.values/node_modules/es-abstract/2017/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToDateString.js b/node_modules/object.values/node_modules/es-abstract/2017/ToDateString.js
new file mode 100644
index 0000000..7a6d4c4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToDateString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Date = GetIntrinsic('%Date%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+ if (Type(tv) !== 'Number') {
+ throw new $TypeError('Assertion failed: `tv` must be a Number');
+ }
+ if ($isNaN(tv)) {
+ return 'Invalid Date';
+ }
+ return $Date(tv);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToIndex.js b/node_modules/object.values/node_modules/es-abstract/2017/ToIndex.js
new file mode 100644
index 0000000..a55398d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToIndex.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+
+var ToInteger = require('./ToInteger');
+var ToLength = require('./ToLength');
+var SameValueZero = require('./SameValueZero');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-toindex
+
+module.exports = function ToIndex(value) {
+ if (typeof value === 'undefined') {
+ return 0;
+ }
+ var integerIndex = ToInteger(value);
+ if (integerIndex < 0) {
+ throw new $RangeError('index must be >= 0');
+ }
+ var index = ToLength(integerIndex);
+ if (!SameValueZero(integerIndex, index)) {
+ throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1');
+ }
+ return index;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToInt16.js b/node_modules/object.values/node_modules/es-abstract/2017/ToInt16.js
new file mode 100644
index 0000000..5a112c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToInt16.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+ var int16bit = ToUint16(argument);
+ return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToInt32.js b/node_modules/object.values/node_modules/es-abstract/2017/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToInt8.js b/node_modules/object.values/node_modules/es-abstract/2017/ToInt8.js
new file mode 100644
index 0000000..d103123
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToInt8.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+ var int8bit = ToUint8(argument);
+ return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToInteger.js b/node_modules/object.values/node_modules/es-abstract/2017/ToInteger.js
new file mode 100644
index 0000000..16f7db9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToInteger.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ return ES5ToInteger(number);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToLength.js b/node_modules/object.values/node_modules/es-abstract/2017/ToLength.js
new file mode 100644
index 0000000..1bef9be
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToLength.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var ToInteger = require('./ToInteger');
+
+module.exports = function ToLength(argument) {
+ var len = ToInteger(argument);
+ if (len <= 0) { return 0; } // includes converting -0 to +0
+ if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+ return len;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToNumber.js b/node_modules/object.values/node_modules/es-abstract/2017/ToNumber.js
new file mode 100644
index 0000000..7a3cdc8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToNumber.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+// whitespace from: https://es5.github.io/#x15.5.4.20
+// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+var ws = [
+ '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
+ '\u2029\uFEFF'
+].join('');
+var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
+var $replace = callBound('String.prototype.replace');
+var $trim = function (value) {
+ return $replace(value, trimRegex, '');
+};
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+ var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (typeof value === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a number');
+ }
+ if (typeof value === 'string') {
+ if (isBinary(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 2));
+ } else if (isOctal(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 8));
+ } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+ return NaN;
+ } else {
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+ }
+ }
+ return $Number(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToObject.js b/node_modules/object.values/node_modules/es-abstract/2017/ToObject.js
new file mode 100644
index 0000000..50d5b94
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
+
+module.exports = function ToObject(value) {
+ RequireObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToPrimitive.js b/node_modules/object.values/node_modules/es-abstract/2017/ToPrimitive.js
new file mode 100644
index 0000000..81c655d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToPrimitive.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+ if (arguments.length > 1) {
+ return toPrimitive(input, arguments[1]);
+ }
+ return toPrimitive(input);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/ToPropertyDescriptor.js
new file mode 100644
index 0000000..38e536e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2017/ToPropertyKey.js
new file mode 100644
index 0000000..38f40dd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToPropertyKey.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+ var key = ToPrimitive(argument, $String);
+ return typeof key === 'symbol' ? key : ToString(key);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToString.js b/node_modules/object.values/node_modules/es-abstract/2017/ToString.js
new file mode 100644
index 0000000..a345431
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToString.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+ if (typeof argument === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a string');
+ }
+ return $String(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToUint16.js b/node_modules/object.values/node_modules/es-abstract/2017/ToUint16.js
new file mode 100644
index 0000000..c8a408b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToUint16.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x10000);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToUint32.js b/node_modules/object.values/node_modules/es-abstract/2017/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToUint8.js b/node_modules/object.values/node_modules/es-abstract/2017/ToUint8.js
new file mode 100644
index 0000000..bf84753
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToUint8.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+module.exports = function ToUint8(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x100);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ToUint8Clamp.js b/node_modules/object.values/node_modules/es-abstract/2017/ToUint8Clamp.js
new file mode 100644
index 0000000..c7f9f56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ToUint8Clamp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+
+var $floor = $Math.floor;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number <= 0) { return 0; }
+ if (number >= 0xFF) { return 0xFF; }
+ var f = $floor(argument);
+ if (f + 0.5 < number) { return f + 1; }
+ if (number < f + 0.5) { return f; }
+ if (f % 2 !== 0) { return f + 1; }
+ return f;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/Type.js b/node_modules/object.values/node_modules/es-abstract/2017/Type.js
new file mode 100644
index 0000000..6c99376
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/Type.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function Type(x) {
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ return ES5Type(x);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js
new file mode 100644
index 0000000..d4b9007
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js
@@ -0,0 +1,170 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
+// https://www.ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements, max-params
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+ // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+ var oType = Type(O);
+ if (oType !== 'Undefined' && oType !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be undefined or an Object');
+ }
+ if (Type(extensible) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: extensible must be a Boolean');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (Type(current) !== 'Undefined' && !isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, current)) {
+ throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+ }
+ if (oType !== 'Undefined' && !IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+ }
+ if (Type(current) === 'Undefined') {
+ if (!extensible) {
+ return false;
+ }
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': Desc['[[Configurable]]'],
+ '[[Enumerable]]': Desc['[[Enumerable]]'],
+ '[[Value]]': Desc['[[Value]]'],
+ '[[Writable]]': Desc['[[Writable]]']
+ }
+ );
+ }
+ } else {
+ if (!IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ }
+ return true;
+ }
+ if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+ return true;
+ }
+ if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+ return true; // removed by ES2017, but should still be correct
+ }
+ // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+ if (!current['[[Configurable]]']) {
+ if (Desc['[[Configurable]]']) {
+ return false;
+ }
+ if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+ return false;
+ }
+ }
+ if (IsGenericDescriptor(Desc)) {
+ // no further validation is required.
+ } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ return false;
+ }
+ if (IsDataDescriptor(current)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Get]]': undefined
+ }
+ );
+ }
+ } else if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Value]]': undefined
+ }
+ );
+ }
+ } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+ if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+ return false;
+ }
+ if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+ return false;
+ }
+ if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else {
+ throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/WeekDay.js b/node_modules/object.values/node_modules/es-abstract/2017/WeekDay.js
new file mode 100644
index 0000000..2973e02
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/WeekDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+var Day = require('./Day');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/YearFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/modulo.js b/node_modules/object.values/node_modules/es-abstract/2017/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/msFromTime.js b/node_modules/object.values/node_modules/es-abstract/2017/msFromTime.js
new file mode 100644
index 0000000..c31eda0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/msFromTime.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return mod(t, msPerSecond);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/thisBooleanValue.js b/node_modules/object.values/node_modules/es-abstract/2017/thisBooleanValue.js
new file mode 100644
index 0000000..3ffac9c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/thisBooleanValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $BooleanValueOf = require('../helpers/callBound')('Boolean.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+ if (Type(value) === 'Boolean') {
+ return value;
+ }
+
+ return $BooleanValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/thisNumberValue.js b/node_modules/object.values/node_modules/es-abstract/2017/thisNumberValue.js
new file mode 100644
index 0000000..0345e52
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/thisNumberValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var Type = require('./Type');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+ if (Type(value) === 'Number') {
+ return value;
+ }
+
+ return $NumberValueOf(value);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/thisStringValue.js b/node_modules/object.values/node_modules/es-abstract/2017/thisStringValue.js
new file mode 100644
index 0000000..3b99b6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/thisStringValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $StringValueOf = require('../helpers/callBound')('String.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+ if (Type(value) === 'String') {
+ return value;
+ }
+
+ return $StringValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2017/thisTimeValue.js b/node_modules/object.values/node_modules/es-abstract/2017/thisTimeValue.js
new file mode 100644
index 0000000..d7cda28
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2017/thisTimeValue.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $DateValueOf = require('../helpers/callBound')('Date.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
+
+module.exports = function thisTimeValue(value) {
+ return $DateValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/AbstractEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2018/AbstractEqualityComparison.js
new file mode 100644
index 0000000..40b3909
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/AbstractRelationalComparison.js b/node_modules/object.values/node_modules/es-abstract/2018/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/AdvanceStringIndex.js b/node_modules/object.values/node_modules/es-abstract/2018/AdvanceStringIndex.js
new file mode 100644
index 0000000..666f578
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/AdvanceStringIndex.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+ throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+ }
+ if (Type(unicode) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+ }
+ if (!unicode) {
+ return index + 1;
+ }
+ var length = S.length;
+ if ((index + 1) >= length) {
+ return index + 1;
+ }
+
+ var first = $charCodeAt(S, index);
+ if (first < 0xD800 || first > 0xDBFF) {
+ return index + 1;
+ }
+
+ var second = $charCodeAt(S, index + 1);
+ if (second < 0xDC00 || second > 0xDFFF) {
+ return index + 1;
+ }
+
+ return index + 2;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ArrayCreate.js b/node_modules/object.values/node_modules/es-abstract/2018/ArrayCreate.js
new file mode 100644
index 0000000..fc9a7cf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ArrayCreate.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsInteger = require('./IsInteger');
+
+var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+
+var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayPrototype
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+ }
+ if (length > MAX_ARRAY_LENGTH) {
+ throw new $RangeError('length is greater than (2**32 - 1)');
+ }
+ var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+ var A = []; // steps 5 - 7, and 9
+ if (proto !== $ArrayPrototype) { // step 8
+ if (!$setProto) {
+ throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ $setProto(A, proto);
+ }
+ if (length !== 0) { // bypasses the need for step 2
+ A.length = length;
+ }
+ /* step 10, the above as a shortcut for the below
+ OrdinaryDefineOwnProperty(A, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': true
+ });
+ */
+ return A;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ArraySetLength.js b/node_modules/object.values/node_modules/es-abstract/2018/ArraySetLength.js
new file mode 100644
index 0000000..c9134c6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ArraySetLength.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsArray = require('./IsArray');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+ if (!IsArray(A)) {
+ throw new $TypeError('Assertion failed: A must be an Array');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!('[[Value]]' in Desc)) {
+ return OrdinaryDefineOwnProperty(A, 'length', Desc);
+ }
+ var newLenDesc = assign({}, Desc);
+ var newLen = ToUint32(Desc['[[Value]]']);
+ var numberLen = ToNumber(Desc['[[Value]]']);
+ if (newLen !== numberLen) {
+ throw new $RangeError('Invalid array length');
+ }
+ newLenDesc['[[Value]]'] = newLen;
+ var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+ if (!IsDataDescriptor(oldLenDesc)) {
+ throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+ }
+ var oldLen = oldLenDesc['[[Value]]'];
+ if (newLen >= oldLen) {
+ return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ }
+ if (!oldLenDesc['[[Writable]]']) {
+ return false;
+ }
+ var newWritable;
+ if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+ newWritable = true;
+ } else {
+ newWritable = false;
+ newLenDesc['[[Writable]]'] = true;
+ }
+ var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ if (!succeeded) {
+ return false;
+ }
+ while (newLen < oldLen) {
+ oldLen -= 1;
+ // eslint-disable-next-line no-param-reassign
+ var deleteSucceeded = delete A[ToString(oldLen)];
+ if (!deleteSucceeded) {
+ newLenDesc['[[Value]]'] = oldLen + 1;
+ if (!newWritable) {
+ newLenDesc['[[Writable]]'] = false;
+ OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ return false;
+ }
+ }
+ }
+ if (!newWritable) {
+ return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ArraySpeciesCreate.js b/node_modules/object.values/node_modules/es-abstract/2018/ArraySpeciesCreate.js
new file mode 100644
index 0000000..98b9b56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ArraySpeciesCreate.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: length must be an integer >= 0');
+ }
+ var len = length === 0 ? 0 : length;
+ var C;
+ var isArray = IsArray(originalArray);
+ if (isArray) {
+ C = Get(originalArray, 'constructor');
+ // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+ // if (IsConstructor(C)) {
+ // if C is another realm's Array, C = undefined
+ // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+ // }
+ if ($species && Type(C) === 'Object') {
+ C = Get(C, $species);
+ if (C === null) {
+ C = void 0;
+ }
+ }
+ }
+ if (typeof C === 'undefined') {
+ return $Array(len);
+ }
+ if (!IsConstructor(C)) {
+ throw new $TypeError('C must be a constructor');
+ }
+ return new C(len); // Construct(C, len);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/Call.js b/node_modules/object.values/node_modules/es-abstract/2018/Call.js
new file mode 100644
index 0000000..f31960d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/Call.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsCallable = require('./IsCallable');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+ var args = arguments.length > 2 ? arguments[2] : [];
+ if (!IsCallable(F)) {
+ throw new $TypeError(inspect(F) + ' is not a function');
+ }
+ return F.apply(V, args);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CanonicalNumericIndexString.js b/node_modules/object.values/node_modules/es-abstract/2018/CanonicalNumericIndexString.js
new file mode 100644
index 0000000..625f853
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CanonicalNumericIndexString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+ if (Type(argument) !== 'String') {
+ throw new $TypeError('Assertion failed: `argument` must be a String');
+ }
+ if (argument === '-0') { return -0; }
+ var n = ToNumber(argument);
+ if (SameValue(ToString(n), argument)) { return n; }
+ return void 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CompletePropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/CompletePropertyDescriptor.js
new file mode 100644
index 0000000..548bf41
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CompletePropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+ /* eslint no-param-reassign: 0 */
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (!has(Desc, '[[Value]]')) {
+ Desc['[[Value]]'] = void 0;
+ }
+ if (!has(Desc, '[[Writable]]')) {
+ Desc['[[Writable]]'] = false;
+ }
+ } else {
+ if (!has(Desc, '[[Get]]')) {
+ Desc['[[Get]]'] = void 0;
+ }
+ if (!has(Desc, '[[Set]]')) {
+ Desc['[[Set]]'] = void 0;
+ }
+ }
+ if (!has(Desc, '[[Enumerable]]')) {
+ Desc['[[Enumerable]]'] = false;
+ }
+ if (!has(Desc, '[[Configurable]]')) {
+ Desc['[[Configurable]]'] = false;
+ }
+ return Desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CopyDataProperties.js b/node_modules/object.values/node_modules/es-abstract/2018/CopyDataProperties.js
new file mode 100644
index 0000000..b75ba42
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CopyDataProperties.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+var forEach = require('../helpers/forEach');
+var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-copydataproperties
+
+module.exports = function CopyDataProperties(target, source, excludedItems) {
+ if (Type(target) !== 'Object') {
+ throw new TypeError('Assertion failed: "target" must be an Object');
+ }
+
+ if (!IsArray(excludedItems)) {
+ throw new TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
+ }
+ for (var i = 0; i < excludedItems.length; i += 1) {
+ if (!IsPropertyKey(excludedItems[i])) {
+ throw new TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
+ }
+ }
+
+ if (typeof source === 'undefined' || source === null) {
+ return target;
+ }
+
+ var ES = this;
+
+ var fromObj = ES.ToObject(source);
+
+ var sourceKeys = OwnPropertyKeys(fromObj);
+ forEach(sourceKeys, function (nextKey) {
+ var excluded = false;
+
+ forEach(excludedItems, function (e) {
+ if (ES.SameValue(e, nextKey) === true) {
+ excluded = true;
+ }
+ });
+
+ var enumerable = $isEnumerable(fromObj, nextKey) || (
+ // this is to handle string keys being non-enumerable in older engines
+ typeof source === 'string'
+ && nextKey >= 0
+ && ES.IsInteger(ES.ToNumber(nextKey))
+ );
+ if (excluded === false && enumerable) {
+ var propValue = ES.Get(fromObj, nextKey);
+ ES.CreateDataProperty(target, nextKey, propValue);
+ }
+ });
+
+ return target;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CreateDataProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/CreateDataProperty.js
new file mode 100644
index 0000000..32a86ef
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CreateDataProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var oldDesc = OrdinaryGetOwnProperty(O, P);
+ var extensible = !oldDesc || IsExtensible(O);
+ var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
+ if (immutable || !extensible) {
+ return false;
+ }
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ }
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js
new file mode 100644
index 0000000..9feaec8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var CreateDataProperty = require('./CreateDataProperty');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var success = CreateDataProperty(O, P, V);
+ if (!success) {
+ throw new $TypeError('unable to create data property');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CreateHTML.js b/node_modules/object.values/node_modules/es-abstract/2018/CreateHTML.js
new file mode 100644
index 0000000..536c92d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CreateHTML.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+ if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+ throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+ }
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var p1 = '<' + tag;
+ if (attribute !== '') {
+ var V = ToString(value);
+ var escapedV = $replace(V, /\x22/g, '"');
+ p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+ }
+ return p1 + '>' + S + '</' + tag + '>';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CreateIterResultObject.js b/node_modules/object.values/node_modules/es-abstract/2018/CreateIterResultObject.js
new file mode 100644
index 0000000..aef1d22
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CreateIterResultObject.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+ if (Type(done) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+ }
+ return {
+ value: value,
+ done: done
+ };
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CreateListFromArrayLike.js b/node_modules/object.values/node_modules/es-abstract/2018/CreateListFromArrayLike.js
new file mode 100644
index 0000000..d6b44b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CreateListFromArrayLike.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBound = require('../helpers/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+var $push = callBound('Array.prototype.push');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
+module.exports = function CreateListFromArrayLike(obj) {
+ var elementTypes = arguments.length > 1
+ ? arguments[1]
+ : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ if (!IsArray(elementTypes)) {
+ throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+ }
+ var len = ToLength(Get(obj, 'length'));
+ var list = [];
+ var index = 0;
+ while (index < len) {
+ var indexName = ToString(index);
+ var next = Get(obj, indexName);
+ var nextType = Type(next);
+ if ($indexOf(elementTypes, nextType) < 0) {
+ throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+ }
+ $push(list, next);
+ index += 1;
+ }
+ return list;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/CreateMethodProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/CreateMethodProperty.js
new file mode 100644
index 0000000..5b599ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/CreateMethodProperty.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var newDesc = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ };
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ newDesc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DateFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DateString.js b/node_modules/object.values/node_modules/es-abstract/2018/DateString.js
new file mode 100644
index 0000000..fc30329
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DateString.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+
+var $isNaN = require('../helpers/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var Type = require('./Type');
+var WeekDay = require('./WeekDay');
+var MonthFromTime = require('./MonthFromTime');
+var YearFromTime = require('./YearFromTime');
+var DateFromTime = require('./DateFromTime');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-datestring
+
+module.exports = function DateString(tv) {
+ if (Type(tv) !== 'Number' || $isNaN(tv)) {
+ throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+ }
+ var weekday = weekdays[WeekDay(tv)];
+ var month = months[MonthFromTime(tv)];
+ var day = padTimeComponent(DateFromTime(tv));
+ var year = padTimeComponent(YearFromTime(tv), 4);
+ return weekday + '\x20' + month + '\x20' + day + '\x20' + year;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/Day.js b/node_modules/object.values/node_modules/es-abstract/2018/Day.js
new file mode 100644
index 0000000..00df813
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/Day.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return $floor(t / msPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DayFromYear.js b/node_modules/object.values/node_modules/es-abstract/2018/DayFromYear.js
new file mode 100644
index 0000000..08dd5af
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DayFromYear.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DayWithinYear.js b/node_modules/object.values/node_modules/es-abstract/2018/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DaysInYear.js b/node_modules/object.values/node_modules/es-abstract/2018/DaysInYear.js
new file mode 100644
index 0000000..db32251
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (mod(y, 4) !== 0) {
+ return 365;
+ }
+ if (mod(y, 100) !== 0) {
+ return 366;
+ }
+ if (mod(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DefinePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2018/DefinePropertyOrThrow.js
new file mode 100644
index 0000000..7977f6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DefinePropertyOrThrow.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var Desc = isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, desc) ? desc : ToPropertyDescriptor(desc);
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+ }
+
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/DeletePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2018/DeletePropertyOrThrow.js
new file mode 100644
index 0000000..b476817
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/DeletePropertyOrThrow.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ var success = delete O[P];
+ if (!success) {
+ throw new $TypeError('Attempt to delete property failed.');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js b/node_modules/object.values/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js
new file mode 100644
index 0000000..e2ed722
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var objectKeys = require('object-keys');
+
+var callBound = require('../helpers/callBound');
+
+var callBind = require('../helpers/callBind');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
+
+var forEach = require('../helpers/forEach');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties
+
+module.exports = function EnumerableOwnProperties(O, kind) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ var keys = objectKeys(O);
+ if (kind === 'key') {
+ return keys;
+ }
+ if (kind === 'value' || kind === 'key+value') {
+ var results = [];
+ forEach(keys, function (key) {
+ if ($isEnumerable(O, key)) {
+ $pushApply(results, [
+ kind === 'value' ? O[key] : [key, O[key]]
+ ]);
+ }
+ });
+ return results;
+ }
+ throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/FromPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/FromPropertyDescriptor.js
new file mode 100644
index 0000000..5ec200e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/FromPropertyDescriptor.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ var obj = {};
+ if ('[[Value]]' in Desc) {
+ obj.value = Desc['[[Value]]'];
+ }
+ if ('[[Writable]]' in Desc) {
+ obj.writable = Desc['[[Writable]]'];
+ }
+ if ('[[Get]]' in Desc) {
+ obj.get = Desc['[[Get]]'];
+ }
+ if ('[[Set]]' in Desc) {
+ obj.set = Desc['[[Set]]'];
+ }
+ if ('[[Enumerable]]' in Desc) {
+ obj.enumerable = Desc['[[Enumerable]]'];
+ }
+ if ('[[Configurable]]' in Desc) {
+ obj.configurable = Desc['[[Configurable]]'];
+ }
+ return obj;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/Get.js b/node_modules/object.values/node_modules/es-abstract/2018/Get.js
new file mode 100644
index 0000000..5b9ad78
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/Get.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+/**
+ * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
+ * 1. Assert: Type(O) is Object.
+ * 2. Assert: IsPropertyKey(P) is true.
+ * 3. Return O.[[Get]](P, O).
+ */
+
+module.exports = function Get(O, P) {
+ // 7.3.1.1
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ // 7.3.1.2
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
+ }
+ // 7.3.1.3
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/GetIterator.js b/node_modules/object.values/node_modules/es-abstract/2018/GetIterator.js
new file mode 100644
index 0000000..7beddac
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/GetIterator.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, method) {
+ var actualMethod = method;
+ if (arguments.length < 2) {
+ actualMethod = getIteratorMethod(
+ {
+ AdvanceStringIndex: AdvanceStringIndex,
+ GetMethod: GetMethod,
+ IsArray: IsArray,
+ Type: Type
+ },
+ obj
+ );
+ }
+ var iterator = Call(actualMethod, obj);
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('iterator must return an object');
+ }
+
+ return iterator;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/GetMethod.js b/node_modules/object.values/node_modules/es-abstract/2018/GetMethod.js
new file mode 100644
index 0000000..aef8cbc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/GetMethod.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var IsPropertyKey = require('./IsPropertyKey');
+
+/**
+ * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let func be GetV(O, P).
+ * 3. ReturnIfAbrupt(func).
+ * 4. If func is either undefined or null, return undefined.
+ * 5. If IsCallable(func) is false, throw a TypeError exception.
+ * 6. Return func.
+ */
+
+module.exports = function GetMethod(O, P) {
+ // 7.3.9.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.9.2
+ var func = GetV(O, P);
+
+ // 7.3.9.4
+ if (func == null) {
+ return void 0;
+ }
+
+ // 7.3.9.5
+ if (!IsCallable(func)) {
+ throw new $TypeError(P + 'is not a function');
+ }
+
+ // 7.3.9.6
+ return func;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/GetOwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/2018/GetOwnPropertyKeys.js
new file mode 100644
index 0000000..8d7e5ee
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/GetOwnPropertyKeys.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
+var keys = require('object-keys');
+
+var esType = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+ if (esType(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (Type === 'Symbol') {
+ return $gOPS ? $gOPS(O) : [];
+ }
+ if (Type === 'String') {
+ if (!$gOPN) {
+ return keys(O);
+ }
+ return $gOPN(O);
+ }
+ throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js b/node_modules/object.values/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js
new file mode 100644
index 0000000..62da8fb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+ var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ if (!IsConstructor(constructor)) {
+ throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+ }
+ var proto = Get(constructor, 'prototype');
+ if (Type(proto) !== 'Object') {
+ if (!(constructor instanceof $Function)) {
+ // ignore other realms, for now
+ throw new $TypeError('cross-realm constructors not currently supported');
+ }
+ proto = intrinsic;
+ }
+ return proto;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/GetSubstitution.js b/node_modules/object.values/node_modules/es-abstract/2018/GetSubstitution.js
new file mode 100644
index 0000000..2ec9ebc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/GetSubstitution.js
@@ -0,0 +1,128 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var every = require('../helpers/every');
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+var $indexOf = callBound('String.prototype.indexOf');
+var $parseInt = parseInt;
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var inspect = require('object-inspect');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsInteger = require('./IsInteger');
+var ToObject = require('./ToObject');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var isStringOrHole = function (capture, index, arr) {
+ return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
+};
+
+// http://www.ecma-international.org/ecma-262/9.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) {
+ if (Type(matched) !== 'String') {
+ throw new $TypeError('Assertion failed: `matched` must be a String');
+ }
+ var matchLength = matched.length;
+
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `str` must be a String');
+ }
+ var stringLength = str.length;
+
+ if (!IsInteger(position) || position < 0 || position > stringLength) {
+ throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+ }
+
+ if (!IsArray(captures) || !every(captures, isStringOrHole)) {
+ throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures));
+ }
+
+ if (Type(replacement) !== 'String') {
+ throw new $TypeError('Assertion failed: `replacement` must be a String');
+ }
+
+ var tailPos = position + matchLength;
+ var m = captures.length;
+ if (Type(namedCaptures) !== 'Undefined') {
+ namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign
+ }
+
+ var result = '';
+ for (var i = 0; i < replacement.length; i += 1) {
+ // if this is a $, and it's not the end of the replacement
+ var current = $charAt(replacement, i);
+ var isLast = (i + 1) >= replacement.length;
+ var nextIsLast = (i + 2) >= replacement.length;
+ if (current === '$' && !isLast) {
+ var next = $charAt(replacement, i + 1);
+ if (next === '$') {
+ result += '$';
+ i += 1;
+ } else if (next === '&') {
+ result += matched;
+ i += 1;
+ } else if (next === '`') {
+ result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+ i += 1;
+ } else if (next === "'") {
+ result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+ i += 1;
+ } else {
+ var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+ if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+ // $1 through $9, and not followed by a digit
+ var n = $parseInt(next, 10);
+ // if (n > m, impl-defined)
+ result += (n <= m && Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
+ i += 1;
+ } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+ // $00 through $99
+ var nn = next + nextNext;
+ var nnI = $parseInt(nn, 10) - 1;
+ // if nn === '00' or nn > m, impl-defined
+ result += (nn <= m && Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
+ i += 2;
+ } else if (next === '<') {
+ // eslint-disable-next-line max-depth
+ if (Type(namedCaptures) === 'Undefined') {
+ result += '$<';
+ i += 2;
+ } else {
+ var endIndex = $indexOf(replacement, '>', i);
+ // eslint-disable-next-line max-depth
+ if (endIndex > -1) {
+ var groupName = $strSlice(replacement, i, endIndex);
+ var capture = Get(namedCaptures, groupName);
+ // eslint-disable-next-line max-depth
+ if (Type(capture) !== 'Undefined') {
+ result += ToString(capture);
+ }
+ i += '$<' + groupName + '>'.length;
+ }
+ }
+ } else {
+ result += '$';
+ }
+ }
+ } else {
+ // the final $, or else not a $
+ result += $charAt(replacement, i);
+ }
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/GetV.js b/node_modules/object.values/node_modules/es-abstract/2018/GetV.js
new file mode 100644
index 0000000..7b5139a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/GetV.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var ToObject = require('./ToObject');
+
+/**
+ * 7.3.2 GetV (V, P)
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let O be ToObject(V).
+ * 3. ReturnIfAbrupt(O).
+ * 4. Return O.[[Get]](P, V).
+ */
+
+module.exports = function GetV(V, P) {
+ // 7.3.2.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.2.2-3
+ var O = ToObject(V);
+
+ // 7.3.2.4
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/HasOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/HasOwnProperty.js
new file mode 100644
index 0000000..679059f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/HasOwnProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var has = require('has');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return has(O, P);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/HasProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/HasProperty.js
new file mode 100644
index 0000000..5f2d212
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/HasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/HourFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/HourFromTime.js
new file mode 100644
index 0000000..957ce32
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/HourFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return mod($floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/InLeapYear.js b/node_modules/object.values/node_modules/es-abstract/2018/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/InstanceofOperator.js b/node_modules/object.values/node_modules/es-abstract/2018/InstanceofOperator.js
new file mode 100644
index 0000000..ebd308c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/InstanceofOperator.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+ if (typeof instOfHandler !== 'undefined') {
+ return ToBoolean(Call(instOfHandler, C, [O]));
+ }
+ if (!IsCallable(C)) {
+ throw new $TypeError('`C` is not Callable');
+ }
+ return OrdinaryHasInstance(C, O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/Invoke.js b/node_modules/object.values/node_modules/es-abstract/2018/Invoke.js
new file mode 100644
index 0000000..769f0e3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/Invoke.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $arraySlice = require('../helpers/callBound')('Array.prototype.slice');
+
+var Call = require('./Call');
+var GetV = require('./GetV');
+var IsPropertyKey = require('./IsPropertyKey');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('P must be a Property Key');
+ }
+ var argumentsList = $arraySlice(arguments, 2);
+ var func = GetV(O, P);
+ return Call(func, O, argumentsList);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsAccessorDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/IsAccessorDescriptor.js
new file mode 100644
index 0000000..5139464
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsArray.js b/node_modules/object.values/node_modules/es-abstract/2018/IsArray.js
new file mode 100644
index 0000000..7b25f37
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsArray.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('../helpers/callBound')('Object.prototype.toString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
+
+module.exports = $Array.isArray || function IsArray(argument) {
+ return toStr(argument) === '[object Array]';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsCallable.js b/node_modules/object.values/node_modules/es-abstract/2018/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsConcatSpreadable.js b/node_modules/object.values/node_modules/es-abstract/2018/IsConcatSpreadable.js
new file mode 100644
index 0000000..dc8aae1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsConcatSpreadable.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ if ($isConcatSpreadable) {
+ var spreadable = Get(O, $isConcatSpreadable);
+ if (typeof spreadable !== 'undefined') {
+ return ToBoolean(spreadable);
+ }
+ }
+ return IsArray(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsConstructor.js b/node_modules/object.values/node_modules/es-abstract/2018/IsConstructor.js
new file mode 100644
index 0000000..00ea52c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsConstructor.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
+
+module.exports = function IsConstructor(argument) {
+ return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsDataDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/IsDataDescriptor.js
new file mode 100644
index 0000000..0ad3045
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsExtensible.js b/node_modules/object.values/node_modules/es-abstract/2018/IsExtensible.js
new file mode 100644
index 0000000..0c4c8a6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsExtensible.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $preventExtensions = $Object.preventExtensions;
+var $isExtensible = $Object.isExtensible;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+ ? function IsExtensible(obj) {
+ return !isPrimitive(obj) && $isExtensible(obj);
+ }
+ : function IsExtensible(obj) {
+ return !isPrimitive(obj);
+ };
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsGenericDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/IsGenericDescriptor.js
new file mode 100644
index 0000000..8618ce4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsInteger.js b/node_modules/object.values/node_modules/es-abstract/2018/IsInteger.js
new file mode 100644
index 0000000..0f488b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsInteger.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
+
+module.exports = function IsInteger(argument) {
+ if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
+ return false;
+ }
+ var abs = $abs(argument);
+ return $floor(abs) === abs;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsPromise.js b/node_modules/object.values/node_modules/es-abstract/2018/IsPromise.js
new file mode 100644
index 0000000..e8e92a2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsPromise.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+ if (Type(x) !== 'Object') {
+ return false;
+ }
+ if (!$PromiseThen) { // Promises are not supported
+ return false;
+ }
+ try {
+ $PromiseThen(x); // throws if not a promise
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2018/IsPropertyKey.js
new file mode 100644
index 0000000..74b8d95
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsPropertyKey.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+ return typeof argument === 'string' || typeof argument === 'symbol';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsRegExp.js b/node_modules/object.values/node_modules/es-abstract/2018/IsRegExp.js
new file mode 100644
index 0000000..fdf2323
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsRegExp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+ if (!argument || typeof argument !== 'object') {
+ return false;
+ }
+ if ($match) {
+ var isRegExp = argument[$match];
+ if (typeof isRegExp !== 'undefined') {
+ return ToBoolean(isRegExp);
+ }
+ }
+ return hasRegExpMatcher(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IsStringPrefix.js b/node_modules/object.values/node_modules/es-abstract/2018/IsStringPrefix.js
new file mode 100644
index 0000000..f5e2996
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IsStringPrefix.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+// var callBound = require('../helpers/callBound');
+
+// var $charAt = callBound('String.prototype.charAt');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-isstringprefix
+
+module.exports = function IsStringPrefix(p, q) {
+ if (Type(p) !== 'String') {
+ throw new $TypeError('Assertion failed: "p" must be a String');
+ }
+
+ if (Type(q) !== 'String') {
+ throw new $TypeError('Assertion failed: "q" must be a String');
+ }
+
+ return isPrefixOf(p, q);
+ /*
+ if (p === q || p === '') {
+ return true;
+ }
+
+ var pLength = p.length;
+ var qLength = q.length;
+ if (pLength >= qLength) {
+ return false;
+ }
+
+ // assert: pLength < qLength
+
+ for (var i = 0; i < pLength; i += 1) {
+ if ($charAt(p, i) !== $charAt(q, i)) {
+ return false;
+ }
+ }
+ return true;
+ */
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IterableToList.js b/node_modules/object.values/node_modules/es-abstract/2018/IterableToList.js
new file mode 100644
index 0000000..0b8cdcf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IterableToList.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+var $arrayPush = callBound('Array.prototype.push');
+
+var GetIterator = require('./GetIterator');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-iterabletolist
+
+module.exports = function IterableToList(items, method) {
+ var iterator = GetIterator(items, method);
+ var values = [];
+ var next = true;
+ while (next) {
+ next = IteratorStep(iterator);
+ if (next) {
+ var nextValue = IteratorValue(next);
+ $arrayPush(values, nextValue);
+ }
+ }
+ return values;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IteratorClose.js b/node_modules/object.values/node_modules/es-abstract/2018/IteratorClose.js
new file mode 100644
index 0000000..35c8c2b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IteratorClose.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+ }
+ if (!IsCallable(completion)) {
+ throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
+ }
+ var completionThunk = completion;
+
+ var iteratorReturn = GetMethod(iterator, 'return');
+
+ if (typeof iteratorReturn === 'undefined') {
+ return completionThunk();
+ }
+
+ var completionRecord;
+ try {
+ var innerResult = Call(iteratorReturn, iterator, []);
+ } catch (e) {
+ // if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+ // if the completion is of type "throw", this will throw.
+ completionThunk();
+ completionThunk = null; // ensure it's not called twice.
+
+ // if not, then return the innerResult completion
+ throw e;
+ }
+ completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+ completionThunk = null; // ensure it's not called twice.
+
+ if (Type(innerResult) !== 'Object') {
+ throw new $TypeError('iterator .return must return an object');
+ }
+
+ return completionRecord;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IteratorComplete.js b/node_modules/object.values/node_modules/es-abstract/2018/IteratorComplete.js
new file mode 100644
index 0000000..a62b9bf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IteratorComplete.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return ToBoolean(Get(iterResult, 'done'));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IteratorNext.js b/node_modules/object.values/node_modules/es-abstract/2018/IteratorNext.js
new file mode 100644
index 0000000..7e59915
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IteratorNext.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Invoke = require('./Invoke');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+ var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+ if (Type(result) !== 'Object') {
+ throw new $TypeError('iterator next must return an object');
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IteratorStep.js b/node_modules/object.values/node_modules/es-abstract/2018/IteratorStep.js
new file mode 100644
index 0000000..41b9d1b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IteratorStep.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+ var result = IteratorNext(iterator);
+ var done = IteratorComplete(result);
+ return done === true ? false : result;
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/IteratorValue.js b/node_modules/object.values/node_modules/es-abstract/2018/IteratorValue.js
new file mode 100644
index 0000000..5e71a44
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/IteratorValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return Get(iterResult, 'value');
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/MakeDate.js b/node_modules/object.values/node_modules/es-abstract/2018/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/MakeDay.js b/node_modules/object.values/node_modules/es-abstract/2018/MakeDay.js
new file mode 100644
index 0000000..f1ab810
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var mod = require('../helpers/mod');
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + $floor(m / 12);
+ var mn = mod(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/MakeTime.js b/node_modules/object.values/node_modules/es-abstract/2018/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/MinFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/MinFromTime.js
new file mode 100644
index 0000000..e80e191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/MinFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return mod($floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/MonthFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/NumberToString.js b/node_modules/object.values/node_modules/es-abstract/2018/NumberToString.js
new file mode 100644
index 0000000..2cc70e0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/NumberToString.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-tostring-applied-to-the-number-type
+
+module.exports = function NumberToString(m) {
+ if (Type(m) !== 'Number') {
+ throw new TypeError('Assertion failed: "m" must be a String');
+ }
+
+ return $String(m);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ObjectCreate.js b/node_modules/object.values/node_modules/es-abstract/2018/ObjectCreate.js
new file mode 100644
index 0000000..e2445b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ObjectCreate.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var Type = require('./Type');
+
+var hasProto = !({ __proto__: null } instanceof Object);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
+
+module.exports = function ObjectCreate(proto, internalSlotsList) {
+ if (proto !== null && Type(proto) !== 'Object') {
+ throw new $TypeError('Assertion failed: `proto` must be null or an object');
+ }
+ var slots = arguments.length < 2 ? [] : internalSlotsList;
+ if (slots.length > 0) {
+ throw new $SyntaxError('es-abstract does not yet support internal slots');
+ }
+
+ if ($ObjectCreate) {
+ return $ObjectCreate(proto);
+ }
+ if (hasProto) {
+ return { __proto__: proto };
+ }
+
+ if (proto === null) {
+ throw new $SyntaxError('native Object.create support is required to create null objects');
+ }
+ var T = function T() {};
+ T.prototype = proto;
+ return new T();
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js
new file mode 100644
index 0000000..59780b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js
@@ -0,0 +1,61 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!$gOPD) {
+ // ES3/IE 8 fallback
+ if (IsAccessorDescriptor(Desc)) {
+ throw new $SyntaxError('This environment does not support accessor property descriptors.');
+ }
+ var creatingNormalDataProperty = !(P in O)
+ && Desc['[[Writable]]']
+ && Desc['[[Enumerable]]']
+ && Desc['[[Configurable]]']
+ && '[[Value]]' in Desc;
+ var settingExistingDataProperty = (P in O)
+ && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+ && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+ && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+ && '[[Value]]' in Desc;
+ if (creatingNormalDataProperty || settingExistingDataProperty) {
+ O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+ return SameValue(O[P], Desc['[[Value]]']);
+ }
+ throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+ }
+ var desc = $gOPD(O, P);
+ var current = desc && ToPropertyDescriptor(desc);
+ var extensible = IsExtensible(O);
+ return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js
new file mode 100644
index 0000000..b9882e5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var has = require('has');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!has(O, P)) {
+ return void 0;
+ }
+ if (!$gOPD) {
+ // ES3 / IE 8 fallback
+ var arrayLength = IsArray(O) && P === 'length';
+ var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+ return {
+ '[[Configurable]]': !(arrayLength || regexLastIndex),
+ '[[Enumerable]]': $isEnumerable(O, P),
+ '[[Value]]': O[P],
+ '[[Writable]]': true
+ };
+ }
+ return ToPropertyDescriptor($gOPD(O, P));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js
new file mode 100644
index 0000000..344077a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $getProto = require('../helpers/getProto');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!$getProto) {
+ throw new $TypeError('This environment does not support fetching prototypes.');
+ }
+ return $getProto(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryHasInstance.js b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryHasInstance.js
new file mode 100644
index 0000000..51abe26
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryHasInstance.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+ if (IsCallable(C) === false) {
+ return false;
+ }
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ var P = Get(C, 'prototype');
+ if (Type(P) !== 'Object') {
+ throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return O instanceof C;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryHasProperty.js b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryHasProperty.js
new file mode 100644
index 0000000..076c25a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/OrdinaryHasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js
new file mode 100644
index 0000000..3541331
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $setProto = require('../helpers/setProto');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+ if (Type(V) !== 'Object' && Type(V) !== 'Null') {
+ throw new $TypeError('Assertion failed: V must be Object or Null');
+ }
+ /*
+ var extensible = IsExtensible(O);
+ var current = OrdinaryGetPrototypeOf(O);
+ if (SameValue(V, current)) {
+ return true;
+ }
+ if (!extensible) {
+ return false;
+ }
+ */
+ try {
+ $setProto(O, V);
+ } catch (e) {
+ return false;
+ }
+ return OrdinaryGetPrototypeOf(O) === V;
+ /*
+ var p = V;
+ var done = false;
+ while (!done) {
+ if (p === null) {
+ done = true;
+ } else if (SameValue(p, O)) {
+ return false;
+ } else {
+ if (wat) {
+ done = true;
+ } else {
+ p = p.[[Prototype]];
+ }
+ }
+ }
+ O.[[Prototype]] = V;
+ return true;
+ */
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/PromiseResolve.js b/node_modules/object.values/node_modules/es-abstract/2018/PromiseResolve.js
new file mode 100644
index 0000000..f70745d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/PromiseResolve.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseResolve = callBound('Promise.resolve', true);
+
+// https://ecma-international.org/ecma-262/9.0/#sec-promise-resolve
+
+module.exports = function PromiseResolve(C, x) {
+ if (!$PromiseResolve) {
+ throw new SyntaxError('This environment does not support Promises.');
+ }
+ return $PromiseResolve(C, x);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/RegExpExec.js b/node_modules/object.values/node_modules/es-abstract/2018/RegExpExec.js
new file mode 100644
index 0000000..15c9186
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/RegExpExec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var regexExec = require('../helpers/callBound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+ if (Type(R) !== 'Object') {
+ throw new $TypeError('Assertion failed: `R` must be an Object');
+ }
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ var exec = Get(R, 'exec');
+ if (IsCallable(exec)) {
+ var result = Call(exec, R, [S]);
+ if (result === null || Type(result) === 'Object') {
+ return result;
+ }
+ throw new $TypeError('"exec" method must return `null` or an Object');
+ }
+ return regexExec(R, S);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/RequireObjectCoercible.js b/node_modules/object.values/node_modules/es-abstract/2018/RequireObjectCoercible.js
new file mode 100644
index 0000000..9008359
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/RequireObjectCoercible.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../5/CheckObjectCoercible');
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SameValue.js b/node_modules/object.values/node_modules/es-abstract/2018/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SameValueNonNumber.js b/node_modules/object.values/node_modules/es-abstract/2018/SameValueNonNumber.js
new file mode 100644
index 0000000..5668752
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SameValueNonNumber.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+
+// https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
+
+module.exports = function SameValueNonNumber(x, y) {
+ if (typeof x === 'number' || typeof x !== typeof y) {
+ throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.');
+ }
+ return SameValue(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SameValueZero.js b/node_modules/object.values/node_modules/es-abstract/2018/SameValueZero.js
new file mode 100644
index 0000000..0dedcd2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SameValueZero.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+ return (x === y) || ($isNaN(x) && $isNaN(y));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SecFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/SecFromTime.js
new file mode 100644
index 0000000..7190011
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SecFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return mod($floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/Set.js b/node_modules/object.values/node_modules/es-abstract/2018/Set.js
new file mode 100644
index 0000000..18ebd99
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/Set.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ if (Type(Throw) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+ }
+ if (Throw) {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return true;
+ } else {
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ } catch (e) {
+ return false;
+ }
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SetFunctionName.js b/node_modules/object.values/node_modules/es-abstract/2018/SetFunctionName.js
new file mode 100644
index 0000000..f93324a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SetFunctionName.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getSymbolDescription = require('../helpers/getSymbolDescription');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+ if (typeof F !== 'function') {
+ throw new $TypeError('Assertion failed: `F` must be a function');
+ }
+ if (!IsExtensible(F) || has(F, 'name')) {
+ throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+ }
+ var nameType = Type(name);
+ if (nameType !== 'Symbol' && nameType !== 'String') {
+ throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+ }
+ if (nameType === 'Symbol') {
+ var description = getSymbolDescription(name);
+ // eslint-disable-next-line no-param-reassign
+ name = typeof description === 'undefined' ? '' : '[' + description + ']';
+ }
+ if (arguments.length > 2) {
+ var prefix = arguments[2];
+ // eslint-disable-next-line no-param-reassign
+ name = prefix + ' ' + name;
+ }
+ return DefinePropertyOrThrow(F, 'name', {
+ '[[Value]]': name,
+ '[[Writable]]': false,
+ '[[Enumerable]]': false,
+ '[[Configurable]]': true
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SetIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2018/SetIntegrityLevel.js
new file mode 100644
index 0000000..3d5c81d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SetIntegrityLevel.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ if (!$preventExtensions) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+ }
+ var status = $preventExtensions(O);
+ if (!status) {
+ return false;
+ }
+ if (!$gOPN) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+ }
+ var theKeys = $gOPN(O);
+ if (level === 'sealed') {
+ forEach(theKeys, function (k) {
+ DefinePropertyOrThrow(O, k, { configurable: false });
+ });
+ } else if (level === 'frozen') {
+ forEach(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ var desc;
+ if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+ desc = { configurable: false };
+ } else {
+ desc = { configurable: false, writable: false };
+ }
+ DefinePropertyOrThrow(O, k, desc);
+ }
+ });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SpeciesConstructor.js b/node_modules/object.values/node_modules/es-abstract/2018/SpeciesConstructor.js
new file mode 100644
index 0000000..3cdcd74
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SpeciesConstructor.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var C = O.constructor;
+ if (typeof C === 'undefined') {
+ return defaultConstructor;
+ }
+ if (Type(C) !== 'Object') {
+ throw new $TypeError('O.constructor is not an Object');
+ }
+ var S = $species ? C[$species] : void 0;
+ if (S == null) {
+ return defaultConstructor;
+ }
+ if (IsConstructor(S)) {
+ return S;
+ }
+ throw new $TypeError('no constructor found');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/StrictEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2018/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/SymbolDescriptiveString.js b/node_modules/object.values/node_modules/es-abstract/2018/SymbolDescriptiveString.js
new file mode 100644
index 0000000..7bd8191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/SymbolDescriptiveString.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+ if (Type(sym) !== 'Symbol') {
+ throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+ }
+ return $SymbolToString(sym);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/TestIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2018/TestIntegrityLevel.js
new file mode 100644
index 0000000..7a57397
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/TestIntegrityLevel.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var every = require('../helpers/every');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ var status = IsExtensible(O);
+ if (status) {
+ return false;
+ }
+ var theKeys = $gOPN(O);
+ return theKeys.length === 0 || every(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ if (currentDesc.configurable) {
+ return false;
+ }
+ if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+ return false;
+ }
+ }
+ return true;
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/TimeClip.js b/node_modules/object.values/node_modules/es-abstract/2018/TimeClip.js
new file mode 100644
index 0000000..57aa08c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+var $abs = GetIntrinsic('%Math.abs%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || $abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/TimeFromYear.js b/node_modules/object.values/node_modules/es-abstract/2018/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/TimeString.js b/node_modules/object.values/node_modules/es-abstract/2018/TimeString.js
new file mode 100644
index 0000000..87642eb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/TimeString.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var HourFromTime = require('./HourFromTime');
+var MinFromTime = require('./MinFromTime');
+var SecFromTime = require('./SecFromTime');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-timestring
+
+module.exports = function TimeString(tv) {
+ if (Type(tv) !== 'Number' || $isNaN(tv)) {
+ throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+ }
+ var hour = HourFromTime(tv);
+ var minute = MinFromTime(tv);
+ var second = SecFromTime(tv);
+ return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/TimeWithinDay.js b/node_modules/object.values/node_modules/es-abstract/2018/TimeWithinDay.js
new file mode 100644
index 0000000..c5b21d3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/TimeWithinDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return mod(t, msPerDay);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToBoolean.js b/node_modules/object.values/node_modules/es-abstract/2018/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToDateString.js b/node_modules/object.values/node_modules/es-abstract/2018/ToDateString.js
new file mode 100644
index 0000000..7a6d4c4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToDateString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Date = GetIntrinsic('%Date%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+ if (Type(tv) !== 'Number') {
+ throw new $TypeError('Assertion failed: `tv` must be a Number');
+ }
+ if ($isNaN(tv)) {
+ return 'Invalid Date';
+ }
+ return $Date(tv);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToIndex.js b/node_modules/object.values/node_modules/es-abstract/2018/ToIndex.js
new file mode 100644
index 0000000..a55398d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToIndex.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+
+var ToInteger = require('./ToInteger');
+var ToLength = require('./ToLength');
+var SameValueZero = require('./SameValueZero');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-toindex
+
+module.exports = function ToIndex(value) {
+ if (typeof value === 'undefined') {
+ return 0;
+ }
+ var integerIndex = ToInteger(value);
+ if (integerIndex < 0) {
+ throw new $RangeError('index must be >= 0');
+ }
+ var index = ToLength(integerIndex);
+ if (!SameValueZero(integerIndex, index)) {
+ throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1');
+ }
+ return index;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToInt16.js b/node_modules/object.values/node_modules/es-abstract/2018/ToInt16.js
new file mode 100644
index 0000000..5a112c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToInt16.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+ var int16bit = ToUint16(argument);
+ return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToInt32.js b/node_modules/object.values/node_modules/es-abstract/2018/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToInt8.js b/node_modules/object.values/node_modules/es-abstract/2018/ToInt8.js
new file mode 100644
index 0000000..d103123
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToInt8.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+ var int8bit = ToUint8(argument);
+ return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToInteger.js b/node_modules/object.values/node_modules/es-abstract/2018/ToInteger.js
new file mode 100644
index 0000000..16f7db9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToInteger.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ return ES5ToInteger(number);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToLength.js b/node_modules/object.values/node_modules/es-abstract/2018/ToLength.js
new file mode 100644
index 0000000..1bef9be
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToLength.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var ToInteger = require('./ToInteger');
+
+module.exports = function ToLength(argument) {
+ var len = ToInteger(argument);
+ if (len <= 0) { return 0; } // includes converting -0 to +0
+ if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+ return len;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToNumber.js b/node_modules/object.values/node_modules/es-abstract/2018/ToNumber.js
new file mode 100644
index 0000000..7a3cdc8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToNumber.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+// whitespace from: https://es5.github.io/#x15.5.4.20
+// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+var ws = [
+ '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
+ '\u2029\uFEFF'
+].join('');
+var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
+var $replace = callBound('String.prototype.replace');
+var $trim = function (value) {
+ return $replace(value, trimRegex, '');
+};
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+ var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (typeof value === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a number');
+ }
+ if (typeof value === 'string') {
+ if (isBinary(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 2));
+ } else if (isOctal(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 8));
+ } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+ return NaN;
+ } else {
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+ }
+ }
+ return $Number(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToObject.js b/node_modules/object.values/node_modules/es-abstract/2018/ToObject.js
new file mode 100644
index 0000000..50d5b94
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
+
+module.exports = function ToObject(value) {
+ RequireObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToPrimitive.js b/node_modules/object.values/node_modules/es-abstract/2018/ToPrimitive.js
new file mode 100644
index 0000000..81c655d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToPrimitive.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+ if (arguments.length > 1) {
+ return toPrimitive(input, arguments[1]);
+ }
+ return toPrimitive(input);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/ToPropertyDescriptor.js
new file mode 100644
index 0000000..38e536e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2018/ToPropertyKey.js
new file mode 100644
index 0000000..38f40dd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToPropertyKey.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+ var key = ToPrimitive(argument, $String);
+ return typeof key === 'symbol' ? key : ToString(key);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToString.js b/node_modules/object.values/node_modules/es-abstract/2018/ToString.js
new file mode 100644
index 0000000..a345431
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToString.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+ if (typeof argument === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a string');
+ }
+ return $String(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToUint16.js b/node_modules/object.values/node_modules/es-abstract/2018/ToUint16.js
new file mode 100644
index 0000000..c8a408b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToUint16.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x10000);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToUint32.js b/node_modules/object.values/node_modules/es-abstract/2018/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToUint8.js b/node_modules/object.values/node_modules/es-abstract/2018/ToUint8.js
new file mode 100644
index 0000000..bf84753
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToUint8.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+module.exports = function ToUint8(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x100);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ToUint8Clamp.js b/node_modules/object.values/node_modules/es-abstract/2018/ToUint8Clamp.js
new file mode 100644
index 0000000..c7f9f56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ToUint8Clamp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+
+var $floor = $Math.floor;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number <= 0) { return 0; }
+ if (number >= 0xFF) { return 0xFF; }
+ var f = $floor(argument);
+ if (f + 0.5 < number) { return f + 1; }
+ if (number < f + 0.5) { return f; }
+ if (f % 2 !== 0) { return f + 1; }
+ return f;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/Type.js b/node_modules/object.values/node_modules/es-abstract/2018/Type.js
new file mode 100644
index 0000000..6c99376
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/Type.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function Type(x) {
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ return ES5Type(x);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js
new file mode 100644
index 0000000..d4b9007
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js
@@ -0,0 +1,170 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
+// https://www.ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements, max-params
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+ // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+ var oType = Type(O);
+ if (oType !== 'Undefined' && oType !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be undefined or an Object');
+ }
+ if (Type(extensible) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: extensible must be a Boolean');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (Type(current) !== 'Undefined' && !isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, current)) {
+ throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+ }
+ if (oType !== 'Undefined' && !IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+ }
+ if (Type(current) === 'Undefined') {
+ if (!extensible) {
+ return false;
+ }
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': Desc['[[Configurable]]'],
+ '[[Enumerable]]': Desc['[[Enumerable]]'],
+ '[[Value]]': Desc['[[Value]]'],
+ '[[Writable]]': Desc['[[Writable]]']
+ }
+ );
+ }
+ } else {
+ if (!IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ }
+ return true;
+ }
+ if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+ return true;
+ }
+ if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+ return true; // removed by ES2017, but should still be correct
+ }
+ // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+ if (!current['[[Configurable]]']) {
+ if (Desc['[[Configurable]]']) {
+ return false;
+ }
+ if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+ return false;
+ }
+ }
+ if (IsGenericDescriptor(Desc)) {
+ // no further validation is required.
+ } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ return false;
+ }
+ if (IsDataDescriptor(current)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Get]]': undefined
+ }
+ );
+ }
+ } else if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Value]]': undefined
+ }
+ );
+ }
+ } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+ if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+ return false;
+ }
+ if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+ return false;
+ }
+ if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else {
+ throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/WeekDay.js b/node_modules/object.values/node_modules/es-abstract/2018/WeekDay.js
new file mode 100644
index 0000000..2973e02
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/WeekDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+var Day = require('./Day');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/YearFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/modulo.js b/node_modules/object.values/node_modules/es-abstract/2018/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/msFromTime.js b/node_modules/object.values/node_modules/es-abstract/2018/msFromTime.js
new file mode 100644
index 0000000..c31eda0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/msFromTime.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return mod(t, msPerSecond);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/thisBooleanValue.js b/node_modules/object.values/node_modules/es-abstract/2018/thisBooleanValue.js
new file mode 100644
index 0000000..3ffac9c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/thisBooleanValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $BooleanValueOf = require('../helpers/callBound')('Boolean.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+ if (Type(value) === 'Boolean') {
+ return value;
+ }
+
+ return $BooleanValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/thisNumberValue.js b/node_modules/object.values/node_modules/es-abstract/2018/thisNumberValue.js
new file mode 100644
index 0000000..0345e52
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/thisNumberValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var Type = require('./Type');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+ if (Type(value) === 'Number') {
+ return value;
+ }
+
+ return $NumberValueOf(value);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/thisStringValue.js b/node_modules/object.values/node_modules/es-abstract/2018/thisStringValue.js
new file mode 100644
index 0000000..3b99b6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/thisStringValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $StringValueOf = require('../helpers/callBound')('String.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+ if (Type(value) === 'String') {
+ return value;
+ }
+
+ return $StringValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/thisSymbolValue.js b/node_modules/object.values/node_modules/es-abstract/2018/thisSymbolValue.js
new file mode 100644
index 0000000..3c3b347
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/thisSymbolValue.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/9.0/#sec-thissymbolvalue
+
+module.exports = function thisSymbolValue(value) {
+ if (!$SymbolValueOf) {
+ throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object');
+ }
+ if (Type(value) === 'Symbol') {
+ return value;
+ }
+ return $SymbolValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2018/thisTimeValue.js b/node_modules/object.values/node_modules/es-abstract/2018/thisTimeValue.js
new file mode 100644
index 0000000..d7cda28
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2018/thisTimeValue.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $DateValueOf = require('../helpers/callBound')('Date.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
+
+module.exports = function thisTimeValue(value) {
+ return $DateValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/AbstractEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2019/AbstractEqualityComparison.js
new file mode 100644
index 0000000..40b3909
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/AbstractRelationalComparison.js b/node_modules/object.values/node_modules/es-abstract/2019/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/AddEntriesFromIterable.js b/node_modules/object.values/node_modules/es-abstract/2019/AddEntriesFromIterable.js
new file mode 100644
index 0000000..5aed447
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/AddEntriesFromIterable.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var inspect = require('object-inspect');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var GetIterator = require('./GetIterator');
+var IsCallable = require('./IsCallable');
+var IteratorClose = require('./IteratorClose');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+var Type = require('./Type');
+
+// https://tc39.es/ecma262/#sec-add-entries-from-iterable
+
+module.exports = function AddEntriesFromIterable(target, iterable, adder) {
+ if (!IsCallable(adder)) {
+ throw new $TypeError('Assertion failed: `adder` is not callable');
+ }
+ if (iterable == null) {
+ throw new $TypeError('Assertion failed: `iterable` is present, and not nullish');
+ }
+ var iteratorRecord = GetIterator(iterable);
+ while (true) { // eslint-disable-line no-constant-condition
+ var next = IteratorStep(iteratorRecord);
+ if (!next) {
+ return target;
+ }
+ var nextItem = IteratorValue(next);
+ if (Type(nextItem) !== 'Object') {
+ var error = new $TypeError('iterator next must return an Object, got ' + inspect(nextItem));
+ return IteratorClose(
+ iteratorRecord,
+ function () { throw error; } // eslint-disable-line no-loop-func
+ );
+ }
+ try {
+ var k = Get(nextItem, '0');
+ var v = Get(nextItem, '1');
+ Call(adder, target, [k, v]);
+ } catch (e) {
+ return IteratorClose(
+ iteratorRecord,
+ function () { throw e; }
+ );
+ }
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/AdvanceStringIndex.js b/node_modules/object.values/node_modules/es-abstract/2019/AdvanceStringIndex.js
new file mode 100644
index 0000000..666f578
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/AdvanceStringIndex.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+ throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+ }
+ if (Type(unicode) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+ }
+ if (!unicode) {
+ return index + 1;
+ }
+ var length = S.length;
+ if ((index + 1) >= length) {
+ return index + 1;
+ }
+
+ var first = $charCodeAt(S, index);
+ if (first < 0xD800 || first > 0xDBFF) {
+ return index + 1;
+ }
+
+ var second = $charCodeAt(S, index + 1);
+ if (second < 0xDC00 || second > 0xDFFF) {
+ return index + 1;
+ }
+
+ return index + 2;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ArrayCreate.js b/node_modules/object.values/node_modules/es-abstract/2019/ArrayCreate.js
new file mode 100644
index 0000000..fc9a7cf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ArrayCreate.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsInteger = require('./IsInteger');
+
+var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+
+var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayPrototype
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+ }
+ if (length > MAX_ARRAY_LENGTH) {
+ throw new $RangeError('length is greater than (2**32 - 1)');
+ }
+ var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+ var A = []; // steps 5 - 7, and 9
+ if (proto !== $ArrayPrototype) { // step 8
+ if (!$setProto) {
+ throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ $setProto(A, proto);
+ }
+ if (length !== 0) { // bypasses the need for step 2
+ A.length = length;
+ }
+ /* step 10, the above as a shortcut for the below
+ OrdinaryDefineOwnProperty(A, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': true
+ });
+ */
+ return A;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ArraySetLength.js b/node_modules/object.values/node_modules/es-abstract/2019/ArraySetLength.js
new file mode 100644
index 0000000..c9134c6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ArraySetLength.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsArray = require('./IsArray');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+ if (!IsArray(A)) {
+ throw new $TypeError('Assertion failed: A must be an Array');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!('[[Value]]' in Desc)) {
+ return OrdinaryDefineOwnProperty(A, 'length', Desc);
+ }
+ var newLenDesc = assign({}, Desc);
+ var newLen = ToUint32(Desc['[[Value]]']);
+ var numberLen = ToNumber(Desc['[[Value]]']);
+ if (newLen !== numberLen) {
+ throw new $RangeError('Invalid array length');
+ }
+ newLenDesc['[[Value]]'] = newLen;
+ var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+ if (!IsDataDescriptor(oldLenDesc)) {
+ throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+ }
+ var oldLen = oldLenDesc['[[Value]]'];
+ if (newLen >= oldLen) {
+ return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ }
+ if (!oldLenDesc['[[Writable]]']) {
+ return false;
+ }
+ var newWritable;
+ if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+ newWritable = true;
+ } else {
+ newWritable = false;
+ newLenDesc['[[Writable]]'] = true;
+ }
+ var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ if (!succeeded) {
+ return false;
+ }
+ while (newLen < oldLen) {
+ oldLen -= 1;
+ // eslint-disable-next-line no-param-reassign
+ var deleteSucceeded = delete A[ToString(oldLen)];
+ if (!deleteSucceeded) {
+ newLenDesc['[[Value]]'] = oldLen + 1;
+ if (!newWritable) {
+ newLenDesc['[[Writable]]'] = false;
+ OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ return false;
+ }
+ }
+ }
+ if (!newWritable) {
+ return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ArraySpeciesCreate.js b/node_modules/object.values/node_modules/es-abstract/2019/ArraySpeciesCreate.js
new file mode 100644
index 0000000..98b9b56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ArraySpeciesCreate.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var IsInteger = require('./IsInteger');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+ if (!IsInteger(length) || length < 0) {
+ throw new $TypeError('Assertion failed: length must be an integer >= 0');
+ }
+ var len = length === 0 ? 0 : length;
+ var C;
+ var isArray = IsArray(originalArray);
+ if (isArray) {
+ C = Get(originalArray, 'constructor');
+ // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+ // if (IsConstructor(C)) {
+ // if C is another realm's Array, C = undefined
+ // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+ // }
+ if ($species && Type(C) === 'Object') {
+ C = Get(C, $species);
+ if (C === null) {
+ C = void 0;
+ }
+ }
+ }
+ if (typeof C === 'undefined') {
+ return $Array(len);
+ }
+ if (!IsConstructor(C)) {
+ throw new $TypeError('C must be a constructor');
+ }
+ return new C(len); // Construct(C, len);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/Call.js b/node_modules/object.values/node_modules/es-abstract/2019/Call.js
new file mode 100644
index 0000000..f31960d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/Call.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsCallable = require('./IsCallable');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+ var args = arguments.length > 2 ? arguments[2] : [];
+ if (!IsCallable(F)) {
+ throw new $TypeError(inspect(F) + ' is not a function');
+ }
+ return F.apply(V, args);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CanonicalNumericIndexString.js b/node_modules/object.values/node_modules/es-abstract/2019/CanonicalNumericIndexString.js
new file mode 100644
index 0000000..625f853
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CanonicalNumericIndexString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+ if (Type(argument) !== 'String') {
+ throw new $TypeError('Assertion failed: `argument` must be a String');
+ }
+ if (argument === '-0') { return -0; }
+ var n = ToNumber(argument);
+ if (SameValue(ToString(n), argument)) { return n; }
+ return void 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CompletePropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/CompletePropertyDescriptor.js
new file mode 100644
index 0000000..548bf41
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CompletePropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+ /* eslint no-param-reassign: 0 */
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (!has(Desc, '[[Value]]')) {
+ Desc['[[Value]]'] = void 0;
+ }
+ if (!has(Desc, '[[Writable]]')) {
+ Desc['[[Writable]]'] = false;
+ }
+ } else {
+ if (!has(Desc, '[[Get]]')) {
+ Desc['[[Get]]'] = void 0;
+ }
+ if (!has(Desc, '[[Set]]')) {
+ Desc['[[Set]]'] = void 0;
+ }
+ }
+ if (!has(Desc, '[[Enumerable]]')) {
+ Desc['[[Enumerable]]'] = false;
+ }
+ if (!has(Desc, '[[Configurable]]')) {
+ Desc['[[Configurable]]'] = false;
+ }
+ return Desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CopyDataProperties.js b/node_modules/object.values/node_modules/es-abstract/2019/CopyDataProperties.js
new file mode 100644
index 0000000..b75ba42
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CopyDataProperties.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+var forEach = require('../helpers/forEach');
+var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-copydataproperties
+
+module.exports = function CopyDataProperties(target, source, excludedItems) {
+ if (Type(target) !== 'Object') {
+ throw new TypeError('Assertion failed: "target" must be an Object');
+ }
+
+ if (!IsArray(excludedItems)) {
+ throw new TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
+ }
+ for (var i = 0; i < excludedItems.length; i += 1) {
+ if (!IsPropertyKey(excludedItems[i])) {
+ throw new TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
+ }
+ }
+
+ if (typeof source === 'undefined' || source === null) {
+ return target;
+ }
+
+ var ES = this;
+
+ var fromObj = ES.ToObject(source);
+
+ var sourceKeys = OwnPropertyKeys(fromObj);
+ forEach(sourceKeys, function (nextKey) {
+ var excluded = false;
+
+ forEach(excludedItems, function (e) {
+ if (ES.SameValue(e, nextKey) === true) {
+ excluded = true;
+ }
+ });
+
+ var enumerable = $isEnumerable(fromObj, nextKey) || (
+ // this is to handle string keys being non-enumerable in older engines
+ typeof source === 'string'
+ && nextKey >= 0
+ && ES.IsInteger(ES.ToNumber(nextKey))
+ );
+ if (excluded === false && enumerable) {
+ var propValue = ES.Get(fromObj, nextKey);
+ ES.CreateDataProperty(target, nextKey, propValue);
+ }
+ });
+
+ return target;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CreateDataProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/CreateDataProperty.js
new file mode 100644
index 0000000..32a86ef
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CreateDataProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var oldDesc = OrdinaryGetOwnProperty(O, P);
+ var extensible = !oldDesc || IsExtensible(O);
+ var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
+ if (immutable || !extensible) {
+ return false;
+ }
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ }
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js
new file mode 100644
index 0000000..9feaec8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var CreateDataProperty = require('./CreateDataProperty');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var success = CreateDataProperty(O, P, V);
+ if (!success) {
+ throw new $TypeError('unable to create data property');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CreateHTML.js b/node_modules/object.values/node_modules/es-abstract/2019/CreateHTML.js
new file mode 100644
index 0000000..536c92d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CreateHTML.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+ if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+ throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+ }
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var p1 = '<' + tag;
+ if (attribute !== '') {
+ var V = ToString(value);
+ var escapedV = $replace(V, /\x22/g, '"');
+ p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+ }
+ return p1 + '>' + S + '</' + tag + '>';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CreateIterResultObject.js b/node_modules/object.values/node_modules/es-abstract/2019/CreateIterResultObject.js
new file mode 100644
index 0000000..aef1d22
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CreateIterResultObject.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+ if (Type(done) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+ }
+ return {
+ value: value,
+ done: done
+ };
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CreateListFromArrayLike.js b/node_modules/object.values/node_modules/es-abstract/2019/CreateListFromArrayLike.js
new file mode 100644
index 0000000..d6b44b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CreateListFromArrayLike.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBound = require('../helpers/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+var $push = callBound('Array.prototype.push');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
+module.exports = function CreateListFromArrayLike(obj) {
+ var elementTypes = arguments.length > 1
+ ? arguments[1]
+ : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ if (!IsArray(elementTypes)) {
+ throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+ }
+ var len = ToLength(Get(obj, 'length'));
+ var list = [];
+ var index = 0;
+ while (index < len) {
+ var indexName = ToString(index);
+ var next = Get(obj, indexName);
+ var nextType = Type(next);
+ if ($indexOf(elementTypes, nextType) < 0) {
+ throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+ }
+ $push(list, next);
+ index += 1;
+ }
+ return list;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/CreateMethodProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/CreateMethodProperty.js
new file mode 100644
index 0000000..5b599ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/CreateMethodProperty.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var newDesc = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ };
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ newDesc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DateFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DateString.js b/node_modules/object.values/node_modules/es-abstract/2019/DateString.js
new file mode 100644
index 0000000..fc30329
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DateString.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+
+var $isNaN = require('../helpers/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var Type = require('./Type');
+var WeekDay = require('./WeekDay');
+var MonthFromTime = require('./MonthFromTime');
+var YearFromTime = require('./YearFromTime');
+var DateFromTime = require('./DateFromTime');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-datestring
+
+module.exports = function DateString(tv) {
+ if (Type(tv) !== 'Number' || $isNaN(tv)) {
+ throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+ }
+ var weekday = weekdays[WeekDay(tv)];
+ var month = months[MonthFromTime(tv)];
+ var day = padTimeComponent(DateFromTime(tv));
+ var year = padTimeComponent(YearFromTime(tv), 4);
+ return weekday + '\x20' + month + '\x20' + day + '\x20' + year;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/Day.js b/node_modules/object.values/node_modules/es-abstract/2019/Day.js
new file mode 100644
index 0000000..00df813
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/Day.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return $floor(t / msPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DayFromYear.js b/node_modules/object.values/node_modules/es-abstract/2019/DayFromYear.js
new file mode 100644
index 0000000..08dd5af
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DayFromYear.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DayWithinYear.js b/node_modules/object.values/node_modules/es-abstract/2019/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DaysInYear.js b/node_modules/object.values/node_modules/es-abstract/2019/DaysInYear.js
new file mode 100644
index 0000000..db32251
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (mod(y, 4) !== 0) {
+ return 365;
+ }
+ if (mod(y, 100) !== 0) {
+ return 366;
+ }
+ if (mod(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DefinePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2019/DefinePropertyOrThrow.js
new file mode 100644
index 0000000..7977f6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DefinePropertyOrThrow.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var Desc = isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, desc) ? desc : ToPropertyDescriptor(desc);
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+ }
+
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/DeletePropertyOrThrow.js b/node_modules/object.values/node_modules/es-abstract/2019/DeletePropertyOrThrow.js
new file mode 100644
index 0000000..b476817
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/DeletePropertyOrThrow.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ var success = delete O[P];
+ if (!success) {
+ throw new $TypeError('Attempt to delete property failed.');
+ }
+ return success;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js b/node_modules/object.values/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js
new file mode 100644
index 0000000..e2ed722
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var objectKeys = require('object-keys');
+
+var callBound = require('../helpers/callBound');
+
+var callBind = require('../helpers/callBind');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
+
+var forEach = require('../helpers/forEach');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties
+
+module.exports = function EnumerableOwnProperties(O, kind) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ var keys = objectKeys(O);
+ if (kind === 'key') {
+ return keys;
+ }
+ if (kind === 'value' || kind === 'key+value') {
+ var results = [];
+ forEach(keys, function (key) {
+ if ($isEnumerable(O, key)) {
+ $pushApply(results, [
+ kind === 'value' ? O[key] : [key, O[key]]
+ ]);
+ }
+ });
+ return results;
+ }
+ throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/FlattenIntoArray.js b/node_modules/object.values/node_modules/es-abstract/2019/FlattenIntoArray.js
new file mode 100644
index 0000000..313a6ed
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/FlattenIntoArray.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var Call = require('./Call');
+var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
+var Get = require('./Get');
+var HasProperty = require('./HasProperty');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+
+// https://ecma-international.org/ecma-262/10.0/#sec-flattenintoarray
+
+// eslint-disable-next-line max-params, max-statements
+module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {
+ var mapperFunction;
+ if (arguments.length > 5) {
+ mapperFunction = arguments[5];
+ }
+
+ var targetIndex = start;
+ var sourceIndex = 0;
+ while (sourceIndex < sourceLen) {
+ var P = ToString(sourceIndex);
+ var exists = HasProperty(source, P);
+ if (exists === true) {
+ var element = Get(source, P);
+ if (typeof mapperFunction !== 'undefined') {
+ if (arguments.length <= 6) {
+ throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided');
+ }
+ element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]);
+ }
+ var shouldFlatten = false;
+ if (depth > 0) {
+ shouldFlatten = IsArray(element);
+ }
+ if (shouldFlatten) {
+ var elementLen = ToLength(Get(element, 'length'));
+ targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1);
+ } else {
+ if (targetIndex >= MAX_SAFE_INTEGER) {
+ throw new $TypeError('index too large');
+ }
+ CreateDataPropertyOrThrow(target, ToString(targetIndex), element);
+ targetIndex += 1;
+ }
+ }
+ sourceIndex += 1;
+ }
+
+ return targetIndex;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/FromPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/FromPropertyDescriptor.js
new file mode 100644
index 0000000..5ec200e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/FromPropertyDescriptor.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ var obj = {};
+ if ('[[Value]]' in Desc) {
+ obj.value = Desc['[[Value]]'];
+ }
+ if ('[[Writable]]' in Desc) {
+ obj.writable = Desc['[[Writable]]'];
+ }
+ if ('[[Get]]' in Desc) {
+ obj.get = Desc['[[Get]]'];
+ }
+ if ('[[Set]]' in Desc) {
+ obj.set = Desc['[[Set]]'];
+ }
+ if ('[[Enumerable]]' in Desc) {
+ obj.enumerable = Desc['[[Enumerable]]'];
+ }
+ if ('[[Configurable]]' in Desc) {
+ obj.configurable = Desc['[[Configurable]]'];
+ }
+ return obj;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/Get.js b/node_modules/object.values/node_modules/es-abstract/2019/Get.js
new file mode 100644
index 0000000..5b9ad78
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/Get.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+/**
+ * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
+ * 1. Assert: Type(O) is Object.
+ * 2. Assert: IsPropertyKey(P) is true.
+ * 3. Return O.[[Get]](P, O).
+ */
+
+module.exports = function Get(O, P) {
+ // 7.3.1.1
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ // 7.3.1.2
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
+ }
+ // 7.3.1.3
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/GetIterator.js b/node_modules/object.values/node_modules/es-abstract/2019/GetIterator.js
new file mode 100644
index 0000000..7beddac
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/GetIterator.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, method) {
+ var actualMethod = method;
+ if (arguments.length < 2) {
+ actualMethod = getIteratorMethod(
+ {
+ AdvanceStringIndex: AdvanceStringIndex,
+ GetMethod: GetMethod,
+ IsArray: IsArray,
+ Type: Type
+ },
+ obj
+ );
+ }
+ var iterator = Call(actualMethod, obj);
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('iterator must return an object');
+ }
+
+ return iterator;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/GetMethod.js b/node_modules/object.values/node_modules/es-abstract/2019/GetMethod.js
new file mode 100644
index 0000000..aef8cbc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/GetMethod.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var IsPropertyKey = require('./IsPropertyKey');
+
+/**
+ * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let func be GetV(O, P).
+ * 3. ReturnIfAbrupt(func).
+ * 4. If func is either undefined or null, return undefined.
+ * 5. If IsCallable(func) is false, throw a TypeError exception.
+ * 6. Return func.
+ */
+
+module.exports = function GetMethod(O, P) {
+ // 7.3.9.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.9.2
+ var func = GetV(O, P);
+
+ // 7.3.9.4
+ if (func == null) {
+ return void 0;
+ }
+
+ // 7.3.9.5
+ if (!IsCallable(func)) {
+ throw new $TypeError(P + 'is not a function');
+ }
+
+ // 7.3.9.6
+ return func;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/GetOwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/2019/GetOwnPropertyKeys.js
new file mode 100644
index 0000000..8d7e5ee
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/GetOwnPropertyKeys.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
+var keys = require('object-keys');
+
+var esType = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+ if (esType(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (Type === 'Symbol') {
+ return $gOPS ? $gOPS(O) : [];
+ }
+ if (Type === 'String') {
+ if (!$gOPN) {
+ return keys(O);
+ }
+ return $gOPN(O);
+ }
+ throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js b/node_modules/object.values/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js
new file mode 100644
index 0000000..62da8fb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+ var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ if (!IsConstructor(constructor)) {
+ throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+ }
+ var proto = Get(constructor, 'prototype');
+ if (Type(proto) !== 'Object') {
+ if (!(constructor instanceof $Function)) {
+ // ignore other realms, for now
+ throw new $TypeError('cross-realm constructors not currently supported');
+ }
+ proto = intrinsic;
+ }
+ return proto;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/GetSubstitution.js b/node_modules/object.values/node_modules/es-abstract/2019/GetSubstitution.js
new file mode 100644
index 0000000..2ec9ebc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/GetSubstitution.js
@@ -0,0 +1,128 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var every = require('../helpers/every');
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+var $indexOf = callBound('String.prototype.indexOf');
+var $parseInt = parseInt;
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var inspect = require('object-inspect');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsInteger = require('./IsInteger');
+var ToObject = require('./ToObject');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var isStringOrHole = function (capture, index, arr) {
+ return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
+};
+
+// http://www.ecma-international.org/ecma-262/9.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) {
+ if (Type(matched) !== 'String') {
+ throw new $TypeError('Assertion failed: `matched` must be a String');
+ }
+ var matchLength = matched.length;
+
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `str` must be a String');
+ }
+ var stringLength = str.length;
+
+ if (!IsInteger(position) || position < 0 || position > stringLength) {
+ throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+ }
+
+ if (!IsArray(captures) || !every(captures, isStringOrHole)) {
+ throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures));
+ }
+
+ if (Type(replacement) !== 'String') {
+ throw new $TypeError('Assertion failed: `replacement` must be a String');
+ }
+
+ var tailPos = position + matchLength;
+ var m = captures.length;
+ if (Type(namedCaptures) !== 'Undefined') {
+ namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign
+ }
+
+ var result = '';
+ for (var i = 0; i < replacement.length; i += 1) {
+ // if this is a $, and it's not the end of the replacement
+ var current = $charAt(replacement, i);
+ var isLast = (i + 1) >= replacement.length;
+ var nextIsLast = (i + 2) >= replacement.length;
+ if (current === '$' && !isLast) {
+ var next = $charAt(replacement, i + 1);
+ if (next === '$') {
+ result += '$';
+ i += 1;
+ } else if (next === '&') {
+ result += matched;
+ i += 1;
+ } else if (next === '`') {
+ result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+ i += 1;
+ } else if (next === "'") {
+ result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+ i += 1;
+ } else {
+ var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+ if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+ // $1 through $9, and not followed by a digit
+ var n = $parseInt(next, 10);
+ // if (n > m, impl-defined)
+ result += (n <= m && Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
+ i += 1;
+ } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+ // $00 through $99
+ var nn = next + nextNext;
+ var nnI = $parseInt(nn, 10) - 1;
+ // if nn === '00' or nn > m, impl-defined
+ result += (nn <= m && Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
+ i += 2;
+ } else if (next === '<') {
+ // eslint-disable-next-line max-depth
+ if (Type(namedCaptures) === 'Undefined') {
+ result += '$<';
+ i += 2;
+ } else {
+ var endIndex = $indexOf(replacement, '>', i);
+ // eslint-disable-next-line max-depth
+ if (endIndex > -1) {
+ var groupName = $strSlice(replacement, i, endIndex);
+ var capture = Get(namedCaptures, groupName);
+ // eslint-disable-next-line max-depth
+ if (Type(capture) !== 'Undefined') {
+ result += ToString(capture);
+ }
+ i += '$<' + groupName + '>'.length;
+ }
+ }
+ } else {
+ result += '$';
+ }
+ }
+ } else {
+ // the final $, or else not a $
+ result += $charAt(replacement, i);
+ }
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/GetV.js b/node_modules/object.values/node_modules/es-abstract/2019/GetV.js
new file mode 100644
index 0000000..7b5139a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/GetV.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var ToObject = require('./ToObject');
+
+/**
+ * 7.3.2 GetV (V, P)
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let O be ToObject(V).
+ * 3. ReturnIfAbrupt(O).
+ * 4. Return O.[[Get]](P, V).
+ */
+
+module.exports = function GetV(V, P) {
+ // 7.3.2.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.2.2-3
+ var O = ToObject(V);
+
+ // 7.3.2.4
+ return O[P];
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/HasOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/HasOwnProperty.js
new file mode 100644
index 0000000..679059f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/HasOwnProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var has = require('has');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return has(O, P);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/HasProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/HasProperty.js
new file mode 100644
index 0000000..5f2d212
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/HasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/HourFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/HourFromTime.js
new file mode 100644
index 0000000..957ce32
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/HourFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return mod($floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/InLeapYear.js b/node_modules/object.values/node_modules/es-abstract/2019/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/InstanceofOperator.js b/node_modules/object.values/node_modules/es-abstract/2019/InstanceofOperator.js
new file mode 100644
index 0000000..ebd308c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/InstanceofOperator.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+ if (typeof instOfHandler !== 'undefined') {
+ return ToBoolean(Call(instOfHandler, C, [O]));
+ }
+ if (!IsCallable(C)) {
+ throw new $TypeError('`C` is not Callable');
+ }
+ return OrdinaryHasInstance(C, O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/Invoke.js b/node_modules/object.values/node_modules/es-abstract/2019/Invoke.js
new file mode 100644
index 0000000..769f0e3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/Invoke.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $arraySlice = require('../helpers/callBound')('Array.prototype.slice');
+
+var Call = require('./Call');
+var GetV = require('./GetV');
+var IsPropertyKey = require('./IsPropertyKey');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('P must be a Property Key');
+ }
+ var argumentsList = $arraySlice(arguments, 2);
+ var func = GetV(O, P);
+ return Call(func, O, argumentsList);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsAccessorDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/IsAccessorDescriptor.js
new file mode 100644
index 0000000..5139464
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsArray.js b/node_modules/object.values/node_modules/es-abstract/2019/IsArray.js
new file mode 100644
index 0000000..7b25f37
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsArray.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('../helpers/callBound')('Object.prototype.toString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
+
+module.exports = $Array.isArray || function IsArray(argument) {
+ return toStr(argument) === '[object Array]';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsCallable.js b/node_modules/object.values/node_modules/es-abstract/2019/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsConcatSpreadable.js b/node_modules/object.values/node_modules/es-abstract/2019/IsConcatSpreadable.js
new file mode 100644
index 0000000..dc8aae1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsConcatSpreadable.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ if ($isConcatSpreadable) {
+ var spreadable = Get(O, $isConcatSpreadable);
+ if (typeof spreadable !== 'undefined') {
+ return ToBoolean(spreadable);
+ }
+ }
+ return IsArray(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsConstructor.js b/node_modules/object.values/node_modules/es-abstract/2019/IsConstructor.js
new file mode 100644
index 0000000..00ea52c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsConstructor.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
+
+module.exports = function IsConstructor(argument) {
+ return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsDataDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/IsDataDescriptor.js
new file mode 100644
index 0000000..0ad3045
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsExtensible.js b/node_modules/object.values/node_modules/es-abstract/2019/IsExtensible.js
new file mode 100644
index 0000000..0c4c8a6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsExtensible.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $preventExtensions = $Object.preventExtensions;
+var $isExtensible = $Object.isExtensible;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+ ? function IsExtensible(obj) {
+ return !isPrimitive(obj) && $isExtensible(obj);
+ }
+ : function IsExtensible(obj) {
+ return !isPrimitive(obj);
+ };
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsGenericDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/IsGenericDescriptor.js
new file mode 100644
index 0000000..8618ce4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsInteger.js b/node_modules/object.values/node_modules/es-abstract/2019/IsInteger.js
new file mode 100644
index 0000000..0f488b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsInteger.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
+
+module.exports = function IsInteger(argument) {
+ if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
+ return false;
+ }
+ var abs = $abs(argument);
+ return $floor(abs) === abs;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsPromise.js b/node_modules/object.values/node_modules/es-abstract/2019/IsPromise.js
new file mode 100644
index 0000000..e8e92a2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsPromise.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+ if (Type(x) !== 'Object') {
+ return false;
+ }
+ if (!$PromiseThen) { // Promises are not supported
+ return false;
+ }
+ try {
+ $PromiseThen(x); // throws if not a promise
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2019/IsPropertyKey.js
new file mode 100644
index 0000000..74b8d95
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsPropertyKey.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+ return typeof argument === 'string' || typeof argument === 'symbol';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsRegExp.js b/node_modules/object.values/node_modules/es-abstract/2019/IsRegExp.js
new file mode 100644
index 0000000..fdf2323
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsRegExp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+ if (!argument || typeof argument !== 'object') {
+ return false;
+ }
+ if ($match) {
+ var isRegExp = argument[$match];
+ if (typeof isRegExp !== 'undefined') {
+ return ToBoolean(isRegExp);
+ }
+ }
+ return hasRegExpMatcher(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IsStringPrefix.js b/node_modules/object.values/node_modules/es-abstract/2019/IsStringPrefix.js
new file mode 100644
index 0000000..f5e2996
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IsStringPrefix.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+// var callBound = require('../helpers/callBound');
+
+// var $charAt = callBound('String.prototype.charAt');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-isstringprefix
+
+module.exports = function IsStringPrefix(p, q) {
+ if (Type(p) !== 'String') {
+ throw new $TypeError('Assertion failed: "p" must be a String');
+ }
+
+ if (Type(q) !== 'String') {
+ throw new $TypeError('Assertion failed: "q" must be a String');
+ }
+
+ return isPrefixOf(p, q);
+ /*
+ if (p === q || p === '') {
+ return true;
+ }
+
+ var pLength = p.length;
+ var qLength = q.length;
+ if (pLength >= qLength) {
+ return false;
+ }
+
+ // assert: pLength < qLength
+
+ for (var i = 0; i < pLength; i += 1) {
+ if ($charAt(p, i) !== $charAt(q, i)) {
+ return false;
+ }
+ }
+ return true;
+ */
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IterableToList.js b/node_modules/object.values/node_modules/es-abstract/2019/IterableToList.js
new file mode 100644
index 0000000..0b8cdcf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IterableToList.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+var $arrayPush = callBound('Array.prototype.push');
+
+var GetIterator = require('./GetIterator');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-iterabletolist
+
+module.exports = function IterableToList(items, method) {
+ var iterator = GetIterator(items, method);
+ var values = [];
+ var next = true;
+ while (next) {
+ next = IteratorStep(iterator);
+ if (next) {
+ var nextValue = IteratorValue(next);
+ $arrayPush(values, nextValue);
+ }
+ }
+ return values;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IteratorClose.js b/node_modules/object.values/node_modules/es-abstract/2019/IteratorClose.js
new file mode 100644
index 0000000..35c8c2b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IteratorClose.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+ }
+ if (!IsCallable(completion)) {
+ throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
+ }
+ var completionThunk = completion;
+
+ var iteratorReturn = GetMethod(iterator, 'return');
+
+ if (typeof iteratorReturn === 'undefined') {
+ return completionThunk();
+ }
+
+ var completionRecord;
+ try {
+ var innerResult = Call(iteratorReturn, iterator, []);
+ } catch (e) {
+ // if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+ // if the completion is of type "throw", this will throw.
+ completionThunk();
+ completionThunk = null; // ensure it's not called twice.
+
+ // if not, then return the innerResult completion
+ throw e;
+ }
+ completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+ completionThunk = null; // ensure it's not called twice.
+
+ if (Type(innerResult) !== 'Object') {
+ throw new $TypeError('iterator .return must return an object');
+ }
+
+ return completionRecord;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IteratorComplete.js b/node_modules/object.values/node_modules/es-abstract/2019/IteratorComplete.js
new file mode 100644
index 0000000..a62b9bf
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IteratorComplete.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return ToBoolean(Get(iterResult, 'done'));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IteratorNext.js b/node_modules/object.values/node_modules/es-abstract/2019/IteratorNext.js
new file mode 100644
index 0000000..7e59915
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IteratorNext.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Invoke = require('./Invoke');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+ var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+ if (Type(result) !== 'Object') {
+ throw new $TypeError('iterator next must return an object');
+ }
+ return result;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IteratorStep.js b/node_modules/object.values/node_modules/es-abstract/2019/IteratorStep.js
new file mode 100644
index 0000000..41b9d1b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IteratorStep.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+ var result = IteratorNext(iterator);
+ var done = IteratorComplete(result);
+ return done === true ? false : result;
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/IteratorValue.js b/node_modules/object.values/node_modules/es-abstract/2019/IteratorValue.js
new file mode 100644
index 0000000..5e71a44
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/IteratorValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return Get(iterResult, 'value');
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/MakeDate.js b/node_modules/object.values/node_modules/es-abstract/2019/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/MakeDay.js b/node_modules/object.values/node_modules/es-abstract/2019/MakeDay.js
new file mode 100644
index 0000000..f1ab810
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var mod = require('../helpers/mod');
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + $floor(m / 12);
+ var mn = mod(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/MakeTime.js b/node_modules/object.values/node_modules/es-abstract/2019/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/MinFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/MinFromTime.js
new file mode 100644
index 0000000..e80e191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/MinFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return mod($floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/MonthFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/NumberToString.js b/node_modules/object.values/node_modules/es-abstract/2019/NumberToString.js
new file mode 100644
index 0000000..2cc70e0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/NumberToString.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-tostring-applied-to-the-number-type
+
+module.exports = function NumberToString(m) {
+ if (Type(m) !== 'Number') {
+ throw new TypeError('Assertion failed: "m" must be a String');
+ }
+
+ return $String(m);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ObjectCreate.js b/node_modules/object.values/node_modules/es-abstract/2019/ObjectCreate.js
new file mode 100644
index 0000000..e2445b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ObjectCreate.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var Type = require('./Type');
+
+var hasProto = !({ __proto__: null } instanceof Object);
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
+
+module.exports = function ObjectCreate(proto, internalSlotsList) {
+ if (proto !== null && Type(proto) !== 'Object') {
+ throw new $TypeError('Assertion failed: `proto` must be null or an object');
+ }
+ var slots = arguments.length < 2 ? [] : internalSlotsList;
+ if (slots.length > 0) {
+ throw new $SyntaxError('es-abstract does not yet support internal slots');
+ }
+
+ if ($ObjectCreate) {
+ return $ObjectCreate(proto);
+ }
+ if (hasProto) {
+ return { __proto__: proto };
+ }
+
+ if (proto === null) {
+ throw new $SyntaxError('native Object.create support is required to create null objects');
+ }
+ var T = function T() {};
+ T.prototype = proto;
+ return new T();
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js
new file mode 100644
index 0000000..59780b3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js
@@ -0,0 +1,61 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!$gOPD) {
+ // ES3/IE 8 fallback
+ if (IsAccessorDescriptor(Desc)) {
+ throw new $SyntaxError('This environment does not support accessor property descriptors.');
+ }
+ var creatingNormalDataProperty = !(P in O)
+ && Desc['[[Writable]]']
+ && Desc['[[Enumerable]]']
+ && Desc['[[Configurable]]']
+ && '[[Value]]' in Desc;
+ var settingExistingDataProperty = (P in O)
+ && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+ && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+ && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+ && '[[Value]]' in Desc;
+ if (creatingNormalDataProperty || settingExistingDataProperty) {
+ O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+ return SameValue(O[P], Desc['[[Value]]']);
+ }
+ throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+ }
+ var desc = $gOPD(O, P);
+ var current = desc && ToPropertyDescriptor(desc);
+ var extensible = IsExtensible(O);
+ return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js
new file mode 100644
index 0000000..b9882e5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var has = require('has');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!has(O, P)) {
+ return void 0;
+ }
+ if (!$gOPD) {
+ // ES3 / IE 8 fallback
+ var arrayLength = IsArray(O) && P === 'length';
+ var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+ return {
+ '[[Configurable]]': !(arrayLength || regexLastIndex),
+ '[[Enumerable]]': $isEnumerable(O, P),
+ '[[Value]]': O[P],
+ '[[Writable]]': true
+ };
+ }
+ return ToPropertyDescriptor($gOPD(O, P));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js
new file mode 100644
index 0000000..344077a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $getProto = require('../helpers/getProto');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!$getProto) {
+ throw new $TypeError('This environment does not support fetching prototypes.');
+ }
+ return $getProto(O);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryHasInstance.js b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryHasInstance.js
new file mode 100644
index 0000000..51abe26
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryHasInstance.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+ if (IsCallable(C) === false) {
+ return false;
+ }
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ var P = Get(C, 'prototype');
+ if (Type(P) !== 'Object') {
+ throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return O instanceof C;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryHasProperty.js b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryHasProperty.js
new file mode 100644
index 0000000..076c25a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/OrdinaryHasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js b/node_modules/object.values/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js
new file mode 100644
index 0000000..3541331
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $setProto = require('../helpers/setProto');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+ if (Type(V) !== 'Object' && Type(V) !== 'Null') {
+ throw new $TypeError('Assertion failed: V must be Object or Null');
+ }
+ /*
+ var extensible = IsExtensible(O);
+ var current = OrdinaryGetPrototypeOf(O);
+ if (SameValue(V, current)) {
+ return true;
+ }
+ if (!extensible) {
+ return false;
+ }
+ */
+ try {
+ $setProto(O, V);
+ } catch (e) {
+ return false;
+ }
+ return OrdinaryGetPrototypeOf(O) === V;
+ /*
+ var p = V;
+ var done = false;
+ while (!done) {
+ if (p === null) {
+ done = true;
+ } else if (SameValue(p, O)) {
+ return false;
+ } else {
+ if (wat) {
+ done = true;
+ } else {
+ p = p.[[Prototype]];
+ }
+ }
+ }
+ O.[[Prototype]] = V;
+ return true;
+ */
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/PromiseResolve.js b/node_modules/object.values/node_modules/es-abstract/2019/PromiseResolve.js
new file mode 100644
index 0000000..f70745d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/PromiseResolve.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $PromiseResolve = callBound('Promise.resolve', true);
+
+// https://ecma-international.org/ecma-262/9.0/#sec-promise-resolve
+
+module.exports = function PromiseResolve(C, x) {
+ if (!$PromiseResolve) {
+ throw new SyntaxError('This environment does not support Promises.');
+ }
+ return $PromiseResolve(C, x);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/RegExpExec.js b/node_modules/object.values/node_modules/es-abstract/2019/RegExpExec.js
new file mode 100644
index 0000000..15c9186
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/RegExpExec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var regexExec = require('../helpers/callBound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+ if (Type(R) !== 'Object') {
+ throw new $TypeError('Assertion failed: `R` must be an Object');
+ }
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ var exec = Get(R, 'exec');
+ if (IsCallable(exec)) {
+ var result = Call(exec, R, [S]);
+ if (result === null || Type(result) === 'Object') {
+ return result;
+ }
+ throw new $TypeError('"exec" method must return `null` or an Object');
+ }
+ return regexExec(R, S);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/RequireObjectCoercible.js b/node_modules/object.values/node_modules/es-abstract/2019/RequireObjectCoercible.js
new file mode 100644
index 0000000..9008359
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/RequireObjectCoercible.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../5/CheckObjectCoercible');
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SameValue.js b/node_modules/object.values/node_modules/es-abstract/2019/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SameValueNonNumber.js b/node_modules/object.values/node_modules/es-abstract/2019/SameValueNonNumber.js
new file mode 100644
index 0000000..5668752
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SameValueNonNumber.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+
+// https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
+
+module.exports = function SameValueNonNumber(x, y) {
+ if (typeof x === 'number' || typeof x !== typeof y) {
+ throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.');
+ }
+ return SameValue(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SameValueZero.js b/node_modules/object.values/node_modules/es-abstract/2019/SameValueZero.js
new file mode 100644
index 0000000..0dedcd2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SameValueZero.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+ return (x === y) || ($isNaN(x) && $isNaN(y));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SecFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/SecFromTime.js
new file mode 100644
index 0000000..7190011
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SecFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return mod($floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/Set.js b/node_modules/object.values/node_modules/es-abstract/2019/Set.js
new file mode 100644
index 0000000..18ebd99
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/Set.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ if (Type(Throw) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+ }
+ if (Throw) {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return true;
+ } else {
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ } catch (e) {
+ return false;
+ }
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SetFunctionName.js b/node_modules/object.values/node_modules/es-abstract/2019/SetFunctionName.js
new file mode 100644
index 0000000..f93324a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SetFunctionName.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getSymbolDescription = require('../helpers/getSymbolDescription');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+ if (typeof F !== 'function') {
+ throw new $TypeError('Assertion failed: `F` must be a function');
+ }
+ if (!IsExtensible(F) || has(F, 'name')) {
+ throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+ }
+ var nameType = Type(name);
+ if (nameType !== 'Symbol' && nameType !== 'String') {
+ throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+ }
+ if (nameType === 'Symbol') {
+ var description = getSymbolDescription(name);
+ // eslint-disable-next-line no-param-reassign
+ name = typeof description === 'undefined' ? '' : '[' + description + ']';
+ }
+ if (arguments.length > 2) {
+ var prefix = arguments[2];
+ // eslint-disable-next-line no-param-reassign
+ name = prefix + ' ' + name;
+ }
+ return DefinePropertyOrThrow(F, 'name', {
+ '[[Value]]': name,
+ '[[Writable]]': false,
+ '[[Enumerable]]': false,
+ '[[Configurable]]': true
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SetIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2019/SetIntegrityLevel.js
new file mode 100644
index 0000000..3d5c81d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SetIntegrityLevel.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ if (!$preventExtensions) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+ }
+ var status = $preventExtensions(O);
+ if (!status) {
+ return false;
+ }
+ if (!$gOPN) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+ }
+ var theKeys = $gOPN(O);
+ if (level === 'sealed') {
+ forEach(theKeys, function (k) {
+ DefinePropertyOrThrow(O, k, { configurable: false });
+ });
+ } else if (level === 'frozen') {
+ forEach(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ var desc;
+ if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+ desc = { configurable: false };
+ } else {
+ desc = { configurable: false, writable: false };
+ }
+ DefinePropertyOrThrow(O, k, desc);
+ }
+ });
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SpeciesConstructor.js b/node_modules/object.values/node_modules/es-abstract/2019/SpeciesConstructor.js
new file mode 100644
index 0000000..3cdcd74
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SpeciesConstructor.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var C = O.constructor;
+ if (typeof C === 'undefined') {
+ return defaultConstructor;
+ }
+ if (Type(C) !== 'Object') {
+ throw new $TypeError('O.constructor is not an Object');
+ }
+ var S = $species ? C[$species] : void 0;
+ if (S == null) {
+ return defaultConstructor;
+ }
+ if (IsConstructor(S)) {
+ return S;
+ }
+ throw new $TypeError('no constructor found');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/StrictEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/2019/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/SymbolDescriptiveString.js b/node_modules/object.values/node_modules/es-abstract/2019/SymbolDescriptiveString.js
new file mode 100644
index 0000000..7bd8191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/SymbolDescriptiveString.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+ if (Type(sym) !== 'Symbol') {
+ throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+ }
+ return $SymbolToString(sym);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/TestIntegrityLevel.js b/node_modules/object.values/node_modules/es-abstract/2019/TestIntegrityLevel.js
new file mode 100644
index 0000000..7a57397
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/TestIntegrityLevel.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var every = require('../helpers/every');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ var status = IsExtensible(O);
+ if (status) {
+ return false;
+ }
+ var theKeys = $gOPN(O);
+ return theKeys.length === 0 || every(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ if (currentDesc.configurable) {
+ return false;
+ }
+ if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+ return false;
+ }
+ }
+ return true;
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/TimeClip.js b/node_modules/object.values/node_modules/es-abstract/2019/TimeClip.js
new file mode 100644
index 0000000..57aa08c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+var $abs = GetIntrinsic('%Math.abs%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || $abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/TimeFromYear.js b/node_modules/object.values/node_modules/es-abstract/2019/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/TimeString.js b/node_modules/object.values/node_modules/es-abstract/2019/TimeString.js
new file mode 100644
index 0000000..87642eb
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/TimeString.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var HourFromTime = require('./HourFromTime');
+var MinFromTime = require('./MinFromTime');
+var SecFromTime = require('./SecFromTime');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/9.0/#sec-timestring
+
+module.exports = function TimeString(tv) {
+ if (Type(tv) !== 'Number' || $isNaN(tv)) {
+ throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+ }
+ var hour = HourFromTime(tv);
+ var minute = MinFromTime(tv);
+ var second = SecFromTime(tv);
+ return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT';
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/TimeWithinDay.js b/node_modules/object.values/node_modules/es-abstract/2019/TimeWithinDay.js
new file mode 100644
index 0000000..c5b21d3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/TimeWithinDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return mod(t, msPerDay);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToBoolean.js b/node_modules/object.values/node_modules/es-abstract/2019/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToDateString.js b/node_modules/object.values/node_modules/es-abstract/2019/ToDateString.js
new file mode 100644
index 0000000..7a6d4c4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToDateString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Date = GetIntrinsic('%Date%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+ if (Type(tv) !== 'Number') {
+ throw new $TypeError('Assertion failed: `tv` must be a Number');
+ }
+ if ($isNaN(tv)) {
+ return 'Invalid Date';
+ }
+ return $Date(tv);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToIndex.js b/node_modules/object.values/node_modules/es-abstract/2019/ToIndex.js
new file mode 100644
index 0000000..a55398d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToIndex.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+
+var ToInteger = require('./ToInteger');
+var ToLength = require('./ToLength');
+var SameValueZero = require('./SameValueZero');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-toindex
+
+module.exports = function ToIndex(value) {
+ if (typeof value === 'undefined') {
+ return 0;
+ }
+ var integerIndex = ToInteger(value);
+ if (integerIndex < 0) {
+ throw new $RangeError('index must be >= 0');
+ }
+ var index = ToLength(integerIndex);
+ if (!SameValueZero(integerIndex, index)) {
+ throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1');
+ }
+ return index;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToInt16.js b/node_modules/object.values/node_modules/es-abstract/2019/ToInt16.js
new file mode 100644
index 0000000..5a112c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToInt16.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+ var int16bit = ToUint16(argument);
+ return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToInt32.js b/node_modules/object.values/node_modules/es-abstract/2019/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToInt8.js b/node_modules/object.values/node_modules/es-abstract/2019/ToInt8.js
new file mode 100644
index 0000000..d103123
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToInt8.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+ var int8bit = ToUint8(argument);
+ return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToInteger.js b/node_modules/object.values/node_modules/es-abstract/2019/ToInteger.js
new file mode 100644
index 0000000..16f7db9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToInteger.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ return ES5ToInteger(number);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToLength.js b/node_modules/object.values/node_modules/es-abstract/2019/ToLength.js
new file mode 100644
index 0000000..1bef9be
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToLength.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var ToInteger = require('./ToInteger');
+
+module.exports = function ToLength(argument) {
+ var len = ToInteger(argument);
+ if (len <= 0) { return 0; } // includes converting -0 to +0
+ if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+ return len;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToNumber.js b/node_modules/object.values/node_modules/es-abstract/2019/ToNumber.js
new file mode 100644
index 0000000..7a3cdc8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToNumber.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('../helpers/callBound');
+var regexTester = require('../helpers/regexTester');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+// whitespace from: https://es5.github.io/#x15.5.4.20
+// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+var ws = [
+ '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
+ '\u2029\uFEFF'
+].join('');
+var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
+var $replace = callBound('String.prototype.replace');
+var $trim = function (value) {
+ return $replace(value, trimRegex, '');
+};
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+ var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (typeof value === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a number');
+ }
+ if (typeof value === 'string') {
+ if (isBinary(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 2));
+ } else if (isOctal(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 8));
+ } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+ return NaN;
+ } else {
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+ }
+ }
+ return $Number(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToObject.js b/node_modules/object.values/node_modules/es-abstract/2019/ToObject.js
new file mode 100644
index 0000000..50d5b94
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
+
+module.exports = function ToObject(value) {
+ RequireObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToPrimitive.js b/node_modules/object.values/node_modules/es-abstract/2019/ToPrimitive.js
new file mode 100644
index 0000000..81c655d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToPrimitive.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+ if (arguments.length > 1) {
+ return toPrimitive(input, arguments[1]);
+ }
+ return toPrimitive(input);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/ToPropertyDescriptor.js
new file mode 100644
index 0000000..38e536e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToPropertyKey.js b/node_modules/object.values/node_modules/es-abstract/2019/ToPropertyKey.js
new file mode 100644
index 0000000..38f40dd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToPropertyKey.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+ var key = ToPrimitive(argument, $String);
+ return typeof key === 'symbol' ? key : ToString(key);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToString.js b/node_modules/object.values/node_modules/es-abstract/2019/ToString.js
new file mode 100644
index 0000000..a345431
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToString.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+ if (typeof argument === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a string');
+ }
+ return $String(argument);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToUint16.js b/node_modules/object.values/node_modules/es-abstract/2019/ToUint16.js
new file mode 100644
index 0000000..c8a408b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToUint16.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x10000);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToUint32.js b/node_modules/object.values/node_modules/es-abstract/2019/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToUint8.js b/node_modules/object.values/node_modules/es-abstract/2019/ToUint8.js
new file mode 100644
index 0000000..bf84753
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToUint8.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+module.exports = function ToUint8(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x100);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ToUint8Clamp.js b/node_modules/object.values/node_modules/es-abstract/2019/ToUint8Clamp.js
new file mode 100644
index 0000000..c7f9f56
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ToUint8Clamp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+
+var $floor = $Math.floor;
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number <= 0) { return 0; }
+ if (number >= 0xFF) { return 0xFF; }
+ var f = $floor(argument);
+ if (f + 0.5 < number) { return f + 1; }
+ if (number < f + 0.5) { return f; }
+ if (f % 2 !== 0) { return f + 1; }
+ return f;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/TrimString.js b/node_modules/object.values/node_modules/es-abstract/2019/TrimString.js
new file mode 100644
index 0000000..32d4675
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/TrimString.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var trimStart = require('string.prototype.trimleft');
+var trimEnd = require('string.prototype.trimright');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+
+// https://ecma-international.org/ecma-262/10.0/#sec-trimstring
+
+module.exports = function TrimString(string, where) {
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var T;
+ if (where === 'start') {
+ T = trimStart(S);
+ } else if (where === 'end') {
+ T = trimEnd(S);
+ } else if (where === 'start+end') {
+ T = trimStart(trimEnd(S));
+ } else {
+ throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"');
+ }
+ return T;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/Type.js b/node_modules/object.values/node_modules/es-abstract/2019/Type.js
new file mode 100644
index 0000000..6c99376
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/Type.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function Type(x) {
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ return ES5Type(x);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js
new file mode 100644
index 0000000..d4b9007
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js
@@ -0,0 +1,170 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
+// https://www.ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements, max-params
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+ // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+ var oType = Type(O);
+ if (oType !== 'Undefined' && oType !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be undefined or an Object');
+ }
+ if (Type(extensible) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: extensible must be a Boolean');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (Type(current) !== 'Undefined' && !isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, current)) {
+ throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+ }
+ if (oType !== 'Undefined' && !IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+ }
+ if (Type(current) === 'Undefined') {
+ if (!extensible) {
+ return false;
+ }
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': Desc['[[Configurable]]'],
+ '[[Enumerable]]': Desc['[[Enumerable]]'],
+ '[[Value]]': Desc['[[Value]]'],
+ '[[Writable]]': Desc['[[Writable]]']
+ }
+ );
+ }
+ } else {
+ if (!IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ }
+ return true;
+ }
+ if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+ return true;
+ }
+ if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+ return true; // removed by ES2017, but should still be correct
+ }
+ // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+ if (!current['[[Configurable]]']) {
+ if (Desc['[[Configurable]]']) {
+ return false;
+ }
+ if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+ return false;
+ }
+ }
+ if (IsGenericDescriptor(Desc)) {
+ // no further validation is required.
+ } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ return false;
+ }
+ if (IsDataDescriptor(current)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Get]]': undefined
+ }
+ );
+ }
+ } else if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Value]]': undefined
+ }
+ );
+ }
+ } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+ if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+ return false;
+ }
+ if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+ return false;
+ }
+ if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else {
+ throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/WeekDay.js b/node_modules/object.values/node_modules/es-abstract/2019/WeekDay.js
new file mode 100644
index 0000000..2973e02
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/WeekDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+var Day = require('./Day');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/YearFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/modulo.js b/node_modules/object.values/node_modules/es-abstract/2019/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/msFromTime.js b/node_modules/object.values/node_modules/es-abstract/2019/msFromTime.js
new file mode 100644
index 0000000..c31eda0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/msFromTime.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return mod(t, msPerSecond);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/thisBooleanValue.js b/node_modules/object.values/node_modules/es-abstract/2019/thisBooleanValue.js
new file mode 100644
index 0000000..3ffac9c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/thisBooleanValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $BooleanValueOf = require('../helpers/callBound')('Boolean.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+ if (Type(value) === 'Boolean') {
+ return value;
+ }
+
+ return $BooleanValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/thisNumberValue.js b/node_modules/object.values/node_modules/es-abstract/2019/thisNumberValue.js
new file mode 100644
index 0000000..0345e52
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/thisNumberValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var Type = require('./Type');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+ if (Type(value) === 'Number') {
+ return value;
+ }
+
+ return $NumberValueOf(value);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/thisStringValue.js b/node_modules/object.values/node_modules/es-abstract/2019/thisStringValue.js
new file mode 100644
index 0000000..3b99b6e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/thisStringValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $StringValueOf = require('../helpers/callBound')('String.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+ if (Type(value) === 'String') {
+ return value;
+ }
+
+ return $StringValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/thisSymbolValue.js b/node_modules/object.values/node_modules/es-abstract/2019/thisSymbolValue.js
new file mode 100644
index 0000000..3c3b347
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/thisSymbolValue.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/9.0/#sec-thissymbolvalue
+
+module.exports = function thisSymbolValue(value) {
+ if (!$SymbolValueOf) {
+ throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object');
+ }
+ if (Type(value) === 'Symbol') {
+ return value;
+ }
+ return $SymbolValueOf(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/2019/thisTimeValue.js b/node_modules/object.values/node_modules/es-abstract/2019/thisTimeValue.js
new file mode 100644
index 0000000..a9a47ac
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/2019/thisTimeValue.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../2018/thisTimeValue');
diff --git a/node_modules/object.values/node_modules/es-abstract/5/AbstractEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/5/AbstractEqualityComparison.js
new file mode 100644
index 0000000..e55c764
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/AbstractRelationalComparison.js b/node_modules/object.values/node_modules/es-abstract/5/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/CheckObjectCoercible.js b/node_modules/object.values/node_modules/es-abstract/5/CheckObjectCoercible.js
new file mode 100644
index 0000000..f02b289
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/CheckObjectCoercible.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.10
+
+module.exports = function CheckObjectCoercible(value, optMessage) {
+ if (value == null) {
+ throw new $TypeError(optMessage || ('Cannot call method on ' + value));
+ }
+ return value;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/DateFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/Day.js b/node_modules/object.values/node_modules/es-abstract/5/Day.js
new file mode 100644
index 0000000..00df813
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/Day.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return $floor(t / msPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/DayFromYear.js b/node_modules/object.values/node_modules/es-abstract/5/DayFromYear.js
new file mode 100644
index 0000000..08dd5af
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/DayFromYear.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/5/DayWithinYear.js b/node_modules/object.values/node_modules/es-abstract/5/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/DaysInYear.js b/node_modules/object.values/node_modules/es-abstract/5/DaysInYear.js
new file mode 100644
index 0000000..db32251
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (mod(y, 4) !== 0) {
+ return 365;
+ }
+ if (mod(y, 100) !== 0) {
+ return 366;
+ }
+ if (mod(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/FromPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/5/FromPropertyDescriptor.js
new file mode 100644
index 0000000..a3cefbe
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/FromPropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsDataDescriptor(Desc)) {
+ return {
+ value: Desc['[[Value]]'],
+ writable: !!Desc['[[Writable]]'],
+ enumerable: !!Desc['[[Enumerable]]'],
+ configurable: !!Desc['[[Configurable]]']
+ };
+ } else if (IsAccessorDescriptor(Desc)) {
+ return {
+ get: Desc['[[Get]]'],
+ set: Desc['[[Set]]'],
+ enumerable: !!Desc['[[Enumerable]]'],
+ configurable: !!Desc['[[Configurable]]']
+ };
+ } else {
+ throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/HourFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/HourFromTime.js
new file mode 100644
index 0000000..957ce32
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/HourFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return mod($floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/InLeapYear.js b/node_modules/object.values/node_modules/es-abstract/5/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/IsAccessorDescriptor.js b/node_modules/object.values/node_modules/es-abstract/5/IsAccessorDescriptor.js
new file mode 100644
index 0000000..561382a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var Type = require('./Type');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/IsCallable.js b/node_modules/object.values/node_modules/es-abstract/5/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/object.values/node_modules/es-abstract/5/IsDataDescriptor.js b/node_modules/object.values/node_modules/es-abstract/5/IsDataDescriptor.js
new file mode 100644
index 0000000..783e2dc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var Type = require('./Type');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/IsGenericDescriptor.js b/node_modules/object.values/node_modules/es-abstract/5/IsGenericDescriptor.js
new file mode 100644
index 0000000..93340e9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/IsPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/5/IsPropertyDescriptor.js
new file mode 100644
index 0000000..2a96c63
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/IsPropertyDescriptor.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function IsPropertyDescriptor(Desc) {
+ return isPropertyDescriptor({
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor,
+ Type: Type
+ }, Desc);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/MakeDate.js b/node_modules/object.values/node_modules/es-abstract/5/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/MakeDay.js b/node_modules/object.values/node_modules/es-abstract/5/MakeDay.js
new file mode 100644
index 0000000..f1ab810
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var mod = require('../helpers/mod');
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + $floor(m / 12);
+ var mn = mod(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/MakeTime.js b/node_modules/object.values/node_modules/es-abstract/5/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/MinFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/MinFromTime.js
new file mode 100644
index 0000000..e80e191
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/MinFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return mod($floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/MonthFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/SameValue.js b/node_modules/object.values/node_modules/es-abstract/5/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/SecFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/SecFromTime.js
new file mode 100644
index 0000000..7190011
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/SecFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $floor = GetIntrinsic('%Math.floor%');
+
+var mod = require('../helpers/mod');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return mod($floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/StrictEqualityComparison.js b/node_modules/object.values/node_modules/es-abstract/5/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/TimeClip.js b/node_modules/object.values/node_modules/es-abstract/5/TimeClip.js
new file mode 100644
index 0000000..57aa08c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+var $abs = GetIntrinsic('%Math.abs%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || $abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/5/TimeFromYear.js b/node_modules/object.values/node_modules/es-abstract/5/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/TimeWithinDay.js b/node_modules/object.values/node_modules/es-abstract/5/TimeWithinDay.js
new file mode 100644
index 0000000..c5b21d3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/TimeWithinDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return mod(t, msPerDay);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToBoolean.js b/node_modules/object.values/node_modules/es-abstract/5/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToInt32.js b/node_modules/object.values/node_modules/es-abstract/5/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToInteger.js b/node_modules/object.values/node_modules/es-abstract/5/ToInteger.js
new file mode 100644
index 0000000..a95265b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToInteger.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.4
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number)) { return 0; }
+ if (number === 0 || !$isFinite(number)) { return number; }
+ return $sign(number) * $floor($abs(number));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToNumber.js b/node_modules/object.values/node_modules/es-abstract/5/ToNumber.js
new file mode 100644
index 0000000..4a7a3b8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToNumber.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
+
+module.exports = function ToNumber(value) {
+ return +value; // eslint-disable-line no-implicit-coercion
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToObject.js b/node_modules/object.values/node_modules/es-abstract/5/ToObject.js
new file mode 100644
index 0000000..1d27a13
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var CheckObjectCoercible = require('./CheckObjectCoercible');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.9
+
+module.exports = function ToObject(value) {
+ CheckObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToPrimitive.js b/node_modules/object.values/node_modules/es-abstract/5/ToPrimitive.js
new file mode 100644
index 0000000..071df70
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToPrimitive.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.1
+
+module.exports = require('es-to-primitive/es5');
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/5/ToPropertyDescriptor.js
new file mode 100644
index 0000000..38e536e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToString.js b/node_modules/object.values/node_modules/es-abstract/5/ToString.js
new file mode 100644
index 0000000..80ece42
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToString.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.8
+
+module.exports = function ToString(value) {
+ return $String(value);
+};
+
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToUint16.js b/node_modules/object.values/node_modules/es-abstract/5/ToUint16.js
new file mode 100644
index 0000000..c8a408b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToUint16.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+var $mod = require('../helpers/mod');
+
+var $floor = $Math.floor;
+var $abs = $Math.abs;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * $floor($abs(number));
+ return $mod(posInt, 0x10000);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/ToUint32.js b/node_modules/object.values/node_modules/es-abstract/5/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/Type.js b/node_modules/object.values/node_modules/es-abstract/5/Type.js
new file mode 100644
index 0000000..9cc750c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/Type.js
@@ -0,0 +1,24 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-8
+
+module.exports = function Type(x) {
+ if (x === null) {
+ return 'Null';
+ }
+ if (typeof x === 'undefined') {
+ return 'Undefined';
+ }
+ if (typeof x === 'function' || typeof x === 'object') {
+ return 'Object';
+ }
+ if (typeof x === 'number') {
+ return 'Number';
+ }
+ if (typeof x === 'boolean') {
+ return 'Boolean';
+ }
+ if (typeof x === 'string') {
+ return 'String';
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/WeekDay.js b/node_modules/object.values/node_modules/es-abstract/5/WeekDay.js
new file mode 100644
index 0000000..2973e02
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/WeekDay.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+var Day = require('./Day');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/YearFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/modulo.js b/node_modules/object.values/node_modules/es-abstract/5/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/5/msFromTime.js b/node_modules/object.values/node_modules/es-abstract/5/msFromTime.js
new file mode 100644
index 0000000..c31eda0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/5/msFromTime.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return mod(t, msPerSecond);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/CHANGELOG.md b/node_modules/object.values/node_modules/es-abstract/CHANGELOG.md
new file mode 100644
index 0000000..b3922e5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/CHANGELOG.md
@@ -0,0 +1,333 @@
+1.17.5 / 2020-03-22
+=================
+ * [Fix] `CreateDataProperty`: update an existing property
+ * [Fix] run missing spackle from cd7504701879ddea0f5981e99cbcf93bfea9171d
+ * [Dev Deps] update `make-arrow-function`, `tape`, `@ljharb/eslint-config`
+
+1.17.4 / 2020-01-21
+=================
+ * [Fix] `2015+`: add code to handle IE 8’s problems
+ * [Tests] fix tests for IE 8
+
+1.17.3 / 2020-01-19
+=================
+ * [Fix] `ObjectCreate` `2015+`: Fall back to `__proto__` and normal `new` in older browsers
+ * [Fix] `GetIntrinsic`: ensure the `allowMissing` property actually works on dotted intrinsics
+
+1.17.2 / 2020-01-14
+=================
+ * [Fix] `helpers/OwnPropertyKeys`: include non-enumerables too
+
+1.17.1 / 2020-01-14
+=================
+ * [Refactor] add `OwnPropertyKeys` helper, use it in `CopyDataProperties`
+ * [Refactor] `IteratorClose`: remove useless assignment
+ * [Dev Deps] update `eslint`, `tape`, `diff`
+
+1.17.0 / 2019-12-20
+=================
+ * [New] Split up each operation into its own file (prereleased)
+ * [Fix] `GetIntrinsic`: IE 8 has a broken `Object.getOwnPropertyDescriptor`
+ * [Fix] `object.assign` is a runtime dep (prereleased)
+ * [Refactor] `GetIntrinsic`: remove the internal property salts, since % already handles that
+ * [Refactor] `GetIntrinsic`: further simplification
+ * [Deps] update `is-callable`, `string.prototype.trimleft`, `string.prototype.trimright`, `is-regex`
+ * [Dev Deps] update `@ljharb/eslint-config`, `object-is`, `object.fromentries`, `tape`
+ * [Tests] add `.eslintignore`
+ * [meta] remove unused Makefile and associated utils
+ * [meta] only run spackle script in publish (#78) (prereleased)
+
+1.17.0-next.1 / 2019-12-11
+=================
+ * [Fix] `object.assign` is a runtime dep
+ * [meta] only run spackle script in publish (#78)
+
+1.17.0-next.0 / 2019-12-11
+=================
+ * [New] Split up each operation into its own file
+
+1.16.3 / 2019-12-04
+=================
+ * [Fix] `GetIntrinsic`: when given a path to a getter, return the actual getter
+ * [Dev Deps] update `eslint`
+
+1.16.2 / 2019-11-24
+=================
+ * [Fix] IE 6-7 lack JSON
+ * [Fix] IE 6-8 strings can’t use array slice, they need string slice
+ * [Dev Deps] update `eslint`
+
+1.16.1 / 2019-11-24
+=================
+ * [Fix] `GetIntrinsics`: turns out IE 8 throws when `Object.getOwnPropertyDescriptor(arguments);`, and does not throw on `callee` anyways
+ * [Deps] update `es-to-primitive`, `has-symbols`, `object-inspect`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`
+ * [meta] re-include year files inside `operations`
+ * [meta] add `funding` field
+ * [actions] add Automatic Rebase github action
+ * [Tests] use shared travis-ci config
+ * [Tests] disable `check-coverage`, and let codecov do it
+
+1.16.0 / 2019-10-18
+=================
+ * [New] `ES2015+`: add `SetFunctionName`
+ * [New] `ES2015+`: add `GetPrototypeFromConstructor`, with caveats
+ * [New] `ES2015+`: add `CreateListFromArrayLike`
+ * [New] `ES2016+`: add `OrdinarySetPrototypeOf`
+ * [New] `ES2016+`: add `OrdinaryGetPrototypeOf`
+ * [New] add `getSymbolDescription` and `getInferredName` helpers
+ * [Fix] `GetIterator`: add fallback for pre-Symbol environments, tests
+ * [Dev Deps] update `object.fromentries`
+ * [Tests] add `node` `v12.2`
+
+1.15.0 / 2019-10-02
+=================
+ * [New] `ES2018`+: add `DateString`, `TimeString`
+ * [New] `ES2015`+: add `ToDateString`
+ * [New] `ES5`+: add `msFromTime`, `SecFromTime`, `MinFromTime`, `HourFromTime`, `TimeWithinDay`, `Day`, `DayFromYear`, `TimeFromYear`, `YearFromTime`, `WeekDay`, `DaysInYear`, `InLeapYear`, `DayWithinYear`, `MonthFromTime`, `DateFromTime`, `MakeDay`, `MakeDate`, `MakeTime`, `TimeClip`, `modulo`
+ * [New] add `regexTester` helper
+ * [New] add `callBound` helper
+ * [New] add ES2020’s intrinsic dot notation
+ * [New] add `isPrefixOf` helper
+ * [New] add `maxSafeInteger` helper
+ * [Deps] update `string.prototype.trimleft`, `string.prototype.trimright`
+ * [Dev Deps] update `eslint`
+ * [Tests] on `node` `v12.11`
+ * [meta] npmignore operations scripts; add "deltas"
+
+1.14.2 / 2019-09-08
+=================
+ * [Fix] `ES2016`: `IterableToArrayLike`: add proper fallback for strings, pre-Symbols
+ * [Tests] on `node` `v12.10`
+
+1.14.1 / 2019-09-03
+=================
+ * [meta] republish with some extra files removed
+
+1.14.0 / 2019-09-02
+=================
+ * [New] add ES2019
+ * [New] `ES2017+`: add `IterableToList`
+ * [New] `ES2016`: add `IterableToArrayLike`
+ * [New] `ES2015+`: add `ArrayCreate`, `ArraySetLength`, `OrdinaryDefineOwnProperty`, `OrdinaryGetOwnProperty`, `OrdinaryHasProperty`, `CreateHTML`, `GetOwnPropertyKeys`, `InstanceofOperator`, `SymbolDescriptiveString`, `GetSubstitution`, `ValidateAndApplyPropertyDescriptor`, `IsPromise`, `OrdinaryHasInstance`, `TestIntegrityLevel`, `SetIntegrityLevel`
+ * [New] add `callBind` helper, and use it
+ * [New] add helpers: `isPropertyDescriptor`, `every`
+ * [New] ES5+: add `Abstract Relational Comparison`
+ * [New] ES5+: add `Abstract Equality Comparison`, `Strict Equality Comparison`
+ * [Fix] `ES2015+`: `GetIterator`: only require native Symbols when `method` is omitted
+ * [Fix] `ES2015`: `Call`: error message now properly displays Symbols using `object-inspect`
+ * [Fix] `ES2015+`: `ValidateAndApplyPropertyDescriptor`: use ES2017 logic to bypass spec bugs
+ * [Fix] `ES2015+`: `CreateDataProperty`, `DefinePropertyOrThrow`, `ValidateAndApplyPropertyDescriptor`: add fallbacks for ES3
+ * [Fix] `ES2015+`: `FromPropertyDescriptor`: no longer requires a fully complete Property Descriptor
+ * [Fix] `ES5`: `IsPropertyDescriptor`: call into `IsDataDescriptor` and `IsAccessorDescriptor`
+ * [Refactor] use `has-symbols` for Symbol detection
+ * [Fix] `helpers/assertRecord`: remove `console.log`
+ * [Deps] update `object-keys`
+ * [readme] add security note
+ * [meta] change http URLs to https
+ * [meta] linter cleanup
+ * [meta] fix getOps script
+ * [meta] add FUNDING.yml
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `semver`, `replace`, `cheerio`, `tape`
+ * [Tests] up to `node` `v12.9`, `v11.15`, `v10.16`, `v8.16`, `v6.17`
+ * [Tests] temporarily allow node 0.6 to fail; segfaulting in travis
+ * [Tests] use the values helper more in es5 tests
+ * [Tests] fix linting to apply to all files
+ * [Tests] run `npx aud` only on prod deps
+ * [Tests] add v.descriptors helpers
+ * [Tests] use `npx aud` instead of `npm audit` with hoops
+ * [Tests] use `eclint` instead of `editorconfig-tools`
+ * [Tests] some intrinsic cleanup
+ * [Tests] migrate es5 tests to use values helper
+ * [Tests] add some missing ES2015 ops
+
+1.13.0 / 2019-01-02
+=================
+ * [New] add ES2018
+ * [New] add ES2015/ES2016: EnumerableOwnNames; ES2017: EnumerableOwnProperties
+ * [New] `ES2015+`: add `thisBooleanValue`, `thisNumberValue`, `thisStringValue`, `thisTimeValue`
+ * [New] `ES2015+`: add `DefinePropertyOrThrow`, `DeletePropertyOrThrow`, `CreateMethodProperty`
+ * [New] add `assertRecord` helper
+ * [Deps] update `is-callable`, `has`, `object-keys`, `es-to-primitive`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `semver`, `safe-publish-latest`, `replace`
+ * [Tests] use `npm audit` instead of `nsp`
+ * [Tests] remove `jscs`
+ * [Tests] up to `node` `v11.6`, `v10.15`, `v8.15`, `v6.16`
+ * [Tests] move descriptor factories to `values` helper
+ * [Tests] add `getOps` to programmatically fetch abstract operation names
+
+1.12.0 / 2018-05-31
+=================
+ * [New] add `GetIntrinsic` entry point
+ * [New] `ES2015`+: add `ObjectCreate`
+ * [Robustness]: `ES2015+`: ensure `Math.{abs,floor}` and `Function.call` are cached
+
+1.11.0 / 2018-03-21
+=================
+ * [New] `ES2015+`: add iterator abstract ops
+ * [Dev Deps] update `eslint`, `nsp`, `object.assign`, `semver`, `tape`
+ * [Tests] up to `node` `v9.8`, `v8.10`, `v6.13`
+
+1.10.0 / 2017-11-24
+=================
+ * [New] ES2015+: `AdvanceStringIndex`
+ * [Dev Deps] update `eslint`, `nsp`
+ * [Tests] require node 0.6 to pass again
+ * [Tests] up to `node` `v9.2`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS
+
+1.9.0 / 2017-09-30
+=================
+ * [New] `es2015+`: add `ArraySpeciesCreate`
+ * [New] ES2015+: add `CreateDataProperty` and `CreateDataPropertyOrThrow`
+ * [Tests] consolidate duplicated tests
+ * [Tests] increase coverage
+ * [Dev Deps] update `nsp`, `eslint`
+
+1.8.2 / 2017-09-03
+=================
+ * [Fix] `es2015`+: `ToNumber`: provide the proper hint for Date objects (#27)
+ * [Dev Deps] update `eslint`
+
+1.8.1 / 2017-08-30
+=================
+ * [Fix] ES2015+: `ToPropertyKey`: should return a symbol for Symbols (#26)
+ * [Deps] update `function-bind`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`
+ * [Docs] github broke markdown parsing
+
+1.8.0 / 2017-08-04
+=================
+ * [New] add ES2017
+ * [New] move es6+ to es2015+; leave es6/es7 as aliases
+ * [New] ES5+: add `IsPropertyDescriptor`, `IsAccessorDescriptor`, `IsDataDescriptor`, `IsGenericDescriptor`, `FromPropertyDescriptor`, `ToPropertyDescriptor`
+ * [New] ES2015+: add `CompletePropertyDescriptor`, `Set`, `HasOwnProperty`, `HasProperty`, `IsConcatSpreadable`, `Invoke`, `CreateIterResultObject`, `RegExpExec`
+ * [Fix] es7/es2016: do not mutate ES6
+ * [Fix] assign helper only supports one source
+ * [Deps] update `is-regex`
+ * [Dev Deps] update `nsp`, `eslint`, `@ljharb/eslint-config`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `semver`, `tape`
+ * [Tests] add tests for missing and excess operations
+ * [Tests] add codecov for coverage
+ * [Tests] up to `node` `v8.2`, `v7.10`, `v6.11`, `v4.8`; newer npm breaks on older node
+ * [Tests] use same lists of value types across tests; ensure tests are the same when ops are the same
+ * [Tests] ES2015: add ToNumber symbol tests
+ * [Tests] switch to `nyc` for code coverage
+ * [Tests] make IsRegExp tests consistent across editions
+
+1.7.0 / 2017-01-22
+=================
+ * [New] ES6: Add `GetMethod` (#16)
+ * [New] ES6: Add `GetV` (#16)
+ * [New] ES6: Add `Get` (#17)
+ * [Tests] up to `node` `v7.4`, `v6.9`, `v4.6`; improve test matrix
+ * [Dev Deps] update `tape`, `nsp`, `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`
+
+1.6.1 / 2016-08-21
+=================
+ * [Fix] ES6: IsConstructor should return true for `class` constructors.
+
+1.6.0 / 2016-08-20
+=================
+ * [New] ES5 / ES6: add `Type`
+ * [New] ES6: `SpeciesConstructor`
+ * [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`; add `safe-publish-latest`
+ * [Tests] up to `node` `v6.4`, `v5.12`, `v4.5`
+
+1.5.1 / 2016-05-30
+=================
+ * [Fix] `ES.IsRegExp`: actually look up `Symbol.match` on the argument
+ * [Refactor] create `isNaN` helper
+ * [Deps] update `is-callable`, `function-bind`
+ * [Deps] update `es-to-primitive`, fix ES5 tests
+ * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `tape`, `nsp`
+ * [Tests] up to `node` `v6.2`, `v5.11`, `v4.4`
+ * [Tests] use pretest/posttest for linting/security
+
+1.5.0 / 2015-12-27
+=================
+ * [New] adds `Symbol.toPrimitive` support via `es-to-primitive`
+ * [Deps] update `is-callable`, `es-to-primitive`
+ * [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `tape`
+ * [Tests] up to `node` `v5.3`
+
+1.4.3 / 2015-11-04
+=================
+ * [Fix] `ES6.ToNumber`: should give `NaN` for explicitly signed hex strings (#4)
+ * [Refactor] `ES6.ToNumber`: No need to double-trim
+ * [Refactor] group tests better
+ * [Tests] should still pass on `node` `v0.8`
+
+1.4.2 / 2015-11-02
+=================
+ * [Fix] ensure `ES.ToNumber` trims whitespace, and does not trim non-whitespace (#3)
+
+1.4.1 / 2015-10-31
+=================
+ * [Fix] ensure only 0-1 are valid binary and 0-7 are valid octal digits (#2)
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] on `node` `v5.0`
+ * [Tests] fix npm upgrades for older node versions
+ * package.json: use object form of "authors", add "contributors"
+
+1.4.0 / 2015-09-26
+=================
+ * [Deps] update `is-callable`
+ * [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] on `node` `v4.2`
+ * [New] Add `SameValueNonNumber` to ES7
+
+1.3.2 / 2015-09-26
+=================
+ * [Fix] Fix `ES6.IsRegExp` to properly handle `Symbol.match`, per spec.
+ * [Tests] up to `io.js` `v3.3`, `node` `v4.1`
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`
+
+1.3.1 / 2015-08-15
+=================
+ * [Fix] Ensure that objects that `toString` to a binary or octal literal also convert properly
+
+1.3.0 / 2015-08-15
+=================
+ * [New] ES6’s ToNumber now supports binary and octal literals.
+ * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `tape`
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG
+ * [Tests] up to `io.js` `v3.0`
+
+1.2.2 / 2015-07-28
+=================
+ * [Fix] Both `ES5.CheckObjectCoercible` and `ES6.RequireObjectCoercible` return the value if they don't throw.
+ * [Tests] Test on latest `io.js` versions.
+ * [Dev Deps] Update `eslint`, `jscs`, `tape`, `semver`, `covert`, `nsp`
+
+1.2.1 / 2015-03-20
+=================
+ * Fix `isFinite` helper.
+
+1.2.0 / 2015-03-19
+=================
+ * Use `es-to-primitive` for ToPrimitive methods.
+ * Test on latest `io.js` versions; allow failures on all but 2 latest `node`/`io.js` versions.
+
+1.1.2 / 2015-03-20
+=================
+ * Fix isFinite helper.
+
+1.1.1 / 2015-03-19
+=================
+ * Fix isPrimitive check for functions
+ * Update `eslint`, `editorconfig-tools`, `semver`, `nsp`
+
+1.1.0 / 2015-02-17
+=================
+ * Add ES7 export (non-default).
+ * All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`.
+ * Test on `iojs-v1.2`.
+
+1.0.1 / 2015-01-30
+=================
+ * Use `is-callable` instead of an internal function.
+ * Update `tape`, `jscs`, `nsp`, `eslint`
+
+1.0.0 / 2015-01-10
+=================
+ * v1.0.0
diff --git a/node_modules/object.values/node_modules/es-abstract/GetIntrinsic.js b/node_modules/object.values/node_modules/es-abstract/GetIntrinsic.js
new file mode 100644
index 0000000..6e0af00
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/GetIntrinsic.js
@@ -0,0 +1,218 @@
+'use strict';
+
+/* globals
+ Atomics,
+ SharedArrayBuffer,
+*/
+
+var undefined;
+
+var $TypeError = TypeError;
+
+var $gOPD = Object.getOwnPropertyDescriptor;
+if ($gOPD) {
+ try {
+ $gOPD({}, '');
+ } catch (e) {
+ $gOPD = null; // this is IE 8, which has a broken gOPD
+ }
+}
+
+var throwTypeError = function () { throw new $TypeError(); };
+var ThrowTypeError = $gOPD
+ ? (function () {
+ try {
+ // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
+ arguments.callee; // IE 8 does not throw here
+ return throwTypeError;
+ } catch (calleeThrows) {
+ try {
+ // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
+ return $gOPD(arguments, 'callee').get;
+ } catch (gOPDthrows) {
+ return throwTypeError;
+ }
+ }
+ }())
+ : throwTypeError;
+
+var hasSymbols = require('has-symbols')();
+
+var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
+
+var generator; // = function * () {};
+var generatorFunction = generator ? getProto(generator) : undefined;
+var asyncFn; // async function() {};
+var asyncFunction = asyncFn ? asyncFn.constructor : undefined;
+var asyncGen; // async function * () {};
+var asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined;
+var asyncGenIterator = asyncGen ? asyncGen() : undefined;
+
+var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
+
+var INTRINSICS = {
+ '%Array%': Array,
+ '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
+ '%ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype,
+ '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
+ '%ArrayPrototype%': Array.prototype,
+ '%ArrayProto_entries%': Array.prototype.entries,
+ '%ArrayProto_forEach%': Array.prototype.forEach,
+ '%ArrayProto_keys%': Array.prototype.keys,
+ '%ArrayProto_values%': Array.prototype.values,
+ '%AsyncFromSyncIteratorPrototype%': undefined,
+ '%AsyncFunction%': asyncFunction,
+ '%AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined,
+ '%AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined,
+ '%AsyncGeneratorFunction%': asyncGenFunction,
+ '%AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined,
+ '%AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined,
+ '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
+ '%Boolean%': Boolean,
+ '%BooleanPrototype%': Boolean.prototype,
+ '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
+ '%DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype,
+ '%Date%': Date,
+ '%DatePrototype%': Date.prototype,
+ '%decodeURI%': decodeURI,
+ '%decodeURIComponent%': decodeURIComponent,
+ '%encodeURI%': encodeURI,
+ '%encodeURIComponent%': encodeURIComponent,
+ '%Error%': Error,
+ '%ErrorPrototype%': Error.prototype,
+ '%eval%': eval, // eslint-disable-line no-eval
+ '%EvalError%': EvalError,
+ '%EvalErrorPrototype%': EvalError.prototype,
+ '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
+ '%Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype,
+ '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
+ '%Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype,
+ '%Function%': Function,
+ '%FunctionPrototype%': Function.prototype,
+ '%Generator%': generator ? getProto(generator()) : undefined,
+ '%GeneratorFunction%': generatorFunction,
+ '%GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined,
+ '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
+ '%Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype,
+ '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
+ '%Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype,
+ '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
+ '%Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype,
+ '%isFinite%': isFinite,
+ '%isNaN%': isNaN,
+ '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
+ '%JSON%': typeof JSON === 'object' ? JSON : undefined,
+ '%JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined,
+ '%Map%': typeof Map === 'undefined' ? undefined : Map,
+ '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
+ '%MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype,
+ '%Math%': Math,
+ '%Number%': Number,
+ '%NumberPrototype%': Number.prototype,
+ '%Object%': Object,
+ '%ObjectPrototype%': Object.prototype,
+ '%ObjProto_toString%': Object.prototype.toString,
+ '%ObjProto_valueOf%': Object.prototype.valueOf,
+ '%parseFloat%': parseFloat,
+ '%parseInt%': parseInt,
+ '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
+ '%PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype,
+ '%PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then,
+ '%Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all,
+ '%Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject,
+ '%Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve,
+ '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
+ '%RangeError%': RangeError,
+ '%RangeErrorPrototype%': RangeError.prototype,
+ '%ReferenceError%': ReferenceError,
+ '%ReferenceErrorPrototype%': ReferenceError.prototype,
+ '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
+ '%RegExp%': RegExp,
+ '%RegExpPrototype%': RegExp.prototype,
+ '%Set%': typeof Set === 'undefined' ? undefined : Set,
+ '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
+ '%SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype,
+ '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
+ '%SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype,
+ '%String%': String,
+ '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
+ '%StringPrototype%': String.prototype,
+ '%Symbol%': hasSymbols ? Symbol : undefined,
+ '%SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined,
+ '%SyntaxError%': SyntaxError,
+ '%SyntaxErrorPrototype%': SyntaxError.prototype,
+ '%ThrowTypeError%': ThrowTypeError,
+ '%TypedArray%': TypedArray,
+ '%TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined,
+ '%TypeError%': $TypeError,
+ '%TypeErrorPrototype%': $TypeError.prototype,
+ '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
+ '%Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype,
+ '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
+ '%Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype,
+ '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
+ '%Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype,
+ '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
+ '%Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype,
+ '%URIError%': URIError,
+ '%URIErrorPrototype%': URIError.prototype,
+ '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
+ '%WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype,
+ '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,
+ '%WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype
+};
+
+var bind = require('function-bind');
+var $replace = bind.call(Function.call, String.prototype.replace);
+
+/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
+var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
+var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
+var stringToPath = function stringToPath(string) {
+ var result = [];
+ $replace(string, rePropName, function (match, number, quote, subString) {
+ result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);
+ });
+ return result;
+};
+/* end adaptation */
+
+var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
+ if (!(name in INTRINSICS)) {
+ throw new SyntaxError('intrinsic ' + name + ' does not exist!');
+ }
+
+ // istanbul ignore if // hopefully this is impossible to test :-)
+ if (typeof INTRINSICS[name] === 'undefined' && !allowMissing) {
+ throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
+ }
+
+ return INTRINSICS[name];
+};
+
+module.exports = function GetIntrinsic(name, allowMissing) {
+ if (typeof name !== 'string' || name.length === 0) {
+ throw new TypeError('intrinsic name must be a non-empty string');
+ }
+ if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
+ throw new TypeError('"allowMissing" argument must be a boolean');
+ }
+
+ var parts = stringToPath(name);
+
+ var value = getBaseIntrinsic('%' + (parts.length > 0 ? parts[0] : '') + '%', allowMissing);
+ for (var i = 1; i < parts.length; i += 1) {
+ if (value != null) {
+ if ($gOPD && (i + 1) >= parts.length) {
+ var desc = $gOPD(value, parts[i]);
+ if (!allowMissing && !(parts[i] in value)) {
+ throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
+ }
+ value = desc ? (desc.get || desc.value) : value[parts[i]];
+ } else {
+ value = value[parts[i]];
+ }
+ }
+ }
+ return value;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/LICENSE b/node_modules/object.values/node_modules/es-abstract/LICENSE
new file mode 100644
index 0000000..8c271c1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (C) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/es-abstract/README.md b/node_modules/object.values/node_modules/es-abstract/README.md
new file mode 100644
index 0000000..20342d1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/README.md
@@ -0,0 +1,48 @@
+# es-abstract <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+[![browser support][testling-svg]][testling-url]
+
+ECMAScript spec abstract operations.
+When different versions of the spec conflict, the default export will be the latest version of the abstract operation.
+All abstract operations will also be available under an `es5`/`es2015`/`es2016`/`es2017`/`es2018`/`es2019` entry point, and exported property, if you require a specific version.
+
+## Example
+
+```js
+var ES = require('es-abstract');
+var assert = require('assert');
+
+assert(ES.isCallable(function () {}));
+assert(!ES.isCallable(/a/g));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+## Security
+
+Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.
+
+[package-url]: https://npmjs.org/package/es-abstract
+[npm-version-svg]: http://versionbadg.es/ljharb/es-abstract.svg
+[travis-svg]: https://travis-ci.org/ljharb/es-abstract.svg
+[travis-url]: https://travis-ci.org/ljharb/es-abstract
+[deps-svg]: https://david-dm.org/ljharb/es-abstract.svg
+[deps-url]: https://david-dm.org/ljharb/es-abstract
+[dev-deps-svg]: https://david-dm.org/ljharb/es-abstract/dev-status.svg
+[dev-deps-url]: https://david-dm.org/ljharb/es-abstract#info=devDependencies
+[testling-svg]: https://ci.testling.com/ljharb/es-abstract.png
+[testling-url]: https://ci.testling.com/ljharb/es-abstract
+[npm-badge-png]: https://nodei.co/npm/es-abstract.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/es-abstract.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/es-abstract.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=es-abstract
diff --git a/node_modules/object.values/node_modules/es-abstract/es2015.js b/node_modules/object.values/node_modules/es-abstract/es2015.js
new file mode 100644
index 0000000..dc02ca4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es2015.js
@@ -0,0 +1,115 @@
+'use strict';
+
+/* eslint global-require: 0 */
+// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-operations
+var ES6 = {
+ 'Abstract Equality Comparison': require('./2015/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./2015/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./2015/StrictEqualityComparison'),
+ AdvanceStringIndex: require('./2015/AdvanceStringIndex'),
+ ArrayCreate: require('./2015/ArrayCreate'),
+ ArraySetLength: require('./2015/ArraySetLength'),
+ ArraySpeciesCreate: require('./2015/ArraySpeciesCreate'),
+ Call: require('./2015/Call'),
+ CanonicalNumericIndexString: require('./2015/CanonicalNumericIndexString'),
+ CompletePropertyDescriptor: require('./2015/CompletePropertyDescriptor'),
+ CreateDataProperty: require('./2015/CreateDataProperty'),
+ CreateDataPropertyOrThrow: require('./2015/CreateDataPropertyOrThrow'),
+ CreateHTML: require('./2015/CreateHTML'),
+ CreateIterResultObject: require('./2015/CreateIterResultObject'),
+ CreateListFromArrayLike: require('./2015/CreateListFromArrayLike'),
+ CreateMethodProperty: require('./2015/CreateMethodProperty'),
+ DateFromTime: require('./2015/DateFromTime'),
+ Day: require('./2015/Day'),
+ DayFromYear: require('./2015/DayFromYear'),
+ DaysInYear: require('./2015/DaysInYear'),
+ DayWithinYear: require('./2015/DayWithinYear'),
+ DefinePropertyOrThrow: require('./2015/DefinePropertyOrThrow'),
+ DeletePropertyOrThrow: require('./2015/DeletePropertyOrThrow'),
+ EnumerableOwnNames: require('./2015/EnumerableOwnNames'),
+ FromPropertyDescriptor: require('./2015/FromPropertyDescriptor'),
+ Get: require('./2015/Get'),
+ GetIterator: require('./2015/GetIterator'),
+ GetMethod: require('./2015/GetMethod'),
+ GetOwnPropertyKeys: require('./2015/GetOwnPropertyKeys'),
+ GetPrototypeFromConstructor: require('./2015/GetPrototypeFromConstructor'),
+ GetSubstitution: require('./2015/GetSubstitution'),
+ GetV: require('./2015/GetV'),
+ HasOwnProperty: require('./2015/HasOwnProperty'),
+ HasProperty: require('./2015/HasProperty'),
+ HourFromTime: require('./2015/HourFromTime'),
+ InLeapYear: require('./2015/InLeapYear'),
+ InstanceofOperator: require('./2015/InstanceofOperator'),
+ Invoke: require('./2015/Invoke'),
+ IsAccessorDescriptor: require('./2015/IsAccessorDescriptor'),
+ IsArray: require('./2015/IsArray'),
+ IsCallable: require('./2015/IsCallable'),
+ IsConcatSpreadable: require('./2015/IsConcatSpreadable'),
+ IsConstructor: require('./2015/IsConstructor'),
+ IsDataDescriptor: require('./2015/IsDataDescriptor'),
+ IsExtensible: require('./2015/IsExtensible'),
+ IsGenericDescriptor: require('./2015/IsGenericDescriptor'),
+ IsInteger: require('./2015/IsInteger'),
+ IsPromise: require('./2015/IsPromise'),
+ IsPropertyDescriptor: require('./2015/IsPropertyDescriptor'),
+ IsPropertyKey: require('./2015/IsPropertyKey'),
+ IsRegExp: require('./2015/IsRegExp'),
+ IteratorClose: require('./2015/IteratorClose'),
+ IteratorComplete: require('./2015/IteratorComplete'),
+ IteratorNext: require('./2015/IteratorNext'),
+ IteratorStep: require('./2015/IteratorStep'),
+ IteratorValue: require('./2015/IteratorValue'),
+ MakeDate: require('./2015/MakeDate'),
+ MakeDay: require('./2015/MakeDay'),
+ MakeTime: require('./2015/MakeTime'),
+ MinFromTime: require('./2015/MinFromTime'),
+ modulo: require('./2015/modulo'),
+ MonthFromTime: require('./2015/MonthFromTime'),
+ msFromTime: require('./2015/msFromTime'),
+ ObjectCreate: require('./2015/ObjectCreate'),
+ OrdinaryDefineOwnProperty: require('./2015/OrdinaryDefineOwnProperty'),
+ OrdinaryGetOwnProperty: require('./2015/OrdinaryGetOwnProperty'),
+ OrdinaryHasInstance: require('./2015/OrdinaryHasInstance'),
+ OrdinaryHasProperty: require('./2015/OrdinaryHasProperty'),
+ RegExpExec: require('./2015/RegExpExec'),
+ RequireObjectCoercible: require('./2015/RequireObjectCoercible'),
+ SameValue: require('./2015/SameValue'),
+ SameValueZero: require('./2015/SameValueZero'),
+ SecFromTime: require('./2015/SecFromTime'),
+ Set: require('./2015/Set'),
+ SetFunctionName: require('./2015/SetFunctionName'),
+ SetIntegrityLevel: require('./2015/SetIntegrityLevel'),
+ SpeciesConstructor: require('./2015/SpeciesConstructor'),
+ SymbolDescriptiveString: require('./2015/SymbolDescriptiveString'),
+ TestIntegrityLevel: require('./2015/TestIntegrityLevel'),
+ thisBooleanValue: require('./2015/thisBooleanValue'),
+ thisNumberValue: require('./2015/thisNumberValue'),
+ thisStringValue: require('./2015/thisStringValue'),
+ thisTimeValue: require('./2015/thisTimeValue'),
+ TimeClip: require('./2015/TimeClip'),
+ TimeFromYear: require('./2015/TimeFromYear'),
+ TimeWithinDay: require('./2015/TimeWithinDay'),
+ ToBoolean: require('./2015/ToBoolean'),
+ ToDateString: require('./2015/ToDateString'),
+ ToInt16: require('./2015/ToInt16'),
+ ToInt32: require('./2015/ToInt32'),
+ ToInt8: require('./2015/ToInt8'),
+ ToInteger: require('./2015/ToInteger'),
+ ToLength: require('./2015/ToLength'),
+ ToNumber: require('./2015/ToNumber'),
+ ToObject: require('./2015/ToObject'),
+ ToPrimitive: require('./2015/ToPrimitive'),
+ ToPropertyDescriptor: require('./2015/ToPropertyDescriptor'),
+ ToPropertyKey: require('./2015/ToPropertyKey'),
+ ToString: require('./2015/ToString'),
+ ToUint16: require('./2015/ToUint16'),
+ ToUint32: require('./2015/ToUint32'),
+ ToUint8: require('./2015/ToUint8'),
+ ToUint8Clamp: require('./2015/ToUint8Clamp'),
+ Type: require('./2015/Type'),
+ ValidateAndApplyPropertyDescriptor: require('./2015/ValidateAndApplyPropertyDescriptor'),
+ WeekDay: require('./2015/WeekDay'),
+ YearFromTime: require('./2015/YearFromTime')
+};
+
+module.exports = ES6;
diff --git a/node_modules/object.values/node_modules/es-abstract/es2016.js b/node_modules/object.values/node_modules/es-abstract/es2016.js
new file mode 100644
index 0000000..9e72e82
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es2016.js
@@ -0,0 +1,119 @@
+'use strict';
+
+/* eslint global-require: 0 */
+// https://www.ecma-international.org/ecma-262/7.0/#sec-abstract-operations
+var ES2016 = {
+ 'Abstract Equality Comparison': require('./2016/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./2016/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./2016/StrictEqualityComparison'),
+ AdvanceStringIndex: require('./2016/AdvanceStringIndex'),
+ ArrayCreate: require('./2016/ArrayCreate'),
+ ArraySetLength: require('./2016/ArraySetLength'),
+ ArraySpeciesCreate: require('./2016/ArraySpeciesCreate'),
+ Call: require('./2016/Call'),
+ CanonicalNumericIndexString: require('./2016/CanonicalNumericIndexString'),
+ CompletePropertyDescriptor: require('./2016/CompletePropertyDescriptor'),
+ CreateDataProperty: require('./2016/CreateDataProperty'),
+ CreateDataPropertyOrThrow: require('./2016/CreateDataPropertyOrThrow'),
+ CreateHTML: require('./2016/CreateHTML'),
+ CreateIterResultObject: require('./2016/CreateIterResultObject'),
+ CreateListFromArrayLike: require('./2016/CreateListFromArrayLike'),
+ CreateMethodProperty: require('./2016/CreateMethodProperty'),
+ DateFromTime: require('./2016/DateFromTime'),
+ Day: require('./2016/Day'),
+ DayFromYear: require('./2016/DayFromYear'),
+ DaysInYear: require('./2016/DaysInYear'),
+ DayWithinYear: require('./2016/DayWithinYear'),
+ DefinePropertyOrThrow: require('./2016/DefinePropertyOrThrow'),
+ DeletePropertyOrThrow: require('./2016/DeletePropertyOrThrow'),
+ EnumerableOwnNames: require('./2016/EnumerableOwnNames'),
+ FromPropertyDescriptor: require('./2016/FromPropertyDescriptor'),
+ Get: require('./2016/Get'),
+ GetIterator: require('./2016/GetIterator'),
+ GetMethod: require('./2016/GetMethod'),
+ GetOwnPropertyKeys: require('./2016/GetOwnPropertyKeys'),
+ GetPrototypeFromConstructor: require('./2016/GetPrototypeFromConstructor'),
+ GetSubstitution: require('./2016/GetSubstitution'),
+ GetV: require('./2016/GetV'),
+ HasOwnProperty: require('./2016/HasOwnProperty'),
+ HasProperty: require('./2016/HasProperty'),
+ HourFromTime: require('./2016/HourFromTime'),
+ InLeapYear: require('./2016/InLeapYear'),
+ InstanceofOperator: require('./2016/InstanceofOperator'),
+ Invoke: require('./2016/Invoke'),
+ IsAccessorDescriptor: require('./2016/IsAccessorDescriptor'),
+ IsArray: require('./2016/IsArray'),
+ IsCallable: require('./2016/IsCallable'),
+ IsConcatSpreadable: require('./2016/IsConcatSpreadable'),
+ IsConstructor: require('./2016/IsConstructor'),
+ IsDataDescriptor: require('./2016/IsDataDescriptor'),
+ IsExtensible: require('./2016/IsExtensible'),
+ IsGenericDescriptor: require('./2016/IsGenericDescriptor'),
+ IsInteger: require('./2016/IsInteger'),
+ IsPromise: require('./2016/IsPromise'),
+ IsPropertyDescriptor: require('./2016/IsPropertyDescriptor'),
+ IsPropertyKey: require('./2016/IsPropertyKey'),
+ IsRegExp: require('./2016/IsRegExp'),
+ IterableToArrayLike: require('./2016/IterableToArrayLike'),
+ IteratorClose: require('./2016/IteratorClose'),
+ IteratorComplete: require('./2016/IteratorComplete'),
+ IteratorNext: require('./2016/IteratorNext'),
+ IteratorStep: require('./2016/IteratorStep'),
+ IteratorValue: require('./2016/IteratorValue'),
+ MakeDate: require('./2016/MakeDate'),
+ MakeDay: require('./2016/MakeDay'),
+ MakeTime: require('./2016/MakeTime'),
+ MinFromTime: require('./2016/MinFromTime'),
+ modulo: require('./2016/modulo'),
+ MonthFromTime: require('./2016/MonthFromTime'),
+ msFromTime: require('./2016/msFromTime'),
+ ObjectCreate: require('./2016/ObjectCreate'),
+ OrdinaryDefineOwnProperty: require('./2016/OrdinaryDefineOwnProperty'),
+ OrdinaryGetOwnProperty: require('./2016/OrdinaryGetOwnProperty'),
+ OrdinaryGetPrototypeOf: require('./2016/OrdinaryGetPrototypeOf'),
+ OrdinarySetPrototypeOf: require('./2016/OrdinarySetPrototypeOf'),
+ OrdinaryHasInstance: require('./2016/OrdinaryHasInstance'),
+ OrdinaryHasProperty: require('./2016/OrdinaryHasProperty'),
+ RegExpExec: require('./2016/RegExpExec'),
+ RequireObjectCoercible: require('./2016/RequireObjectCoercible'),
+ SameValue: require('./2016/SameValue'),
+ SameValueNonNumber: require('./2016/SameValueNonNumber'),
+ SameValueZero: require('./2016/SameValueZero'),
+ SecFromTime: require('./2016/SecFromTime'),
+ Set: require('./2016/Set'),
+ SetFunctionName: require('./2016/SetFunctionName'),
+ SetIntegrityLevel: require('./2016/SetIntegrityLevel'),
+ SpeciesConstructor: require('./2016/SpeciesConstructor'),
+ SymbolDescriptiveString: require('./2016/SymbolDescriptiveString'),
+ TestIntegrityLevel: require('./2016/TestIntegrityLevel'),
+ thisBooleanValue: require('./2016/thisBooleanValue'),
+ thisNumberValue: require('./2016/thisNumberValue'),
+ thisStringValue: require('./2016/thisStringValue'),
+ thisTimeValue: require('./2016/thisTimeValue'),
+ TimeClip: require('./2016/TimeClip'),
+ TimeFromYear: require('./2016/TimeFromYear'),
+ TimeWithinDay: require('./2016/TimeWithinDay'),
+ ToBoolean: require('./2016/ToBoolean'),
+ ToDateString: require('./2016/ToDateString'),
+ ToInt16: require('./2016/ToInt16'),
+ ToInt32: require('./2016/ToInt32'),
+ ToInt8: require('./2016/ToInt8'),
+ ToInteger: require('./2016/ToInteger'),
+ ToLength: require('./2016/ToLength'),
+ ToNumber: require('./2016/ToNumber'),
+ ToObject: require('./2016/ToObject'),
+ ToPrimitive: require('./2016/ToPrimitive'),
+ ToPropertyDescriptor: require('./2016/ToPropertyDescriptor'),
+ ToPropertyKey: require('./2016/ToPropertyKey'),
+ ToString: require('./2016/ToString'),
+ ToUint16: require('./2016/ToUint16'),
+ ToUint32: require('./2016/ToUint32'),
+ ToUint8: require('./2016/ToUint8'),
+ ToUint8Clamp: require('./2016/ToUint8Clamp'),
+ Type: require('./2016/Type'),
+ ValidateAndApplyPropertyDescriptor: require('./2016/ValidateAndApplyPropertyDescriptor'),
+ WeekDay: require('./2016/WeekDay'),
+ YearFromTime: require('./2016/YearFromTime')
+};
+
+module.exports = ES2016;
diff --git a/node_modules/object.values/node_modules/es-abstract/es2017.js b/node_modules/object.values/node_modules/es-abstract/es2017.js
new file mode 100644
index 0000000..5f317b7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es2017.js
@@ -0,0 +1,120 @@
+'use strict';
+
+/* eslint global-require: 0 */
+// https://www.ecma-international.org/ecma-262/8.0/#sec-abstract-operations
+var ES2017 = {
+ 'Abstract Equality Comparison': require('./2017/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./2017/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./2017/StrictEqualityComparison'),
+ AdvanceStringIndex: require('./2017/AdvanceStringIndex'),
+ ArrayCreate: require('./2017/ArrayCreate'),
+ ArraySetLength: require('./2017/ArraySetLength'),
+ ArraySpeciesCreate: require('./2017/ArraySpeciesCreate'),
+ Call: require('./2017/Call'),
+ CanonicalNumericIndexString: require('./2017/CanonicalNumericIndexString'),
+ CompletePropertyDescriptor: require('./2017/CompletePropertyDescriptor'),
+ CreateDataProperty: require('./2017/CreateDataProperty'),
+ CreateDataPropertyOrThrow: require('./2017/CreateDataPropertyOrThrow'),
+ CreateHTML: require('./2017/CreateHTML'),
+ CreateIterResultObject: require('./2017/CreateIterResultObject'),
+ CreateListFromArrayLike: require('./2017/CreateListFromArrayLike'),
+ CreateMethodProperty: require('./2017/CreateMethodProperty'),
+ DateFromTime: require('./2017/DateFromTime'),
+ Day: require('./2017/Day'),
+ DayFromYear: require('./2017/DayFromYear'),
+ DaysInYear: require('./2017/DaysInYear'),
+ DayWithinYear: require('./2017/DayWithinYear'),
+ DefinePropertyOrThrow: require('./2017/DefinePropertyOrThrow'),
+ DeletePropertyOrThrow: require('./2017/DeletePropertyOrThrow'),
+ EnumerableOwnProperties: require('./2017/EnumerableOwnProperties'),
+ FromPropertyDescriptor: require('./2017/FromPropertyDescriptor'),
+ Get: require('./2017/Get'),
+ GetIterator: require('./2017/GetIterator'),
+ GetMethod: require('./2017/GetMethod'),
+ GetOwnPropertyKeys: require('./2017/GetOwnPropertyKeys'),
+ GetPrototypeFromConstructor: require('./2017/GetPrototypeFromConstructor'),
+ GetSubstitution: require('./2017/GetSubstitution'),
+ GetV: require('./2017/GetV'),
+ HasOwnProperty: require('./2017/HasOwnProperty'),
+ HasProperty: require('./2017/HasProperty'),
+ HourFromTime: require('./2017/HourFromTime'),
+ InLeapYear: require('./2017/InLeapYear'),
+ InstanceofOperator: require('./2017/InstanceofOperator'),
+ Invoke: require('./2017/Invoke'),
+ IsAccessorDescriptor: require('./2017/IsAccessorDescriptor'),
+ IsArray: require('./2017/IsArray'),
+ IsCallable: require('./2017/IsCallable'),
+ IsConcatSpreadable: require('./2017/IsConcatSpreadable'),
+ IsConstructor: require('./2017/IsConstructor'),
+ IsDataDescriptor: require('./2017/IsDataDescriptor'),
+ IsExtensible: require('./2017/IsExtensible'),
+ IsGenericDescriptor: require('./2017/IsGenericDescriptor'),
+ IsInteger: require('./2017/IsInteger'),
+ IsPromise: require('./2017/IsPromise'),
+ IsPropertyDescriptor: require('./2017/IsPropertyDescriptor'),
+ IsPropertyKey: require('./2017/IsPropertyKey'),
+ IsRegExp: require('./2017/IsRegExp'),
+ IterableToList: require('./2017/IterableToList'),
+ IteratorClose: require('./2017/IteratorClose'),
+ IteratorComplete: require('./2017/IteratorComplete'),
+ IteratorNext: require('./2017/IteratorNext'),
+ IteratorStep: require('./2017/IteratorStep'),
+ IteratorValue: require('./2017/IteratorValue'),
+ MakeDate: require('./2017/MakeDate'),
+ MakeDay: require('./2017/MakeDay'),
+ MakeTime: require('./2017/MakeTime'),
+ MinFromTime: require('./2017/MinFromTime'),
+ modulo: require('./2017/modulo'),
+ MonthFromTime: require('./2017/MonthFromTime'),
+ msFromTime: require('./2017/msFromTime'),
+ ObjectCreate: require('./2017/ObjectCreate'),
+ OrdinaryDefineOwnProperty: require('./2017/OrdinaryDefineOwnProperty'),
+ OrdinaryGetOwnProperty: require('./2017/OrdinaryGetOwnProperty'),
+ OrdinarySetPrototypeOf: require('./2017/OrdinarySetPrototypeOf'),
+ OrdinaryGetPrototypeOf: require('./2017/OrdinaryGetPrototypeOf'),
+ OrdinaryHasInstance: require('./2017/OrdinaryHasInstance'),
+ OrdinaryHasProperty: require('./2017/OrdinaryHasProperty'),
+ RegExpExec: require('./2017/RegExpExec'),
+ RequireObjectCoercible: require('./2017/RequireObjectCoercible'),
+ SameValue: require('./2017/SameValue'),
+ SameValueNonNumber: require('./2017/SameValueNonNumber'),
+ SameValueZero: require('./2017/SameValueZero'),
+ SecFromTime: require('./2017/SecFromTime'),
+ Set: require('./2017/Set'),
+ SetFunctionName: require('./2017/SetFunctionName'),
+ SetIntegrityLevel: require('./2017/SetIntegrityLevel'),
+ SpeciesConstructor: require('./2017/SpeciesConstructor'),
+ SymbolDescriptiveString: require('./2017/SymbolDescriptiveString'),
+ TestIntegrityLevel: require('./2017/TestIntegrityLevel'),
+ thisBooleanValue: require('./2017/thisBooleanValue'),
+ thisNumberValue: require('./2017/thisNumberValue'),
+ thisStringValue: require('./2017/thisStringValue'),
+ thisTimeValue: require('./2017/thisTimeValue'),
+ TimeClip: require('./2017/TimeClip'),
+ TimeFromYear: require('./2017/TimeFromYear'),
+ TimeWithinDay: require('./2017/TimeWithinDay'),
+ ToBoolean: require('./2017/ToBoolean'),
+ ToDateString: require('./2017/ToDateString'),
+ ToIndex: require('./2017/ToIndex'),
+ ToInt16: require('./2017/ToInt16'),
+ ToInt32: require('./2017/ToInt32'),
+ ToInt8: require('./2017/ToInt8'),
+ ToInteger: require('./2017/ToInteger'),
+ ToLength: require('./2017/ToLength'),
+ ToNumber: require('./2017/ToNumber'),
+ ToObject: require('./2017/ToObject'),
+ ToPrimitive: require('./2017/ToPrimitive'),
+ ToPropertyDescriptor: require('./2017/ToPropertyDescriptor'),
+ ToPropertyKey: require('./2017/ToPropertyKey'),
+ ToString: require('./2017/ToString'),
+ ToUint16: require('./2017/ToUint16'),
+ ToUint32: require('./2017/ToUint32'),
+ ToUint8: require('./2017/ToUint8'),
+ ToUint8Clamp: require('./2017/ToUint8Clamp'),
+ Type: require('./2017/Type'),
+ ValidateAndApplyPropertyDescriptor: require('./2017/ValidateAndApplyPropertyDescriptor'),
+ WeekDay: require('./2017/WeekDay'),
+ YearFromTime: require('./2017/YearFromTime')
+};
+
+module.exports = ES2017;
diff --git a/node_modules/object.values/node_modules/es-abstract/es2018.js b/node_modules/object.values/node_modules/es-abstract/es2018.js
new file mode 100644
index 0000000..e68910b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es2018.js
@@ -0,0 +1,126 @@
+'use strict';
+
+/* eslint global-require: 0 */
+// https://www.ecma-international.org/ecma-262/9.0/#sec-abstract-operations
+var ES2018 = {
+ 'Abstract Equality Comparison': require('./2018/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./2018/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./2018/StrictEqualityComparison'),
+ AdvanceStringIndex: require('./2018/AdvanceStringIndex'),
+ ArrayCreate: require('./2018/ArrayCreate'),
+ ArraySetLength: require('./2018/ArraySetLength'),
+ ArraySpeciesCreate: require('./2018/ArraySpeciesCreate'),
+ Call: require('./2018/Call'),
+ CanonicalNumericIndexString: require('./2018/CanonicalNumericIndexString'),
+ CompletePropertyDescriptor: require('./2018/CompletePropertyDescriptor'),
+ CopyDataProperties: require('./2018/CopyDataProperties'),
+ CreateDataProperty: require('./2018/CreateDataProperty'),
+ CreateDataPropertyOrThrow: require('./2018/CreateDataPropertyOrThrow'),
+ CreateHTML: require('./2018/CreateHTML'),
+ CreateIterResultObject: require('./2018/CreateIterResultObject'),
+ CreateListFromArrayLike: require('./2018/CreateListFromArrayLike'),
+ CreateMethodProperty: require('./2018/CreateMethodProperty'),
+ DateFromTime: require('./2018/DateFromTime'),
+ DateString: require('./2018/DateString'),
+ Day: require('./2018/Day'),
+ DayFromYear: require('./2018/DayFromYear'),
+ DaysInYear: require('./2018/DaysInYear'),
+ DayWithinYear: require('./2018/DayWithinYear'),
+ DefinePropertyOrThrow: require('./2018/DefinePropertyOrThrow'),
+ DeletePropertyOrThrow: require('./2018/DeletePropertyOrThrow'),
+ EnumerableOwnPropertyNames: require('./2018/EnumerableOwnPropertyNames'),
+ FromPropertyDescriptor: require('./2018/FromPropertyDescriptor'),
+ Get: require('./2018/Get'),
+ GetIterator: require('./2018/GetIterator'),
+ GetMethod: require('./2018/GetMethod'),
+ GetOwnPropertyKeys: require('./2018/GetOwnPropertyKeys'),
+ GetPrototypeFromConstructor: require('./2018/GetPrototypeFromConstructor'),
+ GetSubstitution: require('./2018/GetSubstitution'),
+ GetV: require('./2018/GetV'),
+ HasOwnProperty: require('./2018/HasOwnProperty'),
+ HasProperty: require('./2018/HasProperty'),
+ HourFromTime: require('./2018/HourFromTime'),
+ InLeapYear: require('./2018/InLeapYear'),
+ InstanceofOperator: require('./2018/InstanceofOperator'),
+ Invoke: require('./2018/Invoke'),
+ IsAccessorDescriptor: require('./2018/IsAccessorDescriptor'),
+ IsArray: require('./2018/IsArray'),
+ IsCallable: require('./2018/IsCallable'),
+ IsConcatSpreadable: require('./2018/IsConcatSpreadable'),
+ IsConstructor: require('./2018/IsConstructor'),
+ IsDataDescriptor: require('./2018/IsDataDescriptor'),
+ IsExtensible: require('./2018/IsExtensible'),
+ IsGenericDescriptor: require('./2018/IsGenericDescriptor'),
+ IsInteger: require('./2018/IsInteger'),
+ IsPromise: require('./2018/IsPromise'),
+ IsPropertyKey: require('./2018/IsPropertyKey'),
+ IsRegExp: require('./2018/IsRegExp'),
+ IsStringPrefix: require('./2018/IsStringPrefix'),
+ IterableToList: require('./2018/IterableToList'),
+ IteratorClose: require('./2018/IteratorClose'),
+ IteratorComplete: require('./2018/IteratorComplete'),
+ IteratorNext: require('./2018/IteratorNext'),
+ IteratorStep: require('./2018/IteratorStep'),
+ IteratorValue: require('./2018/IteratorValue'),
+ MakeDate: require('./2018/MakeDate'),
+ MakeDay: require('./2018/MakeDay'),
+ MakeTime: require('./2018/MakeTime'),
+ MinFromTime: require('./2018/MinFromTime'),
+ modulo: require('./2018/modulo'),
+ MonthFromTime: require('./2018/MonthFromTime'),
+ msFromTime: require('./2018/msFromTime'),
+ NumberToString: require('./2018/NumberToString'),
+ ObjectCreate: require('./2018/ObjectCreate'),
+ OrdinaryDefineOwnProperty: require('./2018/OrdinaryDefineOwnProperty'),
+ OrdinaryGetOwnProperty: require('./2018/OrdinaryGetOwnProperty'),
+ OrdinaryGetPrototypeOf: require('./2018/OrdinaryGetPrototypeOf'),
+ OrdinarySetPrototypeOf: require('./2018/OrdinarySetPrototypeOf'),
+ OrdinaryHasInstance: require('./2018/OrdinaryHasInstance'),
+ OrdinaryHasProperty: require('./2018/OrdinaryHasProperty'),
+ PromiseResolve: require('./2018/PromiseResolve'),
+ RegExpExec: require('./2018/RegExpExec'),
+ RequireObjectCoercible: require('./2018/RequireObjectCoercible'),
+ SameValue: require('./2018/SameValue'),
+ SameValueNonNumber: require('./2018/SameValueNonNumber'),
+ SameValueZero: require('./2018/SameValueZero'),
+ SecFromTime: require('./2018/SecFromTime'),
+ Set: require('./2018/Set'),
+ SetFunctionName: require('./2018/SetFunctionName'),
+ SetIntegrityLevel: require('./2018/SetIntegrityLevel'),
+ SpeciesConstructor: require('./2018/SpeciesConstructor'),
+ SymbolDescriptiveString: require('./2018/SymbolDescriptiveString'),
+ TestIntegrityLevel: require('./2018/TestIntegrityLevel'),
+ thisBooleanValue: require('./2018/thisBooleanValue'),
+ thisNumberValue: require('./2018/thisNumberValue'),
+ thisStringValue: require('./2018/thisStringValue'),
+ thisSymbolValue: require('./2018/thisSymbolValue'),
+ thisTimeValue: require('./2018/thisTimeValue'),
+ TimeClip: require('./2018/TimeClip'),
+ TimeFromYear: require('./2018/TimeFromYear'),
+ TimeString: require('./2018/TimeString'),
+ TimeWithinDay: require('./2018/TimeWithinDay'),
+ ToBoolean: require('./2018/ToBoolean'),
+ ToDateString: require('./2018/ToDateString'),
+ ToIndex: require('./2018/ToIndex'),
+ ToInt16: require('./2018/ToInt16'),
+ ToInt32: require('./2018/ToInt32'),
+ ToInt8: require('./2018/ToInt8'),
+ ToInteger: require('./2018/ToInteger'),
+ ToLength: require('./2018/ToLength'),
+ ToNumber: require('./2018/ToNumber'),
+ ToObject: require('./2018/ToObject'),
+ ToPrimitive: require('./2018/ToPrimitive'),
+ ToPropertyDescriptor: require('./2018/ToPropertyDescriptor'),
+ ToPropertyKey: require('./2018/ToPropertyKey'),
+ ToString: require('./2018/ToString'),
+ ToUint16: require('./2018/ToUint16'),
+ ToUint32: require('./2018/ToUint32'),
+ ToUint8: require('./2018/ToUint8'),
+ ToUint8Clamp: require('./2018/ToUint8Clamp'),
+ Type: require('./2018/Type'),
+ ValidateAndApplyPropertyDescriptor: require('./2018/ValidateAndApplyPropertyDescriptor'),
+ WeekDay: require('./2018/WeekDay'),
+ YearFromTime: require('./2018/YearFromTime')
+};
+
+module.exports = ES2018;
diff --git a/node_modules/object.values/node_modules/es-abstract/es2019.js b/node_modules/object.values/node_modules/es-abstract/es2019.js
new file mode 100644
index 0000000..3bd65e4
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es2019.js
@@ -0,0 +1,129 @@
+'use strict';
+
+/* eslint global-require: 0 */
+// https://www.ecma-international.org/ecma-262/10.0/#sec-abstract-operations
+var ES2019 = {
+ 'Abstract Equality Comparison': require('./2019/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./2019/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./2019/StrictEqualityComparison'),
+ AddEntriesFromIterable: require('./2019/AddEntriesFromIterable'),
+ AdvanceStringIndex: require('./2019/AdvanceStringIndex'),
+ ArrayCreate: require('./2019/ArrayCreate'),
+ ArraySetLength: require('./2019/ArraySetLength'),
+ ArraySpeciesCreate: require('./2019/ArraySpeciesCreate'),
+ Call: require('./2019/Call'),
+ CanonicalNumericIndexString: require('./2019/CanonicalNumericIndexString'),
+ CompletePropertyDescriptor: require('./2019/CompletePropertyDescriptor'),
+ CopyDataProperties: require('./2019/CopyDataProperties'),
+ CreateDataProperty: require('./2019/CreateDataProperty'),
+ CreateDataPropertyOrThrow: require('./2019/CreateDataPropertyOrThrow'),
+ CreateHTML: require('./2019/CreateHTML'),
+ CreateIterResultObject: require('./2019/CreateIterResultObject'),
+ CreateListFromArrayLike: require('./2019/CreateListFromArrayLike'),
+ CreateMethodProperty: require('./2019/CreateMethodProperty'),
+ DateFromTime: require('./2019/DateFromTime'),
+ DateString: require('./2019/DateString'),
+ Day: require('./2019/Day'),
+ DayFromYear: require('./2019/DayFromYear'),
+ DaysInYear: require('./2019/DaysInYear'),
+ DayWithinYear: require('./2019/DayWithinYear'),
+ DefinePropertyOrThrow: require('./2019/DefinePropertyOrThrow'),
+ DeletePropertyOrThrow: require('./2019/DeletePropertyOrThrow'),
+ EnumerableOwnPropertyNames: require('./2019/EnumerableOwnPropertyNames'),
+ FlattenIntoArray: require('./2019/FlattenIntoArray'),
+ FromPropertyDescriptor: require('./2019/FromPropertyDescriptor'),
+ Get: require('./2019/Get'),
+ GetIterator: require('./2019/GetIterator'),
+ GetMethod: require('./2019/GetMethod'),
+ GetOwnPropertyKeys: require('./2019/GetOwnPropertyKeys'),
+ GetPrototypeFromConstructor: require('./2019/GetPrototypeFromConstructor'),
+ GetSubstitution: require('./2019/GetSubstitution'),
+ GetV: require('./2019/GetV'),
+ HasOwnProperty: require('./2019/HasOwnProperty'),
+ HasProperty: require('./2019/HasProperty'),
+ HourFromTime: require('./2019/HourFromTime'),
+ InLeapYear: require('./2019/InLeapYear'),
+ InstanceofOperator: require('./2019/InstanceofOperator'),
+ Invoke: require('./2019/Invoke'),
+ IsAccessorDescriptor: require('./2019/IsAccessorDescriptor'),
+ IsArray: require('./2019/IsArray'),
+ IsCallable: require('./2019/IsCallable'),
+ IsConcatSpreadable: require('./2019/IsConcatSpreadable'),
+ IsConstructor: require('./2019/IsConstructor'),
+ IsDataDescriptor: require('./2019/IsDataDescriptor'),
+ IsExtensible: require('./2019/IsExtensible'),
+ IsGenericDescriptor: require('./2019/IsGenericDescriptor'),
+ IsInteger: require('./2019/IsInteger'),
+ IsPromise: require('./2019/IsPromise'),
+ IsPropertyKey: require('./2019/IsPropertyKey'),
+ IsRegExp: require('./2019/IsRegExp'),
+ IsStringPrefix: require('./2019/IsStringPrefix'),
+ IterableToList: require('./2019/IterableToList'),
+ IteratorClose: require('./2019/IteratorClose'),
+ IteratorComplete: require('./2019/IteratorComplete'),
+ IteratorNext: require('./2019/IteratorNext'),
+ IteratorStep: require('./2019/IteratorStep'),
+ IteratorValue: require('./2019/IteratorValue'),
+ MakeDate: require('./2019/MakeDate'),
+ MakeDay: require('./2019/MakeDay'),
+ MakeTime: require('./2019/MakeTime'),
+ MinFromTime: require('./2019/MinFromTime'),
+ modulo: require('./2019/modulo'),
+ MonthFromTime: require('./2019/MonthFromTime'),
+ msFromTime: require('./2019/msFromTime'),
+ NumberToString: require('./2019/NumberToString'),
+ ObjectCreate: require('./2019/ObjectCreate'),
+ OrdinaryDefineOwnProperty: require('./2019/OrdinaryDefineOwnProperty'),
+ OrdinaryGetOwnProperty: require('./2019/OrdinaryGetOwnProperty'),
+ OrdinaryGetPrototypeOf: require('./2019/OrdinaryGetPrototypeOf'),
+ OrdinarySetPrototypeOf: require('./2019/OrdinarySetPrototypeOf'),
+ OrdinaryHasInstance: require('./2019/OrdinaryHasInstance'),
+ OrdinaryHasProperty: require('./2019/OrdinaryHasProperty'),
+ PromiseResolve: require('./2019/PromiseResolve'),
+ RegExpExec: require('./2019/RegExpExec'),
+ RequireObjectCoercible: require('./2019/RequireObjectCoercible'),
+ SameValue: require('./2019/SameValue'),
+ SameValueNonNumber: require('./2019/SameValueNonNumber'),
+ SameValueZero: require('./2019/SameValueZero'),
+ SecFromTime: require('./2019/SecFromTime'),
+ Set: require('./2019/Set'),
+ SetFunctionName: require('./2019/SetFunctionName'),
+ SetIntegrityLevel: require('./2019/SetIntegrityLevel'),
+ SpeciesConstructor: require('./2019/SpeciesConstructor'),
+ SymbolDescriptiveString: require('./2019/SymbolDescriptiveString'),
+ TestIntegrityLevel: require('./2019/TestIntegrityLevel'),
+ thisBooleanValue: require('./2019/thisBooleanValue'),
+ thisNumberValue: require('./2019/thisNumberValue'),
+ thisStringValue: require('./2019/thisStringValue'),
+ thisSymbolValue: require('./2019/thisSymbolValue'),
+ thisTimeValue: require('./2019/thisTimeValue'),
+ TimeClip: require('./2019/TimeClip'),
+ TimeFromYear: require('./2019/TimeFromYear'),
+ TimeString: require('./2019/TimeString'),
+ TimeWithinDay: require('./2019/TimeWithinDay'),
+ ToBoolean: require('./2019/ToBoolean'),
+ ToDateString: require('./2019/ToDateString'),
+ ToIndex: require('./2019/ToIndex'),
+ ToInt16: require('./2019/ToInt16'),
+ ToInt32: require('./2019/ToInt32'),
+ ToInt8: require('./2019/ToInt8'),
+ ToInteger: require('./2019/ToInteger'),
+ ToLength: require('./2019/ToLength'),
+ ToNumber: require('./2019/ToNumber'),
+ ToObject: require('./2019/ToObject'),
+ ToPrimitive: require('./2019/ToPrimitive'),
+ ToPropertyDescriptor: require('./2019/ToPropertyDescriptor'),
+ ToPropertyKey: require('./2019/ToPropertyKey'),
+ ToString: require('./2019/ToString'),
+ ToUint16: require('./2019/ToUint16'),
+ ToUint32: require('./2019/ToUint32'),
+ ToUint8: require('./2019/ToUint8'),
+ ToUint8Clamp: require('./2019/ToUint8Clamp'),
+ TrimString: require('./2019/TrimString'),
+ Type: require('./2019/Type'),
+ ValidateAndApplyPropertyDescriptor: require('./2019/ValidateAndApplyPropertyDescriptor'),
+ WeekDay: require('./2019/WeekDay'),
+ YearFromTime: require('./2019/YearFromTime')
+};
+
+module.exports = ES2019;
diff --git a/node_modules/object.values/node_modules/es-abstract/es5.js b/node_modules/object.values/node_modules/es-abstract/es5.js
new file mode 100644
index 0000000..2cc9515
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es5.js
@@ -0,0 +1,49 @@
+'use strict';
+
+/* eslint global-require: 0 */
+
+// https://es5.github.io/#x9
+module.exports = {
+ 'Abstract Equality Comparison': require('./5/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./5/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./5/StrictEqualityComparison'),
+ CheckObjectCoercible: require('./5/CheckObjectCoercible'),
+ DateFromTime: require('./5/DateFromTime'),
+ Day: require('./5/Day'),
+ DayFromYear: require('./5/DayFromYear'),
+ DaysInYear: require('./5/DaysInYear'),
+ DayWithinYear: require('./5/DayWithinYear'),
+ FromPropertyDescriptor: require('./5/FromPropertyDescriptor'),
+ HourFromTime: require('./5/HourFromTime'),
+ InLeapYear: require('./5/InLeapYear'),
+ IsAccessorDescriptor: require('./5/IsAccessorDescriptor'),
+ IsCallable: require('./5/IsCallable'),
+ IsDataDescriptor: require('./5/IsDataDescriptor'),
+ IsGenericDescriptor: require('./5/IsGenericDescriptor'),
+ IsPropertyDescriptor: require('./5/IsPropertyDescriptor'),
+ MakeDate: require('./5/MakeDate'),
+ MakeDay: require('./5/MakeDay'),
+ MakeTime: require('./5/MakeTime'),
+ MinFromTime: require('./5/MinFromTime'),
+ modulo: require('./5/modulo'),
+ MonthFromTime: require('./5/MonthFromTime'),
+ msFromTime: require('./5/msFromTime'),
+ SameValue: require('./5/SameValue'),
+ SecFromTime: require('./5/SecFromTime'),
+ TimeClip: require('./5/TimeClip'),
+ TimeFromYear: require('./5/TimeFromYear'),
+ TimeWithinDay: require('./5/TimeWithinDay'),
+ ToBoolean: require('./5/ToBoolean'),
+ ToInt32: require('./5/ToInt32'),
+ ToInteger: require('./5/ToInteger'),
+ ToNumber: require('./5/ToNumber'),
+ ToObject: require('./5/ToObject'),
+ ToPrimitive: require('./5/ToPrimitive'),
+ ToPropertyDescriptor: require('./5/ToPropertyDescriptor'),
+ ToString: require('./5/ToString'),
+ ToUint16: require('./5/ToUint16'),
+ ToUint32: require('./5/ToUint32'),
+ Type: require('./5/Type'),
+ WeekDay: require('./5/WeekDay'),
+ YearFromTime: require('./5/YearFromTime')
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/es6.js b/node_modules/object.values/node_modules/es-abstract/es6.js
new file mode 100644
index 0000000..2d1f4dc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es6.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./es2015');
diff --git a/node_modules/object.values/node_modules/es-abstract/es7.js b/node_modules/object.values/node_modules/es-abstract/es7.js
new file mode 100644
index 0000000..f2f15c0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/es7.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./es2016');
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/DefineOwnProperty.js b/node_modules/object.values/node_modules/es-abstract/helpers/DefineOwnProperty.js
new file mode 100644
index 0000000..99ace10
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/DefineOwnProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+
+if ($defineProperty) {
+ try {
+ $defineProperty({}, 'a', { value: 1 });
+ } catch (e) {
+ // IE 8 has a broken defineProperty
+ $defineProperty = null;
+ }
+}
+
+var callBound = require('../helpers/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+// eslint-disable-next-line max-params
+module.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {
+ if (!$defineProperty) {
+ if (!IsDataDescriptor(desc)) {
+ // ES3 does not support getters/setters
+ return false;
+ }
+ if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
+ return false;
+ }
+
+ // fallback for ES3
+ if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
+ // a non-enumerable existing property
+ return false;
+ }
+
+ // property does not exist at all, or exists but is enumerable
+ var V = desc['[[Value]]'];
+ // eslint-disable-next-line no-param-reassign
+ O[P] = V; // will use [[Define]]
+ return SameValue(O[P], V);
+ }
+ $defineProperty(O, P, FromPropertyDescriptor(desc));
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/OwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/helpers/OwnPropertyKeys.js
new file mode 100644
index 0000000..7d02196
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/OwnPropertyKeys.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBind = require('./callBind');
+var callBound = require('./callBound');
+
+var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
+var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
+var $gOPS = $SymbolValueOf ? GetIntrinsic('%Object.getOwnPropertySymbols%') : null;
+
+var keys = require('object-keys');
+
+module.exports = function OwnPropertyKeys(source) {
+ var ownKeys = ($gOPN || keys)(source);
+ if ($gOPS) {
+ $pushApply(ownKeys, $gOPS(source));
+ }
+ return ownKeys;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/assertRecord.js b/node_modules/object.values/node_modules/es-abstract/helpers/assertRecord.js
new file mode 100644
index 0000000..45e115a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/assertRecord.js
@@ -0,0 +1,48 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var has = require('has');
+
+var predicates = {
+ // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
+ 'Property Descriptor': function isPropertyDescriptor(Type, Desc) {
+ if (Type(Desc) !== 'Object') {
+ return false;
+ }
+ var allowed = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Get]]': true,
+ '[[Set]]': true,
+ '[[Value]]': true,
+ '[[Writable]]': true
+ };
+
+ for (var key in Desc) { // eslint-disable-line
+ if (has(Desc, key) && !allowed[key]) {
+ return false;
+ }
+ }
+
+ var isData = has(Desc, '[[Value]]');
+ var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');
+ if (isData && IsAccessor) {
+ throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
+ }
+ return true;
+ }
+};
+
+module.exports = function assertRecord(Type, recordType, argumentName, value) {
+ var predicate = predicates[recordType];
+ if (typeof predicate !== 'function') {
+ throw new $SyntaxError('unknown record type: ' + recordType);
+ }
+ if (!predicate(Type, value)) {
+ throw new $TypeError(argumentName + ' must be a ' + recordType);
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/assign.js b/node_modules/object.values/node_modules/es-abstract/helpers/assign.js
new file mode 100644
index 0000000..7e6666e
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/assign.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+
+var $assign = GetIntrinsic('%Object%').assign;
+
+module.exports = function assign(target, source) {
+ if ($assign) {
+ return $assign(target, source);
+ }
+
+ // eslint-disable-next-line no-restricted-syntax
+ for (var key in source) {
+ if (has(source, key)) {
+ // eslint-disable-next-line no-param-reassign
+ target[key] = source[key];
+ }
+ }
+ return target;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/callBind.js b/node_modules/object.values/node_modules/es-abstract/helpers/callBind.js
new file mode 100644
index 0000000..dd206ab
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/callBind.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var bind = require('function-bind');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $apply = $Function.apply;
+var $call = $Function.call;
+
+module.exports = function callBind() {
+ return bind.apply($call, arguments);
+};
+
+module.exports.apply = function applyBind() {
+ return bind.apply($apply, arguments);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/callBound.js b/node_modules/object.values/node_modules/es-abstract/helpers/callBound.js
new file mode 100644
index 0000000..9dc8fc5
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/callBound.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBind = require('./callBind');
+
+var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
+
+module.exports = function callBoundIntrinsic(name, allowMissing) {
+ var intrinsic = GetIntrinsic(name, !!allowMissing);
+ if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.')) {
+ return callBind(intrinsic);
+ }
+ return intrinsic;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/every.js b/node_modules/object.values/node_modules/es-abstract/helpers/every.js
new file mode 100644
index 0000000..42a4582
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/every.js
@@ -0,0 +1,10 @@
+'use strict';
+
+module.exports = function every(array, predicate) {
+ for (var i = 0; i < array.length; i += 1) {
+ if (!predicate(array[i], i, array)) {
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/forEach.js b/node_modules/object.values/node_modules/es-abstract/helpers/forEach.js
new file mode 100644
index 0000000..35915a6
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/forEach.js
@@ -0,0 +1,7 @@
+'use strict';
+
+module.exports = function forEach(array, callback) {
+ for (var i = 0; i < array.length; i += 1) {
+ callback(array[i], i, array); // eslint-disable-line callback-return
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/getInferredName.js b/node_modules/object.values/node_modules/es-abstract/helpers/getInferredName.js
new file mode 100644
index 0000000..2dab6e7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/getInferredName.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var getInferredName;
+try {
+ // eslint-disable-next-line no-new-func
+ getInferredName = Function('s', 'return { [s]() {} }[s].name;');
+} catch (e) {}
+
+var inferred = function () {};
+module.exports = getInferredName && inferred.name === 'inferred' ? getInferredName : null;
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/getIteratorMethod.js b/node_modules/object.values/node_modules/es-abstract/helpers/getIteratorMethod.js
new file mode 100644
index 0000000..02f932c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/getIteratorMethod.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var hasSymbols = require('has-symbols')();
+var GetIntrinsic = require('../GetIntrinsic');
+var callBound = require('./callBound');
+
+var $iterator = GetIntrinsic('%Symbol.iterator%', true);
+var $stringSlice = callBound('String.prototype.slice');
+
+module.exports = function getIteratorMethod(ES, iterable) {
+ var usingIterator;
+ if (hasSymbols) {
+ usingIterator = ES.GetMethod(iterable, $iterator);
+ } else if (ES.IsArray(iterable)) {
+ usingIterator = function () {
+ var i = -1;
+ var arr = this; // eslint-disable-line no-invalid-this
+ return {
+ next: function () {
+ i += 1;
+ return {
+ done: i >= arr.length,
+ value: arr[i]
+ };
+ }
+ };
+ };
+ } else if (ES.Type(iterable) === 'String') {
+ usingIterator = function () {
+ var i = 0;
+ return {
+ next: function () {
+ var nextIndex = ES.AdvanceStringIndex(iterable, i, true);
+ var value = $stringSlice(iterable, i, nextIndex);
+ i = nextIndex;
+ return {
+ done: nextIndex > iterable.length,
+ value: value
+ };
+ }
+ };
+ };
+ }
+ return usingIterator;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js
new file mode 100644
index 0000000..71168e9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');
+if ($gOPD) {
+ try {
+ $gOPD([], 'length');
+ } catch (e) {
+ // IE 8 has a broken gOPD
+ $gOPD = null;
+ }
+}
+
+module.exports = $gOPD;
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/getProto.js b/node_modules/object.values/node_modules/es-abstract/helpers/getProto.js
new file mode 100644
index 0000000..af10fd8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/getProto.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var originalGetProto = GetIntrinsic('%Object.getPrototypeOf%', true);
+var $ArrayProto = GetIntrinsic('%Array.prototype%');
+
+module.exports = originalGetProto || (
+ // eslint-disable-next-line no-proto
+ [].__proto__ === $ArrayProto
+ ? function (O) {
+ return O.__proto__; // eslint-disable-line no-proto
+ }
+ : null
+);
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/getSymbolDescription.js b/node_modules/object.values/node_modules/es-abstract/helpers/getSymbolDescription.js
new file mode 100644
index 0000000..dff8fcc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/getSymbolDescription.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var callBound = require('./callBound');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var symToStr = callBound('Symbol.prototype.toString', true);
+
+var getInferredName = require('./getInferredName');
+
+module.exports = function getSymbolDescription(symbol) {
+ if (!symToStr) {
+ throw new $SyntaxError('Symbols are not supported in this environment');
+ }
+ var str = symToStr(symbol); // will throw if not a symbol
+
+ if (getInferredName) {
+ var name = getInferredName(symbol);
+ if (name === '') { return; }
+ // eslint-disable-next-line consistent-return
+ return name.slice(1, -1); // name.slice('['.length, -']'.length);
+ }
+
+ var desc = str.slice(7, -1); // str.slice('Symbol('.length, -')'.length);
+ if (desc) {
+ // eslint-disable-next-line consistent-return
+ return desc;
+ }
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/isFinite.js b/node_modules/object.values/node_modules/es-abstract/helpers/isFinite.js
new file mode 100644
index 0000000..9e7cd4f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/isFinite.js
@@ -0,0 +1,5 @@
+'use strict';
+
+var $isNaN = Number.isNaN || function (a) { return a !== a; };
+
+module.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/isNaN.js b/node_modules/object.values/node_modules/es-abstract/helpers/isNaN.js
new file mode 100644
index 0000000..cb8631d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/isNaN.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = Number.isNaN || function isNaN(a) {
+ return a !== a;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/isPrefixOf.js b/node_modules/object.values/node_modules/es-abstract/helpers/isPrefixOf.js
new file mode 100644
index 0000000..b67d640
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/isPrefixOf.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $strSlice = require('../helpers/callBound')('String.prototype.slice');
+
+module.exports = function isPrefixOf(prefix, string) {
+ if (prefix === string) {
+ return true;
+ }
+ if (prefix.length > string.length) {
+ return false;
+ }
+ return $strSlice(string, 0, prefix.length) === prefix;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/isPrimitive.js b/node_modules/object.values/node_modules/es-abstract/helpers/isPrimitive.js
new file mode 100644
index 0000000..06f0bf0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/isPrimitive.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isPrimitive(value) {
+ return value === null || (typeof value !== 'function' && typeof value !== 'object');
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/isPropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/helpers/isPropertyDescriptor.js
new file mode 100644
index 0000000..23e8995
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/isPropertyDescriptor.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var has = require('has');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+module.exports = function IsPropertyDescriptor(ES, Desc) {
+ if (ES.Type(Desc) !== 'Object') {
+ return false;
+ }
+ var allowed = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Get]]': true,
+ '[[Set]]': true,
+ '[[Value]]': true,
+ '[[Writable]]': true
+ };
+
+ for (var key in Desc) { // eslint-disable-line
+ if (has(Desc, key) && !allowed[key]) {
+ return false;
+ }
+ }
+
+ if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
+ }
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js b/node_modules/object.values/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js
new file mode 100644
index 0000000..a6162a1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var every = require('./every');
+
+module.exports = function isSamePropertyDescriptor(ES, D1, D2) {
+ var fields = [
+ '[[Configurable]]',
+ '[[Enumerable]]',
+ '[[Get]]',
+ '[[Set]]',
+ '[[Value]]',
+ '[[Writable]]'
+ ];
+ return every(fields, function (field) {
+ if ((field in D1) !== (field in D2)) {
+ return false;
+ }
+ return ES.SameValue(D1[field], D2[field]);
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/maxSafeInteger.js b/node_modules/object.values/node_modules/es-abstract/helpers/maxSafeInteger.js
new file mode 100644
index 0000000..2fe8f38
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/maxSafeInteger.js
@@ -0,0 +1,8 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Math = GetIntrinsic('%Math%');
+var $Number = GetIntrinsic('%Number%');
+
+module.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/mod.js b/node_modules/object.values/node_modules/es-abstract/helpers/mod.js
new file mode 100644
index 0000000..70f0eea
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/mod.js
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = function mod(number, modulo) {
+ var remain = number % modulo;
+ return Math.floor(remain >= 0 ? remain : remain + modulo);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/padTimeComponent.js b/node_modules/object.values/node_modules/es-abstract/helpers/padTimeComponent.js
new file mode 100644
index 0000000..cbd8d06
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/padTimeComponent.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var callBound = require('../helpers/callBound');
+
+var $strSlice = callBound('String.prototype.slice');
+
+module.exports = function padTimeComponent(c, count) {
+ return $strSlice('00' + c, -(count || 2));
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/regexTester.js b/node_modules/object.values/node_modules/es-abstract/helpers/regexTester.js
new file mode 100644
index 0000000..982cc9f
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/regexTester.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $test = GetIntrinsic('RegExp.prototype.test');
+
+var callBind = require('./callBind');
+
+module.exports = function regexTester(regex) {
+ return callBind($test, regex);
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/setProto.js b/node_modules/object.values/node_modules/es-abstract/helpers/setProto.js
new file mode 100644
index 0000000..29ec991
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/setProto.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var originalSetProto = GetIntrinsic('%Object.setPrototypeOf%', true);
+var $ArrayProto = GetIntrinsic('%Array.prototype%');
+
+module.exports = originalSetProto || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayProto
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/sign.js b/node_modules/object.values/node_modules/es-abstract/helpers/sign.js
new file mode 100644
index 0000000..598ea7d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/sign.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function sign(number) {
+ return number >= 0 ? 1 : -1;
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/helpers/timeConstants.js b/node_modules/object.values/node_modules/es-abstract/helpers/timeConstants.js
new file mode 100644
index 0000000..c275b40
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/helpers/timeConstants.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var HoursPerDay = 24;
+var MinutesPerHour = 60;
+var SecondsPerMinute = 60;
+var msPerSecond = 1e3;
+var msPerMinute = msPerSecond * SecondsPerMinute;
+var msPerHour = msPerMinute * MinutesPerHour;
+var msPerDay = 86400000;
+
+module.exports = {
+ HoursPerDay: HoursPerDay,
+ MinutesPerHour: MinutesPerHour,
+ SecondsPerMinute: SecondsPerMinute,
+ msPerSecond: msPerSecond,
+ msPerMinute: msPerMinute,
+ msPerHour: msPerHour,
+ msPerDay: msPerDay
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/index.js b/node_modules/object.values/node_modules/es-abstract/index.js
new file mode 100644
index 0000000..7cef039
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/index.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var assign = require('./helpers/assign');
+
+var ES5 = require('./es5');
+var ES2015 = require('./es2015');
+var ES2016 = require('./es2016');
+var ES2017 = require('./es2017');
+var ES2018 = require('./es2018');
+var ES2019 = require('./es2019');
+
+var ES = {
+ ES5: ES5,
+ ES6: ES2015,
+ ES2015: ES2015,
+ ES7: ES2016,
+ ES2016: ES2016,
+ ES2017: ES2017,
+ ES2018: ES2018,
+ ES2019: ES2019
+};
+assign(ES, ES5);
+delete ES.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible
+assign(ES, ES2015);
+
+module.exports = ES;
diff --git a/node_modules/object.values/node_modules/es-abstract/operations/.eslintrc b/node_modules/object.values/node_modules/es-abstract/operations/.eslintrc
new file mode 100644
index 0000000..bcd76f7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/operations/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "rules": {
+ "id-length": 0,
+ },
+}
diff --git a/node_modules/object.values/node_modules/es-abstract/operations/2015.js b/node_modules/object.values/node_modules/es-abstract/operations/2015.js
new file mode 100644
index 0000000..3f6c358
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/operations/2015.js
@@ -0,0 +1,117 @@
+'use strict';
+
+module.exports = {
+ IsPropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op
+
+ 'Abstract Equality Comparison': 'https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison',
+ 'Abstract Relational Comparison': 'https://ecma-international.org/ecma-262/6.0/#sec-abstract-relational-comparison',
+ 'Strict Equality Comparison': 'https://ecma-international.org/ecma-262/6.0/#sec-strict-equality-comparison',
+ AdvanceStringIndex: 'https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex',
+ ArrayCreate: 'https://ecma-international.org/ecma-262/6.0/#sec-arraycreate',
+ ArraySetLength: 'https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength',
+ ArraySpeciesCreate: 'https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate',
+ Call: 'https://ecma-international.org/ecma-262/6.0/#sec-call',
+ CanonicalNumericIndexString: 'https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring',
+ CompletePropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor',
+ Construct: 'https://ecma-international.org/ecma-262/6.0/#sec-construct',
+ CreateArrayFromList: 'https://ecma-international.org/ecma-262/6.0/#sec-createarrayfromlist',
+ CreateDataProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty',
+ CreateDataPropertyOrThrow: 'https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow',
+ CreateHTML: 'https://ecma-international.org/ecma-262/6.0/#sec-createhtml',
+ CreateIterResultObject: 'https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject',
+ CreateListFromArrayLike: 'https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike',
+ CreateListIterator: 'https://ecma-international.org/ecma-262/6.0/#sec-createlistiterator',
+ CreateMethodProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty',
+ DateFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-date-number',
+ Day: 'https://ecma-international.org/ecma-262/6.0/#sec-day-number-and-time-within-day',
+ DayFromYear: 'https://ecma-international.org/ecma-262/6.0/#sec-year-number',
+ DaysInYear: 'https://ecma-international.org/ecma-262/6.0/#sec-year-number',
+ DayWithinYear: 'https://ecma-international.org/ecma-262/6.0/#sec-month-number',
+ DefinePropertyOrThrow: 'https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow',
+ DeletePropertyOrThrow: 'https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow',
+ EnumerableOwnNames: 'https://ecma-international.org/ecma-262/6.0/#sec-enumerableownnames',
+ FromPropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor',
+ Get: 'https://ecma-international.org/ecma-262/6.0/#sec-get-o-p',
+ GetIterator: 'https://ecma-international.org/ecma-262/6.0/#sec-getiterator',
+ GetMethod: 'https://ecma-international.org/ecma-262/6.0/#sec-getmethod',
+ GetOwnPropertyKeys: 'https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys',
+ GetPrototypeFromConstructor: 'https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor',
+ GetSubstitution: 'https://ecma-international.org/ecma-262/6.0/#sec-getsubstitution',
+ GetV: 'https://ecma-international.org/ecma-262/6.0/#sec-getv',
+ HasOwnProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty',
+ HasProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-hasproperty',
+ HourFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-hours-minutes-second-and-milliseconds',
+ InLeapYear: 'https://ecma-international.org/ecma-262/6.0/#sec-year-number',
+ InstanceofOperator: 'https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator',
+ Invoke: 'https://ecma-international.org/ecma-262/6.0/#sec-invoke',
+ IsAccessorDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor',
+ IsArray: 'https://ecma-international.org/ecma-262/6.0/#sec-isarray',
+ IsCallable: 'https://ecma-international.org/ecma-262/6.0/#sec-iscallable',
+ IsConcatSpreadable: 'https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable',
+ IsConstructor: 'https://ecma-international.org/ecma-262/6.0/#sec-isconstructor',
+ IsDataDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor',
+ IsExtensible: 'https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o',
+ IsGenericDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor',
+ IsInteger: 'https://ecma-international.org/ecma-262/6.0/#sec-isinteger',
+ IsPromise: 'https://ecma-international.org/ecma-262/6.0/#sec-ispromise',
+ IsPropertyKey: 'https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey',
+ IsRegExp: 'https://ecma-international.org/ecma-262/6.0/#sec-isregexp',
+ IteratorClose: 'https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose',
+ IteratorComplete: 'https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete',
+ IteratorNext: 'https://ecma-international.org/ecma-262/6.0/#sec-iteratornext',
+ IteratorStep: 'https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep',
+ IteratorValue: 'https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue',
+ MakeDate: 'https://ecma-international.org/ecma-262/6.0/#sec-makedate',
+ MakeDay: 'https://ecma-international.org/ecma-262/6.0/#sec-makeday',
+ MakeTime: 'https://ecma-international.org/ecma-262/6.0/#sec-maketime',
+ MinFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-hours-minutes-second-and-milliseconds',
+ modulo: 'https://ecma-international.org/ecma-262/6.0/#sec-algorithm-conventions',
+ MonthFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-month-number',
+ msFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-hours-minutes-second-and-milliseconds',
+ NormalCompletion: 'https://ecma-international.org/ecma-262/6.0/#sec-normalcompletion',
+ ObjectCreate: 'https://ecma-international.org/ecma-262/6.0/#sec-objectcreate',
+ OrdinaryDefineOwnProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty',
+ OrdinaryGetOwnProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty',
+ OrdinaryHasInstance: 'https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance',
+ OrdinaryHasProperty: 'https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty',
+ RegExpBuiltinExec: 'https://ecma-international.org/ecma-262/6.0/#sec-regexpbuiltinexec',
+ RegExpExec: 'https://ecma-international.org/ecma-262/6.0/#sec-regexpexec',
+ RequireObjectCoercible: 'https://ecma-international.org/ecma-262/6.0/#sec-requireobjectcoercible',
+ SameValue: 'https://ecma-international.org/ecma-262/6.0/#sec-samevalue',
+ SameValueZero: 'https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero',
+ SecFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-hours-minutes-second-and-milliseconds',
+ Set: 'https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw',
+ SetFunctionName: 'https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname',
+ SetIntegrityLevel: 'https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel',
+ SpeciesConstructor: 'https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor',
+ SymbolDescriptiveString: 'https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring',
+ TestIntegrityLevel: 'https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel',
+ thisBooleanValue: 'https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object',
+ thisNumberValue: 'https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object',
+ thisStringValue: 'https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object',
+ thisTimeValue: 'https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object',
+ TimeClip: 'https://ecma-international.org/ecma-262/6.0/#sec-timeclip',
+ TimeFromYear: 'https://ecma-international.org/ecma-262/6.0/#sec-year-number',
+ TimeWithinDay: 'https://ecma-international.org/ecma-262/6.0/#sec-day-number-and-time-within-day',
+ ToBoolean: 'https://ecma-international.org/ecma-262/6.0/#sec-toboolean',
+ ToDateString: 'https://ecma-international.org/ecma-262/6.0/#sec-todatestring',
+ ToInt16: 'https://ecma-international.org/ecma-262/6.0/#sec-toint16',
+ ToInt32: 'https://ecma-international.org/ecma-262/6.0/#sec-toint32',
+ ToInt8: 'https://ecma-international.org/ecma-262/6.0/#sec-toint8',
+ ToInteger: 'https://ecma-international.org/ecma-262/6.0/#sec-tointeger',
+ ToLength: 'https://ecma-international.org/ecma-262/6.0/#sec-tolength',
+ ToNumber: 'https://ecma-international.org/ecma-262/6.0/#sec-tonumber',
+ ToObject: 'https://ecma-international.org/ecma-262/6.0/#sec-toobject',
+ ToPrimitive: 'https://ecma-international.org/ecma-262/6.0/#sec-toprimitive',
+ ToPropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-topropertydescriptor',
+ ToPropertyKey: 'https://ecma-international.org/ecma-262/6.0/#sec-topropertykey',
+ ToString: 'https://ecma-international.org/ecma-262/6.0/#sec-tostring',
+ ToUint16: 'https://ecma-international.org/ecma-262/6.0/#sec-touint16',
+ ToUint32: 'https://ecma-international.org/ecma-262/6.0/#sec-touint32',
+ ToUint8: 'https://ecma-international.org/ecma-262/6.0/#sec-touint8',
+ ToUint8Clamp: 'https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp',
+ Type: 'https://ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types',
+ ValidateAndApplyPropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor',
+ WeekDay: 'https://ecma-international.org/ecma-262/6.0/#sec-week-day',
+ YearFromTime: 'https://ecma-international.org/ecma-262/6.0/#sec-year-number'
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/operations/2016.js b/node_modules/object.values/node_modules/es-abstract/operations/2016.js
new file mode 100644
index 0000000..6a58b9c
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/operations/2016.js
@@ -0,0 +1,276 @@
+'use strict';
+
+module.exports = {
+ IsPropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op
+
+ abs: 'https://ecma-international.org/ecma-262/7.0/#sec-algorithm-conventions',
+ 'Abstract Equality Comparison': 'https://ecma-international.org/ecma-262/7.0/#sec-abstract-equality-comparison',
+ 'Abstract Relational Comparison': 'https://ecma-international.org/ecma-262/7.0/#sec-abstract-relational-comparison',
+ AddRestrictedFunctionProperties: 'https://ecma-international.org/ecma-262/7.0/#sec-addrestrictedfunctionproperties',
+ AdvanceStringIndex: 'https://ecma-international.org/ecma-262/7.0/#sec-advancestringindex',
+ AllocateArrayBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-allocatearraybuffer',
+ AllocateTypedArray: 'https://ecma-international.org/ecma-262/7.0/#sec-allocatetypedarray',
+ AllocateTypedArrayBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-allocatetypedarraybuffer',
+ ArrayCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-arraycreate',
+ ArraySetLength: 'https://ecma-international.org/ecma-262/7.0/#sec-arraysetlength',
+ ArraySpeciesCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-arrayspeciescreate',
+ BlockDeclarationInstantiation: 'https://ecma-international.org/ecma-262/7.0/#sec-blockdeclarationinstantiation',
+ BoundFunctionCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-boundfunctioncreate',
+ Call: 'https://ecma-international.org/ecma-262/7.0/#sec-call',
+ Canonicalize: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-canonicalize-ch',
+ CanonicalNumericIndexString: 'https://ecma-international.org/ecma-262/7.0/#sec-canonicalnumericindexstring',
+ CharacterRange: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-characterrange-abstract-operation',
+ CharacterRangeOrUnion: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation',
+ CharacterSetMatcher: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation',
+ CloneArrayBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-clonearraybuffer',
+ CompletePropertyDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-completepropertydescriptor',
+ Completion: 'https://ecma-international.org/ecma-262/7.0/#sec-completion-record-specification-type',
+ Construct: 'https://ecma-international.org/ecma-262/7.0/#sec-construct',
+ CopyDataBlockBytes: 'https://ecma-international.org/ecma-262/7.0/#sec-copydatablockbytes',
+ CreateArrayFromList: 'https://ecma-international.org/ecma-262/7.0/#sec-createarrayfromlist',
+ CreateArrayIterator: 'https://ecma-international.org/ecma-262/7.0/#sec-createarrayiterator',
+ CreateBuiltinFunction: 'https://ecma-international.org/ecma-262/7.0/#sec-createbuiltinfunction',
+ CreateByteDataBlock: 'https://ecma-international.org/ecma-262/7.0/#sec-createbytedatablock',
+ CreateDataProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-createdataproperty',
+ CreateDataPropertyOrThrow: 'https://ecma-international.org/ecma-262/7.0/#sec-createdatapropertyorthrow',
+ CreateDynamicFunction: 'https://ecma-international.org/ecma-262/7.0/#sec-createdynamicfunction',
+ CreateHTML: 'https://ecma-international.org/ecma-262/7.0/#sec-createhtml',
+ CreateIntrinsics: 'https://ecma-international.org/ecma-262/7.0/#sec-createintrinsics',
+ CreateIterResultObject: 'https://ecma-international.org/ecma-262/7.0/#sec-createiterresultobject',
+ CreateListFromArrayLike: 'https://ecma-international.org/ecma-262/7.0/#sec-createlistfromarraylike',
+ CreateListIterator: 'https://ecma-international.org/ecma-262/7.0/#sec-createlistiterator',
+ CreateMapIterator: 'https://ecma-international.org/ecma-262/7.0/#sec-createmapiterator',
+ CreateMappedArgumentsObject: 'https://ecma-international.org/ecma-262/7.0/#sec-createmappedargumentsobject',
+ CreateMethodProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-createmethodproperty',
+ CreatePerIterationEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-createperiterationenvironment',
+ CreateRealm: 'https://ecma-international.org/ecma-262/7.0/#sec-createrealm',
+ CreateResolvingFunctions: 'https://ecma-international.org/ecma-262/7.0/#sec-createresolvingfunctions',
+ CreateSetIterator: 'https://ecma-international.org/ecma-262/7.0/#sec-createsetiterator',
+ CreateStringIterator: 'https://ecma-international.org/ecma-262/7.0/#sec-createstringiterator',
+ CreateUnmappedArgumentsObject: 'https://ecma-international.org/ecma-262/7.0/#sec-createunmappedargumentsobject',
+ DateFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-date-number',
+ Day: 'https://ecma-international.org/ecma-262/7.0/#sec-day-number-and-time-within-day',
+ DayFromYear: 'https://ecma-international.org/ecma-262/7.0/#sec-year-number',
+ DaysInYear: 'https://ecma-international.org/ecma-262/7.0/#sec-year-number',
+ DayWithinYear: 'https://ecma-international.org/ecma-262/7.0/#sec-month-number',
+ Decode: 'https://ecma-international.org/ecma-262/7.0/#sec-decode',
+ DefinePropertyOrThrow: 'https://ecma-international.org/ecma-262/7.0/#sec-definepropertyorthrow',
+ DeletePropertyOrThrow: 'https://ecma-international.org/ecma-262/7.0/#sec-deletepropertyorthrow',
+ DetachArrayBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-detacharraybuffer',
+ Encode: 'https://ecma-international.org/ecma-262/7.0/#sec-encode',
+ EnqueueJob: 'https://ecma-international.org/ecma-262/7.0/#sec-enqueuejob',
+ EnumerableOwnNames: 'https://ecma-international.org/ecma-262/7.0/#sec-enumerableownnames',
+ EnumerateObjectProperties: 'https://ecma-international.org/ecma-262/7.0/#sec-enumerate-object-properties',
+ EscapeRegExpPattern: 'https://ecma-international.org/ecma-262/7.0/#sec-escaperegexppattern',
+ EvalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/7.0/#sec-evaldeclarationinstantiation',
+ EvaluateCall: 'https://ecma-international.org/ecma-262/7.0/#sec-evaluatecall',
+ EvaluateDirectCall: 'https://ecma-international.org/ecma-262/7.0/#sec-evaluatedirectcall',
+ EvaluateNew: 'https://ecma-international.org/ecma-262/7.0/#sec-evaluatenew',
+ floor: 'https://ecma-international.org/ecma-262/7.0/#sec-algorithm-conventions',
+ ForBodyEvaluation: 'https://ecma-international.org/ecma-262/7.0/#sec-forbodyevaluation',
+ 'ForIn/OfBodyEvaluation': 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset',
+ 'ForIn/OfHeadEvaluation': 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind',
+ FromPropertyDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-frompropertydescriptor',
+ FulfillPromise: 'https://ecma-international.org/ecma-262/7.0/#sec-fulfillpromise',
+ FunctionAllocate: 'https://ecma-international.org/ecma-262/7.0/#sec-functionallocate',
+ FunctionCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-functioncreate',
+ FunctionDeclarationInstantiation: 'https://ecma-international.org/ecma-262/7.0/#sec-functiondeclarationinstantiation',
+ FunctionInitialize: 'https://ecma-international.org/ecma-262/7.0/#sec-functioninitialize',
+ GeneratorFunctionCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-generatorfunctioncreate',
+ GeneratorResume: 'https://ecma-international.org/ecma-262/7.0/#sec-generatorresume',
+ GeneratorResumeAbrupt: 'https://ecma-international.org/ecma-262/7.0/#sec-generatorresumeabrupt',
+ GeneratorStart: 'https://ecma-international.org/ecma-262/7.0/#sec-generatorstart',
+ GeneratorValidate: 'https://ecma-international.org/ecma-262/7.0/#sec-generatorvalidate',
+ GeneratorYield: 'https://ecma-international.org/ecma-262/7.0/#sec-generatoryield',
+ Get: 'https://ecma-international.org/ecma-262/7.0/#sec-get-o-p',
+ GetActiveScriptOrModule: 'https://ecma-international.org/ecma-262/7.0/#sec-getactivescriptormodule',
+ GetFunctionRealm: 'https://ecma-international.org/ecma-262/7.0/#sec-getfunctionrealm',
+ GetGlobalObject: 'https://ecma-international.org/ecma-262/7.0/#sec-getglobalobject',
+ GetIdentifierReference: 'https://ecma-international.org/ecma-262/7.0/#sec-getidentifierreference',
+ GetIterator: 'https://ecma-international.org/ecma-262/7.0/#sec-getiterator',
+ GetMethod: 'https://ecma-international.org/ecma-262/7.0/#sec-getmethod',
+ GetModuleNamespace: 'https://ecma-international.org/ecma-262/7.0/#sec-getmodulenamespace',
+ GetNewTarget: 'https://ecma-international.org/ecma-262/7.0/#sec-getnewtarget',
+ GetOwnPropertyKeys: 'https://ecma-international.org/ecma-262/7.0/#sec-getownpropertykeys',
+ GetPrototypeFromConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-getprototypefromconstructor',
+ GetSubstitution: 'https://ecma-international.org/ecma-262/7.0/#sec-getsubstitution',
+ GetSuperConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-getsuperconstructor',
+ GetTemplateObject: 'https://ecma-international.org/ecma-262/7.0/#sec-gettemplateobject',
+ GetThisEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-getthisenvironment',
+ GetThisValue: 'https://ecma-international.org/ecma-262/7.0/#sec-getthisvalue',
+ GetV: 'https://ecma-international.org/ecma-262/7.0/#sec-getv',
+ GetValue: 'https://ecma-international.org/ecma-262/7.0/#sec-getvalue',
+ GetValueFromBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-getvaluefrombuffer',
+ GetViewValue: 'https://ecma-international.org/ecma-262/7.0/#sec-getviewvalue',
+ GlobalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/7.0/#sec-globaldeclarationinstantiation',
+ HasOwnProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-hasownproperty',
+ HasProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-hasproperty',
+ HostPromiseRejectionTracker: 'https://ecma-international.org/ecma-262/7.0/#sec-host-promise-rejection-tracker',
+ HostReportErrors: 'https://ecma-international.org/ecma-262/7.0/#sec-host-report-errors',
+ HostResolveImportedModule: 'https://ecma-international.org/ecma-262/7.0/#sec-hostresolveimportedmodule',
+ HourFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-hours-minutes-second-and-milliseconds',
+ IfAbruptRejectPromise: 'https://ecma-international.org/ecma-262/7.0/#sec-ifabruptrejectpromise',
+ ImportedLocalNames: 'https://ecma-international.org/ecma-262/7.0/#sec-importedlocalnames',
+ InitializeBoundName: 'https://ecma-international.org/ecma-262/7.0/#sec-initializeboundname',
+ InitializeHostDefinedRealm: 'https://ecma-international.org/ecma-262/7.0/#sec-initializehostdefinedrealm',
+ InitializeReferencedBinding: 'https://ecma-international.org/ecma-262/7.0/#sec-initializereferencedbinding',
+ InLeapYear: 'https://ecma-international.org/ecma-262/7.0/#sec-year-number',
+ InstanceofOperator: 'https://ecma-international.org/ecma-262/7.0/#sec-instanceofoperator',
+ IntegerIndexedElementGet: 'https://ecma-international.org/ecma-262/7.0/#sec-integerindexedelementget',
+ IntegerIndexedElementSet: 'https://ecma-international.org/ecma-262/7.0/#sec-integerindexedelementset',
+ IntegerIndexedObjectCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-integerindexedobjectcreate',
+ InternalizeJSONProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-internalizejsonproperty',
+ Invoke: 'https://ecma-international.org/ecma-262/7.0/#sec-invoke',
+ IsAccessorDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-isaccessordescriptor',
+ IsAnonymousFunctionDefinition: 'https://ecma-international.org/ecma-262/7.0/#sec-isanonymousfunctiondefinition',
+ IsArray: 'https://ecma-international.org/ecma-262/7.0/#sec-isarray',
+ IsCallable: 'https://ecma-international.org/ecma-262/7.0/#sec-iscallable',
+ IsCompatiblePropertyDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-iscompatiblepropertydescriptor',
+ IsConcatSpreadable: 'https://ecma-international.org/ecma-262/7.0/#sec-isconcatspreadable',
+ IsConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-isconstructor',
+ IsDataDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-isdatadescriptor',
+ IsDetachedBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-isdetachedbuffer',
+ IsExtensible: 'https://ecma-international.org/ecma-262/7.0/#sec-isextensible-o',
+ IsGenericDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-isgenericdescriptor',
+ IsInTailPosition: 'https://ecma-international.org/ecma-262/7.0/#sec-isintailposition',
+ IsInteger: 'https://ecma-international.org/ecma-262/7.0/#sec-isinteger',
+ IsLabelledFunction: 'https://ecma-international.org/ecma-262/7.0/#sec-islabelledfunction',
+ IsPromise: 'https://ecma-international.org/ecma-262/7.0/#sec-ispromise',
+ IsPropertyKey: 'https://ecma-international.org/ecma-262/7.0/#sec-ispropertykey',
+ IsRegExp: 'https://ecma-international.org/ecma-262/7.0/#sec-isregexp',
+ IsWordChar: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-iswordchar-abstract-operation',
+ IterableToArrayLike: 'https://ecma-international.org/ecma-262/7.0/#sec-iterabletoarraylike',
+ IteratorClose: 'https://ecma-international.org/ecma-262/7.0/#sec-iteratorclose',
+ IteratorComplete: 'https://ecma-international.org/ecma-262/7.0/#sec-iteratorcomplete',
+ IteratorNext: 'https://ecma-international.org/ecma-262/7.0/#sec-iteratornext',
+ IteratorStep: 'https://ecma-international.org/ecma-262/7.0/#sec-iteratorstep',
+ IteratorValue: 'https://ecma-international.org/ecma-262/7.0/#sec-iteratorvalue',
+ LocalTime: 'https://ecma-international.org/ecma-262/7.0/#sec-localtime',
+ LoopContinues: 'https://ecma-international.org/ecma-262/7.0/#sec-loopcontinues',
+ MakeArgGetter: 'https://ecma-international.org/ecma-262/7.0/#sec-makearggetter',
+ MakeArgSetter: 'https://ecma-international.org/ecma-262/7.0/#sec-makeargsetter',
+ MakeClassConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-makeclassconstructor',
+ MakeConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-makeconstructor',
+ MakeDate: 'https://ecma-international.org/ecma-262/7.0/#sec-makedate',
+ MakeDay: 'https://ecma-international.org/ecma-262/7.0/#sec-makeday',
+ MakeMethod: 'https://ecma-international.org/ecma-262/7.0/#sec-makemethod',
+ MakeSuperPropertyReference: 'https://ecma-international.org/ecma-262/7.0/#sec-makesuperpropertyreference',
+ MakeTime: 'https://ecma-international.org/ecma-262/7.0/#sec-maketime',
+ max: 'https://ecma-international.org/ecma-262/7.0/#sec-algorithm-conventions',
+ min: 'https://ecma-international.org/ecma-262/7.0/#sec-algorithm-conventions',
+ MinFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-hours-minutes-second-and-milliseconds',
+ ModuleNamespaceCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-modulenamespacecreate',
+ modulo: 'https://ecma-international.org/ecma-262/7.0/#sec-algorithm-conventions',
+ MonthFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-month-number',
+ msFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-hours-minutes-second-and-milliseconds',
+ NewDeclarativeEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-newdeclarativeenvironment',
+ NewFunctionEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-newfunctionenvironment',
+ NewGlobalEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-newglobalenvironment',
+ NewModuleEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-newmoduleenvironment',
+ NewObjectEnvironment: 'https://ecma-international.org/ecma-262/7.0/#sec-newobjectenvironment',
+ NewPromiseCapability: 'https://ecma-international.org/ecma-262/7.0/#sec-newpromisecapability',
+ NextJob: 'https://ecma-international.org/ecma-262/7.0/#sec-nextjob-result',
+ NormalCompletion: 'https://ecma-international.org/ecma-262/7.0/#sec-normalcompletion',
+ ObjectCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-objectcreate',
+ ObjectDefineProperties: 'https://ecma-international.org/ecma-262/7.0/#sec-objectdefineproperties',
+ OrdinaryCallBindThis: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarycallbindthis',
+ OrdinaryCallEvaluateBody: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarycallevaluatebody',
+ OrdinaryCreateFromConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarycreatefromconstructor',
+ OrdinaryDefineOwnProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarydefineownproperty',
+ OrdinaryDelete: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarydelete',
+ OrdinaryGet: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinaryget',
+ OrdinaryGetOwnProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetownproperty',
+ OrdinaryGetPrototypeOf: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof',
+ OrdinaryHasInstance: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinaryhasinstance',
+ OrdinaryHasProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinaryhasproperty',
+ OrdinaryIsExtensible: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinaryisextensible',
+ OrdinaryOwnPropertyKeys: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinaryownpropertykeys',
+ OrdinaryPreventExtensions: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarypreventextensions',
+ OrdinarySet: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinaryset',
+ OrdinarySetPrototypeOf: 'https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof',
+ ParseModule: 'https://ecma-international.org/ecma-262/7.0/#sec-parsemodule',
+ ParseScript: 'https://ecma-international.org/ecma-262/7.0/#sec-parse-script',
+ PerformEval: 'https://ecma-international.org/ecma-262/7.0/#sec-performeval',
+ PerformPromiseAll: 'https://ecma-international.org/ecma-262/7.0/#sec-performpromiseall',
+ PerformPromiseRace: 'https://ecma-international.org/ecma-262/7.0/#sec-performpromiserace',
+ PerformPromiseThen: 'https://ecma-international.org/ecma-262/7.0/#sec-performpromisethen',
+ PrepareForOrdinaryCall: 'https://ecma-international.org/ecma-262/7.0/#sec-prepareforordinarycall',
+ PrepareForTailCall: 'https://ecma-international.org/ecma-262/7.0/#sec-preparefortailcall',
+ PromiseReactionJob: 'https://ecma-international.org/ecma-262/7.0/#sec-promisereactionjob',
+ PromiseResolveThenableJob: 'https://ecma-international.org/ecma-262/7.0/#sec-promiseresolvethenablejob',
+ ProxyCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-proxycreate',
+ PutValue: 'https://ecma-international.org/ecma-262/7.0/#sec-putvalue',
+ QuoteJSONString: 'https://ecma-international.org/ecma-262/7.0/#sec-quotejsonstring',
+ RegExpAlloc: 'https://ecma-international.org/ecma-262/7.0/#sec-regexpalloc',
+ RegExpBuiltinExec: 'https://ecma-international.org/ecma-262/7.0/#sec-regexpbuiltinexec',
+ RegExpCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-regexpcreate',
+ RegExpExec: 'https://ecma-international.org/ecma-262/7.0/#sec-regexpexec',
+ RegExpInitialize: 'https://ecma-international.org/ecma-262/7.0/#sec-regexpinitialize',
+ RejectPromise: 'https://ecma-international.org/ecma-262/7.0/#sec-rejectpromise',
+ RepeatMatcher: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-repeatmatcher-abstract-operation',
+ RequireObjectCoercible: 'https://ecma-international.org/ecma-262/7.0/#sec-requireobjectcoercible',
+ ResolveBinding: 'https://ecma-international.org/ecma-262/7.0/#sec-resolvebinding',
+ ResolveThisBinding: 'https://ecma-international.org/ecma-262/7.0/#sec-resolvethisbinding',
+ ReturnIfAbrupt: 'https://ecma-international.org/ecma-262/7.0/#sec-returnifabrupt',
+ SameValue: 'https://ecma-international.org/ecma-262/7.0/#sec-samevalue',
+ SameValueNonNumber: 'https://ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber',
+ SameValueZero: 'https://ecma-international.org/ecma-262/7.0/#sec-samevaluezero',
+ ScriptEvaluation: 'https://ecma-international.org/ecma-262/7.0/#sec-runtime-semantics-scriptevaluation',
+ ScriptEvaluationJob: 'https://ecma-international.org/ecma-262/7.0/#sec-scriptevaluationjob',
+ SecFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-hours-minutes-second-and-milliseconds',
+ SerializeJSONArray: 'https://ecma-international.org/ecma-262/7.0/#sec-serializejsonarray',
+ SerializeJSONObject: 'https://ecma-international.org/ecma-262/7.0/#sec-serializejsonobject',
+ SerializeJSONProperty: 'https://ecma-international.org/ecma-262/7.0/#sec-serializejsonproperty',
+ Set: 'https://ecma-international.org/ecma-262/7.0/#sec-set-o-p-v-throw',
+ SetDefaultGlobalBindings: 'https://ecma-international.org/ecma-262/7.0/#sec-setdefaultglobalbindings',
+ SetFunctionName: 'https://ecma-international.org/ecma-262/7.0/#sec-setfunctionname',
+ SetIntegrityLevel: 'https://ecma-international.org/ecma-262/7.0/#sec-setintegritylevel',
+ SetRealmGlobalObject: 'https://ecma-international.org/ecma-262/7.0/#sec-setrealmglobalobject',
+ SetValueInBuffer: 'https://ecma-international.org/ecma-262/7.0/#sec-setvalueinbuffer',
+ SetViewValue: 'https://ecma-international.org/ecma-262/7.0/#sec-setviewvalue',
+ SortCompare: 'https://ecma-international.org/ecma-262/7.0/#sec-sortcompare',
+ SpeciesConstructor: 'https://ecma-international.org/ecma-262/7.0/#sec-speciesconstructor',
+ SplitMatch: 'https://ecma-international.org/ecma-262/7.0/#sec-splitmatch',
+ 'Strict Equality Comparison': 'https://ecma-international.org/ecma-262/7.0/#sec-strict-equality-comparison',
+ StringCreate: 'https://ecma-international.org/ecma-262/7.0/#sec-stringcreate',
+ SymbolDescriptiveString: 'https://ecma-international.org/ecma-262/7.0/#sec-symboldescriptivestring',
+ TestIntegrityLevel: 'https://ecma-international.org/ecma-262/7.0/#sec-testintegritylevel',
+ thisBooleanValue: 'https://ecma-international.org/ecma-262/7.0/#sec-thisbooleanvalue',
+ thisNumberValue: 'https://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-number-prototype-object',
+ thisStringValue: 'https://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-string-prototype-object',
+ thisTimeValue: 'https://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-date-prototype-object',
+ TimeClip: 'https://ecma-international.org/ecma-262/7.0/#sec-timeclip',
+ TimeFromYear: 'https://ecma-international.org/ecma-262/7.0/#sec-year-number',
+ TimeWithinDay: 'https://ecma-international.org/ecma-262/7.0/#sec-day-number-and-time-within-day',
+ ToBoolean: 'https://ecma-international.org/ecma-262/7.0/#sec-toboolean',
+ ToDateString: 'https://ecma-international.org/ecma-262/7.0/#sec-todatestring',
+ ToInt16: 'https://ecma-international.org/ecma-262/7.0/#sec-toint16',
+ ToInt32: 'https://ecma-international.org/ecma-262/7.0/#sec-toint32',
+ ToInt8: 'https://ecma-international.org/ecma-262/7.0/#sec-toint8',
+ ToInteger: 'https://ecma-international.org/ecma-262/7.0/#sec-tointeger',
+ ToLength: 'https://ecma-international.org/ecma-262/7.0/#sec-tolength',
+ ToNumber: 'https://ecma-international.org/ecma-262/7.0/#sec-tonumber',
+ ToObject: 'https://ecma-international.org/ecma-262/7.0/#sec-toobject',
+ TopLevelModuleEvaluationJob: 'https://ecma-international.org/ecma-262/7.0/#sec-toplevelmoduleevaluationjob',
+ ToPrimitive: 'https://ecma-international.org/ecma-262/7.0/#sec-toprimitive',
+ ToPropertyDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-topropertydescriptor',
+ ToPropertyKey: 'https://ecma-international.org/ecma-262/7.0/#sec-topropertykey',
+ ToString: 'https://ecma-international.org/ecma-262/7.0/#sec-tostring',
+ 'ToString Applied to the Number Type': 'https://ecma-international.org/ecma-262/7.0/#sec-tostring-applied-to-the-number-type',
+ ToUint16: 'https://ecma-international.org/ecma-262/7.0/#sec-touint16',
+ ToUint32: 'https://ecma-international.org/ecma-262/7.0/#sec-touint32',
+ ToUint8: 'https://ecma-international.org/ecma-262/7.0/#sec-touint8',
+ ToUint8Clamp: 'https://ecma-international.org/ecma-262/7.0/#sec-touint8clamp',
+ TriggerPromiseReactions: 'https://ecma-international.org/ecma-262/7.0/#sec-triggerpromisereactions',
+ Type: 'https://ecma-international.org/ecma-262/7.0/#sec-ecmascript-data-types-and-values',
+ TypedArrayCreate: 'https://ecma-international.org/ecma-262/7.0/#typedarray-create',
+ TypedArraySpeciesCreate: 'https://ecma-international.org/ecma-262/7.0/#typedarray-species-create',
+ UpdateEmpty: 'https://ecma-international.org/ecma-262/7.0/#sec-updateempty',
+ UTC: 'https://ecma-international.org/ecma-262/7.0/#sec-utc-t',
+ UTF16Decode: 'https://ecma-international.org/ecma-262/7.0/#sec-utf16decode',
+ UTF16Encoding: 'https://ecma-international.org/ecma-262/7.0/#sec-utf16encoding',
+ ValidateAndApplyPropertyDescriptor: 'https://ecma-international.org/ecma-262/7.0/#sec-validateandapplypropertydescriptor',
+ ValidateTypedArray: 'https://ecma-international.org/ecma-262/7.0/#sec-validatetypedarray',
+ WeekDay: 'https://ecma-international.org/ecma-262/7.0/#sec-week-day',
+ YearFromTime: 'https://ecma-international.org/ecma-262/7.0/#sec-year-number'
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/operations/2017.js b/node_modules/object.values/node_modules/es-abstract/operations/2017.js
new file mode 100644
index 0000000..896fcee
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/operations/2017.js
@@ -0,0 +1,324 @@
+'use strict';
+
+module.exports = {
+ IsPropertyDescriptor: 'https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op
+
+ abs: 'https://ecma-international.org/ecma-262/8.0/#eqn-abs',
+ 'Abstract Equality Comparison': 'https://ecma-international.org/ecma-262/8.0/#sec-abstract-equality-comparison',
+ 'Abstract Relational Comparison': 'https://ecma-international.org/ecma-262/8.0/#sec-abstract-relational-comparison',
+ AddRestrictedFunctionProperties: 'https://ecma-international.org/ecma-262/8.0/#sec-addrestrictedfunctionproperties',
+ AddWaiter: 'https://ecma-international.org/ecma-262/8.0/#sec-addwaiter',
+ AdvanceStringIndex: 'https://ecma-international.org/ecma-262/8.0/#sec-advancestringindex',
+ 'agent-order': 'https://ecma-international.org/ecma-262/8.0/#sec-agent-order',
+ AgentCanSuspend: 'https://ecma-international.org/ecma-262/8.0/#sec-agentcansuspend',
+ AgentSignifier: 'https://ecma-international.org/ecma-262/8.0/#sec-agentsignifier',
+ AllocateArrayBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-allocatearraybuffer',
+ AllocateSharedArrayBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-allocatesharedarraybuffer',
+ AllocateTypedArray: 'https://ecma-international.org/ecma-262/8.0/#sec-allocatetypedarray',
+ AllocateTypedArrayBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-allocatetypedarraybuffer',
+ ArrayCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-arraycreate',
+ ArraySetLength: 'https://ecma-international.org/ecma-262/8.0/#sec-arraysetlength',
+ ArraySpeciesCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-arrayspeciescreate',
+ AsyncFunctionAwait: 'https://ecma-international.org/ecma-262/8.0/#sec-async-functions-abstract-operations-async-function-await',
+ AsyncFunctionCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-async-functions-abstract-operations-async-function-create',
+ AsyncFunctionStart: 'https://ecma-international.org/ecma-262/8.0/#sec-async-functions-abstract-operations-async-function-start',
+ AtomicLoad: 'https://ecma-international.org/ecma-262/8.0/#sec-atomicload',
+ AtomicReadModifyWrite: 'https://ecma-international.org/ecma-262/8.0/#sec-atomicreadmodifywrite',
+ BlockDeclarationInstantiation: 'https://ecma-international.org/ecma-262/8.0/#sec-blockdeclarationinstantiation',
+ BoundFunctionCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-boundfunctioncreate',
+ Call: 'https://ecma-international.org/ecma-262/8.0/#sec-call',
+ Canonicalize: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-canonicalize-ch',
+ CanonicalNumericIndexString: 'https://ecma-international.org/ecma-262/8.0/#sec-canonicalnumericindexstring',
+ CharacterRange: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-characterrange-abstract-operation',
+ CharacterRangeOrUnion: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation',
+ CharacterSetMatcher: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation',
+ CloneArrayBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-clonearraybuffer',
+ CompletePropertyDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-completepropertydescriptor',
+ Completion: 'https://ecma-international.org/ecma-262/8.0/#sec-completion-record-specification-type',
+ ComposeWriteEventBytes: 'https://ecma-international.org/ecma-262/8.0/#sec-composewriteeventbytes',
+ Construct: 'https://ecma-international.org/ecma-262/8.0/#sec-construct',
+ CopyDataBlockBytes: 'https://ecma-international.org/ecma-262/8.0/#sec-copydatablockbytes',
+ CreateArrayFromList: 'https://ecma-international.org/ecma-262/8.0/#sec-createarrayfromlist',
+ CreateArrayIterator: 'https://ecma-international.org/ecma-262/8.0/#sec-createarrayiterator',
+ CreateBuiltinFunction: 'https://ecma-international.org/ecma-262/8.0/#sec-createbuiltinfunction',
+ CreateByteDataBlock: 'https://ecma-international.org/ecma-262/8.0/#sec-createbytedatablock',
+ CreateDataProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-createdataproperty',
+ CreateDataPropertyOrThrow: 'https://ecma-international.org/ecma-262/8.0/#sec-createdatapropertyorthrow',
+ CreateDynamicFunction: 'https://ecma-international.org/ecma-262/8.0/#sec-createdynamicfunction',
+ CreateHTML: 'https://ecma-international.org/ecma-262/8.0/#sec-createhtml',
+ CreateIntrinsics: 'https://ecma-international.org/ecma-262/8.0/#sec-createintrinsics',
+ CreateIterResultObject: 'https://ecma-international.org/ecma-262/8.0/#sec-createiterresultobject',
+ CreateListFromArrayLike: 'https://ecma-international.org/ecma-262/8.0/#sec-createlistfromarraylike',
+ CreateListIterator: 'https://ecma-international.org/ecma-262/8.0/#sec-createlistiterator',
+ CreateMapIterator: 'https://ecma-international.org/ecma-262/8.0/#sec-createmapiterator',
+ CreateMappedArgumentsObject: 'https://ecma-international.org/ecma-262/8.0/#sec-createmappedargumentsobject',
+ CreateMethodProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-createmethodproperty',
+ CreatePerIterationEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-createperiterationenvironment',
+ CreateRealm: 'https://ecma-international.org/ecma-262/8.0/#sec-createrealm',
+ CreateResolvingFunctions: 'https://ecma-international.org/ecma-262/8.0/#sec-createresolvingfunctions',
+ CreateSetIterator: 'https://ecma-international.org/ecma-262/8.0/#sec-createsetiterator',
+ CreateSharedByteDataBlock: 'https://ecma-international.org/ecma-262/8.0/#sec-createsharedbytedatablock',
+ CreateStringIterator: 'https://ecma-international.org/ecma-262/8.0/#sec-createstringiterator',
+ CreateUnmappedArgumentsObject: 'https://ecma-international.org/ecma-262/8.0/#sec-createunmappedargumentsobject',
+ DateFromTime: 'https://ecma-international.org/ecma-262/8.0/#sec-date-number',
+ Day: 'https://ecma-international.org/ecma-262/8.0/#eqn-Day',
+ DayFromYear: 'https://ecma-international.org/ecma-262/8.0/#eqn-DaysFromYear',
+ DaysInYear: 'https://ecma-international.org/ecma-262/8.0/#eqn-DaysInYear',
+ DayWithinYear: 'https://ecma-international.org/ecma-262/8.0/#eqn-DayWithinYear',
+ Decode: 'https://ecma-international.org/ecma-262/8.0/#sec-decode',
+ DefinePropertyOrThrow: 'https://ecma-international.org/ecma-262/8.0/#sec-definepropertyorthrow',
+ DeletePropertyOrThrow: 'https://ecma-international.org/ecma-262/8.0/#sec-deletepropertyorthrow',
+ DetachArrayBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-detacharraybuffer',
+ Encode: 'https://ecma-international.org/ecma-262/8.0/#sec-encode',
+ EnqueueJob: 'https://ecma-international.org/ecma-262/8.0/#sec-enqueuejob',
+ EnterCriticalSection: 'https://ecma-international.org/ecma-262/8.0/#sec-entercriticalsection',
+ EnumerableOwnProperties: 'https://ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties',
+ EnumerateObjectProperties: 'https://ecma-international.org/ecma-262/8.0/#sec-enumerate-object-properties',
+ EscapeRegExpPattern: 'https://ecma-international.org/ecma-262/8.0/#sec-escaperegexppattern',
+ EvalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/8.0/#sec-evaldeclarationinstantiation',
+ EvaluateCall: 'https://ecma-international.org/ecma-262/8.0/#sec-evaluatecall',
+ EvaluateDirectCall: 'https://ecma-international.org/ecma-262/8.0/#sec-evaluatedirectcall',
+ EvaluateNew: 'https://ecma-international.org/ecma-262/8.0/#sec-evaluatenew',
+ EventSet: 'https://ecma-international.org/ecma-262/8.0/#sec-event-set',
+ floor: 'https://ecma-international.org/ecma-262/8.0/#eqn-floor',
+ ForBodyEvaluation: 'https://ecma-international.org/ecma-262/8.0/#sec-forbodyevaluation',
+ 'ForIn/OfBodyEvaluation': 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset',
+ 'ForIn/OfHeadEvaluation': 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind',
+ FromPropertyDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-frompropertydescriptor',
+ FulfillPromise: 'https://ecma-international.org/ecma-262/8.0/#sec-fulfillpromise',
+ FunctionAllocate: 'https://ecma-international.org/ecma-262/8.0/#sec-functionallocate',
+ FunctionCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-functioncreate',
+ FunctionDeclarationInstantiation: 'https://ecma-international.org/ecma-262/8.0/#sec-functiondeclarationinstantiation',
+ FunctionInitialize: 'https://ecma-international.org/ecma-262/8.0/#sec-functioninitialize',
+ GeneratorFunctionCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-generatorfunctioncreate',
+ GeneratorResume: 'https://ecma-international.org/ecma-262/8.0/#sec-generatorresume',
+ GeneratorResumeAbrupt: 'https://ecma-international.org/ecma-262/8.0/#sec-generatorresumeabrupt',
+ GeneratorStart: 'https://ecma-international.org/ecma-262/8.0/#sec-generatorstart',
+ GeneratorValidate: 'https://ecma-international.org/ecma-262/8.0/#sec-generatorvalidate',
+ GeneratorYield: 'https://ecma-international.org/ecma-262/8.0/#sec-generatoryield',
+ Get: 'https://ecma-international.org/ecma-262/8.0/#sec-get-o-p',
+ GetActiveScriptOrModule: 'https://ecma-international.org/ecma-262/8.0/#sec-getactivescriptormodule',
+ GetBase: 'https://ecma-international.org/ecma-262/8.0/#ao-getbase',
+ GetFunctionRealm: 'https://ecma-international.org/ecma-262/8.0/#sec-getfunctionrealm',
+ GetGlobalObject: 'https://ecma-international.org/ecma-262/8.0/#sec-getglobalobject',
+ GetIdentifierReference: 'https://ecma-international.org/ecma-262/8.0/#sec-getidentifierreference',
+ GetIterator: 'https://ecma-international.org/ecma-262/8.0/#sec-getiterator',
+ GetMethod: 'https://ecma-international.org/ecma-262/8.0/#sec-getmethod',
+ GetModifySetValueInBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-getmodifysetvalueinbuffer',
+ GetModuleNamespace: 'https://ecma-international.org/ecma-262/8.0/#sec-getmodulenamespace',
+ GetNewTarget: 'https://ecma-international.org/ecma-262/8.0/#sec-getnewtarget',
+ GetOwnPropertyKeys: 'https://ecma-international.org/ecma-262/8.0/#sec-getownpropertykeys',
+ GetPrototypeFromConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-getprototypefromconstructor',
+ GetReferencedName: 'https://ecma-international.org/ecma-262/8.0/#ao-getreferencedname',
+ GetSubstitution: 'https://ecma-international.org/ecma-262/8.0/#sec-getsubstitution',
+ GetSuperConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-getsuperconstructor',
+ GetTemplateObject: 'https://ecma-international.org/ecma-262/8.0/#sec-gettemplateobject',
+ GetThisEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-getthisenvironment',
+ GetThisValue: 'https://ecma-international.org/ecma-262/8.0/#sec-getthisvalue',
+ GetV: 'https://ecma-international.org/ecma-262/8.0/#sec-getv',
+ GetValue: 'https://ecma-international.org/ecma-262/8.0/#sec-getvalue',
+ GetValueFromBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-getvaluefrombuffer',
+ GetViewValue: 'https://ecma-international.org/ecma-262/8.0/#sec-getviewvalue',
+ GetWaiterList: 'https://ecma-international.org/ecma-262/8.0/#sec-getwaiterlist',
+ GlobalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/8.0/#sec-globaldeclarationinstantiation',
+ 'happens-before': 'https://ecma-international.org/ecma-262/8.0/#sec-happens-before',
+ HasOwnProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-hasownproperty',
+ HasPrimitiveBase: 'https://ecma-international.org/ecma-262/8.0/#ao-hasprimitivebase',
+ HasProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-hasproperty',
+ 'host-synchronizes-with': 'https://ecma-international.org/ecma-262/8.0/#sec-host-synchronizes-with',
+ HostEnsureCanCompileStrings: 'https://ecma-international.org/ecma-262/8.0/#sec-hostensurecancompilestrings',
+ HostEventSet: 'https://ecma-international.org/ecma-262/8.0/#sec-hosteventset',
+ HostPromiseRejectionTracker: 'https://ecma-international.org/ecma-262/8.0/#sec-host-promise-rejection-tracker',
+ HostReportErrors: 'https://ecma-international.org/ecma-262/8.0/#sec-host-report-errors',
+ HostResolveImportedModule: 'https://ecma-international.org/ecma-262/8.0/#sec-hostresolveimportedmodule',
+ HourFromTime: 'https://ecma-international.org/ecma-262/8.0/#eqn-HourFromTime',
+ IfAbruptRejectPromise: 'https://ecma-international.org/ecma-262/8.0/#sec-ifabruptrejectpromise',
+ ImportedLocalNames: 'https://ecma-international.org/ecma-262/8.0/#sec-importedlocalnames',
+ InitializeBoundName: 'https://ecma-international.org/ecma-262/8.0/#sec-initializeboundname',
+ InitializeHostDefinedRealm: 'https://ecma-international.org/ecma-262/8.0/#sec-initializehostdefinedrealm',
+ InitializeReferencedBinding: 'https://ecma-international.org/ecma-262/8.0/#sec-initializereferencedbinding',
+ InLeapYear: 'https://ecma-international.org/ecma-262/8.0/#eqn-InLeapYear',
+ InstanceofOperator: 'https://ecma-international.org/ecma-262/8.0/#sec-instanceofoperator',
+ IntegerIndexedElementGet: 'https://ecma-international.org/ecma-262/8.0/#sec-integerindexedelementget',
+ IntegerIndexedElementSet: 'https://ecma-international.org/ecma-262/8.0/#sec-integerindexedelementset',
+ IntegerIndexedObjectCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-integerindexedobjectcreate',
+ InternalizeJSONProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-internalizejsonproperty',
+ Invoke: 'https://ecma-international.org/ecma-262/8.0/#sec-invoke',
+ IsAccessorDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-isaccessordescriptor',
+ IsAnonymousFunctionDefinition: 'https://ecma-international.org/ecma-262/8.0/#sec-isanonymousfunctiondefinition',
+ IsArray: 'https://ecma-international.org/ecma-262/8.0/#sec-isarray',
+ IsCallable: 'https://ecma-international.org/ecma-262/8.0/#sec-iscallable',
+ IsCompatiblePropertyDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-iscompatiblepropertydescriptor',
+ IsConcatSpreadable: 'https://ecma-international.org/ecma-262/8.0/#sec-isconcatspreadable',
+ IsConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-isconstructor',
+ IsDataDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-isdatadescriptor',
+ IsDetachedBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-isdetachedbuffer',
+ IsExtensible: 'https://ecma-international.org/ecma-262/8.0/#sec-isextensible-o',
+ IsGenericDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-isgenericdescriptor',
+ IsInTailPosition: 'https://ecma-international.org/ecma-262/8.0/#sec-isintailposition',
+ IsInteger: 'https://ecma-international.org/ecma-262/8.0/#sec-isinteger',
+ IsLabelledFunction: 'https://ecma-international.org/ecma-262/8.0/#sec-islabelledfunction',
+ IsPromise: 'https://ecma-international.org/ecma-262/8.0/#sec-ispromise',
+ IsPropertyKey: 'https://ecma-international.org/ecma-262/8.0/#sec-ispropertykey',
+ IsPropertyReference: 'https://ecma-international.org/ecma-262/8.0/#ao-ispropertyreference',
+ IsRegExp: 'https://ecma-international.org/ecma-262/8.0/#sec-isregexp',
+ IsSharedArrayBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-issharedarraybuffer',
+ IsStrictReference: 'https://ecma-international.org/ecma-262/8.0/#ao-isstrictreference',
+ IsSuperReference: 'https://ecma-international.org/ecma-262/8.0/#ao-issuperreference',
+ IsUnresolvableReference: 'https://ecma-international.org/ecma-262/8.0/#ao-isunresolvablereference',
+ IsWordChar: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-iswordchar-abstract-operation',
+ IterableToList: 'https://ecma-international.org/ecma-262/8.0/#sec-iterabletolist',
+ IteratorClose: 'https://ecma-international.org/ecma-262/8.0/#sec-iteratorclose',
+ IteratorComplete: 'https://ecma-international.org/ecma-262/8.0/#sec-iteratorcomplete',
+ IteratorNext: 'https://ecma-international.org/ecma-262/8.0/#sec-iteratornext',
+ IteratorStep: 'https://ecma-international.org/ecma-262/8.0/#sec-iteratorstep',
+ IteratorValue: 'https://ecma-international.org/ecma-262/8.0/#sec-iteratorvalue',
+ LeaveCriticalSection: 'https://ecma-international.org/ecma-262/8.0/#sec-leavecriticalsection',
+ LocalTime: 'https://ecma-international.org/ecma-262/8.0/#sec-localtime',
+ LoopContinues: 'https://ecma-international.org/ecma-262/8.0/#sec-loopcontinues',
+ MakeArgGetter: 'https://ecma-international.org/ecma-262/8.0/#sec-makearggetter',
+ MakeArgSetter: 'https://ecma-international.org/ecma-262/8.0/#sec-makeargsetter',
+ MakeClassConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-makeclassconstructor',
+ MakeConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-makeconstructor',
+ MakeDate: 'https://ecma-international.org/ecma-262/8.0/#sec-makedate',
+ MakeDay: 'https://ecma-international.org/ecma-262/8.0/#sec-makeday',
+ MakeMethod: 'https://ecma-international.org/ecma-262/8.0/#sec-makemethod',
+ MakeSuperPropertyReference: 'https://ecma-international.org/ecma-262/8.0/#sec-makesuperpropertyreference',
+ MakeTime: 'https://ecma-international.org/ecma-262/8.0/#sec-maketime',
+ max: 'https://ecma-international.org/ecma-262/8.0/#eqn-max',
+ 'memory-order': 'https://ecma-international.org/ecma-262/8.0/#sec-memory-order',
+ min: 'https://ecma-international.org/ecma-262/8.0/#eqn-min',
+ MinFromTime: 'https://ecma-international.org/ecma-262/8.0/#eqn-MinFromTime',
+ ModuleNamespaceCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-modulenamespacecreate',
+ modulo: 'https://ecma-international.org/ecma-262/8.0/#eqn-modulo',
+ MonthFromTime: 'https://ecma-international.org/ecma-262/8.0/#eqn-MonthFromTime',
+ msFromTime: 'https://ecma-international.org/ecma-262/8.0/#eqn-msFromTime',
+ NewDeclarativeEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-newdeclarativeenvironment',
+ NewFunctionEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-newfunctionenvironment',
+ NewGlobalEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-newglobalenvironment',
+ NewModuleEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-newmoduleenvironment',
+ NewObjectEnvironment: 'https://ecma-international.org/ecma-262/8.0/#sec-newobjectenvironment',
+ NewPromiseCapability: 'https://ecma-international.org/ecma-262/8.0/#sec-newpromisecapability',
+ NormalCompletion: 'https://ecma-international.org/ecma-262/8.0/#sec-normalcompletion',
+ NumberToRawBytes: 'https://ecma-international.org/ecma-262/8.0/#sec-numbertorawbytes',
+ ObjectCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-objectcreate',
+ ObjectDefineProperties: 'https://ecma-international.org/ecma-262/8.0/#sec-objectdefineproperties',
+ OrdinaryCallBindThis: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarycallbindthis',
+ OrdinaryCallEvaluateBody: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarycallevaluatebody',
+ OrdinaryCreateFromConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarycreatefromconstructor',
+ OrdinaryDefineOwnProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarydefineownproperty',
+ OrdinaryDelete: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarydelete',
+ OrdinaryGet: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinaryget',
+ OrdinaryGetOwnProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarygetownproperty',
+ OrdinaryGetPrototypeOf: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarygetprototypeof',
+ OrdinaryHasInstance: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinaryhasinstance',
+ OrdinaryHasProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinaryhasproperty',
+ OrdinaryIsExtensible: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinaryisextensible',
+ OrdinaryOwnPropertyKeys: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinaryownpropertykeys',
+ OrdinaryPreventExtensions: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarypreventextensions',
+ OrdinarySet: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinaryset',
+ OrdinarySetPrototypeOf: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarysetprototypeof',
+ OrdinaryToPrimitive: 'https://ecma-international.org/ecma-262/8.0/#sec-ordinarytoprimitive',
+ ParseModule: 'https://ecma-international.org/ecma-262/8.0/#sec-parsemodule',
+ ParseScript: 'https://ecma-international.org/ecma-262/8.0/#sec-parse-script',
+ PerformEval: 'https://ecma-international.org/ecma-262/8.0/#sec-performeval',
+ PerformPromiseAll: 'https://ecma-international.org/ecma-262/8.0/#sec-performpromiseall',
+ PerformPromiseRace: 'https://ecma-international.org/ecma-262/8.0/#sec-performpromiserace',
+ PerformPromiseThen: 'https://ecma-international.org/ecma-262/8.0/#sec-performpromisethen',
+ PrepareForOrdinaryCall: 'https://ecma-international.org/ecma-262/8.0/#sec-prepareforordinarycall',
+ PrepareForTailCall: 'https://ecma-international.org/ecma-262/8.0/#sec-preparefortailcall',
+ PromiseReactionJob: 'https://ecma-international.org/ecma-262/8.0/#sec-promisereactionjob',
+ PromiseResolveThenableJob: 'https://ecma-international.org/ecma-262/8.0/#sec-promiseresolvethenablejob',
+ ProxyCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-proxycreate',
+ PutValue: 'https://ecma-international.org/ecma-262/8.0/#sec-putvalue',
+ QuoteJSONString: 'https://ecma-international.org/ecma-262/8.0/#sec-quotejsonstring',
+ RawBytesToNumber: 'https://ecma-international.org/ecma-262/8.0/#sec-rawbytestonumber',
+ 'reads-bytes-from': 'https://ecma-international.org/ecma-262/8.0/#sec-reads-bytes-from',
+ 'reads-from': 'https://ecma-international.org/ecma-262/8.0/#sec-reads-from',
+ RegExpAlloc: 'https://ecma-international.org/ecma-262/8.0/#sec-regexpalloc',
+ RegExpBuiltinExec: 'https://ecma-international.org/ecma-262/8.0/#sec-regexpbuiltinexec',
+ RegExpCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-regexpcreate',
+ RegExpExec: 'https://ecma-international.org/ecma-262/8.0/#sec-regexpexec',
+ RegExpInitialize: 'https://ecma-international.org/ecma-262/8.0/#sec-regexpinitialize',
+ RejectPromise: 'https://ecma-international.org/ecma-262/8.0/#sec-rejectpromise',
+ RemoveWaiter: 'https://ecma-international.org/ecma-262/8.0/#sec-removewaiter',
+ RemoveWaiters: 'https://ecma-international.org/ecma-262/8.0/#sec-removewaiters',
+ RepeatMatcher: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-repeatmatcher-abstract-operation',
+ RequireObjectCoercible: 'https://ecma-international.org/ecma-262/8.0/#sec-requireobjectcoercible',
+ ResolveBinding: 'https://ecma-international.org/ecma-262/8.0/#sec-resolvebinding',
+ ResolveThisBinding: 'https://ecma-international.org/ecma-262/8.0/#sec-resolvethisbinding',
+ ReturnIfAbrupt: 'https://ecma-international.org/ecma-262/8.0/#sec-returnifabrupt',
+ RunJobs: 'https://ecma-international.org/ecma-262/8.0/#sec-runjobs',
+ SameValue: 'https://ecma-international.org/ecma-262/8.0/#sec-samevalue',
+ SameValueNonNumber: 'https://ecma-international.org/ecma-262/8.0/#sec-samevaluenonnumber',
+ SameValueZero: 'https://ecma-international.org/ecma-262/8.0/#sec-samevaluezero',
+ ScriptEvaluation: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-scriptevaluation',
+ ScriptEvaluationJob: 'https://ecma-international.org/ecma-262/8.0/#sec-scriptevaluationjob',
+ SecFromTime: 'https://ecma-international.org/ecma-262/8.0/#eqn-SecFromTime',
+ SerializeJSONArray: 'https://ecma-international.org/ecma-262/8.0/#sec-serializejsonarray',
+ SerializeJSONObject: 'https://ecma-international.org/ecma-262/8.0/#sec-serializejsonobject',
+ SerializeJSONProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-serializejsonproperty',
+ Set: 'https://ecma-international.org/ecma-262/8.0/#sec-set-o-p-v-throw',
+ SetDefaultGlobalBindings: 'https://ecma-international.org/ecma-262/8.0/#sec-setdefaultglobalbindings',
+ SetFunctionName: 'https://ecma-international.org/ecma-262/8.0/#sec-setfunctionname',
+ SetImmutablePrototype: 'https://ecma-international.org/ecma-262/8.0/#sec-set-immutable-prototype',
+ SetIntegrityLevel: 'https://ecma-international.org/ecma-262/8.0/#sec-setintegritylevel',
+ SetRealmGlobalObject: 'https://ecma-international.org/ecma-262/8.0/#sec-setrealmglobalobject',
+ SetValueInBuffer: 'https://ecma-international.org/ecma-262/8.0/#sec-setvalueinbuffer',
+ SetViewValue: 'https://ecma-international.org/ecma-262/8.0/#sec-setviewvalue',
+ SharedDataBlockEventSet: 'https://ecma-international.org/ecma-262/8.0/#sec-sharedatablockeventset',
+ SortCompare: 'https://ecma-international.org/ecma-262/8.0/#sec-sortcompare',
+ SpeciesConstructor: 'https://ecma-international.org/ecma-262/8.0/#sec-speciesconstructor',
+ SplitMatch: 'https://ecma-international.org/ecma-262/8.0/#sec-splitmatch',
+ 'Strict Equality Comparison': 'https://ecma-international.org/ecma-262/8.0/#sec-strict-equality-comparison',
+ StringCreate: 'https://ecma-international.org/ecma-262/8.0/#sec-stringcreate',
+ StringGetOwnProperty: 'https://ecma-international.org/ecma-262/8.0/#sec-stringgetownproperty',
+ Suspend: 'https://ecma-international.org/ecma-262/8.0/#sec-suspend',
+ SymbolDescriptiveString: 'https://ecma-international.org/ecma-262/8.0/#sec-symboldescriptivestring',
+ 'synchronizes-with': 'https://ecma-international.org/ecma-262/8.0/#sec-synchronizes-with',
+ TestIntegrityLevel: 'https://ecma-international.org/ecma-262/8.0/#sec-testintegritylevel',
+ thisBooleanValue: 'https://ecma-international.org/ecma-262/8.0/#sec-thisbooleanvalue',
+ thisNumberValue: 'https://ecma-international.org/ecma-262/8.0/#sec-thisnumbervalue',
+ thisStringValue: 'https://ecma-international.org/ecma-262/8.0/#sec-thisstringvalue',
+ thisTimeValue: 'https://ecma-international.org/ecma-262/8.0/#sec-thistimevalue',
+ TimeClip: 'https://ecma-international.org/ecma-262/8.0/#sec-timeclip',
+ TimeFromYear: 'https://ecma-international.org/ecma-262/8.0/#eqn-TimeFromYear',
+ TimeWithinDay: 'https://ecma-international.org/ecma-262/8.0/#eqn-TimeWithinDay',
+ ToBoolean: 'https://ecma-international.org/ecma-262/8.0/#sec-toboolean',
+ ToDateString: 'https://ecma-international.org/ecma-262/8.0/#sec-todatestring',
+ ToIndex: 'https://ecma-international.org/ecma-262/8.0/#sec-toindex',
+ ToInt16: 'https://ecma-international.org/ecma-262/8.0/#sec-toint16',
+ ToInt32: 'https://ecma-international.org/ecma-262/8.0/#sec-toint32',
+ ToInt8: 'https://ecma-international.org/ecma-262/8.0/#sec-toint8',
+ ToInteger: 'https://ecma-international.org/ecma-262/8.0/#sec-tointeger',
+ ToLength: 'https://ecma-international.org/ecma-262/8.0/#sec-tolength',
+ ToNumber: 'https://ecma-international.org/ecma-262/8.0/#sec-tonumber',
+ ToObject: 'https://ecma-international.org/ecma-262/8.0/#sec-toobject',
+ TopLevelModuleEvaluationJob: 'https://ecma-international.org/ecma-262/8.0/#sec-toplevelmoduleevaluationjob',
+ ToPrimitive: 'https://ecma-international.org/ecma-262/8.0/#sec-toprimitive',
+ ToPropertyDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-topropertydescriptor',
+ ToPropertyKey: 'https://ecma-international.org/ecma-262/8.0/#sec-topropertykey',
+ ToString: 'https://ecma-international.org/ecma-262/8.0/#sec-tostring',
+ 'ToString Applied to the Number Type': 'https://ecma-international.org/ecma-262/8.0/#sec-tostring-applied-to-the-number-type',
+ ToUint16: 'https://ecma-international.org/ecma-262/8.0/#sec-touint16',
+ ToUint32: 'https://ecma-international.org/ecma-262/8.0/#sec-touint32',
+ ToUint8: 'https://ecma-international.org/ecma-262/8.0/#sec-touint8',
+ ToUint8Clamp: 'https://ecma-international.org/ecma-262/8.0/#sec-touint8clamp',
+ TriggerPromiseReactions: 'https://ecma-international.org/ecma-262/8.0/#sec-triggerpromisereactions',
+ Type: 'https://ecma-international.org/ecma-262/8.0/#sec-ecmascript-data-types-and-values',
+ TypedArrayCreate: 'https://ecma-international.org/ecma-262/8.0/#typedarray-create',
+ TypedArraySpeciesCreate: 'https://ecma-international.org/ecma-262/8.0/#typedarray-species-create',
+ UpdateEmpty: 'https://ecma-international.org/ecma-262/8.0/#sec-updateempty',
+ UTC: 'https://ecma-international.org/ecma-262/8.0/#sec-utc-t',
+ UTF16Decode: 'https://ecma-international.org/ecma-262/8.0/#sec-utf16decode',
+ UTF16Encoding: 'https://ecma-international.org/ecma-262/8.0/#sec-utf16encoding',
+ ValidateAndApplyPropertyDescriptor: 'https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor',
+ ValidateAtomicAccess: 'https://ecma-international.org/ecma-262/8.0/#sec-validateatomicaccess',
+ ValidateSharedIntegerTypedArray: 'https://ecma-international.org/ecma-262/8.0/#sec-validatesharedintegertypedarray',
+ ValidateTypedArray: 'https://ecma-international.org/ecma-262/8.0/#sec-validatetypedarray',
+ ValueOfReadEvent: 'https://ecma-international.org/ecma-262/8.0/#sec-valueofreadevent',
+ WakeWaiter: 'https://ecma-international.org/ecma-262/8.0/#sec-wakewaiter',
+ WeekDay: 'https://ecma-international.org/ecma-262/8.0/#sec-week-day',
+ WordCharacters: 'https://ecma-international.org/ecma-262/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation',
+ YearFromTime: 'https://ecma-international.org/ecma-262/8.0/#eqn-YearFromTime'
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/operations/2018.js b/node_modules/object.values/node_modules/es-abstract/operations/2018.js
new file mode 100644
index 0000000..c93b561
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/operations/2018.js
@@ -0,0 +1,350 @@
+'use strict';
+
+module.exports = {
+ abs: 'https://ecma-international.org/ecma-262/9.0/#eqn-abs',
+ 'Abstract Equality Comparison': 'https://ecma-international.org/ecma-262/9.0/#sec-abstract-equality-comparison',
+ 'Abstract Relational Comparison': 'https://ecma-international.org/ecma-262/9.0/#sec-abstract-relational-comparison',
+ AddRestrictedFunctionProperties: 'https://ecma-international.org/ecma-262/9.0/#sec-addrestrictedfunctionproperties',
+ AddWaiter: 'https://ecma-international.org/ecma-262/9.0/#sec-addwaiter',
+ AdvanceStringIndex: 'https://ecma-international.org/ecma-262/9.0/#sec-advancestringindex',
+ 'agent-order': 'https://ecma-international.org/ecma-262/9.0/#sec-agent-order',
+ AgentCanSuspend: 'https://ecma-international.org/ecma-262/9.0/#sec-agentcansuspend',
+ AgentSignifier: 'https://ecma-international.org/ecma-262/9.0/#sec-agentsignifier',
+ AllocateArrayBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-allocatearraybuffer',
+ AllocateSharedArrayBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-allocatesharedarraybuffer',
+ AllocateTypedArray: 'https://ecma-international.org/ecma-262/9.0/#sec-allocatetypedarray',
+ AllocateTypedArrayBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-allocatetypedarraybuffer',
+ ArrayCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-arraycreate',
+ ArraySetLength: 'https://ecma-international.org/ecma-262/9.0/#sec-arraysetlength',
+ ArraySpeciesCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-arrayspeciescreate',
+ AsyncFunctionCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-async-functions-abstract-operations-async-function-create',
+ AsyncFunctionStart: 'https://ecma-international.org/ecma-262/9.0/#sec-async-functions-abstract-operations-async-function-start',
+ AsyncGeneratorEnqueue: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratorenqueue',
+ AsyncGeneratorFunctionCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratorfunctioncreate',
+ AsyncGeneratorReject: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratorreject',
+ AsyncGeneratorResolve: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratorresolve',
+ AsyncGeneratorResumeNext: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratorresumenext',
+ AsyncGeneratorStart: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratorstart',
+ AsyncGeneratorYield: 'https://ecma-international.org/ecma-262/9.0/#sec-asyncgeneratoryield',
+ AsyncIteratorClose: 'https://ecma-international.org/ecma-262/9.0/#sec-asynciteratorclose',
+ AtomicLoad: 'https://ecma-international.org/ecma-262/9.0/#sec-atomicload',
+ AtomicReadModifyWrite: 'https://ecma-international.org/ecma-262/9.0/#sec-atomicreadmodifywrite',
+ Await: 'https://ecma-international.org/ecma-262/9.0/#await',
+ BackreferenceMatcher: 'https://ecma-international.org/ecma-262/9.0/#sec-backreference-matcher',
+ BlockDeclarationInstantiation: 'https://ecma-international.org/ecma-262/9.0/#sec-blockdeclarationinstantiation',
+ BoundFunctionCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-boundfunctioncreate',
+ Call: 'https://ecma-international.org/ecma-262/9.0/#sec-call',
+ Canonicalize: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-canonicalize-ch',
+ CanonicalNumericIndexString: 'https://ecma-international.org/ecma-262/9.0/#sec-canonicalnumericindexstring',
+ CaseClauseIsSelected: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-caseclauseisselected',
+ CharacterRange: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-characterrange-abstract-operation',
+ CharacterRangeOrUnion: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation',
+ CharacterSetMatcher: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation',
+ CloneArrayBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-clonearraybuffer',
+ CompletePropertyDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-completepropertydescriptor',
+ Completion: 'https://ecma-international.org/ecma-262/9.0/#sec-completion-record-specification-type',
+ ComposeWriteEventBytes: 'https://ecma-international.org/ecma-262/9.0/#sec-composewriteeventbytes',
+ Construct: 'https://ecma-international.org/ecma-262/9.0/#sec-construct',
+ CopyDataBlockBytes: 'https://ecma-international.org/ecma-262/9.0/#sec-copydatablockbytes',
+ CopyDataProperties: 'https://ecma-international.org/ecma-262/9.0/#sec-copydataproperties',
+ CreateArrayFromList: 'https://ecma-international.org/ecma-262/9.0/#sec-createarrayfromlist',
+ CreateArrayIterator: 'https://ecma-international.org/ecma-262/9.0/#sec-createarrayiterator',
+ CreateAsyncFromSyncIterator: 'https://ecma-international.org/ecma-262/9.0/#sec-createasyncfromsynciterator',
+ CreateBuiltinFunction: 'https://ecma-international.org/ecma-262/9.0/#sec-createbuiltinfunction',
+ CreateByteDataBlock: 'https://ecma-international.org/ecma-262/9.0/#sec-createbytedatablock',
+ CreateDataProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-createdataproperty',
+ CreateDataPropertyOrThrow: 'https://ecma-international.org/ecma-262/9.0/#sec-createdatapropertyorthrow',
+ CreateDynamicFunction: 'https://ecma-international.org/ecma-262/9.0/#sec-createdynamicfunction',
+ CreateHTML: 'https://ecma-international.org/ecma-262/9.0/#sec-createhtml',
+ CreateIntrinsics: 'https://ecma-international.org/ecma-262/9.0/#sec-createintrinsics',
+ CreateIterResultObject: 'https://ecma-international.org/ecma-262/9.0/#sec-createiterresultobject',
+ CreateListFromArrayLike: 'https://ecma-international.org/ecma-262/9.0/#sec-createlistfromarraylike',
+ CreateListIteratorRecord: 'https://ecma-international.org/ecma-262/9.0/#sec-createlistiteratorRecord',
+ CreateMapIterator: 'https://ecma-international.org/ecma-262/9.0/#sec-createmapiterator',
+ CreateMappedArgumentsObject: 'https://ecma-international.org/ecma-262/9.0/#sec-createmappedargumentsobject',
+ CreateMethodProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-createmethodproperty',
+ CreatePerIterationEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-createperiterationenvironment',
+ CreateRealm: 'https://ecma-international.org/ecma-262/9.0/#sec-createrealm',
+ CreateResolvingFunctions: 'https://ecma-international.org/ecma-262/9.0/#sec-createresolvingfunctions',
+ CreateSetIterator: 'https://ecma-international.org/ecma-262/9.0/#sec-createsetiterator',
+ CreateSharedByteDataBlock: 'https://ecma-international.org/ecma-262/9.0/#sec-createsharedbytedatablock',
+ CreateStringIterator: 'https://ecma-international.org/ecma-262/9.0/#sec-createstringiterator',
+ CreateUnmappedArgumentsObject: 'https://ecma-international.org/ecma-262/9.0/#sec-createunmappedargumentsobject',
+ DateFromTime: 'https://ecma-international.org/ecma-262/9.0/#sec-date-number',
+ DateString: 'https://ecma-international.org/ecma-262/9.0/#sec-datestring',
+ Day: 'https://ecma-international.org/ecma-262/9.0/#eqn-Day',
+ DayFromYear: 'https://ecma-international.org/ecma-262/9.0/#eqn-DaysFromYear',
+ DaysInYear: 'https://ecma-international.org/ecma-262/9.0/#eqn-DaysInYear',
+ DayWithinYear: 'https://ecma-international.org/ecma-262/9.0/#eqn-DayWithinYear',
+ Decode: 'https://ecma-international.org/ecma-262/9.0/#sec-decode',
+ DefinePropertyOrThrow: 'https://ecma-international.org/ecma-262/9.0/#sec-definepropertyorthrow',
+ DeletePropertyOrThrow: 'https://ecma-international.org/ecma-262/9.0/#sec-deletepropertyorthrow',
+ DetachArrayBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-detacharraybuffer',
+ Encode: 'https://ecma-international.org/ecma-262/9.0/#sec-encode',
+ EnqueueJob: 'https://ecma-international.org/ecma-262/9.0/#sec-enqueuejob',
+ EnterCriticalSection: 'https://ecma-international.org/ecma-262/9.0/#sec-entercriticalsection',
+ EnumerableOwnPropertyNames: 'https://ecma-international.org/ecma-262/9.0/#sec-enumerableownpropertynames',
+ EnumerateObjectProperties: 'https://ecma-international.org/ecma-262/9.0/#sec-enumerate-object-properties',
+ EscapeRegExpPattern: 'https://ecma-international.org/ecma-262/9.0/#sec-escaperegexppattern',
+ EvalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/9.0/#sec-evaldeclarationinstantiation',
+ EvaluateCall: 'https://ecma-international.org/ecma-262/9.0/#sec-evaluatecall',
+ EvaluateNew: 'https://ecma-international.org/ecma-262/9.0/#sec-evaluatenew',
+ EventSet: 'https://ecma-international.org/ecma-262/9.0/#sec-event-set',
+ floor: 'https://ecma-international.org/ecma-262/9.0/#eqn-floor',
+ ForBodyEvaluation: 'https://ecma-international.org/ecma-262/9.0/#sec-forbodyevaluation',
+ 'ForIn/OfBodyEvaluation': 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset',
+ 'ForIn/OfHeadEvaluation': 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind',
+ FromPropertyDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-frompropertydescriptor',
+ FulfillPromise: 'https://ecma-international.org/ecma-262/9.0/#sec-fulfillpromise',
+ FunctionAllocate: 'https://ecma-international.org/ecma-262/9.0/#sec-functionallocate',
+ FunctionCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-functioncreate',
+ FunctionDeclarationInstantiation: 'https://ecma-international.org/ecma-262/9.0/#sec-functiondeclarationinstantiation',
+ FunctionInitialize: 'https://ecma-international.org/ecma-262/9.0/#sec-functioninitialize',
+ GeneratorFunctionCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-generatorfunctioncreate',
+ GeneratorResume: 'https://ecma-international.org/ecma-262/9.0/#sec-generatorresume',
+ GeneratorResumeAbrupt: 'https://ecma-international.org/ecma-262/9.0/#sec-generatorresumeabrupt',
+ GeneratorStart: 'https://ecma-international.org/ecma-262/9.0/#sec-generatorstart',
+ GeneratorValidate: 'https://ecma-international.org/ecma-262/9.0/#sec-generatorvalidate',
+ GeneratorYield: 'https://ecma-international.org/ecma-262/9.0/#sec-generatoryield',
+ Get: 'https://ecma-international.org/ecma-262/9.0/#sec-get-o-p',
+ GetActiveScriptOrModule: 'https://ecma-international.org/ecma-262/9.0/#sec-getactivescriptormodule',
+ GetBase: 'https://ecma-international.org/ecma-262/9.0/#sec-getbase',
+ GetFunctionRealm: 'https://ecma-international.org/ecma-262/9.0/#sec-getfunctionrealm',
+ GetGeneratorKind: 'https://ecma-international.org/ecma-262/9.0/#sec-getgeneratorkind',
+ GetGlobalObject: 'https://ecma-international.org/ecma-262/9.0/#sec-getglobalobject',
+ GetIdentifierReference: 'https://ecma-international.org/ecma-262/9.0/#sec-getidentifierreference',
+ GetIterator: 'https://ecma-international.org/ecma-262/9.0/#sec-getiterator',
+ GetMethod: 'https://ecma-international.org/ecma-262/9.0/#sec-getmethod',
+ GetModifySetValueInBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-getmodifysetvalueinbuffer',
+ GetModuleNamespace: 'https://ecma-international.org/ecma-262/9.0/#sec-getmodulenamespace',
+ GetNewTarget: 'https://ecma-international.org/ecma-262/9.0/#sec-getnewtarget',
+ GetOwnPropertyKeys: 'https://ecma-international.org/ecma-262/9.0/#sec-getownpropertykeys',
+ GetPrototypeFromConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-getprototypefromconstructor',
+ GetReferencedName: 'https://ecma-international.org/ecma-262/9.0/#sec-getreferencedname',
+ GetSubstitution: 'https://ecma-international.org/ecma-262/9.0/#sec-getsubstitution',
+ GetSuperConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-getsuperconstructor',
+ GetTemplateObject: 'https://ecma-international.org/ecma-262/9.0/#sec-gettemplateobject',
+ GetThisEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-getthisenvironment',
+ GetThisValue: 'https://ecma-international.org/ecma-262/9.0/#sec-getthisvalue',
+ GetV: 'https://ecma-international.org/ecma-262/9.0/#sec-getv',
+ GetValue: 'https://ecma-international.org/ecma-262/9.0/#sec-getvalue',
+ GetValueFromBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-getvaluefrombuffer',
+ GetViewValue: 'https://ecma-international.org/ecma-262/9.0/#sec-getviewvalue',
+ GetWaiterList: 'https://ecma-international.org/ecma-262/9.0/#sec-getwaiterlist',
+ GlobalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/9.0/#sec-globaldeclarationinstantiation',
+ 'happens-before': 'https://ecma-international.org/ecma-262/9.0/#sec-happens-before',
+ HasOwnProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-hasownproperty',
+ HasPrimitiveBase: 'https://ecma-international.org/ecma-262/9.0/#sec-hasprimitivebase',
+ HasProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-hasproperty',
+ 'host-synchronizes-with': 'https://ecma-international.org/ecma-262/9.0/#sec-host-synchronizes-with',
+ HostEnsureCanCompileStrings: 'https://ecma-international.org/ecma-262/9.0/#sec-hostensurecancompilestrings',
+ HostEventSet: 'https://ecma-international.org/ecma-262/9.0/#sec-hosteventset',
+ HostPromiseRejectionTracker: 'https://ecma-international.org/ecma-262/9.0/#sec-host-promise-rejection-tracker',
+ HostReportErrors: 'https://ecma-international.org/ecma-262/9.0/#sec-host-report-errors',
+ HostResolveImportedModule: 'https://ecma-international.org/ecma-262/9.0/#sec-hostresolveimportedmodule',
+ HourFromTime: 'https://ecma-international.org/ecma-262/9.0/#eqn-HourFromTime',
+ IfAbruptRejectPromise: 'https://ecma-international.org/ecma-262/9.0/#sec-ifabruptrejectpromise',
+ ImportedLocalNames: 'https://ecma-international.org/ecma-262/9.0/#sec-importedlocalnames',
+ InitializeBoundName: 'https://ecma-international.org/ecma-262/9.0/#sec-initializeboundname',
+ InitializeHostDefinedRealm: 'https://ecma-international.org/ecma-262/9.0/#sec-initializehostdefinedrealm',
+ InitializeReferencedBinding: 'https://ecma-international.org/ecma-262/9.0/#sec-initializereferencedbinding',
+ InLeapYear: 'https://ecma-international.org/ecma-262/9.0/#eqn-InLeapYear',
+ InnerModuleEvaluation: 'https://ecma-international.org/ecma-262/9.0/#sec-innermoduleevaluation',
+ InnerModuleInstantiation: 'https://ecma-international.org/ecma-262/9.0/#sec-innermoduleinstantiation',
+ InstanceofOperator: 'https://ecma-international.org/ecma-262/9.0/#sec-instanceofoperator',
+ IntegerIndexedElementGet: 'https://ecma-international.org/ecma-262/9.0/#sec-integerindexedelementget',
+ IntegerIndexedElementSet: 'https://ecma-international.org/ecma-262/9.0/#sec-integerindexedelementset',
+ IntegerIndexedObjectCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-integerindexedobjectcreate',
+ InternalizeJSONProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-internalizejsonproperty',
+ Invoke: 'https://ecma-international.org/ecma-262/9.0/#sec-invoke',
+ IsAccessorDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-isaccessordescriptor',
+ IsAnonymousFunctionDefinition: 'https://ecma-international.org/ecma-262/9.0/#sec-isanonymousfunctiondefinition',
+ IsArray: 'https://ecma-international.org/ecma-262/9.0/#sec-isarray',
+ IsCallable: 'https://ecma-international.org/ecma-262/9.0/#sec-iscallable',
+ IsCompatiblePropertyDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-iscompatiblepropertydescriptor',
+ IsConcatSpreadable: 'https://ecma-international.org/ecma-262/9.0/#sec-isconcatspreadable',
+ IsConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-isconstructor',
+ IsDataDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-isdatadescriptor',
+ IsDetachedBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-isdetachedbuffer',
+ IsExtensible: 'https://ecma-international.org/ecma-262/9.0/#sec-isextensible-o',
+ IsGenericDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-isgenericdescriptor',
+ IsInTailPosition: 'https://ecma-international.org/ecma-262/9.0/#sec-isintailposition',
+ IsInteger: 'https://ecma-international.org/ecma-262/9.0/#sec-isinteger',
+ IsLabelledFunction: 'https://ecma-international.org/ecma-262/9.0/#sec-islabelledfunction',
+ IsPromise: 'https://ecma-international.org/ecma-262/9.0/#sec-ispromise',
+ IsPropertyKey: 'https://ecma-international.org/ecma-262/9.0/#sec-ispropertykey',
+ IsPropertyReference: 'https://ecma-international.org/ecma-262/9.0/#sec-ispropertyreference',
+ IsRegExp: 'https://ecma-international.org/ecma-262/9.0/#sec-isregexp',
+ IsSharedArrayBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-issharedarraybuffer',
+ IsStrictReference: 'https://ecma-international.org/ecma-262/9.0/#sec-isstrictreference',
+ IsStringPrefix: 'https://ecma-international.org/ecma-262/9.0/#sec-isstringprefix',
+ IsSuperReference: 'https://ecma-international.org/ecma-262/9.0/#sec-issuperreference',
+ IsUnresolvableReference: 'https://ecma-international.org/ecma-262/9.0/#sec-isunresolvablereference',
+ IsWordChar: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-iswordchar-abstract-operation',
+ IterableToList: 'https://ecma-international.org/ecma-262/9.0/#sec-iterabletolist',
+ IteratorClose: 'https://ecma-international.org/ecma-262/9.0/#sec-iteratorclose',
+ IteratorComplete: 'https://ecma-international.org/ecma-262/9.0/#sec-iteratorcomplete',
+ IteratorNext: 'https://ecma-international.org/ecma-262/9.0/#sec-iteratornext',
+ IteratorStep: 'https://ecma-international.org/ecma-262/9.0/#sec-iteratorstep',
+ IteratorValue: 'https://ecma-international.org/ecma-262/9.0/#sec-iteratorvalue',
+ LeaveCriticalSection: 'https://ecma-international.org/ecma-262/9.0/#sec-leavecriticalsection',
+ LocalTime: 'https://ecma-international.org/ecma-262/9.0/#sec-localtime',
+ LoopContinues: 'https://ecma-international.org/ecma-262/9.0/#sec-loopcontinues',
+ MakeArgGetter: 'https://ecma-international.org/ecma-262/9.0/#sec-makearggetter',
+ MakeArgSetter: 'https://ecma-international.org/ecma-262/9.0/#sec-makeargsetter',
+ MakeClassConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-makeclassconstructor',
+ MakeConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-makeconstructor',
+ MakeDate: 'https://ecma-international.org/ecma-262/9.0/#sec-makedate',
+ MakeDay: 'https://ecma-international.org/ecma-262/9.0/#sec-makeday',
+ MakeMethod: 'https://ecma-international.org/ecma-262/9.0/#sec-makemethod',
+ MakeSuperPropertyReference: 'https://ecma-international.org/ecma-262/9.0/#sec-makesuperpropertyreference',
+ MakeTime: 'https://ecma-international.org/ecma-262/9.0/#sec-maketime',
+ max: 'https://ecma-international.org/ecma-262/9.0/#eqn-max',
+ 'memory-order': 'https://ecma-international.org/ecma-262/9.0/#sec-memory-order',
+ min: 'https://ecma-international.org/ecma-262/9.0/#eqn-min',
+ MinFromTime: 'https://ecma-international.org/ecma-262/9.0/#eqn-MinFromTime',
+ ModuleDeclarationEnvironmentSetup: 'https://ecma-international.org/ecma-262/9.0/#sec-moduledeclarationenvironmentsetup',
+ ModuleExecution: 'https://ecma-international.org/ecma-262/9.0/#sec-moduleexecution',
+ ModuleNamespaceCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-modulenamespacecreate',
+ modulo: 'https://ecma-international.org/ecma-262/9.0/#eqn-modulo',
+ MonthFromTime: 'https://ecma-international.org/ecma-262/9.0/#eqn-MonthFromTime',
+ msFromTime: 'https://ecma-international.org/ecma-262/9.0/#eqn-msFromTime',
+ NewDeclarativeEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-newdeclarativeenvironment',
+ NewFunctionEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-newfunctionenvironment',
+ NewGlobalEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-newglobalenvironment',
+ NewModuleEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-newmoduleenvironment',
+ NewObjectEnvironment: 'https://ecma-international.org/ecma-262/9.0/#sec-newobjectenvironment',
+ NewPromiseCapability: 'https://ecma-international.org/ecma-262/9.0/#sec-newpromisecapability',
+ NormalCompletion: 'https://ecma-international.org/ecma-262/9.0/#sec-normalcompletion',
+ NumberToRawBytes: 'https://ecma-international.org/ecma-262/9.0/#sec-numbertorawbytes',
+ NumberToString: 'https://ecma-international.org/ecma-262/9.0/#sec-tostring-applied-to-the-number-type',
+ ObjectCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-objectcreate',
+ ObjectDefineProperties: 'https://ecma-international.org/ecma-262/9.0/#sec-objectdefineproperties',
+ OrdinaryCallBindThis: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarycallbindthis',
+ OrdinaryCallEvaluateBody: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarycallevaluatebody',
+ OrdinaryCreateFromConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarycreatefromconstructor',
+ OrdinaryDefineOwnProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarydefineownproperty',
+ OrdinaryDelete: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarydelete',
+ OrdinaryGet: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinaryget',
+ OrdinaryGetOwnProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarygetownproperty',
+ OrdinaryGetPrototypeOf: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarygetprototypeof',
+ OrdinaryHasInstance: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinaryhasinstance',
+ OrdinaryHasProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinaryhasproperty',
+ OrdinaryIsExtensible: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinaryisextensible',
+ OrdinaryOwnPropertyKeys: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinaryownpropertykeys',
+ OrdinaryPreventExtensions: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarypreventextensions',
+ OrdinarySet: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinaryset',
+ OrdinarySetPrototypeOf: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarysetprototypeof',
+ OrdinarySetWithOwnDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarysetwithowndescriptor',
+ OrdinaryToPrimitive: 'https://ecma-international.org/ecma-262/9.0/#sec-ordinarytoprimitive',
+ ParseModule: 'https://ecma-international.org/ecma-262/9.0/#sec-parsemodule',
+ ParseScript: 'https://ecma-international.org/ecma-262/9.0/#sec-parse-script',
+ PerformEval: 'https://ecma-international.org/ecma-262/9.0/#sec-performeval',
+ PerformPromiseAll: 'https://ecma-international.org/ecma-262/9.0/#sec-performpromiseall',
+ PerformPromiseRace: 'https://ecma-international.org/ecma-262/9.0/#sec-performpromiserace',
+ PerformPromiseThen: 'https://ecma-international.org/ecma-262/9.0/#sec-performpromisethen',
+ PrepareForOrdinaryCall: 'https://ecma-international.org/ecma-262/9.0/#sec-prepareforordinarycall',
+ PrepareForTailCall: 'https://ecma-international.org/ecma-262/9.0/#sec-preparefortailcall',
+ PromiseReactionJob: 'https://ecma-international.org/ecma-262/9.0/#sec-promisereactionjob',
+ PromiseResolve: 'https://ecma-international.org/ecma-262/9.0/#sec-promise-resolve',
+ PromiseResolveThenableJob: 'https://ecma-international.org/ecma-262/9.0/#sec-promiseresolvethenablejob',
+ ProxyCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-proxycreate',
+ PutValue: 'https://ecma-international.org/ecma-262/9.0/#sec-putvalue',
+ QuoteJSONString: 'https://ecma-international.org/ecma-262/9.0/#sec-quotejsonstring',
+ RawBytesToNumber: 'https://ecma-international.org/ecma-262/9.0/#sec-rawbytestonumber',
+ 'reads-bytes-from': 'https://ecma-international.org/ecma-262/9.0/#sec-reads-bytes-from',
+ 'reads-from': 'https://ecma-international.org/ecma-262/9.0/#sec-reads-from',
+ RegExpAlloc: 'https://ecma-international.org/ecma-262/9.0/#sec-regexpalloc',
+ RegExpBuiltinExec: 'https://ecma-international.org/ecma-262/9.0/#sec-regexpbuiltinexec',
+ RegExpCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-regexpcreate',
+ RegExpExec: 'https://ecma-international.org/ecma-262/9.0/#sec-regexpexec',
+ RegExpInitialize: 'https://ecma-international.org/ecma-262/9.0/#sec-regexpinitialize',
+ RejectPromise: 'https://ecma-international.org/ecma-262/9.0/#sec-rejectpromise',
+ RemoveWaiter: 'https://ecma-international.org/ecma-262/9.0/#sec-removewaiter',
+ RemoveWaiters: 'https://ecma-international.org/ecma-262/9.0/#sec-removewaiters',
+ RepeatMatcher: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-repeatmatcher-abstract-operation',
+ RequireObjectCoercible: 'https://ecma-international.org/ecma-262/9.0/#sec-requireobjectcoercible',
+ ResolveBinding: 'https://ecma-international.org/ecma-262/9.0/#sec-resolvebinding',
+ ResolveThisBinding: 'https://ecma-international.org/ecma-262/9.0/#sec-resolvethisbinding',
+ ReturnIfAbrupt: 'https://ecma-international.org/ecma-262/9.0/#sec-returnifabrupt',
+ RunJobs: 'https://ecma-international.org/ecma-262/9.0/#sec-runjobs',
+ SameValue: 'https://ecma-international.org/ecma-262/9.0/#sec-samevalue',
+ SameValueNonNumber: 'https://ecma-international.org/ecma-262/9.0/#sec-samevaluenonnumber',
+ SameValueZero: 'https://ecma-international.org/ecma-262/9.0/#sec-samevaluezero',
+ ScriptEvaluation: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-scriptevaluation',
+ ScriptEvaluationJob: 'https://ecma-international.org/ecma-262/9.0/#sec-scriptevaluationjob',
+ SecFromTime: 'https://ecma-international.org/ecma-262/9.0/#eqn-SecFromTime',
+ SerializeJSONArray: 'https://ecma-international.org/ecma-262/9.0/#sec-serializejsonarray',
+ SerializeJSONObject: 'https://ecma-international.org/ecma-262/9.0/#sec-serializejsonobject',
+ SerializeJSONProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-serializejsonproperty',
+ Set: 'https://ecma-international.org/ecma-262/9.0/#sec-set-o-p-v-throw',
+ SetDefaultGlobalBindings: 'https://ecma-international.org/ecma-262/9.0/#sec-setdefaultglobalbindings',
+ SetFunctionLength: 'https://ecma-international.org/ecma-262/9.0/#sec-setfunctionlength',
+ SetFunctionName: 'https://ecma-international.org/ecma-262/9.0/#sec-setfunctionname',
+ SetImmutablePrototype: 'https://ecma-international.org/ecma-262/9.0/#sec-set-immutable-prototype',
+ SetIntegrityLevel: 'https://ecma-international.org/ecma-262/9.0/#sec-setintegritylevel',
+ SetRealmGlobalObject: 'https://ecma-international.org/ecma-262/9.0/#sec-setrealmglobalobject',
+ SetValueInBuffer: 'https://ecma-international.org/ecma-262/9.0/#sec-setvalueinbuffer',
+ SetViewValue: 'https://ecma-international.org/ecma-262/9.0/#sec-setviewvalue',
+ SharedDataBlockEventSet: 'https://ecma-international.org/ecma-262/9.0/#sec-sharedatablockeventset',
+ SortCompare: 'https://ecma-international.org/ecma-262/9.0/#sec-sortcompare',
+ SpeciesConstructor: 'https://ecma-international.org/ecma-262/9.0/#sec-speciesconstructor',
+ SplitMatch: 'https://ecma-international.org/ecma-262/9.0/#sec-splitmatch',
+ 'Strict Equality Comparison': 'https://ecma-international.org/ecma-262/9.0/#sec-strict-equality-comparison',
+ StringCreate: 'https://ecma-international.org/ecma-262/9.0/#sec-stringcreate',
+ StringGetOwnProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-stringgetownproperty',
+ Suspend: 'https://ecma-international.org/ecma-262/9.0/#sec-suspend',
+ SymbolDescriptiveString: 'https://ecma-international.org/ecma-262/9.0/#sec-symboldescriptivestring',
+ 'synchronizes-with': 'https://ecma-international.org/ecma-262/9.0/#sec-synchronizes-with',
+ TestIntegrityLevel: 'https://ecma-international.org/ecma-262/9.0/#sec-testintegritylevel',
+ thisBooleanValue: 'https://ecma-international.org/ecma-262/9.0/#sec-thisbooleanvalue',
+ thisNumberValue: 'https://ecma-international.org/ecma-262/9.0/#sec-thisnumbervalue',
+ thisStringValue: 'https://ecma-international.org/ecma-262/9.0/#sec-thisstringvalue',
+ thisSymbolValue: 'https://ecma-international.org/ecma-262/9.0/#sec-thissymbolvalue',
+ thisTimeValue: 'https://ecma-international.org/ecma-262/9.0/#sec-thistimevalue',
+ ThrowCompletion: 'https://ecma-international.org/ecma-262/9.0/#sec-throwcompletion',
+ TimeClip: 'https://ecma-international.org/ecma-262/9.0/#sec-timeclip',
+ TimeFromYear: 'https://ecma-international.org/ecma-262/9.0/#eqn-TimeFromYear',
+ TimeString: 'https://ecma-international.org/ecma-262/9.0/#sec-timestring',
+ TimeWithinDay: 'https://ecma-international.org/ecma-262/9.0/#eqn-TimeWithinDay',
+ TimeZoneString: 'https://ecma-international.org/ecma-262/9.0/#sec-timezoneestring',
+ ToBoolean: 'https://ecma-international.org/ecma-262/9.0/#sec-toboolean',
+ ToDateString: 'https://ecma-international.org/ecma-262/9.0/#sec-todatestring',
+ ToIndex: 'https://ecma-international.org/ecma-262/9.0/#sec-toindex',
+ ToInt16: 'https://ecma-international.org/ecma-262/9.0/#sec-toint16',
+ ToInt32: 'https://ecma-international.org/ecma-262/9.0/#sec-toint32',
+ ToInt8: 'https://ecma-international.org/ecma-262/9.0/#sec-toint8',
+ ToInteger: 'https://ecma-international.org/ecma-262/9.0/#sec-tointeger',
+ ToLength: 'https://ecma-international.org/ecma-262/9.0/#sec-tolength',
+ ToNumber: 'https://ecma-international.org/ecma-262/9.0/#sec-tonumber',
+ ToObject: 'https://ecma-international.org/ecma-262/9.0/#sec-toobject',
+ TopLevelModuleEvaluationJob: 'https://ecma-international.org/ecma-262/9.0/#sec-toplevelmoduleevaluationjob',
+ ToPrimitive: 'https://ecma-international.org/ecma-262/9.0/#sec-toprimitive',
+ ToPropertyDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-topropertydescriptor',
+ ToPropertyKey: 'https://ecma-international.org/ecma-262/9.0/#sec-topropertykey',
+ ToString: 'https://ecma-international.org/ecma-262/9.0/#sec-tostring',
+ ToUint16: 'https://ecma-international.org/ecma-262/9.0/#sec-touint16',
+ ToUint32: 'https://ecma-international.org/ecma-262/9.0/#sec-touint32',
+ ToUint8: 'https://ecma-international.org/ecma-262/9.0/#sec-touint8',
+ ToUint8Clamp: 'https://ecma-international.org/ecma-262/9.0/#sec-touint8clamp',
+ TriggerPromiseReactions: 'https://ecma-international.org/ecma-262/9.0/#sec-triggerpromisereactions',
+ Type: 'https://ecma-international.org/ecma-262/9.0/#sec-ecmascript-data-types-and-values',
+ TypedArrayCreate: 'https://ecma-international.org/ecma-262/9.0/#typedarray-create',
+ TypedArraySpeciesCreate: 'https://ecma-international.org/ecma-262/9.0/#typedarray-species-create',
+ UnicodeEscape: 'https://ecma-international.org/ecma-262/9.0/#sec-unicodeescape',
+ UnicodeMatchProperty: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-unicodematchproperty-p',
+ UnicodeMatchPropertyValue: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v',
+ UpdateEmpty: 'https://ecma-international.org/ecma-262/9.0/#sec-updateempty',
+ UTC: 'https://ecma-international.org/ecma-262/9.0/#sec-utc-t',
+ UTF16Decode: 'https://ecma-international.org/ecma-262/9.0/#sec-utf16decode',
+ UTF16Encoding: 'https://ecma-international.org/ecma-262/9.0/#sec-utf16encoding',
+ ValidateAndApplyPropertyDescriptor: 'https://ecma-international.org/ecma-262/9.0/#sec-validateandapplypropertydescriptor',
+ ValidateAtomicAccess: 'https://ecma-international.org/ecma-262/9.0/#sec-validateatomicaccess',
+ ValidateSharedIntegerTypedArray: 'https://ecma-international.org/ecma-262/9.0/#sec-validatesharedintegertypedarray',
+ ValidateTypedArray: 'https://ecma-international.org/ecma-262/9.0/#sec-validatetypedarray',
+ ValueOfReadEvent: 'https://ecma-international.org/ecma-262/9.0/#sec-valueofreadevent',
+ WakeWaiter: 'https://ecma-international.org/ecma-262/9.0/#sec-wakewaiter',
+ WeekDay: 'https://ecma-international.org/ecma-262/9.0/#sec-week-day',
+ WordCharacters: 'https://ecma-international.org/ecma-262/9.0/#sec-runtime-semantics-wordcharacters-abstract-operation',
+ YearFromTime: 'https://ecma-international.org/ecma-262/9.0/#eqn-YearFromTime'
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/operations/2019.js b/node_modules/object.values/node_modules/es-abstract/operations/2019.js
new file mode 100644
index 0000000..73f05e8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/operations/2019.js
@@ -0,0 +1,355 @@
+'use strict';
+
+module.exports = {
+ abs: 'https://ecma-international.org/ecma-262/10.0/#eqn-abs',
+ 'Abstract Equality Comparison': 'https://ecma-international.org/ecma-262/10.0/#sec-abstract-equality-comparison',
+ 'Abstract Relational Comparison': 'https://ecma-international.org/ecma-262/10.0/#sec-abstract-relational-comparison',
+ AddEntriesFromIterable: 'https://ecma-international.org/ecma-262/10.0/#sec-add-entries-from-iterable',
+ AddRestrictedFunctionProperties: 'https://ecma-international.org/ecma-262/10.0/#sec-addrestrictedfunctionproperties',
+ AddWaiter: 'https://ecma-international.org/ecma-262/10.0/#sec-addwaiter',
+ AdvanceStringIndex: 'https://ecma-international.org/ecma-262/10.0/#sec-advancestringindex',
+ 'agent-order': 'https://ecma-international.org/ecma-262/10.0/#sec-agent-order',
+ AgentCanSuspend: 'https://ecma-international.org/ecma-262/10.0/#sec-agentcansuspend',
+ AgentSignifier: 'https://ecma-international.org/ecma-262/10.0/#sec-agentsignifier',
+ AllocateArrayBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-allocatearraybuffer',
+ AllocateSharedArrayBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-allocatesharedarraybuffer',
+ AllocateTypedArray: 'https://ecma-international.org/ecma-262/10.0/#sec-allocatetypedarray',
+ AllocateTypedArrayBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-allocatetypedarraybuffer',
+ ArrayCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-arraycreate',
+ ArraySetLength: 'https://ecma-international.org/ecma-262/10.0/#sec-arraysetlength',
+ ArraySpeciesCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-arrayspeciescreate',
+ AsyncFromSyncIteratorContinuation: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncfromsynciteratorcontinuation',
+ AsyncFunctionCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-async-functions-abstract-operations-async-function-create',
+ AsyncFunctionStart: 'https://ecma-international.org/ecma-262/10.0/#sec-async-functions-abstract-operations-async-function-start',
+ AsyncGeneratorEnqueue: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratorenqueue',
+ AsyncGeneratorFunctionCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratorfunctioncreate',
+ AsyncGeneratorReject: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratorreject',
+ AsyncGeneratorResolve: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratorresolve',
+ AsyncGeneratorResumeNext: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratorresumenext',
+ AsyncGeneratorStart: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratorstart',
+ AsyncGeneratorYield: 'https://ecma-international.org/ecma-262/10.0/#sec-asyncgeneratoryield',
+ AsyncIteratorClose: 'https://ecma-international.org/ecma-262/10.0/#sec-asynciteratorclose',
+ AtomicLoad: 'https://ecma-international.org/ecma-262/10.0/#sec-atomicload',
+ AtomicReadModifyWrite: 'https://ecma-international.org/ecma-262/10.0/#sec-atomicreadmodifywrite',
+ Await: 'https://ecma-international.org/ecma-262/10.0/#await',
+ BackreferenceMatcher: 'https://ecma-international.org/ecma-262/10.0/#sec-backreference-matcher',
+ BlockDeclarationInstantiation: 'https://ecma-international.org/ecma-262/10.0/#sec-blockdeclarationinstantiation',
+ BoundFunctionCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-boundfunctioncreate',
+ Call: 'https://ecma-international.org/ecma-262/10.0/#sec-call',
+ Canonicalize: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-canonicalize-ch',
+ CanonicalNumericIndexString: 'https://ecma-international.org/ecma-262/10.0/#sec-canonicalnumericindexstring',
+ CaseClauseIsSelected: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-caseclauseisselected',
+ CharacterRange: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-characterrange-abstract-operation',
+ CharacterRangeOrUnion: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation',
+ CharacterSetMatcher: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation',
+ CloneArrayBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-clonearraybuffer',
+ CompletePropertyDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-completepropertydescriptor',
+ Completion: 'https://ecma-international.org/ecma-262/10.0/#sec-completion-record-specification-type',
+ ComposeWriteEventBytes: 'https://ecma-international.org/ecma-262/10.0/#sec-composewriteeventbytes',
+ Construct: 'https://ecma-international.org/ecma-262/10.0/#sec-construct',
+ CopyDataBlockBytes: 'https://ecma-international.org/ecma-262/10.0/#sec-copydatablockbytes',
+ CopyDataProperties: 'https://ecma-international.org/ecma-262/10.0/#sec-copydataproperties',
+ CreateArrayFromList: 'https://ecma-international.org/ecma-262/10.0/#sec-createarrayfromlist',
+ CreateArrayIterator: 'https://ecma-international.org/ecma-262/10.0/#sec-createarrayiterator',
+ CreateAsyncFromSyncIterator: 'https://ecma-international.org/ecma-262/10.0/#sec-createasyncfromsynciterator',
+ CreateBuiltinFunction: 'https://ecma-international.org/ecma-262/10.0/#sec-createbuiltinfunction',
+ CreateByteDataBlock: 'https://ecma-international.org/ecma-262/10.0/#sec-createbytedatablock',
+ CreateDataProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-createdataproperty',
+ CreateDataPropertyOrThrow: 'https://ecma-international.org/ecma-262/10.0/#sec-createdatapropertyorthrow',
+ CreateDynamicFunction: 'https://ecma-international.org/ecma-262/10.0/#sec-createdynamicfunction',
+ CreateHTML: 'https://ecma-international.org/ecma-262/10.0/#sec-createhtml',
+ CreateIntrinsics: 'https://ecma-international.org/ecma-262/10.0/#sec-createintrinsics',
+ CreateIterResultObject: 'https://ecma-international.org/ecma-262/10.0/#sec-createiterresultobject',
+ CreateListFromArrayLike: 'https://ecma-international.org/ecma-262/10.0/#sec-createlistfromarraylike',
+ CreateListIteratorRecord: 'https://ecma-international.org/ecma-262/10.0/#sec-createlistiteratorRecord',
+ CreateMapIterator: 'https://ecma-international.org/ecma-262/10.0/#sec-createmapiterator',
+ CreateMappedArgumentsObject: 'https://ecma-international.org/ecma-262/10.0/#sec-createmappedargumentsobject',
+ CreateMethodProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-createmethodproperty',
+ CreatePerIterationEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-createperiterationenvironment',
+ CreateRealm: 'https://ecma-international.org/ecma-262/10.0/#sec-createrealm',
+ CreateResolvingFunctions: 'https://ecma-international.org/ecma-262/10.0/#sec-createresolvingfunctions',
+ CreateSetIterator: 'https://ecma-international.org/ecma-262/10.0/#sec-createsetiterator',
+ CreateSharedByteDataBlock: 'https://ecma-international.org/ecma-262/10.0/#sec-createsharedbytedatablock',
+ CreateStringIterator: 'https://ecma-international.org/ecma-262/10.0/#sec-createstringiterator',
+ CreateUnmappedArgumentsObject: 'https://ecma-international.org/ecma-262/10.0/#sec-createunmappedargumentsobject',
+ DateFromTime: 'https://ecma-international.org/ecma-262/10.0/#sec-date-number',
+ DateString: 'https://ecma-international.org/ecma-262/10.0/#sec-datestring',
+ Day: 'https://ecma-international.org/ecma-262/10.0/#eqn-Day',
+ DayFromYear: 'https://ecma-international.org/ecma-262/10.0/#eqn-DaysFromYear',
+ DaysInYear: 'https://ecma-international.org/ecma-262/10.0/#eqn-DaysInYear',
+ DayWithinYear: 'https://ecma-international.org/ecma-262/10.0/#eqn-DayWithinYear',
+ Decode: 'https://ecma-international.org/ecma-262/10.0/#sec-decode',
+ DefinePropertyOrThrow: 'https://ecma-international.org/ecma-262/10.0/#sec-definepropertyorthrow',
+ DeletePropertyOrThrow: 'https://ecma-international.org/ecma-262/10.0/#sec-deletepropertyorthrow',
+ DetachArrayBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-detacharraybuffer',
+ Encode: 'https://ecma-international.org/ecma-262/10.0/#sec-encode',
+ EnqueueJob: 'https://ecma-international.org/ecma-262/10.0/#sec-enqueuejob',
+ EnterCriticalSection: 'https://ecma-international.org/ecma-262/10.0/#sec-entercriticalsection',
+ EnumerableOwnPropertyNames: 'https://ecma-international.org/ecma-262/10.0/#sec-enumerableownpropertynames',
+ EnumerateObjectProperties: 'https://ecma-international.org/ecma-262/10.0/#sec-enumerate-object-properties',
+ EscapeRegExpPattern: 'https://ecma-international.org/ecma-262/10.0/#sec-escaperegexppattern',
+ EvalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/10.0/#sec-evaldeclarationinstantiation',
+ EvaluateCall: 'https://ecma-international.org/ecma-262/10.0/#sec-evaluatecall',
+ EvaluateNew: 'https://ecma-international.org/ecma-262/10.0/#sec-evaluatenew',
+ EventSet: 'https://ecma-international.org/ecma-262/10.0/#sec-event-set',
+ ExecuteModule: 'https://ecma-international.org/ecma-262/10.0/#sec-source-text-module-record-execute-module',
+ FlattenIntoArray: 'https://ecma-international.org/ecma-262/10.0/#sec-flattenintoarray',
+ floor: 'https://ecma-international.org/ecma-262/10.0/#eqn-floor',
+ ForBodyEvaluation: 'https://ecma-international.org/ecma-262/10.0/#sec-forbodyevaluation',
+ 'ForIn/OfBodyEvaluation': 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset',
+ 'ForIn/OfHeadEvaluation': 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind',
+ FromPropertyDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-frompropertydescriptor',
+ FulfillPromise: 'https://ecma-international.org/ecma-262/10.0/#sec-fulfillpromise',
+ FunctionAllocate: 'https://ecma-international.org/ecma-262/10.0/#sec-functionallocate',
+ FunctionCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-functioncreate',
+ FunctionDeclarationInstantiation: 'https://ecma-international.org/ecma-262/10.0/#sec-functiondeclarationinstantiation',
+ FunctionInitialize: 'https://ecma-international.org/ecma-262/10.0/#sec-functioninitialize',
+ GeneratorFunctionCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-generatorfunctioncreate',
+ GeneratorResume: 'https://ecma-international.org/ecma-262/10.0/#sec-generatorresume',
+ GeneratorResumeAbrupt: 'https://ecma-international.org/ecma-262/10.0/#sec-generatorresumeabrupt',
+ GeneratorStart: 'https://ecma-international.org/ecma-262/10.0/#sec-generatorstart',
+ GeneratorValidate: 'https://ecma-international.org/ecma-262/10.0/#sec-generatorvalidate',
+ GeneratorYield: 'https://ecma-international.org/ecma-262/10.0/#sec-generatoryield',
+ Get: 'https://ecma-international.org/ecma-262/10.0/#sec-get-o-p',
+ GetActiveScriptOrModule: 'https://ecma-international.org/ecma-262/10.0/#sec-getactivescriptormodule',
+ GetBase: 'https://ecma-international.org/ecma-262/10.0/#sec-getbase',
+ GetFunctionRealm: 'https://ecma-international.org/ecma-262/10.0/#sec-getfunctionrealm',
+ GetGeneratorKind: 'https://ecma-international.org/ecma-262/10.0/#sec-getgeneratorkind',
+ GetGlobalObject: 'https://ecma-international.org/ecma-262/10.0/#sec-getglobalobject',
+ GetIdentifierReference: 'https://ecma-international.org/ecma-262/10.0/#sec-getidentifierreference',
+ GetIterator: 'https://ecma-international.org/ecma-262/10.0/#sec-getiterator',
+ GetMethod: 'https://ecma-international.org/ecma-262/10.0/#sec-getmethod',
+ GetModifySetValueInBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-getmodifysetvalueinbuffer',
+ GetModuleNamespace: 'https://ecma-international.org/ecma-262/10.0/#sec-getmodulenamespace',
+ GetNewTarget: 'https://ecma-international.org/ecma-262/10.0/#sec-getnewtarget',
+ GetOwnPropertyKeys: 'https://ecma-international.org/ecma-262/10.0/#sec-getownpropertykeys',
+ GetPrototypeFromConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-getprototypefromconstructor',
+ GetReferencedName: 'https://ecma-international.org/ecma-262/10.0/#sec-getreferencedname',
+ GetSubstitution: 'https://ecma-international.org/ecma-262/10.0/#sec-getsubstitution',
+ GetSuperConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-getsuperconstructor',
+ GetTemplateObject: 'https://ecma-international.org/ecma-262/10.0/#sec-gettemplateobject',
+ GetThisEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-getthisenvironment',
+ GetThisValue: 'https://ecma-international.org/ecma-262/10.0/#sec-getthisvalue',
+ GetV: 'https://ecma-international.org/ecma-262/10.0/#sec-getv',
+ GetValue: 'https://ecma-international.org/ecma-262/10.0/#sec-getvalue',
+ GetValueFromBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-getvaluefrombuffer',
+ GetViewValue: 'https://ecma-international.org/ecma-262/10.0/#sec-getviewvalue',
+ GetWaiterList: 'https://ecma-international.org/ecma-262/10.0/#sec-getwaiterlist',
+ GlobalDeclarationInstantiation: 'https://ecma-international.org/ecma-262/10.0/#sec-globaldeclarationinstantiation',
+ 'happens-before': 'https://ecma-international.org/ecma-262/10.0/#sec-happens-before',
+ HasOwnProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-hasownproperty',
+ HasPrimitiveBase: 'https://ecma-international.org/ecma-262/10.0/#sec-hasprimitivebase',
+ HasProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-hasproperty',
+ 'host-synchronizes-with': 'https://ecma-international.org/ecma-262/10.0/#sec-host-synchronizes-with',
+ HostEnsureCanCompileStrings: 'https://ecma-international.org/ecma-262/10.0/#sec-hostensurecancompilestrings',
+ HostEventSet: 'https://ecma-international.org/ecma-262/10.0/#sec-hosteventset',
+ HostPromiseRejectionTracker: 'https://ecma-international.org/ecma-262/10.0/#sec-host-promise-rejection-tracker',
+ HostReportErrors: 'https://ecma-international.org/ecma-262/10.0/#sec-host-report-errors',
+ HostResolveImportedModule: 'https://ecma-international.org/ecma-262/10.0/#sec-hostresolveimportedmodule',
+ HourFromTime: 'https://ecma-international.org/ecma-262/10.0/#eqn-HourFromTime',
+ IfAbruptRejectPromise: 'https://ecma-international.org/ecma-262/10.0/#sec-ifabruptrejectpromise',
+ ImportedLocalNames: 'https://ecma-international.org/ecma-262/10.0/#sec-importedlocalnames',
+ InitializeBoundName: 'https://ecma-international.org/ecma-262/10.0/#sec-initializeboundname',
+ InitializeEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-source-text-module-record-initialize-environment',
+ InitializeHostDefinedRealm: 'https://ecma-international.org/ecma-262/10.0/#sec-initializehostdefinedrealm',
+ InitializeReferencedBinding: 'https://ecma-international.org/ecma-262/10.0/#sec-initializereferencedbinding',
+ InLeapYear: 'https://ecma-international.org/ecma-262/10.0/#eqn-InLeapYear',
+ InnerModuleEvaluation: 'https://ecma-international.org/ecma-262/10.0/#sec-innermoduleevaluation',
+ InnerModuleInstantiation: 'https://ecma-international.org/ecma-262/10.0/#sec-innermoduleinstantiation',
+ InstanceofOperator: 'https://ecma-international.org/ecma-262/10.0/#sec-instanceofoperator',
+ IntegerIndexedElementGet: 'https://ecma-international.org/ecma-262/10.0/#sec-integerindexedelementget',
+ IntegerIndexedElementSet: 'https://ecma-international.org/ecma-262/10.0/#sec-integerindexedelementset',
+ IntegerIndexedObjectCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-integerindexedobjectcreate',
+ InternalizeJSONProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-internalizejsonproperty',
+ Invoke: 'https://ecma-international.org/ecma-262/10.0/#sec-invoke',
+ IsAccessorDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-isaccessordescriptor',
+ IsAnonymousFunctionDefinition: 'https://ecma-international.org/ecma-262/10.0/#sec-isanonymousfunctiondefinition',
+ IsArray: 'https://ecma-international.org/ecma-262/10.0/#sec-isarray',
+ IsCallable: 'https://ecma-international.org/ecma-262/10.0/#sec-iscallable',
+ IsCompatiblePropertyDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-iscompatiblepropertydescriptor',
+ IsConcatSpreadable: 'https://ecma-international.org/ecma-262/10.0/#sec-isconcatspreadable',
+ IsConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-isconstructor',
+ IsDataDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-isdatadescriptor',
+ IsDetachedBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-isdetachedbuffer',
+ IsExtensible: 'https://ecma-international.org/ecma-262/10.0/#sec-isextensible-o',
+ IsGenericDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-isgenericdescriptor',
+ IsInTailPosition: 'https://ecma-international.org/ecma-262/10.0/#sec-isintailposition',
+ IsInteger: 'https://ecma-international.org/ecma-262/10.0/#sec-isinteger',
+ IsLabelledFunction: 'https://ecma-international.org/ecma-262/10.0/#sec-islabelledfunction',
+ IsPromise: 'https://ecma-international.org/ecma-262/10.0/#sec-ispromise',
+ IsPropertyKey: 'https://ecma-international.org/ecma-262/10.0/#sec-ispropertykey',
+ IsPropertyReference: 'https://ecma-international.org/ecma-262/10.0/#sec-ispropertyreference',
+ IsRegExp: 'https://ecma-international.org/ecma-262/10.0/#sec-isregexp',
+ IsSharedArrayBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-issharedarraybuffer',
+ IsStrictReference: 'https://ecma-international.org/ecma-262/10.0/#sec-isstrictreference',
+ IsStringPrefix: 'https://ecma-international.org/ecma-262/10.0/#sec-isstringprefix',
+ IsSuperReference: 'https://ecma-international.org/ecma-262/10.0/#sec-issuperreference',
+ IsUnresolvableReference: 'https://ecma-international.org/ecma-262/10.0/#sec-isunresolvablereference',
+ IsWordChar: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-iswordchar-abstract-operation',
+ IterableToList: 'https://ecma-international.org/ecma-262/10.0/#sec-iterabletolist',
+ IteratorClose: 'https://ecma-international.org/ecma-262/10.0/#sec-iteratorclose',
+ IteratorComplete: 'https://ecma-international.org/ecma-262/10.0/#sec-iteratorcomplete',
+ IteratorNext: 'https://ecma-international.org/ecma-262/10.0/#sec-iteratornext',
+ IteratorStep: 'https://ecma-international.org/ecma-262/10.0/#sec-iteratorstep',
+ IteratorValue: 'https://ecma-international.org/ecma-262/10.0/#sec-iteratorvalue',
+ LeaveCriticalSection: 'https://ecma-international.org/ecma-262/10.0/#sec-leavecriticalsection',
+ LocalTime: 'https://ecma-international.org/ecma-262/10.0/#sec-localtime',
+ LoopContinues: 'https://ecma-international.org/ecma-262/10.0/#sec-loopcontinues',
+ MakeArgGetter: 'https://ecma-international.org/ecma-262/10.0/#sec-makearggetter',
+ MakeArgSetter: 'https://ecma-international.org/ecma-262/10.0/#sec-makeargsetter',
+ MakeClassConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-makeclassconstructor',
+ MakeConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-makeconstructor',
+ MakeDate: 'https://ecma-international.org/ecma-262/10.0/#sec-makedate',
+ MakeDay: 'https://ecma-international.org/ecma-262/10.0/#sec-makeday',
+ MakeMethod: 'https://ecma-international.org/ecma-262/10.0/#sec-makemethod',
+ MakeSuperPropertyReference: 'https://ecma-international.org/ecma-262/10.0/#sec-makesuperpropertyreference',
+ MakeTime: 'https://ecma-international.org/ecma-262/10.0/#sec-maketime',
+ max: 'https://ecma-international.org/ecma-262/10.0/#eqn-max',
+ 'memory-order': 'https://ecma-international.org/ecma-262/10.0/#sec-memory-order',
+ min: 'https://ecma-international.org/ecma-262/10.0/#eqn-min',
+ MinFromTime: 'https://ecma-international.org/ecma-262/10.0/#eqn-MinFromTime',
+ ModuleNamespaceCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-modulenamespacecreate',
+ modulo: 'https://ecma-international.org/ecma-262/10.0/#eqn-modulo',
+ MonthFromTime: 'https://ecma-international.org/ecma-262/10.0/#eqn-MonthFromTime',
+ msFromTime: 'https://ecma-international.org/ecma-262/10.0/#eqn-msFromTime',
+ NewDeclarativeEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-newdeclarativeenvironment',
+ NewFunctionEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-newfunctionenvironment',
+ NewGlobalEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-newglobalenvironment',
+ NewModuleEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-newmoduleenvironment',
+ NewObjectEnvironment: 'https://ecma-international.org/ecma-262/10.0/#sec-newobjectenvironment',
+ NewPromiseCapability: 'https://ecma-international.org/ecma-262/10.0/#sec-newpromisecapability',
+ NormalCompletion: 'https://ecma-international.org/ecma-262/10.0/#sec-normalcompletion',
+ NotifyWaiter: 'https://ecma-international.org/ecma-262/10.0/#sec-notifywaiter',
+ NumberToRawBytes: 'https://ecma-international.org/ecma-262/10.0/#sec-numbertorawbytes',
+ NumberToString: 'https://ecma-international.org/ecma-262/10.0/#sec-tostring-applied-to-the-number-type',
+ ObjectCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-objectcreate',
+ ObjectDefineProperties: 'https://ecma-international.org/ecma-262/10.0/#sec-objectdefineproperties',
+ OrdinaryCallBindThis: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarycallbindthis',
+ OrdinaryCallEvaluateBody: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarycallevaluatebody',
+ OrdinaryCreateFromConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarycreatefromconstructor',
+ OrdinaryDefineOwnProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarydefineownproperty',
+ OrdinaryDelete: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarydelete',
+ OrdinaryGet: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinaryget',
+ OrdinaryGetOwnProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarygetownproperty',
+ OrdinaryGetPrototypeOf: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarygetprototypeof',
+ OrdinaryHasInstance: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinaryhasinstance',
+ OrdinaryHasProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinaryhasproperty',
+ OrdinaryIsExtensible: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinaryisextensible',
+ OrdinaryOwnPropertyKeys: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinaryownpropertykeys',
+ OrdinaryPreventExtensions: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarypreventextensions',
+ OrdinarySet: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinaryset',
+ OrdinarySetPrototypeOf: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarysetprototypeof',
+ OrdinarySetWithOwnDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarysetwithowndescriptor',
+ OrdinaryToPrimitive: 'https://ecma-international.org/ecma-262/10.0/#sec-ordinarytoprimitive',
+ ParseModule: 'https://ecma-international.org/ecma-262/10.0/#sec-parsemodule',
+ ParseScript: 'https://ecma-international.org/ecma-262/10.0/#sec-parse-script',
+ PerformEval: 'https://ecma-international.org/ecma-262/10.0/#sec-performeval',
+ PerformPromiseAll: 'https://ecma-international.org/ecma-262/10.0/#sec-performpromiseall',
+ PerformPromiseRace: 'https://ecma-international.org/ecma-262/10.0/#sec-performpromiserace',
+ PerformPromiseThen: 'https://ecma-international.org/ecma-262/10.0/#sec-performpromisethen',
+ PrepareForOrdinaryCall: 'https://ecma-international.org/ecma-262/10.0/#sec-prepareforordinarycall',
+ PrepareForTailCall: 'https://ecma-international.org/ecma-262/10.0/#sec-preparefortailcall',
+ PromiseReactionJob: 'https://ecma-international.org/ecma-262/10.0/#sec-promisereactionjob',
+ PromiseResolve: 'https://ecma-international.org/ecma-262/10.0/#sec-promise-resolve',
+ PromiseResolveThenableJob: 'https://ecma-international.org/ecma-262/10.0/#sec-promiseresolvethenablejob',
+ ProxyCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-proxycreate',
+ PutValue: 'https://ecma-international.org/ecma-262/10.0/#sec-putvalue',
+ QuoteJSONString: 'https://ecma-international.org/ecma-262/10.0/#sec-quotejsonstring',
+ RawBytesToNumber: 'https://ecma-international.org/ecma-262/10.0/#sec-rawbytestonumber',
+ 'reads-bytes-from': 'https://ecma-international.org/ecma-262/10.0/#sec-reads-bytes-from',
+ 'reads-from': 'https://ecma-international.org/ecma-262/10.0/#sec-reads-from',
+ RegExpAlloc: 'https://ecma-international.org/ecma-262/10.0/#sec-regexpalloc',
+ RegExpBuiltinExec: 'https://ecma-international.org/ecma-262/10.0/#sec-regexpbuiltinexec',
+ RegExpCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-regexpcreate',
+ RegExpExec: 'https://ecma-international.org/ecma-262/10.0/#sec-regexpexec',
+ RegExpInitialize: 'https://ecma-international.org/ecma-262/10.0/#sec-regexpinitialize',
+ RejectPromise: 'https://ecma-international.org/ecma-262/10.0/#sec-rejectpromise',
+ RemoveWaiter: 'https://ecma-international.org/ecma-262/10.0/#sec-removewaiter',
+ RemoveWaiters: 'https://ecma-international.org/ecma-262/10.0/#sec-removewaiters',
+ RepeatMatcher: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-repeatmatcher-abstract-operation',
+ RequireObjectCoercible: 'https://ecma-international.org/ecma-262/10.0/#sec-requireobjectcoercible',
+ ResolveBinding: 'https://ecma-international.org/ecma-262/10.0/#sec-resolvebinding',
+ ResolveThisBinding: 'https://ecma-international.org/ecma-262/10.0/#sec-resolvethisbinding',
+ ReturnIfAbrupt: 'https://ecma-international.org/ecma-262/10.0/#sec-returnifabrupt',
+ RunJobs: 'https://ecma-international.org/ecma-262/10.0/#sec-runjobs',
+ SameValue: 'https://ecma-international.org/ecma-262/10.0/#sec-samevalue',
+ SameValueNonNumber: 'https://ecma-international.org/ecma-262/10.0/#sec-samevaluenonnumber',
+ SameValueZero: 'https://ecma-international.org/ecma-262/10.0/#sec-samevaluezero',
+ ScriptEvaluation: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-scriptevaluation',
+ ScriptEvaluationJob: 'https://ecma-international.org/ecma-262/10.0/#sec-scriptevaluationjob',
+ SecFromTime: 'https://ecma-international.org/ecma-262/10.0/#eqn-SecFromTime',
+ SerializeJSONArray: 'https://ecma-international.org/ecma-262/10.0/#sec-serializejsonarray',
+ SerializeJSONObject: 'https://ecma-international.org/ecma-262/10.0/#sec-serializejsonobject',
+ SerializeJSONProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-serializejsonproperty',
+ Set: 'https://ecma-international.org/ecma-262/10.0/#sec-set-o-p-v-throw',
+ SetDefaultGlobalBindings: 'https://ecma-international.org/ecma-262/10.0/#sec-setdefaultglobalbindings',
+ SetFunctionLength: 'https://ecma-international.org/ecma-262/10.0/#sec-setfunctionlength',
+ SetFunctionName: 'https://ecma-international.org/ecma-262/10.0/#sec-setfunctionname',
+ SetImmutablePrototype: 'https://ecma-international.org/ecma-262/10.0/#sec-set-immutable-prototype',
+ SetIntegrityLevel: 'https://ecma-international.org/ecma-262/10.0/#sec-setintegritylevel',
+ SetRealmGlobalObject: 'https://ecma-international.org/ecma-262/10.0/#sec-setrealmglobalobject',
+ SetValueInBuffer: 'https://ecma-international.org/ecma-262/10.0/#sec-setvalueinbuffer',
+ SetViewValue: 'https://ecma-international.org/ecma-262/10.0/#sec-setviewvalue',
+ SharedDataBlockEventSet: 'https://ecma-international.org/ecma-262/10.0/#sec-sharedatablockeventset',
+ SortCompare: 'https://ecma-international.org/ecma-262/10.0/#sec-sortcompare',
+ SpeciesConstructor: 'https://ecma-international.org/ecma-262/10.0/#sec-speciesconstructor',
+ SplitMatch: 'https://ecma-international.org/ecma-262/10.0/#sec-splitmatch',
+ 'Strict Equality Comparison': 'https://ecma-international.org/ecma-262/10.0/#sec-strict-equality-comparison',
+ StringCreate: 'https://ecma-international.org/ecma-262/10.0/#sec-stringcreate',
+ StringGetOwnProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-stringgetownproperty',
+ Suspend: 'https://ecma-international.org/ecma-262/10.0/#sec-suspend',
+ SymbolDescriptiveString: 'https://ecma-international.org/ecma-262/10.0/#sec-symboldescriptivestring',
+ SynchronizeEventSet: 'https://ecma-international.org/ecma-262/10.0/#sec-synchronizeeventset',
+ 'synchronizes-with': 'https://ecma-international.org/ecma-262/10.0/#sec-synchronizes-with',
+ TestIntegrityLevel: 'https://ecma-international.org/ecma-262/10.0/#sec-testintegritylevel',
+ thisBooleanValue: 'https://ecma-international.org/ecma-262/10.0/#sec-thisbooleanvalue',
+ thisNumberValue: 'https://ecma-international.org/ecma-262/10.0/#sec-thisnumbervalue',
+ thisStringValue: 'https://ecma-international.org/ecma-262/10.0/#sec-thisstringvalue',
+ thisSymbolValue: 'https://ecma-international.org/ecma-262/10.0/#sec-thissymbolvalue',
+ thisTimeValue: 'https://ecma-international.org/ecma-262/10.0/#sec-thistimevalue',
+ ThrowCompletion: 'https://ecma-international.org/ecma-262/10.0/#sec-throwcompletion',
+ TimeClip: 'https://ecma-international.org/ecma-262/10.0/#sec-timeclip',
+ TimeFromYear: 'https://ecma-international.org/ecma-262/10.0/#eqn-TimeFromYear',
+ TimeString: 'https://ecma-international.org/ecma-262/10.0/#sec-timestring',
+ TimeWithinDay: 'https://ecma-international.org/ecma-262/10.0/#eqn-TimeWithinDay',
+ TimeZoneString: 'https://ecma-international.org/ecma-262/10.0/#sec-timezoneestring',
+ ToBoolean: 'https://ecma-international.org/ecma-262/10.0/#sec-toboolean',
+ ToDateString: 'https://ecma-international.org/ecma-262/10.0/#sec-todatestring',
+ ToIndex: 'https://ecma-international.org/ecma-262/10.0/#sec-toindex',
+ ToInt16: 'https://ecma-international.org/ecma-262/10.0/#sec-toint16',
+ ToInt32: 'https://ecma-international.org/ecma-262/10.0/#sec-toint32',
+ ToInt8: 'https://ecma-international.org/ecma-262/10.0/#sec-toint8',
+ ToInteger: 'https://ecma-international.org/ecma-262/10.0/#sec-tointeger',
+ ToLength: 'https://ecma-international.org/ecma-262/10.0/#sec-tolength',
+ ToNumber: 'https://ecma-international.org/ecma-262/10.0/#sec-tonumber',
+ ToObject: 'https://ecma-international.org/ecma-262/10.0/#sec-toobject',
+ TopLevelModuleEvaluationJob: 'https://ecma-international.org/ecma-262/10.0/#sec-toplevelmoduleevaluationjob',
+ ToPrimitive: 'https://ecma-international.org/ecma-262/10.0/#sec-toprimitive',
+ ToPropertyDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-topropertydescriptor',
+ ToPropertyKey: 'https://ecma-international.org/ecma-262/10.0/#sec-topropertykey',
+ ToString: 'https://ecma-international.org/ecma-262/10.0/#sec-tostring',
+ ToUint16: 'https://ecma-international.org/ecma-262/10.0/#sec-touint16',
+ ToUint32: 'https://ecma-international.org/ecma-262/10.0/#sec-touint32',
+ ToUint8: 'https://ecma-international.org/ecma-262/10.0/#sec-touint8',
+ ToUint8Clamp: 'https://ecma-international.org/ecma-262/10.0/#sec-touint8clamp',
+ TriggerPromiseReactions: 'https://ecma-international.org/ecma-262/10.0/#sec-triggerpromisereactions',
+ TrimString: 'https://ecma-international.org/ecma-262/10.0/#sec-trimstring',
+ Type: 'https://ecma-international.org/ecma-262/10.0/#sec-ecmascript-data-types-and-values',
+ TypedArrayCreate: 'https://ecma-international.org/ecma-262/10.0/#typedarray-create',
+ TypedArraySpeciesCreate: 'https://ecma-international.org/ecma-262/10.0/#typedarray-species-create',
+ UnicodeEscape: 'https://ecma-international.org/ecma-262/10.0/#sec-unicodeescape',
+ UnicodeMatchProperty: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-unicodematchproperty-p',
+ UnicodeMatchPropertyValue: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v',
+ UpdateEmpty: 'https://ecma-international.org/ecma-262/10.0/#sec-updateempty',
+ UTC: 'https://ecma-international.org/ecma-262/10.0/#sec-utc-t',
+ UTF16Decode: 'https://ecma-international.org/ecma-262/10.0/#sec-utf16decode',
+ UTF16Encoding: 'https://ecma-international.org/ecma-262/10.0/#sec-utf16encoding',
+ ValidateAndApplyPropertyDescriptor: 'https://ecma-international.org/ecma-262/10.0/#sec-validateandapplypropertydescriptor',
+ ValidateAtomicAccess: 'https://ecma-international.org/ecma-262/10.0/#sec-validateatomicaccess',
+ ValidateSharedIntegerTypedArray: 'https://ecma-international.org/ecma-262/10.0/#sec-validatesharedintegertypedarray',
+ ValidateTypedArray: 'https://ecma-international.org/ecma-262/10.0/#sec-validatetypedarray',
+ ValueOfReadEvent: 'https://ecma-international.org/ecma-262/10.0/#sec-valueofreadevent',
+ WeekDay: 'https://ecma-international.org/ecma-262/10.0/#sec-week-day',
+ WordCharacters: 'https://ecma-international.org/ecma-262/10.0/#sec-runtime-semantics-wordcharacters-abstract-operation',
+ YearFromTime: 'https://ecma-international.org/ecma-262/10.0/#eqn-YearFromTime'
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/package.json b/node_modules/object.values/node_modules/es-abstract/package.json
new file mode 100644
index 0000000..6c95a87
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/package.json
@@ -0,0 +1,109 @@
+{
+ "author": {
+ "email": "ljharb@gmail.com",
+ "name": "Jordan Harband",
+ "url": "http://ljharb.codes"
+ },
+ "contributors": [
+ {
+ "email": "ljharb@gmail.com",
+ "name": "Jordan Harband",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "dependencies": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ },
+ "description": "ECMAScript spec abstract operations.",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^16.0.0",
+ "array.prototype.indexof": "^1.0.0",
+ "cheerio": "^1.0.0-rc.3",
+ "diff": "^4.0.2",
+ "eclint": "^2.8.1",
+ "eslint": "^6.8.0",
+ "foreach": "^2.0.5",
+ "functions-have-names": "^1.2.1",
+ "has-strict-mode": "^1.0.0",
+ "in-publish": "^2.0.0",
+ "make-arrow-function": "^1.2.0",
+ "nyc": "^10.3.2",
+ "object-is": "^1.0.2",
+ "object.fromentries": "^2.0.2",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.0.0-next.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "greenkeeper": {
+ "//": "nyc is ignored because it requires node 4+, and we support older than that",
+ "ignore": [
+ "nyc"
+ ]
+ },
+ "keywords": [
+ "ECMAScript",
+ "ES",
+ "abstract",
+ "operation",
+ "abstract operation",
+ "JavaScript",
+ "ES5",
+ "ES6",
+ "ES7"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "es-abstract",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/es-abstract.git"
+ },
+ "scripts": {
+ "coverage": "nyc npm run tests-only >/dev/null",
+ "eccheck": "eclint check *.js **/*.js > /dev/null",
+ "lint": "eslint .",
+ "postcoverage": "nyc report",
+ "postspackle": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1 | xargs git add",
+ "posttest": "npx aud --production",
+ "prepublish": "safe-publish-latest && (not-in-publish || npm run spackle)",
+ "prespackle": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1 | xargs rm || true",
+ "pretest": "npm run lint",
+ "spackle": "node operations/spackle 1",
+ "test": "npm run tests-only",
+ "tests-only": "node test"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test/index.js"
+ },
+ "version": "1.17.5"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/es-abstract/test/GetIntrinsic.js b/node_modules/object.values/node_modules/es-abstract/test/GetIntrinsic.js
new file mode 100644
index 0000000..a3e69a7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/GetIntrinsic.js
@@ -0,0 +1,94 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var test = require('tape');
+var forEach = require('foreach');
+var debug = require('object-inspect');
+
+var v = require('./helpers/values');
+
+test('export', function (t) {
+ t.equal(typeof GetIntrinsic, 'function', 'it is a function');
+ t.equal(GetIntrinsic.length, 2, 'function has length of 2');
+
+ t.end();
+});
+
+test('throws', function (t) {
+ t['throws'](
+ function () { GetIntrinsic('not an intrinsic'); },
+ SyntaxError,
+ 'nonexistent intrinsic throws a syntax error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic(''); },
+ TypeError,
+ 'empty string intrinsic throws a type error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('.'); },
+ SyntaxError,
+ '"just a dot" intrinsic throws a syntax error'
+ );
+
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { GetIntrinsic(nonString); },
+ TypeError,
+ debug(nonString) + ' is not a String'
+ );
+ });
+
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () { GetIntrinsic('%', nonBoolean); },
+ TypeError,
+ debug(nonBoolean) + ' is not a Boolean'
+ );
+ });
+
+ forEach([
+ 'toString',
+ 'propertyIsEnumerable',
+ 'hasOwnProperty'
+ ], function (objectProtoMember) {
+ t['throws'](
+ function () { GetIntrinsic(objectProtoMember); },
+ SyntaxError,
+ debug(objectProtoMember) + ' is not an intrinsic'
+ );
+ });
+
+ t.end();
+});
+
+test('base intrinsics', function (t) {
+ t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object');
+ t.equal(GetIntrinsic('Object'), Object, 'Object yields Object');
+ t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array');
+ t.equal(GetIntrinsic('Array'), Array, 'Array yields Array');
+
+ t.end();
+});
+
+test('dotted paths', function (t) {
+ t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString');
+ t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString');
+ t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push');
+ t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push');
+
+ t.end();
+});
+
+test('accessors', { skip: !Object.getOwnPropertyDescriptor || typeof Map !== 'function' }, function (t) {
+ var actual = Object.getOwnPropertyDescriptor(Map.prototype, 'size');
+ t.ok(actual, 'Map.prototype.size has a descriptor');
+ t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function');
+ t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it');
+ t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it');
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-abstract/test/diffOps.js b/node_modules/object.values/node_modules/es-abstract/test/diffOps.js
new file mode 100644
index 0000000..602098d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/diffOps.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var keys = require('object-keys');
+var forEach = require('foreach');
+var indexOf = require('array.prototype.indexof');
+
+module.exports = function diffOperations(actual, expected, expectedMissing) {
+ var actualKeys = keys(actual);
+ var expectedKeys = keys(expected);
+
+ var extra = [];
+ var missing = [];
+ forEach(actualKeys, function (op) {
+ if (!(op in expected)) {
+ extra.push(op);
+ } else if (indexOf(expectedMissing, op) !== -1) {
+ extra.push(op);
+ }
+ });
+ forEach(expectedKeys, function (op) {
+ if (typeof actual[op] !== 'function' && indexOf(expectedMissing, op) === -1) {
+ missing.push(op);
+ }
+ });
+
+ return { missing: missing, extra: extra };
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es2015.js b/node_modules/object.values/node_modules/es-abstract/test/es2015.js
new file mode 100644
index 0000000..6db4d6d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es2015.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var ES = require('../').ES2015;
+
+var ops = require('../operations/2015');
+
+var expectedMissing = ['Construct', 'CreateArrayFromList', 'CreateListIterator', 'NormalCompletion', 'RegExpBuiltinExec'];
+
+require('./tests').es2015(ES, ops, expectedMissing);
+
+require('./helpers/runManifestTest')(require('tape'), ES, 2015);
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es2016.js b/node_modules/object.values/node_modules/es-abstract/test/es2016.js
new file mode 100644
index 0000000..27115f7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es2016.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var ES = require('../').ES2016;
+
+var ops = require('../operations/2016');
+
+var expectedMissing = ['AddRestrictedFunctionProperties', 'AllocateArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'Canonicalize', 'CharacterRange', 'CharacterRangeOrUnion', 'CharacterSetMatcher', 'CloneArrayBuffer', 'Completion', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIterator', 'CreateMapIterator', 'CreateMappedArgumentsObject', 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'DetachArrayBuffer', 'Encode', 'EnqueueJob', 'EnumerateObjectProperties', 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateDirectCall', 'EvaluateNew', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetGlobalObject', 'GetIdentifierReference', 'GetModuleNamespace', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetValueFromBuffer', 'GetViewValue', 'GlobalDeclarationInstantiation', 'HostPromiseRejectionTracker', 'HostReportErrors', 'HostResolveImportedModule', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'IntegerIndexedElementGet', 'IntegerIndexedElementSet', 'IntegerIndexedObjectCreate', 'InternalizeJSONProperty', 'IsAnonymousFunctionDefinition', 'IsCompatiblePropertyDescriptor', 'IsDetachedBuffer', 'IsInTailPosition', 'IsLabelledFunction', 'IsWordChar', 'LocalTime', 'LoopContinues', 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseCapability', 'NextJob', 'NormalCompletion', 'ObjectDefineProperties', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryCreateFromConstructor', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', 'QuoteJSONString', 'RegExpAlloc', 'RegExpBuiltinExec', 'RegExpCreate', 'RegExpInitialize', 'RejectPromise', 'RepeatMatcher', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetRealmGlobalObject', 'SetValueInBuffer', 'SetViewValue', 'SortCompare', 'SplitMatch', 'StringCreate', 'ToString Applied to the Number Type', 'TopLevelModuleEvaluationJob', 'TriggerPromiseReactions', 'TypedArrayCreate', 'TypedArraySpeciesCreate', 'UTC', 'UTF16Decode', 'UTF16Encoding', 'UpdateEmpty', 'ValidateTypedArray', 'abs', 'floor', 'max', 'min'];
+
+require('./tests').es2016(ES, ops, expectedMissing);
+
+require('./helpers/runManifestTest')(require('tape'), ES, 2016);
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es2017.js b/node_modules/object.values/node_modules/es-abstract/test/es2017.js
new file mode 100644
index 0000000..cabff70
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es2017.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var ES = require('../').ES2017;
+
+var ops = require('../operations/2017');
+
+var expectedMissing = ['AddRestrictedFunctionProperties', 'AddWaiter', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionAwait', 'AsyncFunctionCreate', 'AsyncFunctionStart', 'AtomicLoad', 'AtomicReadModifyWrite', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'Canonicalize', 'CharacterRange', 'CharacterRangeOrUnion', 'CharacterSetMatcher', 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIterator', 'CreateMapIterator', 'CreateMappedArgumentsObject', 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'DetachArrayBuffer', 'Encode', 'EnqueueJob', 'EnterCriticalSection', 'EnumerateObjectProperties', 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateDirectCall', 'EvaluateNew', 'EventSet', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetGlobalObject', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetValueFromBuffer', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'HasPrimitiveBase', 'HostEnsureCanCompileStrings', 'HostEventSet', 'HostPromiseRejectionTracker', 'HostReportErrors', 'HostResolveImportedModule', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'IntegerIndexedElementGet', 'IntegerIndexedElementSet', 'IntegerIndexedObjectCreate', 'InternalizeJSONProperty', 'IsAnonymousFunctionDefinition', 'IsCompatiblePropertyDescriptor', 'IsDetachedBuffer', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSharedArrayBuffer', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsWordChar', 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseCapability', 'NormalCompletion', 'NumberToRawBytes', 'ObjectDefineProperties', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryCreateFromConstructor', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinaryToPrimitive', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', 'QuoteJSONString', 'RawBytesToNumber', 'RegExpAlloc', 'RegExpBuiltinExec', 'RegExpCreate', 'RegExpInitialize', 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'RunJobs', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetValueInBuffer', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', 'SplitMatch', 'StringCreate', 'StringGetOwnProperty', 'Suspend', 'ToString Applied to the Number Type', 'TopLevelModuleEvaluationJob', 'TriggerPromiseReactions', 'TypedArrayCreate', 'TypedArraySpeciesCreate', 'UTC', 'UTF16Decode', 'UTF16Encoding', 'UpdateEmpty', 'ValidateAtomicAccess', 'ValidateSharedIntegerTypedArray', 'ValidateTypedArray', 'ValueOfReadEvent', 'WakeWaiter', 'WordCharacters', 'abs', 'agent-order', 'floor', 'happens-before', 'host-synchronizes-with', 'max', 'memory-order', 'min', 'reads-bytes-from', 'reads-from', 'synchronizes-with'];
+
+require('./tests').es2017(ES, ops, expectedMissing);
+
+require('./helpers/runManifestTest')(require('tape'), ES, 2017);
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es2018.js b/node_modules/object.values/node_modules/es-abstract/test/es2018.js
new file mode 100644
index 0000000..df18627
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es2018.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var ES = require('../').ES2018;
+
+var ops = require('../operations/2018');
+
+var expectedMissing = ['abs', 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorReject', 'AsyncGeneratorResolve', 'AsyncGeneratorResumeNext', 'AsyncGeneratorStart', 'AsyncGeneratorYield', 'AtomicLoad', 'AtomicReadModifyWrite', 'Await', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'Canonicalize', 'CaseClauseIsSelected', 'CharacterRange', 'CharacterRangeOrUnion', 'CharacterSetMatcher', 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'CopyDataBlockBytes', 'CreateArrayIterator', 'CreateAsyncFromSyncIterator', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateMapIterator', 'CreateMappedArgumentsObject', 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'DetachArrayBuffer', 'Encode', 'EnqueueJob', 'EnterCriticalSection', 'EnumerateObjectProperties', 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EventSet', 'floor', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetGeneratorKind', 'GetGlobalObject', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetValueFromBuffer', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'HasPrimitiveBase', 'host-synchronizes-with', 'HostEnsureCanCompileStrings', 'HostEventSet', 'HostPromiseRejectionTracker', 'HostReportErrors', 'HostResolveImportedModule', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InnerModuleEvaluation', 'InnerModuleInstantiation', 'IntegerIndexedElementGet', 'IntegerIndexedElementSet', 'IntegerIndexedObjectCreate', 'InternalizeJSONProperty', 'IsAnonymousFunctionDefinition', 'IsCompatiblePropertyDescriptor', 'IsDetachedBuffer', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSharedArrayBuffer', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsWordChar', 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'max', 'memory-order', 'min', 'ModuleDeclarationEnvironmentSetup', 'ModuleExecution', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseCapability', 'NumberToRawBytes', 'ObjectDefineProperties', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryCreateFromConstructor', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinaryToPrimitive', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', 'QuoteJSONString', 'RawBytesToNumber', 'reads-bytes-from', 'reads-from', 'RegExpAlloc', 'RegExpCreate', 'RegExpInitialize', 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'RunJobs', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetValueInBuffer', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', 'SplitMatch', 'StringCreate', 'StringGetOwnProperty', 'Suspend', 'synchronizes-with', 'TimeZoneString', 'TopLevelModuleEvaluationJob', 'TriggerPromiseReactions', 'TypedArrayCreate', 'TypedArraySpeciesCreate', 'UnicodeEscape', 'UpdateEmpty', 'UTC', 'UTF16Decode', 'UTF16Encoding', 'ValidateAtomicAccess', 'ValidateSharedIntegerTypedArray', 'ValidateTypedArray', 'ValueOfReadEvent', 'WakeWaiter', 'WordCharacters', 'AsyncFunctionCreate', 'AsyncGeneratorFunctionCreate', 'AsyncIteratorClose', 'BackreferenceMatcher', 'Construct', 'CreateArrayFromList', 'CreateListIteratorRecord', 'NormalCompletion', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'RegExpBuiltinExec', 'SetFunctionLength', 'ThrowCompletion', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue'];
+
+require('./tests').es2018(ES, ops, expectedMissing);
+
+require('./helpers/runManifestTest')(require('tape'), ES, 2018);
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es2019.js b/node_modules/object.values/node_modules/es-abstract/test/es2019.js
new file mode 100644
index 0000000..c0486a0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es2019.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var ES = require('../').ES2019;
+
+var ops = require('../operations/2019');
+
+var expectedMissing = ['abs', 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorReject', 'AsyncGeneratorResolve', 'AsyncGeneratorResumeNext', 'AsyncGeneratorStart', 'AsyncGeneratorYield', 'AtomicLoad', 'AtomicReadModifyWrite', 'Await', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'Canonicalize', 'CaseClauseIsSelected', 'CharacterRange', 'CharacterRangeOrUnion', 'CharacterSetMatcher', 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'CopyDataBlockBytes', 'CreateArrayIterator', 'CreateAsyncFromSyncIterator', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateMapIterator', 'CreateMappedArgumentsObject', 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'DetachArrayBuffer', 'Encode', 'EnqueueJob', 'EnterCriticalSection', 'EnumerateObjectProperties', 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EventSet', 'floor', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetGeneratorKind', 'GetGlobalObject', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetValueFromBuffer', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'HasPrimitiveBase', 'host-synchronizes-with', 'HostEnsureCanCompileStrings', 'HostEventSet', 'HostPromiseRejectionTracker', 'HostReportErrors', 'HostResolveImportedModule', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InnerModuleEvaluation', 'InnerModuleInstantiation', 'IntegerIndexedElementGet', 'IntegerIndexedElementSet', 'IntegerIndexedObjectCreate', 'InternalizeJSONProperty', 'IsAnonymousFunctionDefinition', 'IsCompatiblePropertyDescriptor', 'IsDetachedBuffer', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSharedArrayBuffer', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsWordChar', 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'max', 'memory-order', 'min', 'ModuleDeclarationEnvironmentSetup', 'ModuleExecution', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseCapability', 'NumberToRawBytes', 'ObjectDefineProperties', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryCreateFromConstructor', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinaryToPrimitive', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', 'QuoteJSONString', 'RawBytesToNumber', 'reads-bytes-from', 'reads-from', 'RegExpAlloc', 'RegExpCreate', 'RegExpInitialize', 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'RunJobs', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetValueInBuffer', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', 'SplitMatch', 'StringCreate', 'StringGetOwnProperty', 'Suspend', 'synchronizes-with', 'TimeZoneString', 'TopLevelModuleEvaluationJob', 'TriggerPromiseReactions', 'TypedArrayCreate', 'TypedArraySpeciesCreate', 'UnicodeEscape', 'UpdateEmpty', 'UTC', 'UTF16Decode', 'UTF16Encoding', 'ValidateAtomicAccess', 'ValidateSharedIntegerTypedArray', 'ValidateTypedArray', 'ValueOfReadEvent', 'WakeWaiter', 'WordCharacters', 'AsyncFunctionCreate', 'AsyncGeneratorFunctionCreate', 'AsyncIteratorClose', 'BackreferenceMatcher', 'Construct', 'CreateArrayFromList', 'CreateListIteratorRecord', 'NormalCompletion', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'RegExpBuiltinExec', 'SetFunctionLength', 'ThrowCompletion', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'AsyncFromSyncIteratorContinuation', 'ExecuteModule', 'InitializeEnvironment', 'NotifyWaiter', 'SynchronizeEventSet'];
+
+require('./tests').es2019(ES, ops, expectedMissing);
+
+require('./helpers/runManifestTest')(require('tape'), ES, 2019);
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es5.js b/node_modules/object.values/node_modules/es-abstract/test/es5.js
new file mode 100644
index 0000000..b4fb7f3
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es5.js
@@ -0,0 +1,784 @@
+'use strict';
+
+var ES = require('../').ES5;
+var test = require('tape');
+
+var forEach = require('foreach');
+var is = require('object-is');
+var debug = require('object-inspect');
+
+var v = require('./helpers/values');
+
+require('./helpers/runManifestTest')(test, ES, 5);
+
+test('ToPrimitive', function (t) {
+ t.test('primitives', function (st) {
+ var testPrimitive = function (primitive) {
+ st.ok(is(ES.ToPrimitive(primitive), primitive), debug(primitive) + ' is returned correctly');
+ };
+ forEach(v.primitives, testPrimitive);
+ st.end();
+ });
+
+ t.test('objects', function (st) {
+ st.equal(ES.ToPrimitive(v.coercibleObject), v.coercibleObject.valueOf(), 'coercibleObject coerces to valueOf');
+ st.equal(ES.ToPrimitive(v.coercibleObject, Number), v.coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf');
+ st.equal(ES.ToPrimitive(v.coercibleObject, String), v.coercibleObject.toString(), 'coercibleObject with hint String coerces to toString');
+ st.equal(ES.ToPrimitive(v.coercibleFnObject), v.coercibleFnObject.toString(), 'coercibleFnObject coerces to toString');
+ st.equal(ES.ToPrimitive(v.toStringOnlyObject), v.toStringOnlyObject.toString(), 'toStringOnlyObject returns toString');
+ st.equal(ES.ToPrimitive(v.valueOfOnlyObject), v.valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf');
+ st.equal(ES.ToPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString');
+ st.equal(ES.ToPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString');
+ st.equal(ES.ToPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to Object#toString');
+ st['throws'](function () { return ES.ToPrimitive(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError');
+ st['throws'](function () { return ES.ToPrimitive(v.uncoercibleFnObject); }, TypeError, 'uncoercibleFnObject throws a TypeError');
+ st.end();
+ });
+
+ t.end();
+});
+
+test('ToBoolean', function (t) {
+ t.equal(false, ES.ToBoolean(undefined), 'undefined coerces to false');
+ t.equal(false, ES.ToBoolean(null), 'null coerces to false');
+ t.equal(false, ES.ToBoolean(false), 'false returns false');
+ t.equal(true, ES.ToBoolean(true), 'true returns true');
+ forEach([0, -0, NaN], function (falsyNumber) {
+ t.equal(false, ES.ToBoolean(falsyNumber), 'falsy number ' + falsyNumber + ' coerces to false');
+ });
+ forEach([Infinity, 42, 1, -Infinity], function (truthyNumber) {
+ t.equal(true, ES.ToBoolean(truthyNumber), 'truthy number ' + truthyNumber + ' coerces to true');
+ });
+ t.equal(false, ES.ToBoolean(''), 'empty string coerces to false');
+ t.equal(true, ES.ToBoolean('foo'), 'nonempty string coerces to true');
+ forEach(v.objects, function (obj) {
+ t.equal(true, ES.ToBoolean(obj), 'object coerces to true');
+ });
+ t.equal(true, ES.ToBoolean(v.uncoercibleObject), 'uncoercibleObject coerces to true');
+ t.end();
+});
+
+test('ToNumber', function (t) {
+ t.ok(is(NaN, ES.ToNumber(undefined)), 'undefined coerces to NaN');
+ t.ok(is(ES.ToNumber(null), 0), 'null coerces to +0');
+ t.ok(is(ES.ToNumber(false), 0), 'false coerces to +0');
+ t.equal(1, ES.ToNumber(true), 'true coerces to 1');
+ t.ok(is(NaN, ES.ToNumber(NaN)), 'NaN returns itself');
+ forEach([0, -0, 42, Infinity, -Infinity], function (num) {
+ t.equal(num, ES.ToNumber(num), num + ' returns itself');
+ });
+ forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) {
+ t.ok(is(+numString, ES.ToNumber(numString)), '"' + numString + '" coerces to ' + Number(numString));
+ });
+ forEach(v.objects, function (object) {
+ t.ok(is(ES.ToNumber(object), ES.ToNumber(ES.ToPrimitive(object))), 'object ' + object + ' coerces to same as ToPrimitive of object does');
+ });
+ t['throws'](function () { return ES.ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.end();
+});
+
+test('ToInteger', function (t) {
+ t.ok(is(0, ES.ToInteger(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity, 42], function (num) {
+ t.ok(is(num, ES.ToInteger(num)), num + ' returns itself');
+ t.ok(is(-num, ES.ToInteger(-num)), '-' + num + ' returns itself');
+ });
+ t.equal(3, ES.ToInteger(Math.PI), 'pi returns 3');
+ t['throws'](function () { return ES.ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.end();
+});
+
+test('ToInt32', function (t) {
+ t.ok(is(0, ES.ToInt32(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToInt32(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToInt32(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToInt32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToInt32(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToInt32(0x100000000 - 1), -1), '2^32 - 1 returns -1');
+ t.ok(is(ES.ToInt32(0x80000000), -0x80000000), '2^31 returns -2^31');
+ t.ok(is(ES.ToInt32(0x80000000 - 1), 0x80000000 - 1), '2^31 - 1 returns 2^31 - 1');
+ forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) {
+ t.ok(is(ES.ToInt32(num), ES.ToInt32(ES.ToUint32(num))), 'ToInt32(x) === ToInt32(ToUint32(x)) for 0x' + num.toString(16));
+ t.ok(is(ES.ToInt32(-num), ES.ToInt32(ES.ToUint32(-num))), 'ToInt32(x) === ToInt32(ToUint32(x)) for -0x' + num.toString(16));
+ });
+ t.end();
+});
+
+test('ToUint32', function (t) {
+ t.ok(is(0, ES.ToUint32(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToUint32(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToUint32(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToUint32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToUint32(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToUint32(0x100000000 - 1), 0x100000000 - 1), '2^32 - 1 returns 2^32 - 1');
+ t.ok(is(ES.ToUint32(0x80000000), 0x80000000), '2^31 returns 2^31');
+ t.ok(is(ES.ToUint32(0x80000000 - 1), 0x80000000 - 1), '2^31 - 1 returns 2^31 - 1');
+ forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) {
+ t.ok(is(ES.ToUint32(num), ES.ToUint32(ES.ToInt32(num))), 'ToUint32(x) === ToUint32(ToInt32(x)) for 0x' + num.toString(16));
+ t.ok(is(ES.ToUint32(-num), ES.ToUint32(ES.ToInt32(-num))), 'ToUint32(x) === ToUint32(ToInt32(x)) for -0x' + num.toString(16));
+ });
+ t.end();
+});
+
+test('ToUint16', function (t) {
+ t.ok(is(0, ES.ToUint16(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToUint16(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToUint16(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToUint16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToUint16(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToUint16(0x100000000 - 1), 0x10000 - 1), '2^32 - 1 returns 2^16 - 1');
+ t.ok(is(ES.ToUint16(0x80000000), 0), '2^31 returns +0');
+ t.ok(is(ES.ToUint16(0x80000000 - 1), 0x10000 - 1), '2^31 - 1 returns 2^16 - 1');
+ t.ok(is(ES.ToUint16(0x10000), 0), '2^16 returns +0');
+ t.ok(is(ES.ToUint16(0x10000 - 1), 0x10000 - 1), '2^16 - 1 returns 2^16 - 1');
+ t.end();
+});
+
+test('ToString', function (t) {
+ t['throws'](function () { return ES.ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.end();
+});
+
+test('ToObject', function (t) {
+ t['throws'](function () { return ES.ToObject(undefined); }, TypeError, 'undefined throws');
+ t['throws'](function () { return ES.ToObject(null); }, TypeError, 'null throws');
+ forEach(v.numbers, function (number) {
+ var obj = ES.ToObject(number);
+ t.equal(typeof obj, 'object', 'number ' + number + ' coerces to object');
+ t.equal(true, obj instanceof Number, 'object of ' + number + ' is Number object');
+ t.ok(is(obj.valueOf(), number), 'object of ' + number + ' coerces to ' + number);
+ });
+ t.end();
+});
+
+test('CheckObjectCoercible', function (t) {
+ t['throws'](function () { return ES.CheckObjectCoercible(undefined); }, TypeError, 'undefined throws');
+ t['throws'](function () { return ES.CheckObjectCoercible(null); }, TypeError, 'null throws');
+ var checkCoercible = function (value) {
+ t.doesNotThrow(function () { return ES.CheckObjectCoercible(value); }, debug(value) + ' does not throw');
+ };
+ forEach(v.objects.concat(v.nonNullPrimitives), checkCoercible);
+ t.end();
+});
+
+test('IsCallable', function (t) {
+ t.equal(true, ES.IsCallable(function () {}), 'function is callable');
+ var nonCallables = [/a/g, {}, Object.prototype, NaN].concat(v.primitives);
+ forEach(nonCallables, function (nonCallable) {
+ t.equal(false, ES.IsCallable(nonCallable), debug(nonCallable) + ' is not callable');
+ });
+ t.end();
+});
+
+test('SameValue', function (t) {
+ t.equal(true, ES.SameValue(NaN, NaN), 'NaN is SameValue as NaN');
+ t.equal(false, ES.SameValue(0, -0), '+0 is not SameValue as -0');
+ forEach(v.objects.concat(v.primitives), function (val) {
+ t.equal(val === val, ES.SameValue(val, val), debug(val) + ' is SameValue to itself');
+ });
+ t.end();
+});
+
+test('Type', function (t) {
+ t.equal(ES.Type(), 'Undefined', 'Type() is Undefined');
+ t.equal(ES.Type(undefined), 'Undefined', 'Type(undefined) is Undefined');
+ t.equal(ES.Type(null), 'Null', 'Type(null) is Null');
+ t.equal(ES.Type(true), 'Boolean', 'Type(true) is Boolean');
+ t.equal(ES.Type(false), 'Boolean', 'Type(false) is Boolean');
+ t.equal(ES.Type(0), 'Number', 'Type(0) is Number');
+ t.equal(ES.Type(NaN), 'Number', 'Type(NaN) is Number');
+ t.equal(ES.Type('abc'), 'String', 'Type("abc") is String');
+ t.equal(ES.Type(function () {}), 'Object', 'Type(function () {}) is Object');
+ t.equal(ES.Type({}), 'Object', 'Type({}) is Object');
+ t.end();
+});
+
+test('IsPropertyDescriptor', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t.equal(ES.IsPropertyDescriptor(primitive), false, debug(primitive) + ' is not a Property Descriptor');
+ });
+
+ t.equal(ES.IsPropertyDescriptor({ invalid: true }), false, 'invalid keys not allowed on a Property Descriptor');
+
+ t.equal(ES.IsPropertyDescriptor({}), true, 'empty object is an incomplete Property Descriptor');
+
+ t.equal(ES.IsPropertyDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is a Property Descriptor');
+ t.equal(ES.IsPropertyDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is a Property Descriptor');
+ t.equal(ES.IsPropertyDescriptor(v.dataDescriptor()), true, 'data descriptor is a Property Descriptor');
+ t.equal(ES.IsPropertyDescriptor(v.genericDescriptor()), true, 'generic descriptor is a Property Descriptor');
+
+ t['throws'](
+ function () { ES.IsPropertyDescriptor(v.bothDescriptor()); },
+ TypeError,
+ 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
+ );
+
+ t['throws'](
+ function () { ES.IsPropertyDescriptor(v.bothDescriptorWritable()); },
+ TypeError,
+ 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
+ );
+
+ t.end();
+});
+
+test('IsAccessorDescriptor', function (t) {
+ forEach(v.nonNullPrimitives.concat(null), function (primitive) {
+ t['throws'](function () { ES.IsAccessorDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor');
+ });
+
+ t.equal(ES.IsAccessorDescriptor(), false, 'no value is not an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(undefined), false, 'undefined value is not an Accessor Descriptor');
+
+ t.equal(ES.IsAccessorDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(v.dataDescriptor()), false, 'data descriptor is not an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(v.genericDescriptor()), false, 'generic descriptor is not an Accessor Descriptor');
+
+ t.end();
+});
+
+test('IsDataDescriptor', function (t) {
+ forEach(v.nonNullPrimitives.concat(null), function (primitive) {
+ t['throws'](function () { ES.IsDataDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor');
+ });
+
+ t.equal(ES.IsDataDescriptor(), false, 'no value is not a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(undefined), false, 'undefined value is not a Data Descriptor');
+
+ t.equal(ES.IsDataDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(v.dataDescriptor()), true, 'data descriptor is a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(v.genericDescriptor()), false, 'generic descriptor is not a Data Descriptor');
+
+ t.end();
+});
+
+test('IsGenericDescriptor', function (t) {
+ forEach(v.nonNullPrimitives.concat(null), function (primitive) {
+ t['throws'](
+ function () { ES.IsGenericDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t.equal(ES.IsGenericDescriptor(), false, 'no value is not a Data Descriptor');
+ t.equal(ES.IsGenericDescriptor(undefined), false, 'undefined value is not a Data Descriptor');
+
+ t.equal(ES.IsGenericDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a generic Descriptor');
+ t.equal(ES.IsGenericDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a generic Descriptor');
+ t.equal(ES.IsGenericDescriptor(v.dataDescriptor()), false, 'data descriptor is not a generic Descriptor');
+
+ t.equal(ES.IsGenericDescriptor(v.genericDescriptor()), true, 'generic descriptor is a generic Descriptor');
+
+ t.end();
+});
+
+test('FromPropertyDescriptor', function (t) {
+ t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined');
+ t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined');
+
+ forEach(v.nonNullPrimitives.concat(null), function (primitive) {
+ t['throws'](
+ function () { ES.FromPropertyDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ var accessor = v.accessorDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(accessor), {
+ get: accessor['[[Get]]'],
+ set: accessor['[[Set]]'],
+ enumerable: !!accessor['[[Enumerable]]'],
+ configurable: !!accessor['[[Configurable]]']
+ });
+
+ var mutator = v.mutatorDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(mutator), {
+ get: mutator['[[Get]]'],
+ set: mutator['[[Set]]'],
+ enumerable: !!mutator['[[Enumerable]]'],
+ configurable: !!mutator['[[Configurable]]']
+ });
+ var data = v.dataDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(data), {
+ value: data['[[Value]]'],
+ writable: data['[[Writable]]'],
+ enumerable: !!data['[[Enumerable]]'],
+ configurable: !!data['[[Configurable]]']
+ });
+
+ t['throws'](
+ function () { ES.FromPropertyDescriptor(v.genericDescriptor()); },
+ TypeError,
+ 'a complete Property Descriptor is required'
+ );
+
+ t.end();
+});
+
+test('ToPropertyDescriptor', function (t) {
+ forEach(v.nonNullPrimitives.concat(null), function (primitive) {
+ t['throws'](
+ function () { ES.ToPropertyDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ var accessor = v.accessorDescriptor();
+ t.deepEqual(ES.ToPropertyDescriptor({
+ get: accessor['[[Get]]'],
+ enumerable: !!accessor['[[Enumerable]]'],
+ configurable: !!accessor['[[Configurable]]']
+ }), accessor);
+
+ var mutator = v.mutatorDescriptor();
+ t.deepEqual(ES.ToPropertyDescriptor({
+ set: mutator['[[Set]]'],
+ enumerable: !!mutator['[[Enumerable]]'],
+ configurable: !!mutator['[[Configurable]]']
+ }), mutator);
+
+ var data = v.descriptors.nonConfigurable(v.dataDescriptor());
+ t.deepEqual(ES.ToPropertyDescriptor({
+ value: data['[[Value]]'],
+ writable: data['[[Writable]]'],
+ configurable: !!data['[[Configurable]]']
+ }), data);
+
+ var both = v.bothDescriptor();
+ t['throws'](
+ function () {
+ ES.ToPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] });
+ },
+ TypeError,
+ 'data and accessor descriptors are mutually exclusive'
+ );
+
+ t['throws'](
+ function () { ES.ToPropertyDescriptor({ get: 'not callable' }); },
+ TypeError,
+ '"get" must be undefined or callable'
+ );
+
+ t['throws'](
+ function () { ES.ToPropertyDescriptor({ set: 'not callable' }); },
+ TypeError,
+ '"set" must be undefined or callable'
+ );
+
+ t.end();
+});
+
+test('Abstract Equality Comparison', function (t) {
+ t.test('same types use ===', function (st) {
+ forEach(v.primitives.concat(v.objects), function (value) {
+ st.equal(ES['Abstract Equality Comparison'](value, value), value === value, debug(value) + ' is abstractly equal to itself');
+ });
+ st.end();
+ });
+
+ t.test('different types coerce', function (st) {
+ var pairs = [
+ [null, undefined],
+ [3, '3'],
+ [true, '3'],
+ [true, 3],
+ [false, 0],
+ [false, '0'],
+ [3, [3]],
+ ['3', [3]],
+ [true, [1]],
+ [false, [0]],
+ [String(v.coercibleObject), v.coercibleObject],
+ [Number(String(v.coercibleObject)), v.coercibleObject],
+ [Number(v.coercibleObject), v.coercibleObject],
+ [String(Number(v.coercibleObject)), v.coercibleObject]
+ ];
+ forEach(pairs, function (pair) {
+ var a = pair[0];
+ var b = pair[1];
+ // eslint-disable-next-line eqeqeq
+ st.equal(ES['Abstract Equality Comparison'](a, b), a == b, debug(a) + ' == ' + debug(b));
+ // eslint-disable-next-line eqeqeq
+ st.equal(ES['Abstract Equality Comparison'](b, a), b == a, debug(b) + ' == ' + debug(a));
+ });
+ st.end();
+ });
+
+ t.end();
+});
+
+test('Strict Equality Comparison', function (t) {
+ t.test('same types use ===', function (st) {
+ forEach(v.primitives.concat(v.objects), function (value) {
+ st.equal(ES['Strict Equality Comparison'](value, value), value === value, debug(value) + ' is strictly equal to itself');
+ });
+ st.end();
+ });
+
+ t.test('different types are not ===', function (st) {
+ var pairs = [
+ [null, undefined],
+ [3, '3'],
+ [true, '3'],
+ [true, 3],
+ [false, 0],
+ [false, '0'],
+ [3, [3]],
+ ['3', [3]],
+ [true, [1]],
+ [false, [0]],
+ [String(v.coercibleObject), v.coercibleObject],
+ [Number(String(v.coercibleObject)), v.coercibleObject],
+ [Number(v.coercibleObject), v.coercibleObject],
+ [String(Number(v.coercibleObject)), v.coercibleObject]
+ ];
+ forEach(pairs, function (pair) {
+ var a = pair[0];
+ var b = pair[1];
+ st.equal(ES['Strict Equality Comparison'](a, b), a === b, debug(a) + ' === ' + debug(b));
+ st.equal(ES['Strict Equality Comparison'](b, a), b === a, debug(b) + ' === ' + debug(a));
+ });
+ st.end();
+ });
+
+ t.end();
+});
+
+test('Abstract Relational Comparison', function (t) {
+ t.test('at least one operand is NaN', function (st) {
+ st.equal(ES['Abstract Relational Comparison'](NaN, {}, true), undefined, 'LeftFirst: first is NaN, returns undefined');
+ st.equal(ES['Abstract Relational Comparison']({}, NaN, true), undefined, 'LeftFirst: second is NaN, returns undefined');
+ st.equal(ES['Abstract Relational Comparison'](NaN, {}, false), undefined, '!LeftFirst: first is NaN, returns undefined');
+ st.equal(ES['Abstract Relational Comparison']({}, NaN, false), undefined, '!LeftFirst: second is NaN, returns undefined');
+ st.end();
+ });
+
+ t.equal(ES['Abstract Relational Comparison'](3, 4, true), true, 'LeftFirst: 3 is less than 4');
+ t.equal(ES['Abstract Relational Comparison'](4, 3, true), false, 'LeftFirst: 3 is not less than 4');
+ t.equal(ES['Abstract Relational Comparison'](3, 4, false), true, '!LeftFirst: 3 is less than 4');
+ t.equal(ES['Abstract Relational Comparison'](4, 3, false), false, '!LeftFirst: 3 is not less than 4');
+
+ t.equal(ES['Abstract Relational Comparison']('3', '4', true), true, 'LeftFirst: "3" is less than "4"');
+ t.equal(ES['Abstract Relational Comparison']('4', '3', true), false, 'LeftFirst: "3" is not less than "4"');
+ t.equal(ES['Abstract Relational Comparison']('3', '4', false), true, '!LeftFirst: "3" is less than "4"');
+ t.equal(ES['Abstract Relational Comparison']('4', '3', false), false, '!LeftFirst: "3" is not less than "4"');
+
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, true), true, 'LeftFirst: coercible object is less than 42');
+ t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, true), false, 'LeftFirst: 42 is not less than coercible object');
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, false), true, '!LeftFirst: coercible object is less than 42');
+ t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, false), false, '!LeftFirst: 42 is not less than coercible object');
+
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', true), false, 'LeftFirst: coercible object is not less than "3"');
+ t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, true), false, 'LeftFirst: "3" is not less than coercible object');
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', false), false, '!LeftFirst: coercible object is not less than "3"');
+ t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, false), false, '!LeftFirst: "3" is not less than coercible object');
+
+ t.end();
+});
+
+test('FromPropertyDescriptor', function (t) {
+ t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined');
+ t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined');
+
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.FromPropertyDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ var accessor = v.accessorDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(accessor), {
+ get: accessor['[[Get]]'],
+ set: accessor['[[Set]]'],
+ enumerable: !!accessor['[[Enumerable]]'],
+ configurable: !!accessor['[[Configurable]]']
+ });
+
+ var mutator = v.mutatorDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(mutator), {
+ get: mutator['[[Get]]'],
+ set: mutator['[[Set]]'],
+ enumerable: !!mutator['[[Enumerable]]'],
+ configurable: !!mutator['[[Configurable]]']
+ });
+ var data = v.dataDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(data), {
+ value: data['[[Value]]'],
+ writable: data['[[Writable]]'],
+ enumerable: !!data['[[Enumerable]]'],
+ configurable: !!data['[[Configurable]]']
+ });
+
+ t['throws'](
+ function () { ES.FromPropertyDescriptor(v.genericDescriptor()); },
+ TypeError,
+ 'a complete Property Descriptor is required'
+ );
+
+ t.end();
+});
+
+test('SecFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.SecFromTime(now.getTime()), now.getUTCSeconds(), 'second from Date timestamp matches getUTCSeconds');
+ t.end();
+});
+
+test('MinFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.MinFromTime(now.getTime()), now.getUTCMinutes(), 'minute from Date timestamp matches getUTCMinutes');
+ t.end();
+});
+
+test('HourFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.HourFromTime(now.getTime()), now.getUTCHours(), 'hour from Date timestamp matches getUTCHours');
+ t.end();
+});
+
+test('msFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.msFromTime(now.getTime()), now.getUTCMilliseconds(), 'ms from Date timestamp matches getUTCMilliseconds');
+ t.end();
+});
+
+var msPerSecond = 1e3;
+var msPerMinute = 60 * msPerSecond;
+var msPerHour = 60 * msPerMinute;
+var msPerDay = 24 * msPerHour;
+
+test('Day', function (t) {
+ var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5);
+ var add = 2.5;
+ var later = new Date(time + (add * msPerDay));
+
+ t.equal(ES.Day(later.getTime()), ES.Day(time) + Math.floor(add), 'adding 2.5 days worth of ms, gives a Day delta of 2');
+ t.end();
+});
+
+test('TimeWithinDay', function (t) {
+ var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5);
+ var add = 2.5;
+ var later = new Date(time + (add * msPerDay));
+
+ t.equal(ES.TimeWithinDay(later.getTime()), ES.TimeWithinDay(time) + (0.5 * msPerDay), 'adding 2.5 days worth of ms, gives a TimeWithinDay delta of +0.5');
+ t.end();
+});
+
+test('DayFromYear', function (t) {
+ t.equal(ES.DayFromYear(2021) - ES.DayFromYear(2020), 366, '2021 is a leap year, has 366 days');
+ t.equal(ES.DayFromYear(2020) - ES.DayFromYear(2019), 365, '2020 is not a leap year, has 365 days');
+ t.equal(ES.DayFromYear(2019) - ES.DayFromYear(2018), 365, '2019 is not a leap year, has 365 days');
+ t.equal(ES.DayFromYear(2018) - ES.DayFromYear(2017), 365, '2018 is not a leap year, has 365 days');
+ t.equal(ES.DayFromYear(2017) - ES.DayFromYear(2016), 366, '2017 is a leap year, has 366 days');
+
+ t.end();
+});
+
+test('TimeFromYear', function (t) {
+ for (var i = 1900; i < 2100; i += 1) {
+ t.equal(ES.TimeFromYear(i), Date.UTC(i, 0, 1), 'TimeFromYear matches a Date object’s year: ' + i);
+ }
+ t.end();
+});
+
+test('YearFromTime', function (t) {
+ for (var i = 1900; i < 2100; i += 1) {
+ t.equal(ES.YearFromTime(Date.UTC(i, 0, 1)), i, 'YearFromTime matches a Date object’s year on 1/1: ' + i);
+ t.equal(ES.YearFromTime(Date.UTC(i, 10, 1)), i, 'YearFromTime matches a Date object’s year on 10/1: ' + i);
+ }
+ t.end();
+});
+
+test('WeekDay', function (t) {
+ var now = new Date();
+ var today = now.getUTCDay();
+ for (var i = 0; i < 7; i += 1) {
+ var weekDay = ES.WeekDay(now.getTime() + (i * msPerDay));
+ t.equal(weekDay, (today + i) % 7, i + ' days after today (' + today + '), WeekDay is ' + weekDay);
+ }
+ t.end();
+});
+
+test('DaysInYear', function (t) {
+ t.equal(ES.DaysInYear(2021), 365, '2021 is not a leap year');
+ t.equal(ES.DaysInYear(2020), 366, '2020 is a leap year');
+ t.equal(ES.DaysInYear(2019), 365, '2019 is not a leap year');
+ t.equal(ES.DaysInYear(2018), 365, '2018 is not a leap year');
+ t.equal(ES.DaysInYear(2017), 365, '2017 is not a leap year');
+ t.equal(ES.DaysInYear(2016), 366, '2016 is a leap year');
+
+ t.end();
+});
+
+test('InLeapYear', function (t) {
+ t.equal(ES.InLeapYear(Date.UTC(2021, 0, 1)), 0, '2021 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2020, 0, 1)), 1, '2020 is a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2019, 0, 1)), 0, '2019 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2018, 0, 1)), 0, '2018 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2017, 0, 1)), 0, '2017 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2016, 0, 1)), 1, '2016 is a leap year');
+
+ t.end();
+});
+
+test('DayWithinYear', function (t) {
+ t.equal(ES.DayWithinYear(Date.UTC(2019, 0, 1)), 0, '1/1 is the 1st day');
+ t.equal(ES.DayWithinYear(Date.UTC(2019, 11, 31)), 364, '12/31 is the 365th day in a non leap year');
+ t.equal(ES.DayWithinYear(Date.UTC(2016, 11, 31)), 365, '12/31 is the 366th day in a leap year');
+
+ t.end();
+});
+
+test('MonthFromTime', function (t) {
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 1)), 0, 'non-leap: 1/1 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 31)), 0, 'non-leap: 1/31 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 1)), 1, 'non-leap: 2/1 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 28)), 1, 'non-leap: 2/28 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 29)), 2, 'non-leap: 2/29 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 1)), 2, 'non-leap: 3/1 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 31)), 2, 'non-leap: 3/31 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 1)), 3, 'non-leap: 4/1 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 30)), 3, 'non-leap: 4/30 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 1)), 4, 'non-leap: 5/1 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 31)), 4, 'non-leap: 5/31 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 1)), 5, 'non-leap: 6/1 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 30)), 5, 'non-leap: 6/30 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 1)), 6, 'non-leap: 7/1 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 31)), 6, 'non-leap: 7/31 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 1)), 7, 'non-leap: 8/1 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 30)), 7, 'non-leap: 8/30 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 1)), 8, 'non-leap: 9/1 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 30)), 8, 'non-leap: 9/30 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 1)), 9, 'non-leap: 10/1 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 31)), 9, 'non-leap: 10/31 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 1)), 10, 'non-leap: 11/1 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 30)), 10, 'non-leap: 11/30 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 1)), 11, 'non-leap: 12/1 gives December');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 31)), 11, 'non-leap: 12/31 gives December');
+
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 1)), 0, 'leap: 1/1 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 31)), 0, 'leap: 1/31 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 1)), 1, 'leap: 2/1 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 28)), 1, 'leap: 2/28 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 29)), 1, 'leap: 2/29 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 1)), 2, 'leap: 3/1 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 31)), 2, 'leap: 3/31 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 1)), 3, 'leap: 4/1 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 30)), 3, 'leap: 4/30 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 1)), 4, 'leap: 5/1 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 31)), 4, 'leap: 5/31 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 1)), 5, 'leap: 6/1 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 30)), 5, 'leap: 6/30 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 1)), 6, 'leap: 7/1 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 31)), 6, 'leap: 7/31 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 1)), 7, 'leap: 8/1 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 30)), 7, 'leap: 8/30 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 1)), 8, 'leap: 9/1 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 30)), 8, 'leap: 9/30 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 1)), 9, 'leap: 10/1 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 31)), 9, 'leap: 10/31 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 1)), 10, 'leap: 11/1 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 30)), 10, 'leap: 11/30 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 1)), 11, 'leap: 12/1 gives December');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 31)), 11, 'leap: 12/31 gives December');
+ t.end();
+});
+
+test('DateFromTime', function (t) {
+ var i;
+ for (i = 1; i <= 28; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2019, 1, i)), i, '2019.02.' + i + ' is date ' + i);
+ }
+ for (i = 1; i <= 29; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2016, 1, i)), i, '2016.02.' + i + ' is date ' + i);
+ }
+ for (i = 1; i <= 30; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2019, 8, i)), i, '2019.09.' + i + ' is date ' + i);
+ }
+ for (i = 1; i <= 31; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2019, 9, i)), i, '2019.10.' + i + ' is date ' + i);
+ }
+ t.end();
+});
+
+test('MakeDay', function (t) {
+ var day2015 = 16687;
+ t.equal(ES.MakeDay(2015, 8, 9), day2015, '2015.09.09 is day 16687');
+ var day2016 = day2015 + 366; // 2016 is a leap year
+ t.equal(ES.MakeDay(2016, 8, 9), day2016, '2015.09.09 is day 17053');
+ var day2017 = day2016 + 365;
+ t.equal(ES.MakeDay(2017, 8, 9), day2017, '2017.09.09 is day 17418');
+ var day2018 = day2017 + 365;
+ t.equal(ES.MakeDay(2018, 8, 9), day2018, '2018.09.09 is day 17783');
+ var day2019 = day2018 + 365;
+ t.equal(ES.MakeDay(2019, 8, 9), day2019, '2019.09.09 is day 18148');
+ t.end();
+});
+
+test('MakeDate', function (t) {
+ forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
+ t.ok(is(ES.MakeDate(nonFiniteNumber, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `day`');
+ t.ok(is(ES.MakeDate(0, nonFiniteNumber), NaN), debug(nonFiniteNumber) + ' is not a finite `time`');
+ });
+ t.equal(ES.MakeDate(0, 0), 0, 'zero day and zero time is zero date');
+ t.equal(ES.MakeDate(0, 123), 123, 'zero day and nonzero time is a date of the "time"');
+ t.equal(ES.MakeDate(1, 0), msPerDay, 'day of 1 and zero time is a date of "ms per day"');
+ t.equal(ES.MakeDate(3, 0), 3 * msPerDay, 'day of 3 and zero time is a date of thrice "ms per day"');
+ t.equal(ES.MakeDate(1, 123), msPerDay + 123, 'day of 1 and nonzero time is a date of "ms per day" plus the "time"');
+ t.equal(ES.MakeDate(3, 123), (3 * msPerDay) + 123, 'day of 3 and nonzero time is a date of thrice "ms per day" plus the "time"');
+
+ t.end();
+});
+
+test('MakeTime', function (t) {
+ forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
+ t.ok(is(ES.MakeTime(nonFiniteNumber, 0, 0, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `hour`');
+ t.ok(is(ES.MakeTime(0, nonFiniteNumber, 0, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `min`');
+ t.ok(is(ES.MakeTime(0, 0, nonFiniteNumber, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `sec`');
+ t.ok(is(ES.MakeTime(0, 0, 0, nonFiniteNumber), NaN), debug(nonFiniteNumber) + ' is not a finite `ms`');
+ });
+
+ t.equal(
+ ES.MakeTime(1.2, 2.3, 3.4, 4.5),
+ (1 * msPerHour) + (2 * msPerMinute) + (3 * msPerSecond) + 4,
+ 'all numbers are converted to integer, multiplied by the right number of ms, and summed'
+ );
+ t.end();
+});
+
+test('TimeClip', function (t) {
+ forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
+ t.ok(is(ES.TimeClip(nonFiniteNumber), NaN), debug(nonFiniteNumber) + ' is not a finite `time`');
+ });
+ t.ok(is(ES.TimeClip(8.64e15 + 1), NaN), '8.64e15 is the largest magnitude considered "finite"');
+ t.ok(is(ES.TimeClip(-8.64e15 - 1), NaN), '-8.64e15 is the largest magnitude considered "finite"');
+
+ forEach(v.zeroes.concat([-10, 10, +new Date()]), function (time) {
+ t.looseEqual(ES.TimeClip(time), time, debug(time) + ' is a time of ' + debug(time));
+ });
+
+ t.end();
+});
+
+test('modulo', function (t) {
+ t.equal(3 % 2, 1, '+3 % 2 is +1');
+ t.equal(ES.modulo(3, 2), 1, '+3 mod 2 is +1');
+
+ t.equal(-3 % 2, -1, '-3 % 2 is -1');
+ t.equal(ES.modulo(-3, 2), 1, '-3 mod 2 is +1');
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es6.js b/node_modules/object.values/node_modules/es-abstract/test/es6.js
new file mode 100644
index 0000000..e7c9d98
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es6.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var test = require('tape');
+
+var ES = require('../');
+var ES6 = ES.ES6;
+var ES2015 = ES.ES2015;
+var ES6entry = require('../es6');
+
+test('legacy es6 export', function (t) {
+ t.equal(ES6, ES2015, 'main ES6 === main ES2015');
+ t.end();
+});
+
+test('legacy es6 entry point', function (t) {
+ t.equal(ES6, ES6entry, 'main ES6 === ES6 entry point');
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-abstract/test/es7.js b/node_modules/object.values/node_modules/es-abstract/test/es7.js
new file mode 100644
index 0000000..ee57e15
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/es7.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var test = require('tape');
+
+var ES = require('../');
+var ES7 = ES.ES7;
+var ES2016 = ES.ES2016;
+var ES7entry = require('../es7');
+
+test('legacy es7 export', function (t) {
+ t.equal(ES7, ES2016, 'main ES7 === main ES2016');
+ t.end();
+});
+
+test('legacy es7 entry point', function (t) {
+ t.equal(ES7, ES7entry, 'main ES7 === ES7 entry point');
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js b/node_modules/object.values/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js
new file mode 100644
index 0000000..9c2b4fc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var test = require('tape');
+var hasSymbols = require('has-symbols')();
+
+var OwnPropertyKeys = require('../../helpers/OwnPropertyKeys');
+var defineProperty = require('./defineProperty');
+
+test('OwnPropertyKeys', function (t) {
+ t.deepEqual(OwnPropertyKeys({ a: 1, b: 2 }).sort(), ['a', 'b'].sort(), 'returns own string keys');
+
+ t.test('Symbols', { skip: !hasSymbols }, function (st) {
+ var o = { a: 1 };
+ var sym = Symbol();
+ o[sym] = 2;
+
+ st.deepEqual(OwnPropertyKeys(o), ['a', sym], 'returns own string and symbol keys');
+
+ st.end();
+ });
+
+ t.test('non-enumerables', { skip: !defineProperty.oDP }, function (st) {
+ var o = { a: 1, b: 42, c: NaN };
+ defineProperty(o, 'b', { enumerable: false, value: 42 });
+ defineProperty(o, 'c', { enumerable: false, get: function () { return NaN; } });
+
+ if (hasSymbols) {
+ defineProperty(o, 'd', { enumerable: false, value: true });
+ defineProperty(o, 'e', { enumerable: false, get: function () { return true; } });
+ }
+
+ st.deepEqual(
+ OwnPropertyKeys(o).sort(),
+ (hasSymbols ? ['a', 'b', 'c', 'd', 'e'] : ['a', 'b', 'c']).sort(),
+ 'returns non-enumerable own keys, including accessors and symbols if available'
+ );
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-abstract/test/helpers/assertRecord.js b/node_modules/object.values/node_modules/es-abstract/test/helpers/assertRecord.js
new file mode 100644
index 0000000..d6a80c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/helpers/assertRecord.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var forEach = require('foreach');
+var debug = require('object-inspect');
+
+var assertRecord = require('../../helpers/assertRecord');
+var v = require('./values');
+
+module.exports = function assertRecordTests(ES, test) {
+ test('Property Descriptor', function (t) {
+ var record = 'Property Descriptor';
+
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { assertRecord(ES.Type, record, 'arg', primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t['throws'](
+ function () { assertRecord(ES.Type, record, 'arg', { invalid: true }); },
+ TypeError,
+ 'invalid keys not allowed on a Property Descriptor'
+ );
+
+ t.doesNotThrow(
+ function () { assertRecord(ES.Type, record, 'arg', {}); },
+ 'empty object is an incomplete Property Descriptor'
+ );
+
+ t.doesNotThrow(
+ function () { assertRecord(ES.Type, record, 'arg', v.accessorDescriptor()); },
+ 'accessor descriptor is a Property Descriptor'
+ );
+
+ t.doesNotThrow(
+ function () { assertRecord(ES.Type, record, 'arg', v.mutatorDescriptor()); },
+ 'mutator descriptor is a Property Descriptor'
+ );
+
+ t.doesNotThrow(
+ function () { assertRecord(ES.Type, record, 'arg', v.dataDescriptor()); },
+ 'data descriptor is a Property Descriptor'
+ );
+
+ t.doesNotThrow(
+ function () { assertRecord(ES.Type, record, 'arg', v.genericDescriptor()); },
+ 'generic descriptor is a Property Descriptor'
+ );
+
+ t['throws'](
+ function () { assertRecord(ES.Type, record, 'arg', v.bothDescriptor()); },
+ TypeError,
+ 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
+ );
+
+ t.end();
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/test/helpers/defineProperty.js b/node_modules/object.values/node_modules/es-abstract/test/helpers/defineProperty.js
new file mode 100644
index 0000000..8f925be
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/helpers/defineProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var oDP = Object.defineProperty;
+try {
+ oDP({}, 'a', { value: 1 });
+} catch (e) {
+ // IE 8
+ oDP = null;
+}
+
+module.exports = function defineProperty(O, P, Desc) {
+ if (oDP) {
+ return oDP(O, P, Desc);
+ }
+ if ((Desc.enumerable && Desc.configurable && Desc.writable) || !(P in O)) {
+ O[P] = Desc.value; // eslint-disable-line no-param-reassign
+ return O;
+ }
+
+ throw new SyntaxError('helper does not yet support this configuration');
+};
+module.exports.oDP = oDP;
diff --git a/node_modules/object.values/node_modules/es-abstract/test/helpers/getSymbolDescription.js b/node_modules/object.values/node_modules/es-abstract/test/helpers/getSymbolDescription.js
new file mode 100644
index 0000000..b05279d
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/helpers/getSymbolDescription.js
@@ -0,0 +1,55 @@
+'use strict';
+
+var test = require('tape');
+var debug = require('object-inspect');
+var forEach = require('foreach');
+
+var v = require('./values');
+var getSymbolDescription = require('../../helpers/getSymbolDescription');
+var getInferredName = require('../../helpers/getInferredName');
+
+test('getSymbolDescription', function (t) {
+ t.test('no symbols', { skip: v.hasSymbols }, function (st) {
+ st['throws'](
+ getSymbolDescription,
+ SyntaxError,
+ 'requires Symbol support'
+ );
+
+ st.end();
+ });
+
+ forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) {
+ t['throws'](
+ function () { getSymbolDescription(nonSymbol); },
+ v.hasSymbols ? TypeError : SyntaxError,
+ debug(nonSymbol) + ' is not a Symbol'
+ );
+ });
+
+ t.test('with symbols', { skip: !v.hasSymbols }, function (st) {
+ forEach(
+ [
+ [Symbol(), undefined],
+ [Symbol(undefined), undefined],
+ [Symbol(null), 'null'],
+ [Symbol.iterator, 'Symbol.iterator'],
+ [Symbol('foo'), 'foo']
+ ],
+ function (pair) {
+ var sym = pair[0];
+ var desc = pair[1];
+ st.equal(getSymbolDescription(sym), desc, debug(sym) + ' yields ' + debug(desc));
+ }
+ );
+
+ st.test('only possible when inference is supported', { skip: !getInferredName }, function (s2t) {
+ s2t.equal(getSymbolDescription(Symbol('')), '', 'Symbol("") description is empty string');
+ s2t.end();
+ });
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-abstract/test/helpers/runManifestTest.js b/node_modules/object.values/node_modules/es-abstract/test/helpers/runManifestTest.js
new file mode 100644
index 0000000..2fdb4f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/helpers/runManifestTest.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var path = require('path');
+var fs = require('fs');
+
+var forEach = require('foreach');
+var keys = require('object-keys');
+
+module.exports = function runManifestTest(test, ES, edition) {
+ test('ES' + edition + ' manifest', { skip: !fs.readdirSync }, function (t) {
+ var files = fs.readdirSync(path.join(__dirname, '../../' + edition), 'utf-8');
+ var map = {
+ AbstractEqualityComparison: 'Abstract Equality Comparison',
+ AbstractRelationalComparison: 'Abstract Relational Comparison',
+ StrictEqualityComparison: 'Strict Equality Comparison'
+ };
+ forEach(files, function (file) {
+ var name = path.basename(file, path.extname(file));
+ var actual = ES[map[name] || name];
+ var expected = require(path.join(__dirname, '../../' + edition + '/', file)); // eslint-disable-line global-require
+ t.equal(actual, expected, 'ES["' + name + '"] === ' + file);
+ });
+ var actualCount = keys(ES).length;
+ t.equal(actualCount, files.length, 'expected ' + files.length + ' files, got ' + actualCount);
+ t.end();
+ });
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/test/helpers/values.js b/node_modules/object.values/node_modules/es-abstract/test/helpers/values.js
new file mode 100644
index 0000000..ccef743
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/helpers/values.js
@@ -0,0 +1,121 @@
+'use strict';
+
+var assign = require('../../helpers/assign');
+
+var hasSymbols = require('has-symbols')();
+
+var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } };
+var coercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return 42; }
+};
+var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } };
+var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } };
+var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } };
+var uncoercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return function toStrFn() {}; }
+};
+var objects = [{}, coercibleObject, coercibleFnObject, toStringOnlyObject, valueOfOnlyObject];
+var nullPrimitives = [undefined, null];
+var nonIntegerNumbers = [-1.3, 0.2, 1.8, 1 / 3];
+var zeroes = [0, -0];
+var infinities = [Infinity, -Infinity];
+var numbers = zeroes.concat([42], infinities, nonIntegerNumbers);
+var strings = ['', 'foo', 'a\uD83D\uDCA9c'];
+var booleans = [true, false];
+var symbols = hasSymbols ? [Symbol.iterator, Symbol('foo')] : [];
+var nonSymbolPrimitives = [].concat(nullPrimitives, booleans, strings, numbers);
+var nonNumberPrimitives = [].concat(nullPrimitives, booleans, strings, symbols);
+var nonNullPrimitives = [].concat(booleans, strings, numbers, symbols);
+var nonUndefinedPrimitives = [].concat(null, nonNullPrimitives);
+var nonStrings = [].concat(nullPrimitives, booleans, numbers, symbols, objects);
+var primitives = [].concat(nullPrimitives, nonNullPrimitives);
+var nonPropertyKeys = [].concat(nullPrimitives, booleans, numbers, objects);
+var propertyKeys = [].concat(strings, symbols);
+var nonBooleans = [].concat(nullPrimitives, strings, symbols, numbers, objects);
+var falsies = [].concat(nullPrimitives, false, '', 0, -0, NaN);
+var truthies = [].concat(true, 'foo', 42, symbols, objects);
+var timestamps = [].concat(0, 946713600000, 1546329600000);
+var nonFunctions = [].concat(primitives, objects, [42]);
+var nonArrays = [].concat(nonFunctions);
+
+var descriptors = {
+ configurable: function (descriptor) {
+ return assign(assign({}, descriptor), { '[[Configurable]]': true });
+ },
+ nonConfigurable: function (descriptor) {
+ return assign(assign({}, descriptor), { '[[Configurable]]': false });
+ },
+ enumerable: function (descriptor) {
+ return assign(assign({}, descriptor), { '[[Enumerable]]': true });
+ },
+ nonEnumerable: function (descriptor) {
+ return assign(assign({}, descriptor), { '[[Enumerable]]': false });
+ },
+ writable: function (descriptor) {
+ return assign(assign({}, descriptor), { '[[Writable]]': true });
+ },
+ nonWritable: function (descriptor) {
+ return assign(assign({}, descriptor), { '[[Writable]]': false });
+ }
+};
+
+module.exports = {
+ coercibleObject: coercibleObject,
+ coercibleFnObject: coercibleFnObject,
+ valueOfOnlyObject: valueOfOnlyObject,
+ toStringOnlyObject: toStringOnlyObject,
+ uncoercibleObject: uncoercibleObject,
+ uncoercibleFnObject: uncoercibleFnObject,
+ objects: objects,
+ nonFunctions: nonFunctions,
+ nonArrays: nonArrays,
+ nullPrimitives: nullPrimitives,
+ numbers: numbers,
+ zeroes: zeroes,
+ infinities: infinities,
+ strings: strings,
+ booleans: booleans,
+ symbols: symbols,
+ hasSymbols: hasSymbols,
+ nonSymbolPrimitives: nonSymbolPrimitives,
+ nonNumberPrimitives: nonNumberPrimitives,
+ nonNullPrimitives: nonNullPrimitives,
+ nonUndefinedPrimitives: nonUndefinedPrimitives,
+ nonStrings: nonStrings,
+ nonNumbers: nonNumberPrimitives.concat(objects),
+ nonIntegerNumbers: nonIntegerNumbers,
+ primitives: primitives,
+ nonPropertyKeys: nonPropertyKeys,
+ propertyKeys: propertyKeys,
+ nonBooleans: nonBooleans,
+ falsies: falsies,
+ truthies: truthies,
+ timestamps: timestamps,
+ bothDescriptor: function () {
+ return { '[[Get]]': function () {}, '[[Value]]': true };
+ },
+ bothDescriptorWritable: function () {
+ return descriptors.writable({ '[[Get]]': function () {} });
+ },
+ accessorDescriptor: function (value) {
+ return descriptors.enumerable(descriptors.configurable({
+ '[[Get]]': function get() { return value; }
+ }));
+ },
+ mutatorDescriptor: function () {
+ return descriptors.enumerable(descriptors.configurable({
+ '[[Set]]': function () {}
+ }));
+ },
+ dataDescriptor: function (value) {
+ return descriptors.nonWritable({
+ '[[Value]]': arguments.length > 0 ? value : 42
+ });
+ },
+ genericDescriptor: function () {
+ return descriptors.configurable(descriptors.nonEnumerable());
+ },
+ descriptors: descriptors
+};
diff --git a/node_modules/object.values/node_modules/es-abstract/test/index.js b/node_modules/object.values/node_modules/es-abstract/test/index.js
new file mode 100644
index 0000000..3f1adba
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/index.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var ES = require('../');
+var test = require('tape');
+var keys = require('object-keys');
+var forEach = require('foreach');
+
+var ESkeys = keys(ES).sort();
+var ES6keys = keys(ES.ES6).sort();
+
+test('exposed properties', function (t) {
+ t.deepEqual(ESkeys, ES6keys.concat(['ES2019', 'ES2018', 'ES2017', 'ES7', 'ES2016', 'ES6', 'ES2015', 'ES5']).sort(), 'main ES object keys match ES6 keys');
+ t.end();
+});
+
+test('methods match', function (t) {
+ forEach(ES6keys, function (key) {
+ t.equal(ES.ES6[key], ES[key], 'method ' + key + ' on main ES object is ES6 method');
+ });
+ t.end();
+});
+
+require('./GetIntrinsic');
+
+require('./helpers/getSymbolDescription');
+require('./helpers/OwnPropertyKeys');
+
+require('./es5');
+require('./es6');
+require('./es2015');
+require('./es7');
+require('./es2016');
+require('./es2017');
+require('./es2018');
+require('./es2019');
diff --git a/node_modules/object.values/node_modules/es-abstract/test/tests.js b/node_modules/object.values/node_modules/es-abstract/test/tests.js
new file mode 100644
index 0000000..6dbd40a
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-abstract/test/tests.js
@@ -0,0 +1,4128 @@
+'use strict';
+
+var test = require('tape');
+
+var forEach = require('foreach');
+var is = require('object-is');
+var debug = require('object-inspect');
+var assign = require('object.assign');
+var keys = require('object-keys');
+var has = require('has');
+var arrowFns = require('make-arrow-function').list();
+var hasStrictMode = require('has-strict-mode')();
+var functionsHaveNames = require('functions-have-names')();
+var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames();
+
+var $getProto = require('../helpers/getProto');
+var $setProto = require('../helpers/setProto');
+var defineProperty = require('./helpers/defineProperty');
+var getInferredName = require('../helpers/getInferredName');
+var getOwnPropertyDescriptor = require('../helpers/getOwnPropertyDescriptor');
+var assertRecordTests = require('./helpers/assertRecord');
+var v = require('./helpers/values');
+var diffOps = require('./diffOps');
+
+var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var getArraySubclassWithSpeciesConstructor = function getArraySubclass(speciesConstructor) {
+ var Bar = function Bar() {
+ var inst = [];
+ Object.setPrototypeOf(inst, Bar.prototype);
+ defineProperty(inst, 'constructor', { value: Bar });
+ return inst;
+ };
+ Bar.prototype = Object.create(Array.prototype);
+ Object.setPrototypeOf(Bar, Array);
+ defineProperty(Bar, Symbol.species, { value: speciesConstructor });
+
+ return Bar;
+};
+
+var testIterator = function (t, iterator, expected) {
+ var resultCount = 0;
+ var result;
+ while (result = iterator.next(), !result.done) { // eslint-disable-line no-sequences
+ t.deepEqual(result, { done: false, value: expected[resultCount] }, 'result ' + resultCount);
+ resultCount += 1;
+ }
+ t.equal(resultCount, expected.length, 'expected ' + expected.length + ', got ' + resultCount);
+};
+
+var hasSpecies = v.hasSymbols && Symbol.species;
+
+var hasLastIndex = 'lastIndex' in (/a/).exec('a'); // IE 8
+var hasGroups = 'groups' in (/a/).exec('a'); // modern engines
+var kludgeMatch = function kludgeMatch(R, matchObject) {
+ if (hasGroups) {
+ assign(matchObject, { groups: matchObject.groups });
+ }
+ if (hasLastIndex) {
+ assign(matchObject, { lastIndex: R.lastIndex });
+ }
+ return matchObject;
+};
+
+var testEnumerableOwnNames = function (t, enumerableOwnNames) {
+ forEach(v.primitives, function (nonObject) {
+ t['throws'](
+ function () { enumerableOwnNames(nonObject); },
+ debug(nonObject) + ' is not an Object'
+ );
+ });
+
+ var Child = function Child() {
+ this.own = {};
+ };
+ Child.prototype = {
+ inherited: {}
+ };
+
+ var obj = new Child();
+
+ t.equal('own' in obj, true, 'has "own"');
+ t.equal(has(obj, 'own'), true, 'has own "own"');
+ t.equal(Object.prototype.propertyIsEnumerable.call(obj, 'own'), true, 'has enumerable "own"');
+
+ t.equal('inherited' in obj, true, 'has "inherited"');
+ t.equal(has(obj, 'inherited'), false, 'has non-own "inherited"');
+ t.equal(has(Child.prototype, 'inherited'), true, 'Child.prototype has own "inherited"');
+ t.equal(Child.prototype.inherited, obj.inherited, 'Child.prototype.inherited === obj.inherited');
+ t.equal(Object.prototype.propertyIsEnumerable.call(Child.prototype, 'inherited'), true, 'has enumerable "inherited"');
+
+ t.equal('toString' in obj, true, 'has "toString"');
+ t.equal(has(obj, 'toString'), false, 'has non-own "toString"');
+ t.equal(has(Object.prototype, 'toString'), true, 'Object.prototype has own "toString"');
+ t.equal(Object.prototype.toString, obj.toString, 'Object.prototype.toString === obj.toString');
+ // eslint-disable-next-line no-useless-call
+ t.equal(Object.prototype.propertyIsEnumerable.call(Object.prototype, 'toString'), false, 'has non-enumerable "toString"');
+
+ return obj;
+};
+
+var es2015 = function ES2015(ES, ops, expectedMissing, skips) {
+ test('has expected operations', function (t) {
+ var diff = diffOps(ES, ops, expectedMissing);
+
+ t.deepEqual(diff.extra, [], 'no extra ops');
+
+ t.deepEqual(diff.missing, [], 'no unexpected missing ops');
+
+ t.end();
+ });
+
+ test('ToPrimitive', function (t) {
+ t.test('primitives', function (st) {
+ var testPrimitive = function (primitive) {
+ st.ok(is(ES.ToPrimitive(primitive), primitive), debug(primitive) + ' is returned correctly');
+ };
+ forEach(v.primitives, testPrimitive);
+ st.end();
+ });
+
+ t.test('objects', function (st) {
+ st.equal(ES.ToPrimitive(v.coercibleObject), 3, 'coercibleObject with no hint coerces to valueOf');
+ st.ok(is(ES.ToPrimitive({}), '[object Object]'), '{} with no hint coerces to Object#toString');
+ st.equal(ES.ToPrimitive(v.coercibleObject, Number), 3, 'coercibleObject with hint Number coerces to valueOf');
+ st.ok(is(ES.ToPrimitive({}, Number), '[object Object]'), '{} with hint Number coerces to NaN');
+ st.equal(ES.ToPrimitive(v.coercibleObject, String), 42, 'coercibleObject with hint String coerces to nonstringified toString');
+ st.equal(ES.ToPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString');
+ st.equal(ES.ToPrimitive(v.toStringOnlyObject), 7, 'toStringOnlyObject returns non-stringified toString');
+ st.equal(ES.ToPrimitive(v.valueOfOnlyObject), 4, 'valueOfOnlyObject returns valueOf');
+ st['throws'](function () { return ES.ToPrimitive(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError');
+ st.end();
+ });
+
+ t.test('dates', function (st) {
+ var invalid = new Date(NaN);
+ st.equal(ES.ToPrimitive(invalid), Date.prototype.toString.call(invalid), 'invalid Date coerces to Date#toString');
+ var now = new Date();
+ st.equal(ES.ToPrimitive(now), Date.prototype.toString.call(now), 'Date coerces to Date#toString');
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('ToBoolean', function (t) {
+ t.equal(false, ES.ToBoolean(undefined), 'undefined coerces to false');
+ t.equal(false, ES.ToBoolean(null), 'null coerces to false');
+ t.equal(false, ES.ToBoolean(false), 'false returns false');
+ t.equal(true, ES.ToBoolean(true), 'true returns true');
+
+ t.test('numbers', function (st) {
+ forEach(v.zeroes.concat(NaN), function (falsyNumber) {
+ st.equal(false, ES.ToBoolean(falsyNumber), 'falsy number ' + falsyNumber + ' coerces to false');
+ });
+ forEach(v.infinities.concat([42, 1]), function (truthyNumber) {
+ st.equal(true, ES.ToBoolean(truthyNumber), 'truthy number ' + truthyNumber + ' coerces to true');
+ });
+
+ st.end();
+ });
+
+ t.equal(false, ES.ToBoolean(''), 'empty string coerces to false');
+ t.equal(true, ES.ToBoolean('foo'), 'nonempty string coerces to true');
+
+ t.test('objects', function (st) {
+ forEach(v.objects, function (obj) {
+ st.equal(true, ES.ToBoolean(obj), 'object coerces to true');
+ });
+ st.equal(true, ES.ToBoolean(v.uncoercibleObject), 'uncoercibleObject coerces to true');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('ToNumber', function (t) {
+ t.ok(is(NaN, ES.ToNumber(undefined)), 'undefined coerces to NaN');
+ t.ok(is(ES.ToNumber(null), 0), 'null coerces to +0');
+ t.ok(is(ES.ToNumber(false), 0), 'false coerces to +0');
+ t.equal(1, ES.ToNumber(true), 'true coerces to 1');
+
+ t.test('numbers', function (st) {
+ st.ok(is(NaN, ES.ToNumber(NaN)), 'NaN returns itself');
+ forEach(v.zeroes.concat(v.infinities, 42), function (num) {
+ st.equal(num, ES.ToNumber(num), num + ' returns itself');
+ });
+ forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) {
+ st.ok(is(+numString, ES.ToNumber(numString)), '"' + numString + '" coerces to ' + Number(numString));
+ });
+ st.end();
+ });
+
+ t.test('objects', function (st) {
+ forEach(v.objects, function (object) {
+ st.ok(is(ES.ToNumber(object), ES.ToNumber(ES.ToPrimitive(object))), 'object ' + object + ' coerces to same as ToPrimitive of object does');
+ });
+ st['throws'](function () { return ES.ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ st.end();
+ });
+
+ t.test('binary literals', function (st) {
+ st.equal(ES.ToNumber('0b10'), 2, '0b10 is 2');
+ st.equal(ES.ToNumber({ toString: function () { return '0b11'; } }), 3, 'Object that toStrings to 0b11 is 3');
+
+ st.equal(true, is(ES.ToNumber('0b12'), NaN), '0b12 is NaN');
+ st.equal(true, is(ES.ToNumber({ toString: function () { return '0b112'; } }), NaN), 'Object that toStrings to 0b112 is NaN');
+ st.end();
+ });
+
+ t.test('octal literals', function (st) {
+ st.equal(ES.ToNumber('0o10'), 8, '0o10 is 8');
+ st.equal(ES.ToNumber({ toString: function () { return '0o11'; } }), 9, 'Object that toStrings to 0o11 is 9');
+
+ st.equal(true, is(ES.ToNumber('0o18'), NaN), '0o18 is NaN');
+ st.equal(true, is(ES.ToNumber({ toString: function () { return '0o118'; } }), NaN), 'Object that toStrings to 0o118 is NaN');
+ st.end();
+ });
+
+ t.test('signed hex numbers', function (st) {
+ st.equal(true, is(ES.ToNumber('-0xF'), NaN), '-0xF is NaN');
+ st.equal(true, is(ES.ToNumber(' -0xF '), NaN), 'space-padded -0xF is NaN');
+ st.equal(true, is(ES.ToNumber('+0xF'), NaN), '+0xF is NaN');
+ st.equal(true, is(ES.ToNumber(' +0xF '), NaN), 'space-padded +0xF is NaN');
+
+ st.end();
+ });
+
+ t.test('trimming of whitespace and non-whitespace characters', function (st) {
+ var whitespace = ' \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000';
+ st.equal(0, ES.ToNumber(whitespace + 0 + whitespace), 'whitespace is trimmed');
+
+ // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace.
+ var nonWhitespaces = {
+ '\\u0085': '\u0085',
+ '\\u200b': '\u200b',
+ '\\ufffe': '\ufffe'
+ };
+
+ forEach(nonWhitespaces, function (desc, nonWS) {
+ st.equal(true, is(ES.ToNumber(nonWS + 0 + nonWS), NaN), 'non-whitespace ' + desc + ' not trimmed');
+ });
+
+ st.end();
+ });
+
+ forEach(v.symbols, function (symbol) {
+ t['throws'](
+ function () { ES.ToNumber(symbol); },
+ TypeError,
+ 'Symbols can’t be converted to a Number: ' + debug(symbol)
+ );
+ });
+
+ t.test('dates', function (st) {
+ var invalid = new Date(NaN);
+ st.ok(is(ES.ToNumber(invalid), NaN), 'invalid Date coerces to NaN');
+ var now = +new Date();
+ st.equal(ES.ToNumber(new Date(now)), now, 'Date coerces to timestamp');
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('ToInteger', function (t) {
+ t.ok(is(0, ES.ToInteger(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity, 42], function (num) {
+ t.ok(is(num, ES.ToInteger(num)), num + ' returns itself');
+ t.ok(is(-num, ES.ToInteger(-num)), '-' + num + ' returns itself');
+ });
+ t.equal(3, ES.ToInteger(Math.PI), 'pi returns 3');
+ t['throws'](function () { return ES.ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.end();
+ });
+
+ test('ToInt32', function (t) {
+ t.ok(is(0, ES.ToInt32(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToInt32(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToInt32(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToInt32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToInt32(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToInt32(0x100000000 - 1), -1), '2^32 - 1 returns -1');
+ t.ok(is(ES.ToInt32(0x80000000), -0x80000000), '2^31 returns -2^31');
+ t.ok(is(ES.ToInt32(0x80000000 - 1), 0x80000000 - 1), '2^31 - 1 returns 2^31 - 1');
+ forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) {
+ t.ok(is(ES.ToInt32(num), ES.ToInt32(ES.ToUint32(num))), 'ToInt32(x) === ToInt32(ToUint32(x)) for 0x' + num.toString(16));
+ t.ok(is(ES.ToInt32(-num), ES.ToInt32(ES.ToUint32(-num))), 'ToInt32(x) === ToInt32(ToUint32(x)) for -0x' + num.toString(16));
+ });
+ t.end();
+ });
+
+ test('ToUint32', function (t) {
+ t.ok(is(0, ES.ToUint32(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToUint32(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToUint32(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToUint32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToUint32(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToUint32(0x100000000 - 1), 0x100000000 - 1), '2^32 - 1 returns 2^32 - 1');
+ t.ok(is(ES.ToUint32(0x80000000), 0x80000000), '2^31 returns 2^31');
+ t.ok(is(ES.ToUint32(0x80000000 - 1), 0x80000000 - 1), '2^31 - 1 returns 2^31 - 1');
+ forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) {
+ t.ok(is(ES.ToUint32(num), ES.ToUint32(ES.ToInt32(num))), 'ToUint32(x) === ToUint32(ToInt32(x)) for 0x' + num.toString(16));
+ t.ok(is(ES.ToUint32(-num), ES.ToUint32(ES.ToInt32(-num))), 'ToUint32(x) === ToUint32(ToInt32(x)) for -0x' + num.toString(16));
+ });
+ t.end();
+ });
+
+ test('ToInt16', function (t) {
+ t.ok(is(0, ES.ToInt16(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToInt16(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToInt16(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToInt16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToInt16(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToInt16(0x100000000 - 1), -1), '2^32 - 1 returns -1');
+ t.ok(is(ES.ToInt16(0x80000000), 0), '2^31 returns +0');
+ t.ok(is(ES.ToInt16(0x80000000 - 1), -1), '2^31 - 1 returns -1');
+ t.ok(is(ES.ToInt16(0x10000), 0), '2^16 returns +0');
+ t.ok(is(ES.ToInt16(0x10000 - 1), -1), '2^16 - 1 returns -1');
+ t.end();
+ });
+
+ test('ToUint16', function (t) {
+ t.ok(is(0, ES.ToUint16(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToUint16(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToUint16(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToUint16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToUint16(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToUint16(0x100000000 - 1), 0x10000 - 1), '2^32 - 1 returns 2^16 - 1');
+ t.ok(is(ES.ToUint16(0x80000000), 0), '2^31 returns +0');
+ t.ok(is(ES.ToUint16(0x80000000 - 1), 0x10000 - 1), '2^31 - 1 returns 2^16 - 1');
+ t.ok(is(ES.ToUint16(0x10000), 0), '2^16 returns +0');
+ t.ok(is(ES.ToUint16(0x10000 - 1), 0x10000 - 1), '2^16 - 1 returns 2^16 - 1');
+ t.end();
+ });
+
+ test('ToInt8', function (t) {
+ t.ok(is(0, ES.ToInt8(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToInt8(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToInt8(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToInt8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToInt8(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToInt8(0x100000000 - 1), -1), '2^32 - 1 returns -1');
+ t.ok(is(ES.ToInt8(0x80000000), 0), '2^31 returns +0');
+ t.ok(is(ES.ToInt8(0x80000000 - 1), -1), '2^31 - 1 returns -1');
+ t.ok(is(ES.ToInt8(0x10000), 0), '2^16 returns +0');
+ t.ok(is(ES.ToInt8(0x10000 - 1), -1), '2^16 - 1 returns -1');
+ t.ok(is(ES.ToInt8(0x100), 0), '2^8 returns +0');
+ t.ok(is(ES.ToInt8(0x100 - 1), -1), '2^8 - 1 returns -1');
+ t.ok(is(ES.ToInt8(0x10), 0x10), '2^4 returns 2^4');
+ t.end();
+ });
+
+ test('ToUint8', function (t) {
+ t.ok(is(0, ES.ToUint8(NaN)), 'NaN coerces to +0');
+ forEach([0, Infinity], function (num) {
+ t.ok(is(0, ES.ToUint8(num)), num + ' returns +0');
+ t.ok(is(0, ES.ToUint8(-num)), '-' + num + ' returns +0');
+ });
+ t['throws'](function () { return ES.ToUint8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ t.ok(is(ES.ToUint8(0x100000000), 0), '2^32 returns +0');
+ t.ok(is(ES.ToUint8(0x100000000 - 1), 0x100 - 1), '2^32 - 1 returns 2^8 - 1');
+ t.ok(is(ES.ToUint8(0x80000000), 0), '2^31 returns +0');
+ t.ok(is(ES.ToUint8(0x80000000 - 1), 0x100 - 1), '2^31 - 1 returns 2^8 - 1');
+ t.ok(is(ES.ToUint8(0x10000), 0), '2^16 returns +0');
+ t.ok(is(ES.ToUint8(0x10000 - 1), 0x100 - 1), '2^16 - 1 returns 2^8 - 1');
+ t.ok(is(ES.ToUint8(0x100), 0), '2^8 returns +0');
+ t.ok(is(ES.ToUint8(0x100 - 1), 0x100 - 1), '2^8 - 1 returns 2^16 - 1');
+ t.ok(is(ES.ToUint8(0x10), 0x10), '2^4 returns 2^4');
+ t.ok(is(ES.ToUint8(0x10 - 1), 0x10 - 1), '2^4 - 1 returns 2^4 - 1');
+ t.end();
+ });
+
+ test('ToUint8Clamp', function (t) {
+ t.ok(is(0, ES.ToUint8Clamp(NaN)), 'NaN coerces to +0');
+ t.ok(is(0, ES.ToUint8Clamp(0)), '+0 returns +0');
+ t.ok(is(0, ES.ToUint8Clamp(-0)), '-0 returns +0');
+ t.ok(is(0, ES.ToUint8Clamp(-Infinity)), '-Infinity returns +0');
+ t['throws'](function () { return ES.ToUint8Clamp(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+ forEach([255, 256, 0x100000, Infinity], function (number) {
+ t.ok(is(255, ES.ToUint8Clamp(number)), number + ' coerces to 255');
+ });
+ t.equal(1, ES.ToUint8Clamp(1.49), '1.49 coerces to 1');
+ t.equal(2, ES.ToUint8Clamp(1.5), '1.5 coerces to 2, because 2 is even');
+ t.equal(2, ES.ToUint8Clamp(1.51), '1.51 coerces to 2');
+
+ t.equal(2, ES.ToUint8Clamp(2.49), '2.49 coerces to 2');
+ t.equal(2, ES.ToUint8Clamp(2.5), '2.5 coerces to 2, because 2 is even');
+ t.equal(3, ES.ToUint8Clamp(2.51), '2.51 coerces to 3');
+ t.end();
+ });
+
+ test('ToString', function (t) {
+ forEach(v.objects.concat(v.nonSymbolPrimitives), function (item) {
+ t.equal(ES.ToString(item), String(item), 'ES.ToString(' + debug(item) + ') ToStrings to String(' + debug(item) + ')');
+ });
+
+ t['throws'](function () { return ES.ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
+
+ forEach(v.symbols, function (symbol) {
+ t['throws'](function () { return ES.ToString(symbol); }, TypeError, debug(symbol) + ' throws');
+ });
+ t.end();
+ });
+
+ test('ToObject', function (t) {
+ t['throws'](function () { return ES.ToObject(undefined); }, TypeError, 'undefined throws');
+ t['throws'](function () { return ES.ToObject(null); }, TypeError, 'null throws');
+ forEach(v.numbers, function (number) {
+ var obj = ES.ToObject(number);
+ t.equal(typeof obj, 'object', 'number ' + number + ' coerces to object');
+ t.equal(true, obj instanceof Number, 'object of ' + number + ' is Number object');
+ t.ok(is(obj.valueOf(), number), 'object of ' + number + ' coerces to ' + number);
+ });
+ t.end();
+ });
+
+ test('RequireObjectCoercible', function (t) {
+ t.equal(false, 'CheckObjectCoercible' in ES, 'CheckObjectCoercible -> RequireObjectCoercible in ES6');
+ t['throws'](function () { return ES.RequireObjectCoercible(undefined); }, TypeError, 'undefined throws');
+ t['throws'](function () { return ES.RequireObjectCoercible(null); }, TypeError, 'null throws');
+ var isCoercible = function (value) {
+ t.doesNotThrow(function () { return ES.RequireObjectCoercible(value); }, debug(value) + ' does not throw');
+ };
+ forEach(v.objects.concat(v.nonNullPrimitives), isCoercible);
+ t.end();
+ });
+
+ test('IsCallable', function (t) {
+ t.equal(true, ES.IsCallable(function () {}), 'function is callable');
+ var nonCallables = [/a/g, {}, Object.prototype, NaN].concat(v.nonFunctions);
+ forEach(nonCallables, function (nonCallable) {
+ t.equal(false, ES.IsCallable(nonCallable), debug(nonCallable) + ' is not callable');
+ });
+ t.end();
+ });
+
+ test('SameValue', function (t) {
+ t.equal(true, ES.SameValue(NaN, NaN), 'NaN is SameValue as NaN');
+ t.equal(false, ES.SameValue(0, -0), '+0 is not SameValue as -0');
+ forEach(v.objects.concat(v.primitives), function (val) {
+ t.equal(val === val, ES.SameValue(val, val), debug(val) + ' is SameValue to itself');
+ });
+ t.end();
+ });
+
+ test('SameValueZero', function (t) {
+ t.equal(true, ES.SameValueZero(NaN, NaN), 'NaN is SameValueZero as NaN');
+ t.equal(true, ES.SameValueZero(0, -0), '+0 is SameValueZero as -0');
+ forEach(v.objects.concat(v.primitives), function (val) {
+ t.equal(val === val, ES.SameValueZero(val, val), debug(val) + ' is SameValueZero to itself');
+ });
+ t.end();
+ });
+
+ test('ToPropertyKey', function (t) {
+ forEach(v.objects.concat(v.nonSymbolPrimitives), function (value) {
+ t.equal(ES.ToPropertyKey(value), String(value), 'ToPropertyKey(value) === String(value) for non-Symbols');
+ });
+
+ forEach(v.symbols, function (symbol) {
+ t.equal(
+ ES.ToPropertyKey(symbol),
+ symbol,
+ 'ToPropertyKey(' + debug(symbol) + ') === ' + debug(symbol)
+ );
+ t.equal(
+ ES.ToPropertyKey(Object(symbol)),
+ symbol,
+ 'ToPropertyKey(' + debug(Object(symbol)) + ') === ' + debug(symbol)
+ );
+ });
+
+ t.end();
+ });
+
+ test('ToLength', function (t) {
+ t['throws'](function () { return ES.ToLength(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError');
+ t.equal(3, ES.ToLength(v.coercibleObject), 'coercibleObject coerces to 3');
+ t.equal(42, ES.ToLength('42.5'), '"42.5" coerces to 42');
+ t.equal(7, ES.ToLength(7.3), '7.3 coerces to 7');
+ forEach([-0, -1, -42, -Infinity], function (negative) {
+ t.ok(is(0, ES.ToLength(negative)), negative + ' coerces to +0');
+ });
+ t.equal(MAX_SAFE_INTEGER, ES.ToLength(MAX_SAFE_INTEGER + 1), '2^53 coerces to 2^53 - 1');
+ t.equal(MAX_SAFE_INTEGER, ES.ToLength(MAX_SAFE_INTEGER + 3), '2^53 + 2 coerces to 2^53 - 1');
+ t.end();
+ });
+
+ test('IsArray', function (t) {
+ t.equal(true, ES.IsArray([]), '[] is array');
+ t.equal(false, ES.IsArray({}), '{} is not array');
+ t.equal(false, ES.IsArray({ length: 1, 0: true }), 'arraylike object is not array');
+ forEach(v.objects.concat(v.primitives), function (value) {
+ t.equal(false, ES.IsArray(value), debug(value) + ' is not array');
+ });
+ t.end();
+ });
+
+ test('IsRegExp', function (t) {
+ forEach([/a/g, new RegExp('a', 'g')], function (regex) {
+ t.equal(true, ES.IsRegExp(regex), regex + ' is regex');
+ });
+
+ forEach(v.objects.concat(v.primitives), function (nonRegex) {
+ t.equal(false, ES.IsRegExp(nonRegex), debug(nonRegex) + ' is not regex');
+ });
+
+ t.test('Symbol.match', { skip: !v.hasSymbols || !Symbol.match }, function (st) {
+ var obj = {};
+ obj[Symbol.match] = true;
+ st.equal(true, ES.IsRegExp(obj), 'object with truthy Symbol.match is regex');
+
+ var regex = /a/;
+ regex[Symbol.match] = false;
+ st.equal(false, ES.IsRegExp(regex), 'regex with falsy Symbol.match is not regex');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('IsPropertyKey', function (t) {
+ forEach(v.numbers.concat(v.objects), function (notKey) {
+ t.equal(false, ES.IsPropertyKey(notKey), debug(notKey) + ' is not property key');
+ });
+
+ t.equal(true, ES.IsPropertyKey('foo'), 'string is property key');
+
+ forEach(v.symbols, function (symbol) {
+ t.equal(true, ES.IsPropertyKey(symbol), debug(symbol) + ' is property key');
+ });
+ t.end();
+ });
+
+ test('IsInteger', function (t) {
+ for (var i = -100; i < 100; i += 10) {
+ t.equal(true, ES.IsInteger(i), i + ' is integer');
+ t.equal(false, ES.IsInteger(i + 0.2), (i + 0.2) + ' is not integer');
+ }
+ t.equal(true, ES.IsInteger(-0), '-0 is integer');
+ var notInts = v.nonNumbers.concat(v.nonIntegerNumbers, v.infinities, [NaN, [], new Date()]);
+ forEach(notInts, function (notInt) {
+ t.equal(false, ES.IsInteger(notInt), debug(notInt) + ' is not integer');
+ });
+ t.equal(false, ES.IsInteger(v.uncoercibleObject), 'uncoercibleObject is not integer');
+ t.end();
+ });
+
+ test('IsExtensible', function (t) {
+ forEach(v.objects, function (object) {
+ t.equal(true, ES.IsExtensible(object), debug(object) + ' object is extensible');
+ });
+ forEach(v.primitives, function (primitive) {
+ t.equal(false, ES.IsExtensible(primitive), debug(primitive) + ' is not extensible');
+ });
+ if (Object.preventExtensions) {
+ t.equal(false, ES.IsExtensible(Object.preventExtensions({})), 'object with extensions prevented is not extensible');
+ }
+ t.end();
+ });
+
+ test('CanonicalNumericIndexString', function (t) {
+ var throwsOnNonString = function (notString) {
+ t['throws'](
+ function () { return ES.CanonicalNumericIndexString(notString); },
+ TypeError,
+ debug(notString) + ' is not a string'
+ );
+ };
+ forEach(v.objects.concat(v.numbers), throwsOnNonString);
+ t.ok(is(-0, ES.CanonicalNumericIndexString('-0')), '"-0" returns -0');
+ for (var i = -50; i < 50; i += 10) {
+ t.equal(i, ES.CanonicalNumericIndexString(String(i)), '"' + i + '" returns ' + i);
+ t.equal(undefined, ES.CanonicalNumericIndexString(String(i) + 'a'), '"' + i + 'a" returns undefined');
+ }
+ t.end();
+ });
+
+ test('IsConstructor', function (t) {
+ t.equal(true, ES.IsConstructor(function () {}), 'function is constructor');
+ t.equal(false, ES.IsConstructor(/a/g), 'regex is not constructor');
+ forEach(v.objects, function (object) {
+ t.equal(false, ES.IsConstructor(object), object + ' object is not constructor');
+ });
+
+ try {
+ var foo = Function('return class Foo {}')(); // eslint-disable-line no-new-func
+ t.equal(ES.IsConstructor(foo), true, 'class is constructor');
+ } catch (e) {
+ t.comment('SKIP: class syntax not supported.');
+ }
+ t.end();
+ });
+
+ test('Call', function (t) {
+ var receiver = {};
+ var notFuncs = v.nonFunctions.concat([/a/g, new RegExp('a', 'g')]);
+ t.plan(notFuncs.length + 4);
+ var throwsIfNotCallable = function (notFunc) {
+ t['throws'](
+ function () { return ES.Call(notFunc, receiver); },
+ TypeError,
+ debug(notFunc) + ' (' + typeof notFunc + ') is not callable'
+ );
+ };
+ forEach(notFuncs, throwsIfNotCallable);
+ ES.Call(
+ function (a, b) {
+ t.equal(this, receiver, 'context matches expected');
+ t.deepEqual([a, b], [1, 2], 'named args are correct');
+ t.equal(arguments.length, 3, 'extra argument was passed');
+ t.equal(arguments[2], 3, 'extra argument was correct');
+ },
+ receiver,
+ [1, 2, 3]
+ );
+ t.end();
+ });
+
+ test('GetV', function (t) {
+ t['throws'](function () { return ES.GetV({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key');
+ var obj = { a: function () {} };
+ t.equal(ES.GetV(obj, 'a'), obj.a, 'returns property if it exists');
+ t.equal(ES.GetV(obj, 'b'), undefined, 'returns undefiend if property does not exist');
+ t.end();
+ });
+
+ test('GetMethod', function (t) {
+ t['throws'](function () { return ES.GetMethod({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key');
+ t.equal(ES.GetMethod({}, 'a'), undefined, 'returns undefined in property is undefined');
+ t.equal(ES.GetMethod({ a: null }, 'a'), undefined, 'returns undefined if property is null');
+ t.equal(ES.GetMethod({ a: undefined }, 'a'), undefined, 'returns undefined if property is undefined');
+ var obj = { a: function () {} };
+ t['throws'](function () { ES.GetMethod({ a: 'b' }, 'a'); }, TypeError, 'throws TypeError if property exists and is not callable');
+ t.equal(ES.GetMethod(obj, 'a'), obj.a, 'returns property if it is callable');
+ t.end();
+ });
+
+ test('Get', function (t) {
+ t['throws'](function () { return ES.Get('a', 'a'); }, TypeError, 'Throws a TypeError if `O` is not an Object');
+ t['throws'](function () { return ES.Get({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key');
+
+ var value = {};
+ t.test('Symbols', { skip: !v.hasSymbols }, function (st) {
+ var sym = Symbol('sym');
+ var obj = {};
+ obj[sym] = value;
+ st.equal(ES.Get(obj, sym), value, 'returns property `P` if it exists on object `O`');
+ st.end();
+ });
+ t.equal(ES.Get({ a: value }, 'a'), value, 'returns property `P` if it exists on object `O`');
+ t.end();
+ });
+
+ test('Type', { skip: !v.hasSymbols }, function (t) {
+ t.equal(ES.Type(Symbol.iterator), 'Symbol', 'Type(Symbol.iterator) is Symbol');
+ t.end();
+ });
+
+ test('SpeciesConstructor', function (t) {
+ t['throws'](function () { ES.SpeciesConstructor(null); }, TypeError);
+ t['throws'](function () { ES.SpeciesConstructor(undefined); }, TypeError);
+
+ var defaultConstructor = function Foo() {};
+
+ t.equal(
+ ES.SpeciesConstructor({ constructor: undefined }, defaultConstructor),
+ defaultConstructor,
+ 'undefined constructor returns defaultConstructor'
+ );
+
+ t['throws'](
+ function () { return ES.SpeciesConstructor({ constructor: null }, defaultConstructor); },
+ TypeError,
+ 'non-undefined non-object constructor throws'
+ );
+
+ t.test('with Symbol.species', { skip: !hasSpecies }, function (st) {
+ var Bar = function Bar() {};
+ Bar[Symbol.species] = null;
+
+ st.equal(
+ ES.SpeciesConstructor(new Bar(), defaultConstructor),
+ defaultConstructor,
+ 'undefined/null Symbol.species returns default constructor'
+ );
+
+ var Baz = function Baz() {};
+ Baz[Symbol.species] = Bar;
+ st.equal(
+ ES.SpeciesConstructor(new Baz(), defaultConstructor),
+ Bar,
+ 'returns Symbol.species constructor value'
+ );
+
+ Baz[Symbol.species] = {};
+ st['throws'](
+ function () { ES.SpeciesConstructor(new Baz(), defaultConstructor); },
+ TypeError,
+ 'throws when non-constructor non-null non-undefined species value found'
+ );
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('IsPropertyDescriptor', { skip: skips && skips.IsPropertyDescriptor }, function (t) {
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t.equal(
+ ES.IsPropertyDescriptor(primitive),
+ false,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t.equal(ES.IsPropertyDescriptor({ invalid: true }), false, 'invalid keys not allowed on a Property Descriptor');
+
+ t.equal(ES.IsPropertyDescriptor({}), true, 'empty object is an incomplete Property Descriptor');
+
+ t.equal(ES.IsPropertyDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is a Property Descriptor');
+ t.equal(ES.IsPropertyDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is a Property Descriptor');
+ t.equal(ES.IsPropertyDescriptor(v.dataDescriptor()), true, 'data descriptor is a Property Descriptor');
+ t.equal(ES.IsPropertyDescriptor(v.genericDescriptor()), true, 'generic descriptor is a Property Descriptor');
+
+ t['throws'](
+ function () { ES.IsPropertyDescriptor(v.bothDescriptor()); },
+ TypeError,
+ 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
+ );
+
+ t.end();
+ });
+
+ assertRecordTests(ES, test);
+
+ test('IsAccessorDescriptor', function (t) {
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.IsAccessorDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t.equal(ES.IsAccessorDescriptor(), false, 'no value is not an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(undefined), false, 'undefined value is not an Accessor Descriptor');
+
+ t.equal(ES.IsAccessorDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(v.dataDescriptor()), false, 'data descriptor is not an Accessor Descriptor');
+ t.equal(ES.IsAccessorDescriptor(v.genericDescriptor()), false, 'generic descriptor is not an Accessor Descriptor');
+
+ t.end();
+ });
+
+ test('IsDataDescriptor', function (t) {
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.IsDataDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t.equal(ES.IsDataDescriptor(), false, 'no value is not a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(undefined), false, 'undefined value is not a Data Descriptor');
+
+ t.equal(ES.IsDataDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(v.dataDescriptor()), true, 'data descriptor is a Data Descriptor');
+ t.equal(ES.IsDataDescriptor(v.genericDescriptor()), false, 'generic descriptor is not a Data Descriptor');
+
+ t.end();
+ });
+
+ test('IsGenericDescriptor', function (t) {
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.IsGenericDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t.equal(ES.IsGenericDescriptor(), false, 'no value is not a Data Descriptor');
+ t.equal(ES.IsGenericDescriptor(undefined), false, 'undefined value is not a Data Descriptor');
+
+ t.equal(ES.IsGenericDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a generic Descriptor');
+ t.equal(ES.IsGenericDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a generic Descriptor');
+ t.equal(ES.IsGenericDescriptor(v.dataDescriptor()), false, 'data descriptor is not a generic Descriptor');
+
+ t.equal(ES.IsGenericDescriptor(v.genericDescriptor()), true, 'generic descriptor is a generic Descriptor');
+
+ t.end();
+ });
+
+ test('FromPropertyDescriptor', function (t) {
+ t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined');
+ t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined');
+
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.FromPropertyDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ var accessor = v.accessorDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(accessor), {
+ get: accessor['[[Get]]'],
+ enumerable: !!accessor['[[Enumerable]]'],
+ configurable: !!accessor['[[Configurable]]']
+ });
+
+ var mutator = v.mutatorDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(mutator), {
+ set: mutator['[[Set]]'],
+ enumerable: !!mutator['[[Enumerable]]'],
+ configurable: !!mutator['[[Configurable]]']
+ });
+ var data = v.dataDescriptor();
+ t.deepEqual(ES.FromPropertyDescriptor(data), {
+ value: data['[[Value]]'],
+ writable: data['[[Writable]]']
+ });
+
+ t.deepEqual(ES.FromPropertyDescriptor(v.genericDescriptor()), {
+ enumerable: false,
+ configurable: true
+ });
+
+ t.end();
+ });
+
+ test('ToPropertyDescriptor', function (t) {
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.ToPropertyDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ var accessor = v.accessorDescriptor();
+ t.deepEqual(ES.ToPropertyDescriptor({
+ get: accessor['[[Get]]'],
+ enumerable: !!accessor['[[Enumerable]]'],
+ configurable: !!accessor['[[Configurable]]']
+ }), accessor);
+
+ var mutator = v.mutatorDescriptor();
+ t.deepEqual(ES.ToPropertyDescriptor({
+ set: mutator['[[Set]]'],
+ enumerable: !!mutator['[[Enumerable]]'],
+ configurable: !!mutator['[[Configurable]]']
+ }), mutator);
+
+ var data = v.dataDescriptor();
+ t.deepEqual(ES.ToPropertyDescriptor({
+ value: data['[[Value]]'],
+ writable: data['[[Writable]]'],
+ configurable: !!data['[[Configurable]]']
+ }), assign(data, { '[[Configurable]]': false }));
+
+ var both = v.bothDescriptor();
+ t['throws'](
+ function () {
+ ES.FromPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] });
+ },
+ TypeError,
+ 'data and accessor descriptors are mutually exclusive'
+ );
+
+ t.end();
+ });
+
+ test('CompletePropertyDescriptor', function (t) {
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.CompletePropertyDescriptor(primitive); },
+ TypeError,
+ debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ var generic = v.genericDescriptor();
+ t.deepEqual(
+ ES.CompletePropertyDescriptor(generic),
+ {
+ '[[Configurable]]': !!generic['[[Configurable]]'],
+ '[[Enumerable]]': !!generic['[[Enumerable]]'],
+ '[[Value]]': undefined,
+ '[[Writable]]': false
+ },
+ 'completes a Generic Descriptor'
+ );
+
+ var data = v.dataDescriptor();
+ t.deepEqual(
+ ES.CompletePropertyDescriptor(data),
+ {
+ '[[Configurable]]': !!data['[[Configurable]]'],
+ '[[Enumerable]]': false,
+ '[[Value]]': data['[[Value]]'],
+ '[[Writable]]': !!data['[[Writable]]']
+ },
+ 'completes a Data Descriptor'
+ );
+
+ var accessor = v.accessorDescriptor();
+ t.deepEqual(
+ ES.CompletePropertyDescriptor(accessor),
+ {
+ '[[Get]]': accessor['[[Get]]'],
+ '[[Enumerable]]': !!accessor['[[Enumerable]]'],
+ '[[Configurable]]': !!accessor['[[Configurable]]'],
+ '[[Set]]': undefined
+ },
+ 'completes an Accessor Descriptor'
+ );
+
+ var mutator = v.mutatorDescriptor();
+ t.deepEqual(
+ ES.CompletePropertyDescriptor(mutator),
+ {
+ '[[Set]]': mutator['[[Set]]'],
+ '[[Enumerable]]': !!mutator['[[Enumerable]]'],
+ '[[Configurable]]': !!mutator['[[Configurable]]'],
+ '[[Get]]': undefined
+ },
+ 'completes a mutator Descriptor'
+ );
+
+ t['throws'](
+ function () { ES.CompletePropertyDescriptor(v.bothDescriptor()); },
+ TypeError,
+ 'data and accessor descriptors are mutually exclusive'
+ );
+
+ t.end();
+ });
+
+ test('Set', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.Set(primitive, '', null, false); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonKey) {
+ t['throws'](
+ function () { ES.Set({}, nonKey, null, false); },
+ TypeError,
+ debug(nonKey) + ' is not a Property Key'
+ );
+ });
+
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () { ES.Set({}, '', null, nonBoolean); },
+ TypeError,
+ debug(nonBoolean) + ' is not a Boolean'
+ );
+ });
+
+ var o = {};
+ var value = {};
+ ES.Set(o, 'key', value, true);
+ t.deepEqual(o, { key: value }, 'key is set');
+
+ t.test('nonwritable', { skip: !defineProperty.oDP }, function (st) {
+ var obj = { a: value };
+ defineProperty(obj, 'a', { writable: false });
+
+ st['throws'](
+ function () { ES.Set(obj, 'a', value, true); },
+ TypeError,
+ 'can not Set nonwritable property'
+ );
+
+ st.doesNotThrow(
+ function () { ES.Set(obj, 'a', value, false); },
+ 'setting Throw to false prevents an exception'
+ );
+
+ st.end();
+ });
+
+ t.test('nonconfigurable', { skip: !defineProperty.oDP }, function (st) {
+ var obj = { a: value };
+ defineProperty(obj, 'a', { configurable: false });
+
+ ES.Set(obj, 'a', value, true);
+ st.deepEqual(obj, { a: value }, 'key is set');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('HasOwnProperty', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.HasOwnProperty(primitive, 'key'); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonKey) {
+ t['throws'](
+ function () { ES.HasOwnProperty({}, nonKey); },
+ TypeError,
+ debug(nonKey) + ' is not a Property Key'
+ );
+ });
+
+ t.equal(ES.HasOwnProperty({}, 'toString'), false, 'inherited properties are not own');
+ t.equal(
+ ES.HasOwnProperty({ toString: 1 }, 'toString'),
+ true,
+ 'shadowed inherited own properties are own'
+ );
+ t.equal(ES.HasOwnProperty({ a: 1 }, 'a'), true, 'own properties are own');
+
+ t.end();
+ });
+
+ test('HasProperty', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.HasProperty(primitive, 'key'); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonKey) {
+ t['throws'](
+ function () { ES.HasProperty({}, nonKey); },
+ TypeError,
+ debug(nonKey) + ' is not a Property Key'
+ );
+ });
+
+ t.equal(ES.HasProperty({}, 'nope'), false, 'object does not have nonexistent properties');
+ t.equal(ES.HasProperty({}, 'toString'), true, 'object has inherited properties');
+ t.equal(
+ ES.HasProperty({ toString: 1 }, 'toString'),
+ true,
+ 'object has shadowed inherited own properties'
+ );
+ t.equal(ES.HasProperty({ a: 1 }, 'a'), true, 'object has own properties');
+
+ t.end();
+ });
+
+ test('IsConcatSpreadable', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t.equal(ES.IsConcatSpreadable(primitive), false, debug(primitive) + ' is not an Object');
+ });
+
+ var hasSymbolConcatSpreadable = v.hasSymbols && Symbol.isConcatSpreadable;
+ t.test('Symbol.isConcatSpreadable', { skip: !hasSymbolConcatSpreadable }, function (st) {
+ forEach(v.falsies, function (falsy) {
+ var obj = {};
+ obj[Symbol.isConcatSpreadable] = falsy;
+ st.equal(
+ ES.IsConcatSpreadable(obj),
+ false,
+ 'an object with ' + debug(falsy) + ' as Symbol.isConcatSpreadable is not concat spreadable'
+ );
+ });
+
+ forEach(v.truthies, function (truthy) {
+ var obj = {};
+ obj[Symbol.isConcatSpreadable] = truthy;
+ st.equal(
+ ES.IsConcatSpreadable(obj),
+ true,
+ 'an object with ' + debug(truthy) + ' as Symbol.isConcatSpreadable is concat spreadable'
+ );
+ });
+
+ st.end();
+ });
+
+ forEach(v.objects, function (object) {
+ t.equal(
+ ES.IsConcatSpreadable(object),
+ false,
+ 'non-array without Symbol.isConcatSpreadable is not concat spreadable'
+ );
+ });
+
+ t.equal(ES.IsConcatSpreadable([]), true, 'arrays are concat spreadable');
+
+ t.end();
+ });
+
+ test('Invoke', function (t) {
+ forEach(v.nonPropertyKeys, function (nonKey) {
+ t['throws'](
+ function () { ES.Invoke({}, nonKey); },
+ TypeError,
+ debug(nonKey) + ' is not a Property Key'
+ );
+ });
+
+ t['throws'](function () { ES.Invoke({ o: false }, 'o'); }, TypeError, 'fails on a non-function');
+
+ t.test('invoked callback', function (st) {
+ var aValue = {};
+ var bValue = {};
+ var obj = {
+ f: function (a) {
+ st.equal(arguments.length, 2, '2 args passed');
+ st.equal(a, aValue, 'first arg is correct');
+ st.equal(arguments[1], bValue, 'second arg is correct');
+ }
+ };
+ st.plan(3);
+ ES.Invoke(obj, 'f', aValue, bValue);
+ });
+
+ t.end();
+ });
+
+ test('GetIterator', function (t) {
+ var arr = [1, 2];
+ testIterator(t, ES.GetIterator(arr), arr);
+
+ testIterator(t, ES.GetIterator('abc'), 'abc'.split(''));
+
+ t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) {
+ var m = new Map();
+ m.set(1, 'a');
+ m.set(2, 'b');
+
+ testIterator(st, ES.GetIterator(m), [[1, 'a'], [2, 'b']]);
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('IteratorNext', { skip: true });
+
+ test('IteratorComplete', { skip: true });
+
+ test('IteratorValue', { skip: true });
+
+ test('IteratorStep', { skip: true });
+
+ test('IteratorClose', { skip: true });
+
+ test('CreateIterResultObject', function (t) {
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () { ES.CreateIterResultObject({}, nonBoolean); },
+ TypeError,
+ '"done" argument must be a boolean; ' + debug(nonBoolean) + ' is not'
+ );
+ });
+
+ var value = {};
+ t.deepEqual(
+ ES.CreateIterResultObject(value, true),
+ { value: value, done: true },
+ 'creates a "done" iteration result'
+ );
+ t.deepEqual(
+ ES.CreateIterResultObject(value, false),
+ { value: value, done: false },
+ 'creates a "not done" iteration result'
+ );
+
+ t.end();
+ });
+
+ test('RegExpExec', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.RegExpExec(primitive); },
+ TypeError,
+ '"R" argument must be an object; ' + debug(primitive) + ' is not'
+ );
+ });
+
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.RegExpExec({}, nonString); },
+ TypeError,
+ '"S" argument must be a String; ' + debug(nonString) + ' is not'
+ );
+ });
+
+ t.test('gets and calls a callable "exec"', function (st) {
+ var str = '123';
+ var o = {
+ exec: function (S) {
+ st.equal(this, o, '"exec" receiver is R');
+ st.equal(S, str, '"exec" argument is S');
+
+ return null;
+ }
+ };
+ st.plan(2);
+ ES.RegExpExec(o, str);
+ st.end();
+ });
+
+ t.test('throws if a callable "exec" returns a non-null non-object', function (st) {
+ var str = '123';
+ st.plan(v.nonNullPrimitives.length);
+ forEach(v.nonNullPrimitives, function (nonNullPrimitive) {
+ st['throws'](
+ function () { ES.RegExpExec({ exec: function () { return nonNullPrimitive; } }, str); },
+ TypeError,
+ '"exec" method must return `null` or an Object; ' + debug(nonNullPrimitive) + ' is not'
+ );
+ });
+ st.end();
+ });
+
+ t.test('actual regex that should match against a string', function (st) {
+ var S = 'aabc';
+ var R = /a/g;
+ var match1 = ES.RegExpExec(R, S);
+ var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S }));
+ var match2 = ES.RegExpExec(R, S);
+ var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S }));
+ var match3 = ES.RegExpExec(R, S);
+ st.deepEqual(match1, expected1, 'match object 1 is as expected');
+ st.deepEqual(match2, expected2, 'match object 2 is as expected');
+ st.equal(match3, null, 'match 3 is null as expected');
+ st.end();
+ });
+
+ t.test('actual regex that should match against a string, with shadowed "exec"', function (st) {
+ var S = 'aabc';
+ var R = /a/g;
+ R.exec = undefined;
+ var match1 = ES.RegExpExec(R, S);
+ var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S }));
+ var match2 = ES.RegExpExec(R, S);
+ var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S }));
+ var match3 = ES.RegExpExec(R, S);
+ st.deepEqual(match1, expected1, 'match object 1 is as expected');
+ st.deepEqual(match2, expected2, 'match object 2 is as expected');
+ st.equal(match3, null, 'match 3 is null as expected');
+ st.end();
+ });
+ t.end();
+ });
+
+ test('ArraySpeciesCreate', function (t) {
+ t.test('errors', function (st) {
+ var testNonNumber = function (nonNumber) {
+ st['throws'](
+ function () { ES.ArraySpeciesCreate([], nonNumber); },
+ TypeError,
+ debug(nonNumber) + ' is not a number'
+ );
+ };
+ forEach(v.nonNumbers, testNonNumber);
+
+ st['throws'](
+ function () { ES.ArraySpeciesCreate([], -1); },
+ TypeError,
+ '-1 is not >= 0'
+ );
+ st['throws'](
+ function () { ES.ArraySpeciesCreate([], -Infinity); },
+ TypeError,
+ '-Infinity is not >= 0'
+ );
+
+ var testNonIntegers = function (nonInteger) {
+ st['throws'](
+ function () { ES.ArraySpeciesCreate([], nonInteger); },
+ TypeError,
+ debug(nonInteger) + ' is not an integer'
+ );
+ };
+ forEach(v.nonIntegerNumbers, testNonIntegers);
+
+ st.end();
+ });
+
+ t.test('works with a non-array', function (st) {
+ forEach(v.objects.concat(v.primitives), function (nonArray) {
+ var arr = ES.ArraySpeciesCreate(nonArray, 0);
+ st.ok(ES.IsArray(arr), 'is an array');
+ st.equal(arr.length, 0, 'length is correct');
+ st.equal(arr.constructor, Array, 'constructor is correct');
+ });
+
+ st.end();
+ });
+
+ t.test('works with a normal array', function (st) {
+ var len = 2;
+ var orig = [1, 2, 3];
+ var arr = ES.ArraySpeciesCreate(orig, len);
+
+ st.ok(ES.IsArray(arr), 'is an array');
+ st.equal(arr.length, len, 'length is correct');
+ st.equal(arr.constructor, orig.constructor, 'constructor is correct');
+
+ st.end();
+ });
+
+ t.test('-0 length produces +0 length', function (st) {
+ var len = -0;
+ st.ok(is(len, -0), '-0 is negative zero');
+ st.notOk(is(len, 0), '-0 is not positive zero');
+
+ var orig = [1, 2, 3];
+ var arr = ES.ArraySpeciesCreate(orig, len);
+
+ st.equal(ES.IsArray(arr), true);
+ st.ok(is(arr.length, 0));
+ st.equal(arr.constructor, orig.constructor);
+
+ st.end();
+ });
+
+ t.test('works with species construtor', { skip: !hasSpecies }, function (st) {
+ var sentinel = {};
+ var Foo = function Foo(len) {
+ this.length = len;
+ this.sentinel = sentinel;
+ };
+ var Bar = getArraySubclassWithSpeciesConstructor(Foo);
+ var bar = new Bar();
+
+ st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
+
+ var arr = ES.ArraySpeciesCreate(bar, 3);
+ st.equal(arr.constructor, Foo, 'result used species constructor');
+ st.equal(arr.length, 3, 'length property is correct');
+ st.equal(arr.sentinel, sentinel, 'Foo constructor was exercised');
+
+ st.end();
+ });
+
+ t.test('works with null species constructor', { skip: !hasSpecies }, function (st) {
+ var Bar = getArraySubclassWithSpeciesConstructor(null);
+ var bar = new Bar();
+
+ st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
+
+ var arr = ES.ArraySpeciesCreate(bar, 3);
+ st.equal(arr.constructor, Array, 'result used default constructor');
+ st.equal(arr.length, 3, 'length property is correct');
+
+ st.end();
+ });
+
+ t.test('works with undefined species constructor', { skip: !hasSpecies }, function (st) {
+ var Bar = getArraySubclassWithSpeciesConstructor();
+ var bar = new Bar();
+
+ st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
+
+ var arr = ES.ArraySpeciesCreate(bar, 3);
+ st.equal(arr.constructor, Array, 'result used default constructor');
+ st.equal(arr.length, 3, 'length property is correct');
+
+ st.end();
+ });
+
+ t.test('throws with object non-construtor species constructor', { skip: !hasSpecies }, function (st) {
+ forEach(v.objects, function (obj) {
+ var Bar = getArraySubclassWithSpeciesConstructor(obj);
+ var bar = new Bar();
+
+ st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
+
+ st['throws'](
+ function () { ES.ArraySpeciesCreate(bar, 3); },
+ TypeError,
+ debug(obj) + ' is not a constructor'
+ );
+ });
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('CreateDataProperty', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.CreateDataProperty(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.CreateDataProperty({}, nonPropertyKey); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a property key'
+ );
+ });
+
+ var sentinel = { id: 'sentinel' };
+ var secondSentinel = { id: 'second sentinel' };
+ forEach(v.propertyKeys, function (propertyKey) {
+ var obj = {};
+ var status = ES.CreateDataProperty(obj, propertyKey, sentinel);
+ t.equal(status, true, 'status is true');
+ t.equal(
+ obj[propertyKey],
+ sentinel,
+ debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object'
+ );
+ var secondStatus = ES.CreateDataProperty(obj, propertyKey, secondSentinel);
+ t.equal(secondStatus, true, 'second status is true');
+ t.equal(
+ obj[propertyKey],
+ secondSentinel,
+ debug(secondSentinel) + ' is installed on "' + debug(propertyKey) + '" on the object'
+ );
+
+ t.test('with defineProperty', { skip: !defineProperty.oDP }, function (st) {
+ var nonWritable = defineProperty({}, propertyKey, { configurable: true, writable: false });
+
+ var nonWritableStatus = ES.CreateDataProperty(nonWritable, propertyKey, sentinel);
+ st.equal(nonWritableStatus, false, 'create data property failed');
+ st.notEqual(
+ nonWritable[propertyKey],
+ sentinel,
+ debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonwritable'
+ );
+
+ var nonConfigurable = defineProperty({}, propertyKey, { configurable: false, writable: true });
+
+ var nonConfigurableStatus = ES.CreateDataProperty(nonConfigurable, propertyKey, sentinel);
+ st.equal(nonConfigurableStatus, false, 'create data property failed');
+ st.notEqual(
+ nonConfigurable[propertyKey],
+ sentinel,
+ debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonconfigurable'
+ );
+ st.end();
+ });
+ });
+
+ t.end();
+ });
+
+ test('CreateDataPropertyOrThrow', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.CreateDataPropertyOrThrow(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.CreateDataPropertyOrThrow({}, nonPropertyKey); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a property key'
+ );
+ });
+
+ var sentinel = {};
+ forEach(v.propertyKeys, function (propertyKey) {
+ var obj = {};
+ var status = ES.CreateDataPropertyOrThrow(obj, propertyKey, sentinel);
+ t.equal(status, true, 'status is true');
+ t.equal(
+ obj[propertyKey],
+ sentinel,
+ debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object'
+ );
+
+ if (typeof Object.preventExtensions === 'function') {
+ var notExtensible = {};
+ Object.preventExtensions(notExtensible);
+
+ t['throws'](
+ function () { ES.CreateDataPropertyOrThrow(notExtensible, propertyKey, sentinel); },
+ TypeError,
+ 'can not install ' + debug(propertyKey) + ' on non-extensible object'
+ );
+ t.notEqual(
+ notExtensible[propertyKey],
+ sentinel,
+ debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object'
+ );
+ }
+ });
+
+ t.end();
+ });
+
+ test('ObjectCreate', function (t) {
+ forEach(v.nonNullPrimitives, function (value) {
+ t['throws'](
+ function () { ES.ObjectCreate(value); },
+ TypeError,
+ debug(value) + ' is not null, or an object'
+ );
+ });
+
+ t.test('proto arg', function (st) {
+ var Parent = function Parent() {};
+ Parent.prototype.foo = {};
+ var child = ES.ObjectCreate(Parent.prototype);
+ st.equal(child instanceof Parent, true, 'child is instanceof Parent');
+ st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype');
+
+ st.end();
+ });
+
+ t.test('internal slots arg', function (st) {
+ st.doesNotThrow(function () { ES.ObjectCreate({}, []); }, 'an empty slot list is valid');
+
+ st['throws'](
+ function () { ES.ObjectCreate({}, ['a']); },
+ SyntaxError,
+ 'internal slots are not supported'
+ );
+
+ st.end();
+ });
+
+ t.test('null proto', { skip: !$setProto }, function (st) {
+ st.equal('toString' in {}, true, 'normal objects have toString');
+ st.equal('toString' in ES.ObjectCreate(null), false, 'makes a null object');
+
+ st.end();
+ });
+
+ t.test('null proto when no native Object.create', { skip: $setProto }, function (st) {
+ st['throws'](
+ function () { ES.ObjectCreate(null); },
+ SyntaxError,
+ 'without a native Object.create, can not create null objects'
+ );
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('AdvanceStringIndex', function (t) {
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.AdvanceStringIndex(nonString); },
+ TypeError,
+ '"S" argument must be a String; ' + debug(nonString) + ' is not'
+ );
+ });
+
+ var notInts = v.nonNumbers.concat(
+ v.nonIntegerNumbers,
+ v.infinities,
+ [NaN, [], new Date(), Math.pow(2, 53), -1]
+ );
+ forEach(notInts, function (nonInt) {
+ t['throws'](
+ function () { ES.AdvanceStringIndex('abc', nonInt); },
+ TypeError,
+ '"index" argument must be an integer, ' + debug(nonInt) + ' is not.'
+ );
+ });
+
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () { ES.AdvanceStringIndex('abc', 0, nonBoolean); },
+ TypeError,
+ debug(nonBoolean) + ' is not a Boolean'
+ );
+ });
+
+ var str = 'a\uD83D\uDCA9c';
+
+ t.test('non-unicode mode', function (st) {
+ for (var i = 0; i < str.length + 2; i += 1) {
+ st.equal(ES.AdvanceStringIndex(str, i, false), i + 1, i + ' advances to ' + (i + 1));
+ }
+
+ st.end();
+ });
+
+ t.test('unicode mode', function (st) {
+ st.equal(ES.AdvanceStringIndex(str, 0, true), 1, '0 advances to 1');
+ st.equal(ES.AdvanceStringIndex(str, 1, true), 3, '1 advances to 3');
+ st.equal(ES.AdvanceStringIndex(str, 2, true), 3, '2 advances to 3');
+ st.equal(ES.AdvanceStringIndex(str, 3, true), 4, '3 advances to 4');
+ st.equal(ES.AdvanceStringIndex(str, 4, true), 5, '4 advances to 5');
+
+ st.end();
+ });
+
+ t.test('lone surrogates', function (st) {
+ var halfPoo = 'a\uD83Dc';
+
+ st.equal(ES.AdvanceStringIndex(halfPoo, 0, true), 1, '0 advances to 1');
+ st.equal(ES.AdvanceStringIndex(halfPoo, 1, true), 2, '1 advances to 2');
+ st.equal(ES.AdvanceStringIndex(halfPoo, 2, true), 3, '2 advances to 3');
+ st.equal(ES.AdvanceStringIndex(halfPoo, 3, true), 4, '3 advances to 4');
+
+ st.end();
+ });
+
+ t.test('surrogate pairs', function (st) {
+ var lowestPair = String.fromCharCode('0xD800') + String.fromCharCode('0xDC00');
+ var highestPair = String.fromCharCode('0xDBFF') + String.fromCharCode('0xDFFF');
+ var poop = String.fromCharCode('0xD83D') + String.fromCharCode('0xDCA9');
+
+ st.equal(ES.AdvanceStringIndex(lowestPair, 0, true), 2, 'lowest surrogate pair, 0 -> 2');
+ st.equal(ES.AdvanceStringIndex(highestPair, 0, true), 2, 'highest surrogate pair, 0 -> 2');
+ st.equal(ES.AdvanceStringIndex(poop, 0, true), 2, 'poop, 0 -> 2');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('CreateMethodProperty', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.CreateMethodProperty(primitive, 'key'); },
+ TypeError,
+ 'O must be an Object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.CreateMethodProperty({}, nonPropertyKey); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ t.test('defines correctly', function (st) {
+ var obj = {};
+ var key = 'the key';
+ var value = { foo: 'bar' };
+
+ st.equal(ES.CreateMethodProperty(obj, key, value), true, 'defines property successfully');
+ st.test('property descriptor', { skip: !getOwnPropertyDescriptor }, function (s2t) {
+ s2t.deepEqual(
+ getOwnPropertyDescriptor(obj, key),
+ {
+ configurable: true,
+ enumerable: false,
+ value: value,
+ writable: true
+ },
+ 'sets the correct property descriptor'
+ );
+
+ s2t.end();
+ });
+ st.equal(obj[key], value, 'sets the correct value');
+
+ st.end();
+ });
+
+ t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) {
+ var obj = Object.freeze({ foo: 'bar' });
+ st['throws'](
+ function () { ES.CreateMethodProperty(obj, 'foo', { value: 'baz' }); },
+ TypeError,
+ 'nonconfigurable key can not be defined'
+ );
+
+ st.end();
+ });
+
+ t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) {
+ st['throws'](
+ function () { ES.CreateMethodProperty(function () {}, 'name', { value: 'baz' }); },
+ TypeError,
+ 'nonconfigurable function name can not be defined'
+ );
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('DefinePropertyOrThrow', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.DefinePropertyOrThrow(primitive, 'key', {}); },
+ TypeError,
+ 'O must be an Object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.DefinePropertyOrThrow({}, nonPropertyKey, {}); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ t.test('defines correctly', function (st) {
+ var obj = {};
+ var key = 'the key';
+ var descriptor = {
+ configurable: true,
+ enumerable: false,
+ value: { foo: 'bar' },
+ writable: true
+ };
+
+ st.equal(ES.DefinePropertyOrThrow(obj, key, descriptor), true, 'defines property successfully');
+ st.test('property descriptor', { skip: !getOwnPropertyDescriptor }, function (s2t) {
+ s2t.deepEqual(
+ getOwnPropertyDescriptor(obj, key),
+ descriptor,
+ 'sets the correct property descriptor'
+ );
+
+ s2t.end();
+ });
+ st.deepEqual(obj[key], descriptor.value, 'sets the correct value');
+
+ st.end();
+ });
+
+ t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) {
+ var obj = Object.freeze({ foo: 'bar' });
+ st['throws'](
+ function () {
+ ES.DefinePropertyOrThrow(obj, 'foo', { configurable: true, value: 'baz' });
+ },
+ TypeError,
+ 'nonconfigurable key can not be defined'
+ );
+
+ st.end();
+ });
+
+ t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) {
+ st['throws'](
+ function () {
+ ES.DefinePropertyOrThrow(function () {}, 'name', { configurable: true, value: 'baz' });
+ },
+ TypeError,
+ 'nonconfigurable function name can not be defined'
+ );
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('DeletePropertyOrThrow', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.DeletePropertyOrThrow(primitive, 'key', {}); },
+ TypeError,
+ 'O must be an Object'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.DeletePropertyOrThrow({}, nonPropertyKey, {}); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ t.test('defines correctly', function (st) {
+ var obj = { 'the key': 42 };
+ var key = 'the key';
+
+ st.equal(ES.DeletePropertyOrThrow(obj, key), true, 'deletes property successfully');
+ st.equal(key in obj, false, 'key is no longer in the object');
+
+ st.end();
+ });
+
+ t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) {
+ var obj = Object.freeze({ foo: 'bar' });
+ st['throws'](
+ function () { ES.DeletePropertyOrThrow(obj, 'foo'); },
+ TypeError,
+ 'nonconfigurable key can not be deleted'
+ );
+
+ st.end();
+ });
+
+ t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) {
+ st['throws'](
+ function () { ES.DeletePropertyOrThrow(function () {}, 'name'); },
+ TypeError,
+ 'nonconfigurable function name can not be deleted'
+ );
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('EnumerableOwnNames', { skip: skips && skips.EnumerableOwnNames }, function (t) {
+ var obj = testEnumerableOwnNames(t, function (O) { return ES.EnumerableOwnNames(O); });
+
+ t.deepEqual(
+ ES.EnumerableOwnNames(obj),
+ ['own'],
+ 'returns enumerable own names'
+ );
+
+ t.end();
+ });
+
+ test('thisNumberValue', function (t) {
+ forEach(v.nonNumbers, function (nonNumber) {
+ t['throws'](
+ function () { ES.thisNumberValue(nonNumber); },
+ TypeError,
+ debug(nonNumber) + ' is not a Number'
+ );
+ });
+
+ forEach(v.numbers, function (number) {
+ t.equal(ES.thisNumberValue(number), number, debug(number) + ' is its own thisNumberValue');
+ var obj = Object(number);
+ t.equal(ES.thisNumberValue(obj), number, debug(obj) + ' is the boxed thisNumberValue');
+ });
+
+ t.end();
+ });
+
+ test('thisBooleanValue', function (t) {
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () { ES.thisBooleanValue(nonBoolean); },
+ TypeError,
+ debug(nonBoolean) + ' is not a Boolean'
+ );
+ });
+
+ forEach(v.booleans, function (boolean) {
+ t.equal(ES.thisBooleanValue(boolean), boolean, debug(boolean) + ' is its own thisBooleanValue');
+ var obj = Object(boolean);
+ t.equal(ES.thisBooleanValue(obj), boolean, debug(obj) + ' is the boxed thisBooleanValue');
+ });
+
+ t.end();
+ });
+
+ test('thisStringValue', function (t) {
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.thisStringValue(nonString); },
+ TypeError,
+ debug(nonString) + ' is not a String'
+ );
+ });
+
+ forEach(v.strings, function (string) {
+ t.equal(ES.thisStringValue(string), string, debug(string) + ' is its own thisStringValue');
+ var obj = Object(string);
+ t.equal(ES.thisStringValue(obj), string, debug(obj) + ' is the boxed thisStringValue');
+ });
+
+ t.end();
+ });
+
+ test('thisTimeValue', function (t) {
+ forEach(v.primitives.concat(v.objects), function (nonDate) {
+ t['throws'](
+ function () { ES.thisTimeValue(nonDate); },
+ TypeError,
+ debug(nonDate) + ' is not a Date'
+ );
+ });
+
+ forEach(v.timestamps, function (timestamp) {
+ var date = new Date(timestamp);
+
+ t.equal(ES.thisTimeValue(date), timestamp, debug(date) + ' is its own thisTimeValue');
+ });
+
+ t.end();
+ });
+
+ test('SetIntegrityLevel', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.SetIntegrityLevel(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ t['throws'](
+ function () { ES.SetIntegrityLevel({}); },
+ /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/,
+ '`level` must be `"sealed"` or `"frozen"`'
+ );
+
+ var O = { a: 1 };
+ t.test('sealed', { skip: !Object.preventExtensions }, function (st) {
+ st.equal(ES.SetIntegrityLevel(O, 'sealed'), true);
+ st['throws'](
+ function () { O.b = 2; },
+ /^TypeError: (Cannot|Can't) add property b, object is not extensible$/,
+ 'sealing prevent new properties from being added'
+ );
+ O.a = 2;
+ st.equal(O.a, 2, 'pre-frozen, existing properties are mutable');
+ st.end();
+ });
+
+ t.test('frozen', { skip: !Object.freeze }, function (st) {
+ st.equal(ES.SetIntegrityLevel(O, 'frozen'), true);
+ st['throws'](
+ function () { O.a = 3; },
+ /^TypeError: Cannot assign to read only property 'a' of /,
+ 'freezing prevents existing properties from being mutated'
+ );
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('TestIntegrityLevel', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.TestIntegrityLevel(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+
+ t['throws'](
+ function () { ES.TestIntegrityLevel({ a: 1 }); },
+ /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/,
+ '`level` must be `"sealed"` or `"frozen"`'
+ );
+
+ t.equal(ES.TestIntegrityLevel({ a: 1 }, 'sealed'), false, 'basic object is not sealed');
+ t.equal(ES.TestIntegrityLevel({ a: 1 }, 'frozen'), false, 'basic object is not frozen');
+
+ t.test('preventExtensions', { skip: !Object.preventExtensions }, function (st) {
+ var o = Object.preventExtensions({ a: 1 });
+ st.equal(ES.TestIntegrityLevel(o, 'sealed'), false, 'nonextensible object is not sealed');
+ st.equal(ES.TestIntegrityLevel(o, 'frozen'), false, 'nonextensible object is not frozen');
+
+ var empty = Object.preventExtensions({});
+ st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty nonextensible object is sealed');
+ st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty nonextensible object is frozen');
+ st.end();
+ });
+
+ t.test('seal', { skip: !Object.seal }, function (st) {
+ var o = Object.seal({ a: 1 });
+ st.equal(ES.TestIntegrityLevel(o, 'sealed'), true, 'sealed object is sealed');
+ st.equal(ES.TestIntegrityLevel(o, 'frozen'), false, 'sealed object is not frozen');
+
+ var empty = Object.seal({});
+ st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty sealed object is sealed');
+ st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty sealed object is frozen');
+
+ st.end();
+ });
+
+ t.test('freeze', { skip: !Object.freeze }, function (st) {
+ var o = Object.freeze({ a: 1 });
+ st.equal(ES.TestIntegrityLevel(o, 'sealed'), true, 'frozen object is sealed');
+ st.equal(ES.TestIntegrityLevel(o, 'frozen'), true, 'frozen object is frozen');
+
+ var empty = Object.freeze({});
+ st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty frozen object is sealed');
+ st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty frozen object is frozen');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('OrdinaryHasInstance', function (t) {
+ forEach(v.nonFunctions, function (nonFunction) {
+ t.equal(ES.OrdinaryHasInstance(nonFunction, {}), false, debug(nonFunction) + ' is not callable');
+ });
+
+ forEach(v.primitives, function (primitive) {
+ t.equal(ES.OrdinaryHasInstance(function () {}, primitive), false, debug(primitive) + ' is not an object');
+ });
+
+ var C = function C() {};
+ var D = function D() {};
+ t.equal(ES.OrdinaryHasInstance(C, new C()), true, 'constructor function has an instance of itself');
+ t.equal(ES.OrdinaryHasInstance(C, new D()), false, 'constructor/instance mismatch is false');
+ t.equal(ES.OrdinaryHasInstance(D, new C()), false, 'instance/constructor mismatch is false');
+ t.equal(ES.OrdinaryHasInstance(C, {}), false, 'plain object is not an instance of a constructor');
+ t.equal(ES.OrdinaryHasInstance(Object, {}), true, 'plain object is an instance of Object');
+
+ t.end();
+ });
+
+ test('OrdinaryHasProperty', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.OrdinaryHasProperty(primitive, ''); },
+ TypeError,
+ debug(primitive) + ' is not an object'
+ );
+ });
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.OrdinaryHasProperty({}, nonPropertyKey); },
+ TypeError,
+ 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ t.equal(ES.OrdinaryHasProperty({ a: 1 }, 'a'), true, 'own property is true');
+ t.equal(ES.OrdinaryHasProperty({}, 'toString'), true, 'inherited property is true');
+ t.equal(ES.OrdinaryHasProperty({}, 'nope'), false, 'absent property is false');
+
+ t.end();
+ });
+
+ test('InstanceofOperator', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.InstanceofOperator(primitive, function () {}); },
+ TypeError,
+ debug(primitive) + ' is not an object'
+ );
+ });
+
+ forEach(v.nonFunctions, function (nonFunction) {
+ t['throws'](
+ function () { ES.InstanceofOperator({}, nonFunction); },
+ TypeError,
+ debug(nonFunction) + ' is not callable'
+ );
+ });
+
+ var C = function C() {};
+ var D = function D() {};
+
+ t.equal(ES.InstanceofOperator(new C(), C), true, 'constructor function has an instance of itself');
+ t.equal(ES.InstanceofOperator(new D(), C), false, 'constructor/instance mismatch is false');
+ t.equal(ES.InstanceofOperator(new C(), D), false, 'instance/constructor mismatch is false');
+ t.equal(ES.InstanceofOperator({}, C), false, 'plain object is not an instance of a constructor');
+ t.equal(ES.InstanceofOperator({}, Object), true, 'plain object is an instance of Object');
+
+ t.test('Symbol.hasInstance', { skip: !v.hasSymbols || !Symbol.hasInstance }, function (st) {
+ st.plan(4);
+
+ var O = {};
+ var C2 = function () {};
+ st.equal(ES.InstanceofOperator(O, C2), false, 'O is not an instance of C2');
+
+ defineProperty(C2, Symbol.hasInstance, {
+ value: function (obj) {
+ st.equal(this, C2, 'hasInstance receiver is C2');
+ st.equal(obj, O, 'hasInstance argument is O');
+
+ return {}; // testing coercion to boolean
+ }
+ });
+
+ st.equal(ES.InstanceofOperator(O, C2), true, 'O is now an instance of C2');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('Abstract Equality Comparison', function (t) {
+ t.test('same types use ===', function (st) {
+ forEach(v.primitives.concat(v.objects), function (value) {
+ st.equal(ES['Abstract Equality Comparison'](value, value), value === value, debug(value) + ' is abstractly equal to itself');
+ });
+ st.end();
+ });
+
+ t.test('different types coerce', function (st) {
+ var pairs = [
+ [null, undefined],
+ [3, '3'],
+ [true, '3'],
+ [true, 3],
+ [false, 0],
+ [false, '0'],
+ [3, [3]],
+ ['3', [3]],
+ [true, [1]],
+ [false, [0]],
+ [String(v.coercibleObject), v.coercibleObject],
+ [Number(String(v.coercibleObject)), v.coercibleObject],
+ [Number(v.coercibleObject), v.coercibleObject],
+ [String(Number(v.coercibleObject)), v.coercibleObject]
+ ];
+ forEach(pairs, function (pair) {
+ var a = pair[0];
+ var b = pair[1];
+ // eslint-disable-next-line eqeqeq
+ st.equal(ES['Abstract Equality Comparison'](a, b), a == b, debug(a) + ' == ' + debug(b));
+ // eslint-disable-next-line eqeqeq
+ st.equal(ES['Abstract Equality Comparison'](b, a), b == a, debug(b) + ' == ' + debug(a));
+ });
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('Strict Equality Comparison', function (t) {
+ t.test('same types use ===', function (st) {
+ forEach(v.primitives.concat(v.objects), function (value) {
+ st.equal(ES['Strict Equality Comparison'](value, value), value === value, debug(value) + ' is strictly equal to itself');
+ });
+ st.end();
+ });
+
+ t.test('different types are not ===', function (st) {
+ var pairs = [
+ [null, undefined],
+ [3, '3'],
+ [true, '3'],
+ [true, 3],
+ [false, 0],
+ [false, '0'],
+ [3, [3]],
+ ['3', [3]],
+ [true, [1]],
+ [false, [0]],
+ [String(v.coercibleObject), v.coercibleObject],
+ [Number(String(v.coercibleObject)), v.coercibleObject],
+ [Number(v.coercibleObject), v.coercibleObject],
+ [String(Number(v.coercibleObject)), v.coercibleObject]
+ ];
+ forEach(pairs, function (pair) {
+ var a = pair[0];
+ var b = pair[1];
+ st.equal(ES['Strict Equality Comparison'](a, b), a === b, debug(a) + ' === ' + debug(b));
+ st.equal(ES['Strict Equality Comparison'](b, a), b === a, debug(b) + ' === ' + debug(a));
+ });
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('Abstract Relational Comparison', function (t) {
+ t.test('at least one operand is NaN', function (st) {
+ st.equal(ES['Abstract Relational Comparison'](NaN, {}, true), undefined, 'LeftFirst: first is NaN, returns undefined');
+ st.equal(ES['Abstract Relational Comparison']({}, NaN, true), undefined, 'LeftFirst: second is NaN, returns undefined');
+ st.equal(ES['Abstract Relational Comparison'](NaN, {}, false), undefined, '!LeftFirst: first is NaN, returns undefined');
+ st.equal(ES['Abstract Relational Comparison']({}, NaN, false), undefined, '!LeftFirst: second is NaN, returns undefined');
+ st.end();
+ });
+
+ t.equal(ES['Abstract Relational Comparison'](3, 4, true), true, 'LeftFirst: 3 is less than 4');
+ t.equal(ES['Abstract Relational Comparison'](4, 3, true), false, 'LeftFirst: 3 is not less than 4');
+ t.equal(ES['Abstract Relational Comparison'](3, 4, false), true, '!LeftFirst: 3 is less than 4');
+ t.equal(ES['Abstract Relational Comparison'](4, 3, false), false, '!LeftFirst: 3 is not less than 4');
+
+ t.equal(ES['Abstract Relational Comparison']('3', '4', true), true, 'LeftFirst: "3" is less than "4"');
+ t.equal(ES['Abstract Relational Comparison']('4', '3', true), false, 'LeftFirst: "3" is not less than "4"');
+ t.equal(ES['Abstract Relational Comparison']('3', '4', false), true, '!LeftFirst: "3" is less than "4"');
+ t.equal(ES['Abstract Relational Comparison']('4', '3', false), false, '!LeftFirst: "3" is not less than "4"');
+
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, true), true, 'LeftFirst: coercible object is less than 42');
+ t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, true), false, 'LeftFirst: 42 is not less than coercible object');
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, false), true, '!LeftFirst: coercible object is less than 42');
+ t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, false), false, '!LeftFirst: 42 is not less than coercible object');
+
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', true), false, 'LeftFirst: coercible object is not less than "3"');
+ t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, true), false, 'LeftFirst: "3" is not less than coercible object');
+ t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', false), false, '!LeftFirst: coercible object is not less than "3"');
+ t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, false), false, '!LeftFirst: "3" is not less than coercible object');
+
+ t.end();
+ });
+
+ test('ValidateAndApplyPropertyDescriptor', function (t) {
+ forEach(v.nonUndefinedPrimitives, function (nonUndefinedPrimitive) {
+ t['throws'](
+ function () { ES.ValidateAndApplyPropertyDescriptor(nonUndefinedPrimitive, '', false, v.genericDescriptor(), v.genericDescriptor()); },
+ TypeError,
+ 'O: ' + debug(nonUndefinedPrimitive) + ' is not undefined or an Object'
+ );
+ });
+
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () {
+ return ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ null,
+ nonBoolean,
+ v.genericDescriptor(),
+ v.genericDescriptor()
+ );
+ },
+ TypeError,
+ 'extensible: ' + debug(nonBoolean) + ' is not a Boolean'
+ );
+ });
+
+ forEach(v.primitives, function (primitive) {
+ // Desc must be a Property Descriptor
+ t['throws'](
+ function () {
+ return ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ null,
+ false,
+ primitive,
+ v.genericDescriptor()
+ );
+ },
+ TypeError,
+ 'Desc: ' + debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ // current must be undefined or a Property Descriptor
+ t['throws'](
+ function () {
+ return ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ null,
+ false,
+ v.genericDescriptor(),
+ primitive
+ );
+ },
+ TypeError,
+ 'current: ' + debug(primitive) + ' is not a Property Descriptor or undefined'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ // if O is an object, P must be a property key
+ t['throws'](
+ function () {
+ return ES.ValidateAndApplyPropertyDescriptor(
+ {},
+ nonPropertyKey,
+ false,
+ v.genericDescriptor(),
+ v.genericDescriptor()
+ );
+ },
+ TypeError,
+ 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ t.test('current is undefined', function (st) {
+ var propertyKey = 'howdy';
+
+ st.test('generic descriptor', function (s2t) {
+ var generic = v.genericDescriptor();
+ generic['[[Enumerable]]'] = true;
+ var O = {};
+ ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, generic);
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, generic),
+ false,
+ 'when extensible is false, nothing happens'
+ );
+ s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false');
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, generic),
+ true,
+ 'operation is successful'
+ );
+ var expected = {};
+ expected[propertyKey] = undefined;
+ s2t.deepEqual(O, expected, 'generic descriptor has been defined as an own data property');
+ s2t.end();
+ });
+
+ st.test('data descriptor', function (s2t) {
+ var data = v.dataDescriptor();
+ data['[[Enumerable]]'] = true;
+
+ var O = {};
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, data),
+ true,
+ 'noop when O is undefined'
+ );
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, data),
+ false,
+ 'when extensible is false, nothing happens'
+ );
+ s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false');
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, data),
+ true,
+ 'operation is successful'
+ );
+ var expected = {};
+ expected[propertyKey] = data['[[Value]]'];
+ s2t.deepEqual(O, expected, 'data descriptor has been defined as an own data property');
+ s2t.end();
+ });
+
+ st.test('accessor descriptor', { skip: !defineProperty.oDP }, function (s2t) {
+ var count = 0;
+ var accessor = v.accessorDescriptor();
+ accessor['[[Enumerable]]'] = true;
+ accessor['[[Get]]'] = function () {
+ count += 1;
+ return count;
+ };
+
+ var O = {};
+ ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, accessor);
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, accessor),
+ false,
+ 'when extensible is false, nothing happens'
+ );
+ s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false');
+ s2t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, accessor),
+ true,
+ 'operation is successful'
+ );
+ var expected = {};
+ expected[propertyKey] = accessor['[[Get]]']() + 1;
+ s2t.deepEqual(O, expected, 'accessor descriptor has been defined as an own accessor property');
+ s2t.end();
+ });
+
+ st.end();
+ });
+
+ t.test('every field in Desc is absent', { skip: 'it is unclear if having no fields qualifies Desc to be a Property Descriptor' });
+
+ forEach([v.dataDescriptor, v.accessorDescriptor, v.mutatorDescriptor], function (getDescriptor) {
+ t.equal(
+ ES.ValidateAndApplyPropertyDescriptor(undefined, 'property key', true, getDescriptor(), getDescriptor()),
+ true,
+ 'when Desc and current are the same, early return true'
+ );
+ });
+
+ t.test('current is nonconfigurable', function (st) {
+ // note: these must not be generic descriptors, or else the algorithm returns an early true
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.configurable(v.dataDescriptor()),
+ v.descriptors.nonConfigurable(v.dataDescriptor())
+ ),
+ false,
+ 'false if Desc is configurable'
+ );
+
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.enumerable(v.dataDescriptor()),
+ v.descriptors.nonEnumerable(v.dataDescriptor())
+ ),
+ false,
+ 'false if Desc is Enumerable and current is not'
+ );
+
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.nonEnumerable(v.dataDescriptor()),
+ v.descriptors.enumerable(v.dataDescriptor())
+ ),
+ false,
+ 'false if Desc is not Enumerable and current is'
+ );
+
+ var descLackingEnumerable = v.accessorDescriptor();
+ delete descLackingEnumerable['[[Enumerable]]'];
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ descLackingEnumerable,
+ v.descriptors.enumerable(v.accessorDescriptor())
+ ),
+ true,
+ 'not false if Desc lacks Enumerable'
+ );
+
+ st.end();
+ });
+
+ t.test('Desc and current: one is a data descriptor, one is not', { skip: !defineProperty || !getOwnPropertyDescriptor }, function (st) {
+ // note: Desc must be configurable if current is nonconfigurable, to hit this branch
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.configurable(v.accessorDescriptor()),
+ v.descriptors.nonConfigurable(v.dataDescriptor())
+ ),
+ false,
+ 'false if current (data) is nonconfigurable'
+ );
+
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.configurable(v.dataDescriptor()),
+ v.descriptors.nonConfigurable(v.accessorDescriptor())
+ ),
+ false,
+ 'false if current (not data) is nonconfigurable'
+ );
+
+ // one is data and one is not,
+ // // if current is data, convert to accessor
+ // // else convert to data
+
+ var startsWithData = {
+ 'property key': 42
+ };
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ startsWithData,
+ 'property key',
+ true,
+ v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor())),
+ v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor()))
+ ),
+ true,
+ 'operation is successful: current is data, Desc is accessor'
+ );
+ var shouldBeAccessor = getOwnPropertyDescriptor(startsWithData, 'property key');
+ st.equal(typeof shouldBeAccessor.get, 'function', 'has a getter');
+
+ var key = 'property key';
+ var startsWithAccessor = {};
+ defineProperty(startsWithAccessor, key, {
+ configurable: true,
+ enumerable: true,
+ get: function get() { return 42; }
+ });
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ startsWithAccessor,
+ key,
+ true,
+ v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor())),
+ v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor(42)))
+ ),
+ true,
+ 'operation is successful: current is accessor, Desc is data'
+ );
+ var shouldBeData = getOwnPropertyDescriptor(startsWithAccessor, 'property key');
+ st.deepEqual(shouldBeData, { configurable: true, enumerable: true, value: 42, writable: false }, 'is a data property');
+
+ st.end();
+ });
+
+ t.test('Desc and current are both data descriptors', function (st) {
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.writable(v.dataDescriptor()),
+ v.descriptors.nonWritable(v.descriptors.nonConfigurable(v.dataDescriptor()))
+ ),
+ false,
+ 'false if frozen current and writable Desc'
+ );
+
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.descriptors.configurable({ '[[Value]]': 42 }),
+ v.descriptors.nonWritable({ '[[Value]]': 7 })
+ ),
+ false,
+ 'false if nonwritable current has a different value than Desc'
+ );
+
+ st.end();
+ });
+
+ t.test('current is nonconfigurable; Desc and current are both accessor descriptors', function (st) {
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.mutatorDescriptor(),
+ v.descriptors.nonConfigurable(v.mutatorDescriptor())
+ ),
+ false,
+ 'false if both Sets are not equal'
+ );
+
+ st.equal(
+ ES.ValidateAndApplyPropertyDescriptor(
+ undefined,
+ 'property key',
+ true,
+ v.accessorDescriptor(),
+ v.descriptors.nonConfigurable(v.accessorDescriptor())
+ ),
+ false,
+ 'false if both Gets are not equal'
+ );
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('OrdinaryGetOwnProperty', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.OrdinaryGetOwnProperty(primitive, ''); },
+ TypeError,
+ 'O: ' + debug(primitive) + ' is not an Object'
+ );
+ });
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.OrdinaryGetOwnProperty({}, nonPropertyKey); },
+ TypeError,
+ 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ t.equal(ES.OrdinaryGetOwnProperty({}, 'not in the object'), undefined, 'missing property yields undefined');
+ t.equal(ES.OrdinaryGetOwnProperty({}, 'toString'), undefined, 'inherited non-own property yields undefined');
+
+ t.deepEqual(
+ ES.OrdinaryGetOwnProperty({ a: 1 }, 'a'),
+ ES.ToPropertyDescriptor({
+ configurable: true,
+ enumerable: true,
+ value: 1,
+ writable: true
+ }),
+ 'own assigned data property yields expected descriptor'
+ );
+
+ t.deepEqual(
+ ES.OrdinaryGetOwnProperty(/a/, 'lastIndex'),
+ ES.ToPropertyDescriptor({
+ configurable: false,
+ enumerable: false,
+ value: 0,
+ writable: true
+ }),
+ 'regex lastIndex yields expected descriptor'
+ );
+
+ t.deepEqual(
+ ES.OrdinaryGetOwnProperty([], 'length'),
+ ES.ToPropertyDescriptor({
+ configurable: false,
+ enumerable: false,
+ value: 0,
+ writable: true
+ }),
+ 'array length yields expected descriptor'
+ );
+
+ t.deepEqual(
+ ES.OrdinaryGetOwnProperty(Object.prototype, 'toString'),
+ ES.ToPropertyDescriptor({
+ configurable: true,
+ enumerable: false,
+ value: Object.prototype.toString,
+ writable: true
+ }),
+ 'own non-enumerable data property yields expected descriptor'
+ );
+
+ t.test('ES5+', { skip: !defineProperty.oDP }, function (st) {
+ var O = {};
+ defineProperty(O, 'foo', {
+ configurable: false,
+ enumerable: false,
+ value: O,
+ writable: true
+ });
+
+ st.deepEqual(
+ ES.OrdinaryGetOwnProperty(O, 'foo'),
+ ES.ToPropertyDescriptor({
+ configurable: false,
+ enumerable: false,
+ value: O,
+ writable: true
+ }),
+ 'defined own property yields expected descriptor'
+ );
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('OrdinaryDefineOwnProperty', { skip: !getOwnPropertyDescriptor }, function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.CopyDataProperties(primitive, {}, []); },
+ TypeError,
+ 'O: ' + debug(primitive) + ' is not an Object'
+ );
+ });
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.OrdinaryDefineOwnProperty({}, nonPropertyKey, v.genericDescriptor()); },
+ TypeError,
+ 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.OrdinaryDefineOwnProperty(primitive, '', v.genericDescriptor()); },
+ TypeError,
+ 'Desc: ' + debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ var O = {};
+ var P = 'property key';
+ var Desc = v.accessorDescriptor();
+ t.equal(
+ ES.OrdinaryDefineOwnProperty(O, P, Desc),
+ true,
+ 'operation is successful'
+ );
+ t.deepEqual(
+ getOwnPropertyDescriptor(O, P),
+ ES.FromPropertyDescriptor(ES.CompletePropertyDescriptor(Desc)),
+ 'expected property descriptor is defined'
+ );
+
+ t.end();
+ });
+
+ test('ArrayCreate', function (t) {
+ forEach(v.nonIntegerNumbers.concat([-1]), function (nonIntegerNumber) {
+ t['throws'](
+ function () { ES.ArrayCreate(nonIntegerNumber); },
+ TypeError,
+ 'length must be an integer number >= 0'
+ );
+ });
+
+ t['throws'](
+ function () { ES.ArrayCreate(Math.pow(2, 32)); },
+ RangeError,
+ 'length must be < 2**32'
+ );
+
+ t.deepEqual(ES.ArrayCreate(-0), [], 'length of -0 creates an empty array');
+ t.deepEqual(ES.ArrayCreate(0), [], 'length of +0 creates an empty array');
+ // eslint-disable-next-line no-sparse-arrays, comma-spacing
+ t.deepEqual(ES.ArrayCreate(1), [,], 'length of 1 creates a sparse array of length 1');
+ // eslint-disable-next-line no-sparse-arrays, comma-spacing
+ t.deepEqual(ES.ArrayCreate(2), [,,], 'length of 2 creates a sparse array of length 2');
+
+ t.test('proto argument', { skip: !$setProto }, function (st) {
+ var fakeProto = {
+ push: { toString: function () { return 'not array push'; } }
+ };
+ st.equal(ES.ArrayCreate(0, fakeProto).push, fakeProto.push, 'passing the proto argument works');
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('ArraySetLength', function (t) {
+ forEach(v.primitives.concat(v.objects), function (nonArray) {
+ t['throws'](
+ function () { ES.ArraySetLength(nonArray, 0); },
+ TypeError,
+ 'A: ' + debug(nonArray) + ' is not an Array'
+ );
+ });
+
+ forEach(v.nonUndefinedPrimitives, function (primitive) {
+ t['throws'](
+ function () { ES.ArraySetLength([], primitive); },
+ TypeError,
+ 'Desc: ' + debug(primitive) + ' is not a Property Descriptor'
+ );
+ });
+
+ t.test('making length nonwritable', { skip: !getOwnPropertyDescriptor }, function (st) {
+ var a = [];
+ ES.ArraySetLength(a, { '[[Writable]]': false });
+ st.deepEqual(
+ getOwnPropertyDescriptor(a, 'length'),
+ {
+ configurable: false,
+ enumerable: false,
+ value: 0,
+ writable: false
+ },
+ 'without a value, length becomes nonwritable'
+ );
+ st.end();
+ });
+
+ var arr = [];
+ ES.ArraySetLength(arr, { '[[Value]]': 7 });
+ t.equal(arr.length, 7, 'array now has a length of 7');
+
+ t.end();
+ });
+
+ test('CreateHTML', function (t) {
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.CreateHTML('', nonString, '', ''); },
+ TypeError,
+ 'tag: ' + debug(nonString) + ' is not a String'
+ );
+ t['throws'](
+ function () { ES.CreateHTML('', '', nonString, ''); },
+ TypeError,
+ 'attribute: ' + debug(nonString) + ' is not a String'
+ );
+ });
+
+ t.equal(
+ ES.CreateHTML(
+ { toString: function () { return 'the string'; } },
+ 'some HTML tag!',
+ ''
+ ),
+ '<some HTML tag!>the string</some HTML tag!>',
+ 'works with an empty string attribute value'
+ );
+
+ t.equal(
+ ES.CreateHTML(
+ { toString: function () { return 'the string'; } },
+ 'some HTML tag!',
+ 'attr',
+ 'value "with quotes"'
+ ),
+ '<some HTML tag! attr="value "with quotes"">the string</some HTML tag!>',
+ 'works with an attribute, and a value with quotes'
+ );
+
+ t.end();
+ });
+
+ test('GetOwnPropertyKeys', function (t) {
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.GetOwnPropertyKeys(primitive, 'String'); },
+ TypeError,
+ 'O: ' + debug(primitive) + ' is not an Object'
+ );
+ });
+
+ t['throws'](
+ function () { ES.GetOwnPropertyKeys({}, 'not string or symbol'); },
+ TypeError,
+ 'Type: must be "String" or "Symbol"'
+ );
+
+ t.test('Symbols', { skip: !v.hasSymbols }, function (st) {
+ var O = { a: 1 };
+ O[Symbol.iterator] = true;
+ var s = Symbol('test');
+ defineProperty(O, s, { enumerable: false, value: true });
+
+ st.deepEqual(
+ ES.GetOwnPropertyKeys(O, 'Symbol'),
+ [Symbol.iterator, s],
+ 'works with Symbols, enumerable or not'
+ );
+
+ st.end();
+ });
+
+ t.test('non-enumerable names', { skip: !defineProperty.oDP }, function (st) {
+ var O = { a: 1 };
+ defineProperty(O, 'b', { enumerable: false, value: 2 });
+ if (v.hasSymbols) {
+ O[Symbol.iterator] = true;
+ }
+
+ st.deepEqual(
+ ES.GetOwnPropertyKeys(O, 'String').sort(),
+ ['a', 'b'].sort(),
+ 'works with Strings, enumerable or not'
+ );
+
+ st.end();
+ });
+
+ t.deepEqual(
+ ES.GetOwnPropertyKeys({ a: 1, b: 2 }, 'String').sort(),
+ ['a', 'b'].sort(),
+ 'works with enumerable keys'
+ );
+
+ t.end();
+ });
+
+ test('SymbolDescriptiveString', function (t) {
+ forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) {
+ t['throws'](
+ function () { ES.SymbolDescriptiveString(nonSymbol); },
+ TypeError,
+ debug(nonSymbol) + ' is not a Symbol'
+ );
+ });
+
+ t.test('Symbols', { skip: !v.hasSymbols }, function (st) {
+ st.equal(ES.SymbolDescriptiveString(Symbol()), 'Symbol()', 'undefined description');
+ st.equal(ES.SymbolDescriptiveString(Symbol('')), 'Symbol()', 'empty string description');
+ st.equal(ES.SymbolDescriptiveString(Symbol.iterator), 'Symbol(Symbol.iterator)', 'well-known symbol');
+ st.equal(ES.SymbolDescriptiveString(Symbol('foo')), 'Symbol(foo)', 'string description');
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('GetSubstitution', { skip: skips && skips.GetSubstitution }, function (t) {
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.GetSubstitution(nonString, '', 0, [], ''); },
+ TypeError,
+ '`matched`: ' + debug(nonString) + ' is not a String'
+ );
+
+ t['throws'](
+ function () { ES.GetSubstitution('', nonString, 0, [], ''); },
+ TypeError,
+ '`str`: ' + debug(nonString) + ' is not a String'
+ );
+
+ t['throws'](
+ function () { ES.GetSubstitution('', '', 0, [], nonString); },
+ TypeError,
+ '`replacement`: ' + debug(nonString) + ' is not a String'
+ );
+
+ if (canDistinguishSparseFromUndefined || typeof nonString !== 'undefined') {
+ t['throws'](
+ function () { ES.GetSubstitution('', '', 0, [nonString], ''); },
+ TypeError,
+ '`captures`: ' + debug([nonString]) + ' is not an Array of strings'
+ );
+ }
+ });
+
+ forEach(v.nonIntegerNumbers.concat([-1, -42, -Infinity]), function (nonNonNegativeInteger) {
+ t['throws'](
+ function () { ES.GetSubstitution('', '', nonNonNegativeInteger, [], ''); },
+ TypeError,
+ '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer'
+ );
+ });
+
+ forEach(v.nonArrays, function (nonArray) {
+ t['throws'](
+ function () { ES.GetSubstitution('', '', 0, nonArray, ''); },
+ TypeError,
+ '`captures`: ' + debug(nonArray) + ' is not an Array'
+ );
+ });
+
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 3, [], '123'),
+ '123',
+ 'returns the substitution'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '$$2$'),
+ '$2$',
+ 'supports $$, and trailing $'
+ );
+
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$&<'),
+ '>abcdef<',
+ 'supports $&'
+ );
+
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$`<'),
+ '><',
+ 'supports $` at position 0'
+ );
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 3, [], '>$`<'),
+ '>ab<',
+ 'supports $` at position > 0'
+ );
+
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 7, [], ">$'<"),
+ '><',
+ "supports $' at a position where there's less than `matched.length` chars left"
+ );
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 3, [], ">$'<"),
+ '>ghi<',
+ "supports $' at a position where there's more than `matched.length` chars left"
+ );
+
+ for (var i = 0; i < 100; i += 1) {
+ var captures = [];
+ captures[i] = 'test';
+ if (i > 0) {
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$' + i + '<'),
+ '>undefined<',
+ 'supports $' + i + ' with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$' + i),
+ '>undefined',
+ 'supports $' + i + ' at the end of the replacement, with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$' + i + '<'),
+ '><',
+ 'supports $' + i + ' with a capture at that index'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$' + i),
+ '>',
+ 'supports $' + i + ' at the end of the replacement, with a capture at that index'
+ );
+ }
+ if (i < 10) {
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$0' + i + '<'),
+ i === 0 ? '><' : '>undefined<',
+ 'supports $0' + i + ' with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$0' + i),
+ i === 0 ? '>' : '>undefined',
+ 'supports $0' + i + ' at the end of the replacement, with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$0' + i + '<'),
+ '><',
+ 'supports $0' + i + ' with a capture at that index'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$0' + i),
+ '>',
+ 'supports $0' + i + ' at the end of the replacement, with a capture at that index'
+ );
+ }
+ }
+
+ t.end();
+ });
+
+ test('SecFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.SecFromTime(now.getTime()), now.getUTCSeconds(), 'second from Date timestamp matches getUTCSeconds');
+ t.end();
+ });
+
+ test('MinFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.MinFromTime(now.getTime()), now.getUTCMinutes(), 'minute from Date timestamp matches getUTCMinutes');
+ t.end();
+ });
+
+ test('HourFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.HourFromTime(now.getTime()), now.getUTCHours(), 'hour from Date timestamp matches getUTCHours');
+ t.end();
+ });
+
+ test('msFromTime', function (t) {
+ var now = new Date();
+ t.equal(ES.msFromTime(now.getTime()), now.getUTCMilliseconds(), 'ms from Date timestamp matches getUTCMilliseconds');
+ t.end();
+ });
+
+ var msPerSecond = 1e3;
+ var msPerMinute = 60 * msPerSecond;
+ var msPerHour = 60 * msPerMinute;
+ var msPerDay = 24 * msPerHour;
+
+ test('Day', function (t) {
+ var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5);
+ var add = 2.5;
+ var later = new Date(time + (add * msPerDay));
+
+ t.equal(ES.Day(later.getTime()), ES.Day(time) + Math.floor(add), 'adding 2.5 days worth of ms, gives a Day delta of 2');
+ t.end();
+ });
+
+ test('TimeWithinDay', function (t) {
+ var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5);
+ var add = 2.5;
+ var later = new Date(time + (add * msPerDay));
+
+ t.equal(ES.TimeWithinDay(later.getTime()), ES.TimeWithinDay(time) + (0.5 * msPerDay), 'adding 2.5 days worth of ms, gives a TimeWithinDay delta of +0.5');
+ t.end();
+ });
+
+ test('DayFromYear', function (t) {
+ t.equal(ES.DayFromYear(2021) - ES.DayFromYear(2020), 366, '2021 is a leap year, has 366 days');
+ t.equal(ES.DayFromYear(2020) - ES.DayFromYear(2019), 365, '2020 is not a leap year, has 365 days');
+ t.equal(ES.DayFromYear(2019) - ES.DayFromYear(2018), 365, '2019 is not a leap year, has 365 days');
+ t.equal(ES.DayFromYear(2018) - ES.DayFromYear(2017), 365, '2018 is not a leap year, has 365 days');
+ t.equal(ES.DayFromYear(2017) - ES.DayFromYear(2016), 366, '2017 is a leap year, has 366 days');
+
+ t.end();
+ });
+
+ test('TimeFromYear', function (t) {
+ for (var i = 1900; i < 2100; i += 1) {
+ t.equal(ES.TimeFromYear(i), Date.UTC(i, 0, 1), 'TimeFromYear matches a Date object’s year: ' + i);
+ }
+ t.end();
+ });
+
+ test('YearFromTime', function (t) {
+ for (var i = 1900; i < 2100; i += 1) {
+ t.equal(ES.YearFromTime(Date.UTC(i, 0, 1)), i, 'YearFromTime matches a Date object’s year on 1/1: ' + i);
+ t.equal(ES.YearFromTime(Date.UTC(i, 10, 1)), i, 'YearFromTime matches a Date object’s year on 10/1: ' + i);
+ }
+ t.end();
+ });
+
+ test('WeekDay', function (t) {
+ var now = new Date();
+ var today = now.getUTCDay();
+ for (var i = 0; i < 7; i += 1) {
+ var weekDay = ES.WeekDay(now.getTime() + (i * msPerDay));
+ t.equal(weekDay, (today + i) % 7, i + ' days after today (' + today + '), WeekDay is ' + weekDay);
+ }
+ t.end();
+ });
+
+ test('DaysInYear', function (t) {
+ t.equal(ES.DaysInYear(2021), 365, '2021 is not a leap year');
+ t.equal(ES.DaysInYear(2020), 366, '2020 is a leap year');
+ t.equal(ES.DaysInYear(2019), 365, '2019 is not a leap year');
+ t.equal(ES.DaysInYear(2018), 365, '2018 is not a leap year');
+ t.equal(ES.DaysInYear(2017), 365, '2017 is not a leap year');
+ t.equal(ES.DaysInYear(2016), 366, '2016 is a leap year');
+
+ t.end();
+ });
+
+ test('InLeapYear', function (t) {
+ t.equal(ES.InLeapYear(Date.UTC(2021, 0, 1)), 0, '2021 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2020, 0, 1)), 1, '2020 is a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2019, 0, 1)), 0, '2019 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2018, 0, 1)), 0, '2018 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2017, 0, 1)), 0, '2017 is not a leap year');
+ t.equal(ES.InLeapYear(Date.UTC(2016, 0, 1)), 1, '2016 is a leap year');
+
+ t.end();
+ });
+
+ test('DayWithinYear', function (t) {
+ t.equal(ES.DayWithinYear(Date.UTC(2019, 0, 1)), 0, '1/1 is the 1st day');
+ t.equal(ES.DayWithinYear(Date.UTC(2019, 11, 31)), 364, '12/31 is the 365th day in a non leap year');
+ t.equal(ES.DayWithinYear(Date.UTC(2016, 11, 31)), 365, '12/31 is the 366th day in a leap year');
+
+ t.end();
+ });
+
+ test('MonthFromTime', function (t) {
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 1)), 0, 'non-leap: 1/1 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 31)), 0, 'non-leap: 1/31 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 1)), 1, 'non-leap: 2/1 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 28)), 1, 'non-leap: 2/28 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 29)), 2, 'non-leap: 2/29 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 1)), 2, 'non-leap: 3/1 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 31)), 2, 'non-leap: 3/31 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 1)), 3, 'non-leap: 4/1 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 30)), 3, 'non-leap: 4/30 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 1)), 4, 'non-leap: 5/1 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 31)), 4, 'non-leap: 5/31 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 1)), 5, 'non-leap: 6/1 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 30)), 5, 'non-leap: 6/30 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 1)), 6, 'non-leap: 7/1 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 31)), 6, 'non-leap: 7/31 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 1)), 7, 'non-leap: 8/1 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 30)), 7, 'non-leap: 8/30 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 1)), 8, 'non-leap: 9/1 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 30)), 8, 'non-leap: 9/30 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 1)), 9, 'non-leap: 10/1 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 31)), 9, 'non-leap: 10/31 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 1)), 10, 'non-leap: 11/1 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 30)), 10, 'non-leap: 11/30 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 1)), 11, 'non-leap: 12/1 gives December');
+ t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 31)), 11, 'non-leap: 12/31 gives December');
+
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 1)), 0, 'leap: 1/1 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 31)), 0, 'leap: 1/31 gives January');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 1)), 1, 'leap: 2/1 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 28)), 1, 'leap: 2/28 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 29)), 1, 'leap: 2/29 gives February');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 1)), 2, 'leap: 3/1 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 31)), 2, 'leap: 3/31 gives March');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 1)), 3, 'leap: 4/1 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 30)), 3, 'leap: 4/30 gives April');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 1)), 4, 'leap: 5/1 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 31)), 4, 'leap: 5/31 gives May');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 1)), 5, 'leap: 6/1 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 30)), 5, 'leap: 6/30 gives June');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 1)), 6, 'leap: 7/1 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 31)), 6, 'leap: 7/31 gives July');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 1)), 7, 'leap: 8/1 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 30)), 7, 'leap: 8/30 gives August');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 1)), 8, 'leap: 9/1 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 30)), 8, 'leap: 9/30 gives September');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 1)), 9, 'leap: 10/1 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 31)), 9, 'leap: 10/31 gives October');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 1)), 10, 'leap: 11/1 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 30)), 10, 'leap: 11/30 gives November');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 1)), 11, 'leap: 12/1 gives December');
+ t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 31)), 11, 'leap: 12/31 gives December');
+ t.end();
+ });
+
+ test('DateFromTime', function (t) {
+ var i;
+ for (i = 1; i <= 28; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2019, 1, i)), i, '2019.02.' + i + ' is date ' + i);
+ }
+ for (i = 1; i <= 29; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2016, 1, i)), i, '2016.02.' + i + ' is date ' + i);
+ }
+ for (i = 1; i <= 30; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2019, 8, i)), i, '2019.09.' + i + ' is date ' + i);
+ }
+ for (i = 1; i <= 31; i += 1) {
+ t.equal(ES.DateFromTime(Date.UTC(2019, 9, i)), i, '2019.10.' + i + ' is date ' + i);
+ }
+ t.end();
+ });
+
+ test('MakeDay', function (t) {
+ var day2015 = 16687;
+ t.equal(ES.MakeDay(2015, 8, 9), day2015, '2015.09.09 is day 16687');
+ var day2016 = day2015 + 366; // 2016 is a leap year
+ t.equal(ES.MakeDay(2016, 8, 9), day2016, '2015.09.09 is day 17053');
+ var day2017 = day2016 + 365;
+ t.equal(ES.MakeDay(2017, 8, 9), day2017, '2017.09.09 is day 17418');
+ var day2018 = day2017 + 365;
+ t.equal(ES.MakeDay(2018, 8, 9), day2018, '2018.09.09 is day 17783');
+ var day2019 = day2018 + 365;
+ t.equal(ES.MakeDay(2019, 8, 9), day2019, '2019.09.09 is day 18148');
+ t.end();
+ });
+
+ test('MakeDate', function (t) {
+ forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
+ t.ok(is(ES.MakeDate(nonFiniteNumber, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `day`');
+ t.ok(is(ES.MakeDate(0, nonFiniteNumber), NaN), debug(nonFiniteNumber) + ' is not a finite `time`');
+ });
+ t.equal(ES.MakeDate(0, 0), 0, 'zero day and zero time is zero date');
+ t.equal(ES.MakeDate(0, 123), 123, 'zero day and nonzero time is a date of the "time"');
+ t.equal(ES.MakeDate(1, 0), msPerDay, 'day of 1 and zero time is a date of "ms per day"');
+ t.equal(ES.MakeDate(3, 0), 3 * msPerDay, 'day of 3 and zero time is a date of thrice "ms per day"');
+ t.equal(ES.MakeDate(1, 123), msPerDay + 123, 'day of 1 and nonzero time is a date of "ms per day" plus the "time"');
+ t.equal(ES.MakeDate(3, 123), (3 * msPerDay) + 123, 'day of 3 and nonzero time is a date of thrice "ms per day" plus the "time"');
+
+ t.end();
+ });
+
+ test('MakeTime', function (t) {
+ forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
+ t.ok(is(ES.MakeTime(nonFiniteNumber, 0, 0, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `hour`');
+ t.ok(is(ES.MakeTime(0, nonFiniteNumber, 0, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `min`');
+ t.ok(is(ES.MakeTime(0, 0, nonFiniteNumber, 0), NaN), debug(nonFiniteNumber) + ' is not a finite `sec`');
+ t.ok(is(ES.MakeTime(0, 0, 0, nonFiniteNumber), NaN), debug(nonFiniteNumber) + ' is not a finite `ms`');
+ });
+
+ t.equal(
+ ES.MakeTime(1.2, 2.3, 3.4, 4.5),
+ (1 * msPerHour) + (2 * msPerMinute) + (3 * msPerSecond) + 4,
+ 'all numbers are converted to integer, multiplied by the right number of ms, and summed'
+ );
+
+ t.end();
+ });
+
+ test('TimeClip', function (t) {
+ forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
+ t.ok(is(ES.TimeClip(nonFiniteNumber), NaN), debug(nonFiniteNumber) + ' is not a finite `time`');
+ });
+ t.ok(is(ES.TimeClip(8.64e15 + 1), NaN), '8.64e15 is the largest magnitude considered "finite"');
+ t.ok(is(ES.TimeClip(-8.64e15 - 1), NaN), '-8.64e15 is the largest magnitude considered "finite"');
+
+ forEach(v.zeroes.concat([-10, 10, +new Date()]), function (time) {
+ t.looseEqual(ES.TimeClip(time), time, debug(time) + ' is a time of ' + debug(time));
+ });
+
+ t.end();
+ });
+
+ test('modulo', function (t) {
+ t.equal(3 % 2, 1, '+3 % 2 is +1');
+ t.equal(ES.modulo(3, 2), 1, '+3 mod 2 is +1');
+
+ t.equal(-3 % 2, -1, '-3 % 2 is -1');
+ t.equal(ES.modulo(-3, 2), 1, '-3 mod 2 is +1');
+ t.end();
+ });
+
+ test('ToDateString', function (t) {
+ forEach(v.nonNumbers, function (nonNumber) {
+ t['throws'](
+ function () { ES.ToDateString(nonNumber); },
+ TypeError,
+ debug(nonNumber) + ' is not a Number'
+ );
+ });
+
+ t.equal(ES.ToDateString(NaN), 'Invalid Date', 'NaN becomes "Invalid Date"');
+ var now = +new Date();
+ t.equal(ES.ToDateString(now), Date(now), 'any timestamp becomes `Date(timestamp)`');
+ t.end();
+ });
+
+ test('CreateListFromArrayLike', function (t) {
+ forEach(v.primitives, function (nonObject) {
+ t['throws'](
+ function () { ES.CreateListFromArrayLike(nonObject); },
+ TypeError,
+ debug(nonObject) + ' is not an Object'
+ );
+ });
+ forEach(v.nonArrays, function (nonArray) {
+ t['throws'](
+ function () { ES.CreateListFromArrayLike({}, nonArray); },
+ TypeError,
+ debug(nonArray) + ' is not an Array'
+ );
+ });
+
+ t.deepEqual(
+ ES.CreateListFromArrayLike({ length: 2, 0: 'a', 1: 'b', 2: 'c' }),
+ ['a', 'b'],
+ 'arraylike stops at the length'
+ );
+
+ t.end();
+ });
+
+ test('GetPrototypeFromConstructor', function (t) {
+ forEach(v.nonFunctions, function (nonFunction) {
+ t['throws'](
+ function () { ES.GetPrototypeFromConstructor(nonFunction, '%Array%'); },
+ TypeError,
+ debug(nonFunction) + ' is not a constructor'
+ );
+ });
+
+ forEach(arrowFns, function (arrowFn) {
+ t['throws'](
+ function () { ES.GetPrototypeFromConstructor(arrowFn, '%Array%'); },
+ TypeError,
+ debug(arrowFn) + ' is not a constructor'
+ );
+ });
+
+ var f = function () {};
+ t.equal(
+ ES.GetPrototypeFromConstructor(f, '%Array.prototype%'),
+ f.prototype,
+ 'function with normal `prototype` property returns it'
+ );
+ forEach([true, 'foo', 42], function (truthyPrimitive) {
+ f.prototype = truthyPrimitive;
+ t.equal(
+ ES.GetPrototypeFromConstructor(f, '%Array.prototype%'),
+ Array.prototype,
+ 'function with non-object `prototype` property (' + debug(truthyPrimitive) + ') returns default intrinsic'
+ );
+ });
+
+ t.end();
+ });
+
+ var getNamelessFunction = function () {
+ var f = Object(function () {});
+ try {
+ delete f.name;
+ } catch (e) { /**/ }
+ return f;
+ };
+
+ test('SetFunctionName', function (t) {
+ t.test('non-extensible function', { skip: !Object.preventExtensions }, function (st) {
+ var f = getNamelessFunction();
+ Object.preventExtensions(f);
+ st['throws'](
+ function () { ES.SetFunctionName(f, ''); },
+ TypeError,
+ 'throws on a non-extensible function'
+ );
+ st.end();
+ });
+
+ t.test('has an own name property', { skip: !functionsHaveNames }, function (st) {
+ st['throws'](
+ function () { ES.SetFunctionName(function g() {}, ''); },
+ TypeError,
+ 'throws if function has an own `name` property'
+ );
+ st.end();
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ t['throws'](
+ function () { ES.SetFunctionName(getNamelessFunction(), nonPropertyKey); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a Symbol or String'
+ );
+ });
+
+ t.test('symbols', { skip: !v.hasSymbols || has(getNamelessFunction(), 'name') }, function (st) {
+ var pairs = [
+ [Symbol(), ''],
+ [Symbol(undefined), ''],
+ [Symbol(null), '[null]'],
+ [Symbol(''), getInferredName ? '[]' : ''],
+ [Symbol.iterator, '[Symbol.iterator]'],
+ [Symbol('foo'), '[foo]']
+ ];
+ forEach(pairs, function (pair) {
+ var sym = pair[0];
+ var desc = pair[1];
+ var f = getNamelessFunction();
+ ES.SetFunctionName(f, sym);
+ st.equal(f.name, desc, debug(sym) + ' yields a name of ' + debug(desc));
+ });
+
+ st.end();
+ });
+
+ var f = getNamelessFunction();
+ t.test('when names are configurable', { skip: !functionsHaveConfigurableNames || has(f, 'name') }, function (st) {
+ // without prefix
+ st.notEqual(f.name, 'foo', 'precondition');
+ ES.SetFunctionName(f, 'foo');
+ st.equal(f.name, 'foo', 'function name is set without a prefix');
+
+ // with prefix
+ var g = getNamelessFunction();
+ st.notEqual(g.name, 'pre- foo', 'precondition');
+ ES.SetFunctionName(g, 'foo', 'pre-');
+ st.equal(g.name, 'pre- foo', 'function name is set with a prefix');
+
+ st.end();
+ });
+
+ t.end();
+ });
+};
+
+var es2016 = function ES2016(ES, ops, expectedMissing, skips) {
+ es2015(ES, ops, expectedMissing, skips);
+
+ test('SameValueNonNumber', function (t) {
+ var willThrow = [
+ [3, 4],
+ [NaN, 4],
+ [4, ''],
+ ['abc', true],
+ [{}, false]
+ ];
+ forEach(willThrow, function (nums) {
+ t['throws'](function () { return ES.SameValueNonNumber.apply(ES, nums); }, TypeError, 'value must be same type and non-number');
+ });
+
+ forEach(v.objects.concat(v.nonNumberPrimitives), function (val) {
+ t.equal(val === val, ES.SameValueNonNumber(val, val), debug(val) + ' is SameValueNonNumber to itself');
+ });
+
+ t.end();
+ });
+
+ test('IterableToArrayLike', { skip: skips && skips.IterableToArrayLike }, function (t) {
+ t.test('custom iterables', { skip: !v.hasSymbols }, function (st) {
+ var O = {};
+ O[Symbol.iterator] = function () {
+ var i = -1;
+ return {
+ next: function () {
+ i += 1;
+ return {
+ done: i >= 5,
+ value: i
+ };
+ }
+ };
+ };
+ st.deepEqual(
+ ES.IterableToArrayLike(O),
+ [0, 1, 2, 3, 4],
+ 'Symbol.iterator method is called and values collected'
+ );
+
+ st.end();
+ });
+
+ t.deepEqual(ES.IterableToArrayLike('abc'), ['a', 'b', 'c'], 'a string of code units spreads');
+ t.deepEqual(ES.IterableToArrayLike('💩'), ['💩'], 'a string of code points spreads');
+ t.deepEqual(ES.IterableToArrayLike('a💩c'), ['a', '💩', 'c'], 'a string of code points and units spreads');
+
+ var arr = [1, 2, 3];
+ t.deepEqual(ES.IterableToArrayLike(arr), arr, 'an array becomes a similar array');
+ t.notEqual(ES.IterableToArrayLike(arr), arr, 'an array becomes a different, but similar, array');
+
+ var O = {};
+ t.equal(ES.IterableToArrayLike(O), O, 'a non-iterable non-array non-string object is returned directly');
+
+ t.end();
+ });
+
+ test('OrdinaryGetPrototypeOf', function (t) {
+ t.test('values', { skip: !$getProto }, function (st) {
+ st.equal(ES.OrdinaryGetPrototypeOf([]), Array.prototype, 'array [[Prototype]] is Array.prototype');
+ st.equal(ES.OrdinaryGetPrototypeOf({}), Object.prototype, 'object [[Prototype]] is Object.prototype');
+ st.equal(ES.OrdinaryGetPrototypeOf(/a/g), RegExp.prototype, 'regex [[Prototype]] is RegExp.prototype');
+ st.equal(ES.OrdinaryGetPrototypeOf(Object('')), String.prototype, 'boxed string [[Prototype]] is String.prototype');
+ st.equal(ES.OrdinaryGetPrototypeOf(Object(42)), Number.prototype, 'boxed number [[Prototype]] is Number.prototype');
+ st.equal(ES.OrdinaryGetPrototypeOf(Object(true)), Boolean.prototype, 'boxed boolean [[Prototype]] is Boolean.prototype');
+ if (v.hasSymbols) {
+ st.equal(ES.OrdinaryGetPrototypeOf(Object(Symbol.iterator)), Symbol.prototype, 'boxed symbol [[Prototype]] is Symbol.prototype');
+ }
+ st.end();
+ });
+
+ forEach(v.primitives, function (primitive) {
+ t['throws'](
+ function () { ES.OrdinaryGetPrototypeOf(primitive); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+ t.end();
+ });
+
+ test('OrdinarySetPrototypeOf', { skip: !$getProto || !$setProto }, function (t) {
+ var a = [];
+ var proto = {};
+
+ t.equal(ES.OrdinaryGetPrototypeOf(a), Array.prototype, 'precondition');
+ t.equal(ES.OrdinarySetPrototypeOf(a, proto), true, 'setting prototype is successful');
+ t.equal(ES.OrdinaryGetPrototypeOf(a), proto, 'postcondition');
+
+ t.end();
+ });
+};
+
+var es2017 = function ES2017(ES, ops, expectedMissing, skips) {
+ es2016(ES, ops, expectedMissing, assign({}, skips, {
+ EnumerableOwnNames: true,
+ IterableToArrayLike: true
+ }));
+
+ test('ToIndex', function (t) {
+ t.ok(is(ES.ToIndex(), 0), 'no value gives 0');
+ t.ok(is(ES.ToIndex(undefined), 0), 'undefined value gives 0');
+
+ t['throws'](function () { ES.ToIndex(-1); }, RangeError, 'negative numbers throw');
+
+ t['throws'](function () { ES.ToIndex(MAX_SAFE_INTEGER + 1); }, RangeError, 'too large numbers throw');
+
+ t.equal(ES.ToIndex(3), 3, 'numbers work');
+ t.equal(ES.ToIndex(v.valueOfOnlyObject), 4, 'coercible objects are coerced');
+
+ t.end();
+ });
+
+ test('EnumerableOwnProperties', { skip: skips && skips.EnumerableOwnProperties }, function (t) {
+ var obj = testEnumerableOwnNames(t, function (O) {
+ return ES.EnumerableOwnProperties(O, 'key');
+ });
+
+ t.deepEqual(
+ ES.EnumerableOwnProperties(obj, 'value'),
+ [obj.own],
+ 'returns enumerable own values'
+ );
+
+ t.deepEqual(
+ ES.EnumerableOwnProperties(obj, 'key+value'),
+ [['own', obj.own]],
+ 'returns enumerable own entries'
+ );
+
+ t.end();
+ });
+
+ test('IterableToList', function (t) {
+ var customIterator = function () {
+ var i = -1;
+ return {
+ next: function () {
+ i += 1;
+ return {
+ done: i >= 5,
+ value: i
+ };
+ }
+ };
+ };
+
+ t.deepEqual(
+ ES.IterableToList({}, customIterator),
+ [0, 1, 2, 3, 4],
+ 'iterator method is called and values collected'
+ );
+
+ t.test('Symbol support', { skip: !v.hasSymbols }, function (st) {
+ st.deepEqual(ES.IterableToList('abc', String.prototype[Symbol.iterator]), ['a', 'b', 'c'], 'a string of code units spreads');
+ st.deepEqual(ES.IterableToList('☃', String.prototype[Symbol.iterator]), ['☃'], 'a string of code points spreads');
+
+ var arr = [1, 2, 3];
+ st.deepEqual(ES.IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a similar array');
+ st.notEqual(ES.IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a different, but similar, array');
+
+ st.end();
+ });
+
+ t['throws'](
+ function () { ES.IterableToList({}, void 0); },
+ TypeError,
+ 'non-function iterator method'
+ );
+
+ t.end();
+ });
+};
+
+var es2018 = function ES2018(ES, ops, expectedMissing, skips) {
+ es2017(ES, ops, expectedMissing, assign({}, skips, {
+ EnumerableOwnProperties: true,
+ GetSubstitution: true,
+ IsPropertyDescriptor: true
+ }));
+
+ test('thisSymbolValue', function (t) {
+ forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) {
+ t['throws'](
+ function () { ES.thisSymbolValue(nonSymbol); },
+ v.hasSymbols ? TypeError : SyntaxError,
+ debug(nonSymbol) + ' is not a Symbol'
+ );
+ });
+
+ t.test('no native Symbols', { skip: v.hasSymbols }, function (st) {
+ forEach(v.objects.concat(v.primitives), function (value) {
+ st['throws'](
+ function () { ES.thisSymbolValue(value); },
+ SyntaxError,
+ 'Symbols are not supported'
+ );
+ });
+ st.end();
+ });
+
+ t.test('symbol values', { skip: !v.hasSymbols }, function (st) {
+ forEach(v.symbols, function (symbol) {
+ st.equal(ES.thisSymbolValue(symbol), symbol, 'Symbol value of ' + debug(symbol) + ' is same symbol');
+
+ st.equal(
+ ES.thisSymbolValue(Object(symbol)),
+ symbol,
+ 'Symbol value of ' + debug(Object(symbol)) + ' is ' + debug(symbol)
+ );
+ });
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('IsStringPrefix', function (t) {
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.IsStringPrefix(nonString, 'a'); },
+ TypeError,
+ 'first arg: ' + debug(nonString) + ' is not a string'
+ );
+ t['throws'](
+ function () { ES.IsStringPrefix('a', nonString); },
+ TypeError,
+ 'second arg: ' + debug(nonString) + ' is not a string'
+ );
+ });
+
+ forEach(v.strings, function (string) {
+ t.equal(ES.IsStringPrefix(string, string), true, debug(string) + ' is a prefix of itself');
+
+ t.equal(ES.IsStringPrefix('', string), true, 'the empty string is a prefix of everything');
+ });
+
+ t.equal(ES.IsStringPrefix('abc', 'abcd'), true, '"abc" is a prefix of "abcd"');
+ t.equal(ES.IsStringPrefix('abcd', 'abc'), false, '"abcd" is not a prefix of "abc"');
+
+ t.equal(ES.IsStringPrefix('a', 'bc'), false, '"a" is not a prefix of "bc"');
+
+ t.end();
+ });
+
+ test('NumberToString', function (t) {
+ forEach(v.nonNumbers, function (nonNumber) {
+ t['throws'](
+ function () { ES.NumberToString(nonNumber); },
+ TypeError,
+ debug(nonNumber) + ' is not a Number'
+ );
+ });
+
+ forEach(v.numbers, function (number) {
+ t.equal(ES.NumberToString(number), String(number), debug(number) + ' stringifies to ' + number);
+ });
+
+ t.end();
+ });
+
+ test('CopyDataProperties', function (t) {
+ t.test('first argument: target', function (st) {
+ forEach(v.primitives, function (primitive) {
+ st['throws'](
+ function () { ES.CopyDataProperties(primitive, {}, []); },
+ TypeError,
+ debug(primitive) + ' is not an Object'
+ );
+ });
+ st.end();
+ });
+
+ t.test('second argument: source', function (st) {
+ var frozenTarget = Object.freeze ? Object.freeze({}) : {};
+ forEach(v.nullPrimitives, function (nullish) {
+ st.equal(
+ ES.CopyDataProperties(frozenTarget, nullish, []),
+ frozenTarget,
+ debug(nullish) + ' "source" yields identical, unmodified target'
+ );
+ });
+
+ forEach(v.nonNullPrimitives, function (objectCoercible) {
+ var target = {};
+ var result = ES.CopyDataProperties(target, objectCoercible, []);
+ st.equal(result, target, 'result === target');
+ st.deepEqual(keys(result), keys(Object(objectCoercible)), 'target ends up with keys of ' + debug(objectCoercible));
+ });
+
+ st.test('enumerable accessor property', { skip: !defineProperty.oDP }, function (s2t) {
+ var target = {};
+ var source = {};
+ defineProperty(source, 'a', {
+ enumerable: true,
+ get: function () { return 42; }
+ });
+ var result = ES.CopyDataProperties(target, source, []);
+ s2t.equal(result, target, 'result === target');
+ s2t.deepEqual(result, { a: 42 }, 'target ends up with enumerable accessor of source');
+ s2t.end();
+ });
+
+ st.end();
+ });
+
+ t.test('third argument: excludedItems', function (st) {
+ forEach(v.objects.concat(v.primitives), function (nonArray) {
+ st['throws'](
+ function () { ES.CopyDataProperties({}, {}, nonArray); },
+ TypeError,
+ debug(nonArray) + ' is not an Array'
+ );
+ });
+
+ forEach(v.nonPropertyKeys, function (nonPropertyKey) {
+ st['throws'](
+ function () { ES.CopyDataProperties({}, {}, [nonPropertyKey]); },
+ TypeError,
+ debug(nonPropertyKey) + ' is not a Property Key'
+ );
+ });
+
+ var result = ES.CopyDataProperties({}, { a: 1, b: 2, c: 3 }, ['b']);
+ st.deepEqual(keys(result).sort(), ['a', 'c'].sort(), 'excluded string keys are excluded');
+
+ st.test('excluding symbols', { skip: !v.hasSymbols }, function (s2t) {
+ var source = {};
+ forEach(v.symbols, function (symbol) {
+ source[symbol] = true;
+ });
+
+ var includedSymbols = v.symbols.slice(1);
+ var excludedSymbols = v.symbols.slice(0, 1);
+ var target = ES.CopyDataProperties({}, source, excludedSymbols);
+
+ forEach(includedSymbols, function (symbol) {
+ s2t.equal(has(target, symbol), true, debug(symbol) + ' is included');
+ });
+
+ forEach(excludedSymbols, function (symbol) {
+ s2t.equal(has(target, symbol), false, debug(symbol) + ' is excluded');
+ });
+
+ s2t.end();
+ });
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('PromiseResolve', function (t) {
+ t.test('Promises unsupported', { skip: typeof Promise === 'function' }, function (st) {
+ st['throws'](
+ function () { ES.PromiseResolve(); },
+ SyntaxError,
+ 'Promises are not supported'
+ );
+ st.end();
+ });
+
+ t.test('Promises supported', { skip: typeof Promise !== 'function' }, function (st) {
+ st.plan(2);
+
+ var a = {};
+ var b = {};
+ var fulfilled = Promise.resolve(a);
+ var rejected = Promise.reject(b);
+
+ ES.PromiseResolve(Promise, fulfilled).then(function (x) {
+ st.equal(x, a, 'fulfilled promise resolves to fulfilled');
+ });
+
+ ES.PromiseResolve(Promise, rejected)['catch'](function (e) {
+ st.equal(e, b, 'rejected promise resolves to rejected');
+ });
+ });
+
+ t.end();
+ });
+
+ test('EnumerableOwnPropertyNames', { skip: skips && skips.EnumerableOwnPropertyNames }, function (t) {
+ var obj = testEnumerableOwnNames(t, function (O) {
+ return ES.EnumerableOwnPropertyNames(O, 'key');
+ });
+
+ t.deepEqual(
+ ES.EnumerableOwnPropertyNames(obj, 'value'),
+ [obj.own],
+ 'returns enumerable own values'
+ );
+
+ t.deepEqual(
+ ES.EnumerableOwnPropertyNames(obj, 'key+value'),
+ [['own', obj.own]],
+ 'returns enumerable own entries'
+ );
+
+ t.end();
+ });
+
+ test('IsPromise', { skip: typeof Promise !== 'function' }, function (t) {
+ forEach(v.objects.concat(v.primitives), function (nonPromise) {
+ t.equal(ES.IsPromise(nonPromise), false, debug(nonPromise) + ' is not a Promise');
+ });
+
+ var thenable = { then: Promise.prototype.then };
+ t.equal(ES.IsPromise(thenable), false, 'generic thenable is not a Promise');
+
+ t.equal(ES.IsPromise(Promise.resolve()), true, 'Promise is a Promise');
+
+ t.end();
+ });
+
+ test('GetSubstitution (ES2018+)', function (t) {
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { ES.GetSubstitution(nonString, '', 0, [], undefined, ''); },
+ TypeError,
+ '`matched`: ' + debug(nonString) + ' is not a String'
+ );
+
+ t['throws'](
+ function () { ES.GetSubstitution('', nonString, 0, [], undefined, ''); },
+ TypeError,
+ '`str`: ' + debug(nonString) + ' is not a String'
+ );
+
+ t['throws'](
+ function () { ES.GetSubstitution('', '', 0, [], undefined, nonString); },
+ TypeError,
+ '`replacement`: ' + debug(nonString) + ' is not a String'
+ );
+
+ t['throws'](
+ function () { ES.GetSubstitution('', '', 0, [nonString], undefined, ''); },
+ TypeError,
+ '`captures`: ' + debug([nonString]) + ' is not an Array of strings'
+ );
+ });
+
+ forEach(v.nonIntegerNumbers.concat([-1, -42, -Infinity]), function (nonNonNegativeInteger) {
+ t['throws'](
+ function () { ES.GetSubstitution('', '', nonNonNegativeInteger, [], undefined, ''); },
+ TypeError,
+ '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer'
+ );
+ });
+
+ forEach(v.nonArrays, function (nonArray) {
+ t['throws'](
+ function () { ES.GetSubstitution('', '', 0, nonArray, undefined, ''); },
+ TypeError,
+ '`captures`: ' + debug(nonArray) + ' is not an Array'
+ );
+ });
+
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, '123'),
+ '123',
+ 'returns the substitution'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '$$2$'),
+ '$2$',
+ 'supports $$, and trailing $'
+ );
+
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$&<'),
+ '>abcdef<',
+ 'supports $&'
+ );
+
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$`<'),
+ '><',
+ 'supports $` at position 0'
+ );
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, '>$`<'),
+ '>ab<',
+ 'supports $` at position > 0'
+ );
+
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 7, [], undefined, ">$'<"),
+ '><',
+ "supports $' at a position where there's less than `matched.length` chars left"
+ );
+ t.equal(
+ ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, ">$'<"),
+ '>ghi<',
+ "supports $' at a position where there's more than `matched.length` chars left"
+ );
+
+ for (var i = 0; i < 100; i += 1) {
+ var captures = [];
+ captures[i] = 'test';
+ if (i > 0) {
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i + '<'),
+ '>undefined<',
+ 'supports $' + i + ' with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i),
+ '>undefined',
+ 'supports $' + i + ' at the end of the replacement, with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i + '<'),
+ '><',
+ 'supports $' + i + ' with a capture at that index'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i),
+ '>',
+ 'supports $' + i + ' at the end of the replacement, with a capture at that index'
+ );
+ }
+ if (i < 10) {
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i + '<'),
+ i === 0 ? '><' : '>undefined<',
+ 'supports $0' + i + ' with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i),
+ i === 0 ? '>' : '>undefined',
+ 'supports $0' + i + ' at the end of the replacement, with no captures'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i + '<'),
+ '><',
+ 'supports $0' + i + ' with a capture at that index'
+ );
+ t.equal(
+ ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i),
+ '>',
+ 'supports $0' + i + ' at the end of the replacement, with a capture at that index'
+ );
+ }
+ }
+
+ t.end();
+ });
+
+ test('DateString', function (t) {
+ forEach(v.nonNumbers.concat(NaN), function (nonNumberOrNaN) {
+ t['throws'](
+ function () { ES.DateString(nonNumberOrNaN); },
+ TypeError,
+ debug(nonNumberOrNaN) + ' is not a non-NaN Number'
+ );
+ });
+
+ t.equal(ES.DateString(Date.UTC(2019, 8, 10, 7, 8, 9)), 'Tue Sep 10 2019');
+ t.equal(ES.DateString(Date.UTC(2016, 1, 29, 7, 8, 9)), 'Mon Feb 29 2016'); // leap day
+ t.end();
+ });
+
+ test('TimeString', function (t) {
+ forEach(v.nonNumbers.concat(NaN), function (nonNumberOrNaN) {
+ t['throws'](
+ function () { ES.TimeString(nonNumberOrNaN); },
+ TypeError,
+ debug(nonNumberOrNaN) + ' is not a non-NaN Number'
+ );
+ });
+
+ var tv = Date.UTC(2019, 8, 10, 7, 8, 9);
+ t.equal(ES.TimeString(tv), '07:08:09 GMT');
+ t.end();
+ });
+};
+
+var es2019 = function ES2018(ES, ops, expectedMissing, skips) {
+ es2018(ES, ops, expectedMissing, assign({}, skips, {
+ }));
+
+ test('AddEntriesFromIterable', function (t) {
+ t['throws'](
+ function () { ES.AddEntriesFromIterable({}, undefined, function () {}); },
+ TypeError,
+ 'iterable must not be undefined'
+ );
+ t['throws'](
+ function () { ES.AddEntriesFromIterable({}, null, function () {}); },
+ TypeError,
+ 'iterable must not be null'
+ );
+ forEach(v.nonFunctions, function (nonFunction) {
+ t['throws'](
+ function () { ES.AddEntriesFromIterable({}, {}, nonFunction); },
+ TypeError,
+ debug(nonFunction) + ' is not a function'
+ );
+ });
+
+ t.test('Symbol support', { skip: !v.hasSymbols }, function (st) {
+ st.plan(4);
+
+ var O = {};
+ st.equal(ES.AddEntriesFromIterable(O, [], function () {}), O, 'returns the target');
+
+ var adder = function (key, value) {
+ st.equal(this, O, 'adder gets proper receiver');
+ st.equal(key, 0, 'k is key');
+ st.equal(value, 'a', 'v is value');
+ };
+ ES.AddEntriesFromIterable(O, ['a'].entries(), adder);
+
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('FlattenIntoArray', function (t) {
+ t.test('no mapper function', function (st) {
+ var testDepth = function testDepth(tt, depth, expected) {
+ var a = [];
+ var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays
+ ES.FlattenIntoArray(a, o, o.length, 0, depth);
+ tt.deepEqual(a, expected, 'depth: ' + depth);
+ };
+
+ testDepth(st, 1, [1, 2, [3], 4, [[[5]]]]);
+ testDepth(st, 2, [1, 2, 3, 4, [[5]]]);
+ testDepth(st, 3, [1, 2, 3, 4, [5]]);
+ testDepth(st, 4, [1, 2, 3, 4, 5]);
+ testDepth(st, Infinity, [1, 2, 3, 4, 5]);
+ st.end();
+ });
+
+ t.test('mapper function', function (st) {
+ var testMapper = function testMapper(tt, mapper, expected, thisArg) {
+ var a = [];
+ var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays
+ ES.FlattenIntoArray(a, o, o.length, 0, 1, mapper, thisArg);
+ tt.deepEqual(a, expected);
+ };
+
+ var double = function double(x) {
+ return typeof x === 'number' ? 2 * x : x;
+ };
+ testMapper(
+ st,
+ double,
+ [1, 4, [3], 8, [[[5]]]]
+ );
+ var receiver = hasStrictMode ? 42 : Object(42);
+ testMapper(
+ st,
+ function (x) { return [this, double(x)]; },
+ [receiver, [1], receiver, 4, receiver, [[3]], receiver, [], receiver, 8, receiver, [[[[5]]]]],
+ 42
+ );
+ st.end();
+ });
+
+ t.end();
+ });
+
+ test('TrimString', function (t) {
+ t.test('non-object string', function (st) {
+ forEach(v.nullPrimitives, function (nullish) {
+ st['throws'](
+ function () { ES.TrimString(nullish); },
+ debug(nullish) + ' is not an Object'
+ );
+ });
+ st.end();
+ });
+
+ var string = ' \n abc \n ';
+ t.equal(ES.TrimString(string, 'start'), string.slice(string.indexOf('a')));
+ t.equal(ES.TrimString(string, 'end'), string.slice(0, string.lastIndexOf('c') + 1));
+ t.equal(ES.TrimString(string, 'start+end'), string.slice(string.indexOf('a'), string.lastIndexOf('c') + 1));
+
+ t.end();
+ });
+};
+
+module.exports = {
+ es2015: es2015,
+ es2016: es2016,
+ es2017: es2017,
+ es2018: es2018,
+ es2019: es2019
+};
diff --git a/node_modules/object.values/node_modules/es-to-primitive/.eslintrc b/node_modules/object.values/node_modules/es-to-primitive/.eslintrc
new file mode 100644
index 0000000..b6639b9
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/.eslintrc
@@ -0,0 +1,22 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "complexity": [2, 14],
+ "func-name-matching": 0,
+ "id-length": [2, { "min": 1, "max": 24, "properties": "never" }],
+ "max-statements": [2, 20],
+ "new-cap": [2, { "capIsNewExceptions": ["GetMethod"] }]
+ },
+
+ "overrides": [
+ {
+ "files": "test/**",
+ "rules": {
+ "max-lines-per-function": [2, { "max": 68 }],
+ },
+ }
+ ],
+}
diff --git a/node_modules/object.values/node_modules/es-to-primitive/.github/FUNDING.yml b/node_modules/object.values/node_modules/es-to-primitive/.github/FUNDING.yml
new file mode 100644
index 0000000..9f928ae
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/es-to-primitive
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/object.values/node_modules/es-to-primitive/.travis.yml b/node_modules/object.values/node_modules/es-to-primitive/.travis.yml
new file mode 100644
index 0000000..d4c5a84
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/.travis.yml
@@ -0,0 +1,15 @@
+version: ~> 1.0
+language: node_js
+cache:
+ directories:
+ - "$(nvm cache dir)"
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/node_modules/es-to-primitive/CHANGELOG.md b/node_modules/object.values/node_modules/es-to-primitive/CHANGELOG.md
new file mode 100644
index 0000000..0a5dda7
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/CHANGELOG.md
@@ -0,0 +1,49 @@
+1.2.1 / 2019-11-08
+=================
+ * [readme] remove testling URLs
+ * [meta] add `funding` field
+ * [meta] create FUNDING.yml
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `replace`, `semver`, `tape`, `function.prototype.name`
+ * [Tests] use shared travis-ci configs
+ * [Tests] Add es5 tests for `symbol` types (#45)
+ * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops
+ * [Tests] remove `jscs`
+
+1.2.0 / 2018-09-27
+=================
+ * [New] create ES2015 entry point/property, to replace ES6
+ * [Fix] Ensure optional arguments are not part of the length (#29)
+ * [Deps] update `is-callable`
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `object-inspect`, `replace`
+ * [Tests] avoid util.inspect bug with `new Date(NaN)` on node v6.0 and v6.1.
+ * [Tests] up to `node` `v10.11`, `v9.11`, `v8.12`, `v6.14`, `v4.9`
+
+1.1.1 / 2016-01-03
+=================
+ * [Fix: ES5] fix coercion logic: ES5’s ToPrimitive does not coerce any primitive value, regardless of hint (#2)
+
+1.1.0 / 2015-12-27
+=================
+ * [New] add `Symbol.toPrimitive` support
+ * [Deps] update `is-callable`, `is-date-object`
+ * [Dev Deps] update `eslint`, `tape`, `semver`, `jscs`, `covert`, `nsp`, `@ljharb/eslint-config`
+ * [Dev Deps] remove unused deps
+ * [Tests] up to `node` `v5.3`
+ * [Tests] fix npm upgrades on older node versions
+ * [Tests] fix testling
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG
+
+1.0.1 / 2016-01-03
+=================
+ * [Fix: ES5] fix coercion logic: ES5’s ToPrimitive does not coerce any primitive value, regardless of hint (#2)
+ * [Deps] update `is-callable`, `is-date-object`
+ * [Dev Deps] update `eslint`, `tape`, `semver`, `jscs`, `covert`, `nsp`, `@ljharb/eslint-config`
+ * [Dev Deps] remove unused deps
+ * [Tests] up to `node` `v5.3`
+ * [Tests] fix npm upgrades on older node versions
+ * [Tests] fix testling
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG
+
+1.0.0 / 2015-03-19
+=================
+ * Initial release.
diff --git a/node_modules/object.values/node_modules/es-to-primitive/LICENSE b/node_modules/object.values/node_modules/es-to-primitive/LICENSE
new file mode 100644
index 0000000..b43df44
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/object.values/node_modules/es-to-primitive/Makefile b/node_modules/object.values/node_modules/es-to-primitive/Makefile
new file mode 100644
index 0000000..b9e4fe1
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/Makefile
@@ -0,0 +1,61 @@
+# Since we rely on paths relative to the makefile location, abort if make isn't being run from there.
+$(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in))
+
+ # The files that need updating when incrementing the version number.
+VERSIONED_FILES := *.js *.json README*
+
+
+# Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly.
+# Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment
+# where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests.
+export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH")
+UTILS := semver
+# Make sure that all required utilities can be located.
+UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS)))
+
+# Default target (by virtue of being the first non '.'-prefixed in the file).
+.PHONY: _no-target-specified
+_no-target-specified:
+ $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests)
+
+# Lists all targets defined in this makefile.
+.PHONY: list
+list:
+ @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort
+
+# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS).
+.PHONY: test
+test:
+ @npm test
+
+.PHONY: _ensure-tag
+_ensure-tag:
+ifndef TAG
+ $(error Please invoke with `make TAG=<new-version> release`, where <new-version> is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number)
+endif
+
+CHANGELOG_ERROR = $(error No CHANGELOG specified)
+.PHONY: _ensure-changelog
+_ensure-changelog:
+ @ (git status -sb --porcelain | command grep -E '^( M|[MA] ) CHANGELOG.md' > /dev/null) || (echo no CHANGELOG.md specified && exit 2)
+
+# Ensures that the git workspace is clean.
+.PHONY: _ensure-clean
+_ensure-clean:
+ @[ -z "$$((git status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; }
+
+# Makes a release; invoke with `make TAG=<versionOrIncrementSpec> release`.
+.PHONY: release
+release: _ensure-tag _ensure-changelog _ensure-clean
+ @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \
+ new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \
+ if printf "$$new_ver" | command grep -q '^[0-9]'; then \
+ semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \
+ semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \
+ else \
+ new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \
+ fi; \
+ printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \
+ replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \
+ git commit -m "v$$new_ver" $(VERSIONED_FILES) CHANGELOG.md && \
+ git tag -a -m "v$$new_ver" "v$$new_ver"
diff --git a/node_modules/object.values/node_modules/es-to-primitive/README.md b/node_modules/object.values/node_modules/es-to-primitive/README.md
new file mode 100644
index 0000000..5ce322b
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/README.md
@@ -0,0 +1,49 @@
+# es-to-primitive <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+ECMAScript “ToPrimitive” algorithm. Provides ES5 and ES2015 versions.
+When different versions of the spec conflict, the default export will be the latest version of the abstract operation.
+Alternative versions will also be available under an `es5`/`es2015` exported property if you require a specific version.
+
+## Example
+
+```js
+var toPrimitive = require('es-to-primitive');
+var assert = require('assert');
+
+assert(toPrimitive(function () {}) === String(function () {}));
+
+var date = new Date();
+assert(toPrimitive(date) === String(date));
+
+assert(toPrimitive({ valueOf: function () { return 3; } }) === 3);
+
+assert(toPrimitive(['a', 'b', 3]) === String(['a', 'b', 3]));
+
+var sym = Symbol();
+assert(toPrimitive(Object(sym)) === sym);
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.org/package/es-to-primitive
+[npm-version-svg]: http://versionbadg.es/ljharb/es-to-primitive.svg
+[travis-svg]: https://travis-ci.org/ljharb/es-to-primitive.svg
+[travis-url]: https://travis-ci.org/ljharb/es-to-primitive
+[deps-svg]: https://david-dm.org/ljharb/es-to-primitive.svg
+[deps-url]: https://david-dm.org/ljharb/es-to-primitive
+[dev-deps-svg]: https://david-dm.org/ljharb/es-to-primitive/dev-status.svg
+[dev-deps-url]: https://david-dm.org/ljharb/es-to-primitive#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/es-to-primitive.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/es-to-primitive.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/es-to-primitive.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=es-to-primitive
diff --git a/node_modules/object.values/node_modules/es-to-primitive/es2015.js b/node_modules/object.values/node_modules/es-to-primitive/es2015.js
new file mode 100644
index 0000000..4a11a34
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/es2015.js
@@ -0,0 +1,75 @@
+'use strict';
+
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
+
+var isPrimitive = require('./helpers/isPrimitive');
+var isCallable = require('is-callable');
+var isDate = require('is-date-object');
+var isSymbol = require('is-symbol');
+
+var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
+ if (typeof O === 'undefined' || O === null) {
+ throw new TypeError('Cannot call method on ' + O);
+ }
+ if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
+ throw new TypeError('hint must be "string" or "number"');
+ }
+ var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+ var method, result, i;
+ for (i = 0; i < methodNames.length; ++i) {
+ method = O[methodNames[i]];
+ if (isCallable(method)) {
+ result = method.call(O);
+ if (isPrimitive(result)) {
+ return result;
+ }
+ }
+ }
+ throw new TypeError('No default value');
+};
+
+var GetMethod = function GetMethod(O, P) {
+ var func = O[P];
+ if (func !== null && typeof func !== 'undefined') {
+ if (!isCallable(func)) {
+ throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
+ }
+ return func;
+ }
+ return void 0;
+};
+
+// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+module.exports = function ToPrimitive(input) {
+ if (isPrimitive(input)) {
+ return input;
+ }
+ var hint = 'default';
+ if (arguments.length > 1) {
+ if (arguments[1] === String) {
+ hint = 'string';
+ } else if (arguments[1] === Number) {
+ hint = 'number';
+ }
+ }
+
+ var exoticToPrim;
+ if (hasSymbols) {
+ if (Symbol.toPrimitive) {
+ exoticToPrim = GetMethod(input, Symbol.toPrimitive);
+ } else if (isSymbol(input)) {
+ exoticToPrim = Symbol.prototype.valueOf;
+ }
+ }
+ if (typeof exoticToPrim !== 'undefined') {
+ var result = exoticToPrim.call(input, hint);
+ if (isPrimitive(result)) {
+ return result;
+ }
+ throw new TypeError('unable to convert exotic object to primitive');
+ }
+ if (hint === 'default' && (isDate(input) || isSymbol(input))) {
+ hint = 'string';
+ }
+ return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
+};
diff --git a/node_modules/object.values/node_modules/es-to-primitive/es5.js b/node_modules/object.values/node_modules/es-to-primitive/es5.js
new file mode 100644
index 0000000..602aa36
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/es5.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var toStr = Object.prototype.toString;
+
+var isPrimitive = require('./helpers/isPrimitive');
+
+var isCallable = require('is-callable');
+
+// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
+var ES5internalSlots = {
+ '[[DefaultValue]]': function (O) {
+ var actualHint;
+ if (arguments.length > 1) {
+ actualHint = arguments[1];
+ } else {
+ actualHint = toStr.call(O) === '[object Date]' ? String : Number;
+ }
+
+ if (actualHint === String || actualHint === Number) {
+ var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+ var value, i;
+ for (i = 0; i < methods.length; ++i) {
+ if (isCallable(O[methods[i]])) {
+ value = O[methods[i]]();
+ if (isPrimitive(value)) {
+ return value;
+ }
+ }
+ }
+ throw new TypeError('No default value');
+ }
+ throw new TypeError('invalid [[DefaultValue]] hint supplied');
+ }
+};
+
+// http://ecma-international.org/ecma-262/5.1/#sec-9.1
+module.exports = function ToPrimitive(input) {
+ if (isPrimitive(input)) {
+ return input;
+ }
+ if (arguments.length > 1) {
+ return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
+ }
+ return ES5internalSlots['[[DefaultValue]]'](input);
+};
diff --git a/node_modules/object.values/node_modules/es-to-primitive/es6.js b/node_modules/object.values/node_modules/es-to-primitive/es6.js
new file mode 100644
index 0000000..2d1f4dc
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/es6.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./es2015');
diff --git a/node_modules/object.values/node_modules/es-to-primitive/helpers/isPrimitive.js b/node_modules/object.values/node_modules/es-to-primitive/helpers/isPrimitive.js
new file mode 100644
index 0000000..06f0bf0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/helpers/isPrimitive.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isPrimitive(value) {
+ return value === null || (typeof value !== 'function' && typeof value !== 'object');
+};
diff --git a/node_modules/object.values/node_modules/es-to-primitive/index.js b/node_modules/object.values/node_modules/es-to-primitive/index.js
new file mode 100644
index 0000000..e60d912
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var ES5 = require('./es5');
+var ES6 = require('./es6');
+var ES2015 = require('./es2015');
+
+if (Object.defineProperty) {
+ Object.defineProperty(ES2015, 'ES5', { enumerable: false, value: ES5 });
+ Object.defineProperty(ES2015, 'ES6', { enumerable: false, value: ES6 });
+ Object.defineProperty(ES2015, 'ES2015', { enumerable: false, value: ES2015 });
+} else {
+ ES6.ES5 = ES5;
+ ES6.ES6 = ES6;
+ ES6.ES2015 = ES2015;
+}
+
+module.exports = ES2015;
diff --git a/node_modules/object.values/node_modules/es-to-primitive/package.json b/node_modules/object.values/node_modules/es-to-primitive/package.json
new file mode 100644
index 0000000..cd2ef29
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/package.json
@@ -0,0 +1,81 @@
+{
+ "author": "Jordan Harband <ljharb@gmail.com>",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "description": "ECMAScript \u201cToPrimitive\u201d algorithm. Provides ES5 and ES2015 versions.",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^15.0.0",
+ "covert": "^1.1.1",
+ "eslint": "^6.6.0",
+ "foreach": "^2.0.5",
+ "function.prototype.name": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-inspect": "^1.6.0",
+ "object-is": "^1.0.1",
+ "replace": "^1.1.1",
+ "semver": "^6.3.0",
+ "tape": "^4.11.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "keywords": [
+ "primitive",
+ "abstract",
+ "ecmascript",
+ "es5",
+ "es6",
+ "es2015",
+ "toPrimitive",
+ "coerce",
+ "type",
+ "object",
+ "string",
+ "number",
+ "boolean",
+ "symbol",
+ "null",
+ "undefined"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "es-to-primitive",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/es-to-primitive.git"
+ },
+ "scripts": {
+ "coverage": "covert test/*.js",
+ "coverage-quiet": "covert test/*.js --quiet",
+ "lint": "eslint .",
+ "posttest": "npx aud",
+ "pretest": "npm run --silent lint",
+ "test": "npm run --silent tests-only",
+ "tests-only": "node --es-staging test"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test"
+ },
+ "version": "1.2.1"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/es-to-primitive/test/es2015.js b/node_modules/object.values/node_modules/es-to-primitive/test/es2015.js
new file mode 100644
index 0000000..80f4083
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/test/es2015.js
@@ -0,0 +1,151 @@
+'use strict';
+
+var test = require('tape');
+var toPrimitive = require('../es2015');
+var is = require('object-is');
+var forEach = require('foreach');
+var functionName = require('function.prototype.name');
+var debug = require('object-inspect');
+
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
+var hasSymbolToPrimitive = hasSymbols && typeof Symbol.toPrimitive === 'symbol';
+
+test('function properties', function (t) {
+ t.equal(toPrimitive.length, 1, 'length is 1');
+ t.equal(functionName(toPrimitive), 'ToPrimitive', 'name is ToPrimitive');
+
+ t.end();
+});
+
+var primitives = [null, undefined, true, false, 0, -0, 42, NaN, Infinity, -Infinity, '', 'abc'];
+
+test('primitives', function (t) {
+ forEach(primitives, function (i) {
+ t.ok(is(toPrimitive(i), i), 'toPrimitive(' + debug(i) + ') returns the same value');
+ t.ok(is(toPrimitive(i, String), i), 'toPrimitive(' + debug(i) + ', String) returns the same value');
+ t.ok(is(toPrimitive(i, Number), i), 'toPrimitive(' + debug(i) + ', Number) returns the same value');
+ });
+ t.end();
+});
+
+test('Symbols', { skip: !hasSymbols }, function (t) {
+ var symbols = [
+ Symbol('foo'),
+ Symbol.iterator,
+ Symbol['for']('foo') // eslint-disable-line no-restricted-properties
+ ];
+ forEach(symbols, function (sym) {
+ t.equal(toPrimitive(sym), sym, 'toPrimitive(' + debug(sym) + ') returns the same value');
+ t.equal(toPrimitive(sym, String), sym, 'toPrimitive(' + debug(sym) + ', String) returns the same value');
+ t.equal(toPrimitive(sym, Number), sym, 'toPrimitive(' + debug(sym) + ', Number) returns the same value');
+ });
+
+ var primitiveSym = Symbol('primitiveSym');
+ var objectSym = Object(primitiveSym);
+ t.equal(toPrimitive(objectSym), primitiveSym, 'toPrimitive(' + debug(objectSym) + ') returns ' + debug(primitiveSym));
+ t.equal(toPrimitive(objectSym, String), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', String) returns ' + debug(primitiveSym));
+ t.equal(toPrimitive(objectSym, Number), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', Number) returns ' + debug(primitiveSym));
+ t.end();
+});
+
+test('Arrays', function (t) {
+ var arrays = [[], ['a', 'b'], [1, 2]];
+ forEach(arrays, function (arr) {
+ t.equal(toPrimitive(arr), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array');
+ t.equal(toPrimitive(arr, String), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array');
+ t.equal(toPrimitive(arr, Number), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array');
+ });
+ t.end();
+});
+
+test('Dates', function (t) {
+ var dates = [new Date(), new Date(0), new Date(NaN)];
+ forEach(dates, function (date) {
+ t.equal(toPrimitive(date), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date');
+ t.equal(toPrimitive(date, String), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date');
+ t.ok(is(toPrimitive(date, Number), Number(date)), 'toPrimitive(' + debug(date) + ') returns the number version of the date');
+ });
+ t.end();
+});
+
+var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } };
+var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } };
+var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } };
+var coercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return 42; }
+};
+var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } };
+var uncoercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return function toStrFn() {}; }
+};
+
+test('Objects', function (t) {
+ t.equal(toPrimitive(coercibleObject), coercibleObject.valueOf(), 'coercibleObject with no hint coerces to valueOf');
+ t.equal(toPrimitive(coercibleObject, Number), coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf');
+ t.equal(toPrimitive(coercibleObject, String), coercibleObject.toString(), 'coercibleObject with hint String coerces to non-stringified toString');
+
+ t.equal(toPrimitive(coercibleFnObject), coercibleFnObject.toString(), 'coercibleFnObject coerces to non-stringified toString');
+ t.equal(toPrimitive(coercibleFnObject, Number), coercibleFnObject.toString(), 'coercibleFnObject with hint Number coerces to non-stringified toString');
+ t.equal(toPrimitive(coercibleFnObject, String), coercibleFnObject.toString(), 'coercibleFnObject with hint String coerces to non-stringified toString');
+
+ t.equal(toPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString');
+ t.equal(toPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to Object#toString');
+ t.equal(toPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString');
+
+ t.equal(toPrimitive(toStringOnlyObject), toStringOnlyObject.toString(), 'toStringOnlyObject returns non-stringified toString');
+ t.equal(toPrimitive(toStringOnlyObject, Number), toStringOnlyObject.toString(), 'toStringOnlyObject with hint Number returns non-stringified toString');
+ t.equal(toPrimitive(toStringOnlyObject, String), toStringOnlyObject.toString(), 'toStringOnlyObject with hint String returns non-stringified toString');
+
+ t.equal(toPrimitive(valueOfOnlyObject), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf');
+ t.equal(toPrimitive(valueOfOnlyObject, Number), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint Number returns valueOf');
+ t.equal(toPrimitive(valueOfOnlyObject, String), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint String returns non-stringified valueOf');
+
+ t.test('Symbol.toPrimitive', { skip: !hasSymbolToPrimitive }, function (st) {
+ var overriddenObject = { toString: st.fail, valueOf: st.fail };
+ overriddenObject[Symbol.toPrimitive] = function (hint) { return String(hint); };
+
+ st.equal(toPrimitive(overriddenObject), 'default', 'object with Symbol.toPrimitive + no hint invokes that');
+ st.equal(toPrimitive(overriddenObject, Number), 'number', 'object with Symbol.toPrimitive + hint Number invokes that');
+ st.equal(toPrimitive(overriddenObject, String), 'string', 'object with Symbol.toPrimitive + hint String invokes that');
+
+ var nullToPrimitive = { toString: coercibleObject.toString, valueOf: coercibleObject.valueOf };
+ nullToPrimitive[Symbol.toPrimitive] = null;
+ st.equal(toPrimitive(nullToPrimitive), toPrimitive(coercibleObject), 'object with no hint + null Symbol.toPrimitive ignores it');
+ st.equal(toPrimitive(nullToPrimitive, Number), toPrimitive(coercibleObject, Number), 'object with hint Number + null Symbol.toPrimitive ignores it');
+ st.equal(toPrimitive(nullToPrimitive, String), toPrimitive(coercibleObject, String), 'object with hint String + null Symbol.toPrimitive ignores it');
+
+ st.test('exceptions', function (sst) {
+ var nonFunctionToPrimitive = { toString: sst.fail, valueOf: sst.fail };
+ nonFunctionToPrimitive[Symbol.toPrimitive] = {};
+ sst['throws'](toPrimitive.bind(null, nonFunctionToPrimitive), TypeError, 'Symbol.toPrimitive returning a non-function throws');
+
+ var uncoercibleToPrimitive = { toString: sst.fail, valueOf: sst.fail };
+ uncoercibleToPrimitive[Symbol.toPrimitive] = function (hint) {
+ return { toString: function () { return hint; } };
+ };
+ sst['throws'](toPrimitive.bind(null, uncoercibleToPrimitive), TypeError, 'Symbol.toPrimitive returning an object throws');
+
+ var throwingToPrimitive = { toString: sst.fail, valueOf: sst.fail };
+ throwingToPrimitive[Symbol.toPrimitive] = function (hint) { throw new RangeError(hint); };
+ sst['throws'](toPrimitive.bind(null, throwingToPrimitive), RangeError, 'Symbol.toPrimitive throwing throws');
+
+ sst.end();
+ });
+
+ st.end();
+ });
+
+ t.test('exceptions', function (st) {
+ st['throws'](toPrimitive.bind(null, uncoercibleObject), TypeError, 'uncoercibleObject throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleObject, Number), TypeError, 'uncoercibleObject with hint Number throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleObject, String), TypeError, 'uncoercibleObject with hint String throws a TypeError');
+
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject), TypeError, 'uncoercibleFnObject throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject, Number), TypeError, 'uncoercibleFnObject with hint Number throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject, String), TypeError, 'uncoercibleFnObject with hint String throws a TypeError');
+ st.end();
+ });
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-to-primitive/test/es5.js b/node_modules/object.values/node_modules/es-to-primitive/test/es5.js
new file mode 100644
index 0000000..79444b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/test/es5.js
@@ -0,0 +1,118 @@
+'use strict';
+
+var test = require('tape');
+var toPrimitive = require('../es5');
+var is = require('object-is');
+var forEach = require('foreach');
+var functionName = require('function.prototype.name');
+var debug = require('object-inspect');
+var hasSymbols = require('has-symbols')();
+
+test('function properties', function (t) {
+ t.equal(toPrimitive.length, 1, 'length is 1');
+ t.equal(functionName(toPrimitive), 'ToPrimitive', 'name is ToPrimitive');
+
+ t.end();
+});
+
+var primitives = [null, undefined, true, false, 0, -0, 42, NaN, Infinity, -Infinity, '', 'abc'];
+
+test('primitives', function (t) {
+ forEach(primitives, function (i) {
+ t.ok(is(toPrimitive(i), i), 'toPrimitive(' + debug(i) + ') returns the same value');
+ t.ok(is(toPrimitive(i, String), i), 'toPrimitive(' + debug(i) + ', String) returns the same value');
+ t.ok(is(toPrimitive(i, Number), i), 'toPrimitive(' + debug(i) + ', Number) returns the same value');
+ });
+ t.end();
+});
+
+test('Symbols', { skip: !hasSymbols }, function (t) {
+ var symbols = [
+ Symbol('foo'),
+ Symbol.iterator,
+ Symbol['for']('foo') // eslint-disable-line no-restricted-properties
+ ];
+ forEach(symbols, function (sym) {
+ t.equal(toPrimitive(sym), sym, 'toPrimitive(' + debug(sym) + ') returns the same value');
+ t.equal(toPrimitive(sym, String), sym, 'toPrimitive(' + debug(sym) + ', String) returns the same value');
+ t.equal(toPrimitive(sym, Number), sym, 'toPrimitive(' + debug(sym) + ', Number) returns the same value');
+ });
+
+ var primitiveSym = Symbol('primitiveSym');
+ var stringSym = Symbol.prototype.toString.call(primitiveSym);
+ var objectSym = Object(primitiveSym);
+ t.equal(toPrimitive(objectSym), primitiveSym, 'toPrimitive(' + debug(objectSym) + ') returns ' + debug(primitiveSym));
+
+ // This is different from ES2015, as the ES5 algorithm doesn't account for the existence of Symbols:
+ t.equal(toPrimitive(objectSym, String), stringSym, 'toPrimitive(' + debug(objectSym) + ', String) returns ' + debug(stringSym));
+ t.equal(toPrimitive(objectSym, Number), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', Number) returns ' + debug(primitiveSym));
+ t.end();
+});
+
+test('Arrays', function (t) {
+ var arrays = [[], ['a', 'b'], [1, 2]];
+ forEach(arrays, function (arr) {
+ t.ok(is(toPrimitive(arr), arr.toString()), 'toPrimitive(' + debug(arr) + ') returns toString of the array');
+ t.equal(toPrimitive(arr, String), arr.toString(), 'toPrimitive(' + debug(arr) + ') returns toString of the array');
+ t.ok(is(toPrimitive(arr, Number), arr.toString()), 'toPrimitive(' + debug(arr) + ') returns toString of the array');
+ });
+ t.end();
+});
+
+test('Dates', function (t) {
+ var dates = [new Date(), new Date(0), new Date(NaN)];
+ forEach(dates, function (date) {
+ t.equal(toPrimitive(date), date.toString(), 'toPrimitive(' + debug(date) + ') returns toString of the date');
+ t.equal(toPrimitive(date, String), date.toString(), 'toPrimitive(' + debug(date) + ') returns toString of the date');
+ t.ok(is(toPrimitive(date, Number), date.valueOf()), 'toPrimitive(' + debug(date) + ') returns valueOf of the date');
+ });
+ t.end();
+});
+
+var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } };
+var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } };
+var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } };
+var coercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return 42; }
+};
+var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } };
+var uncoercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return function toStrFn() {}; }
+};
+
+test('Objects', function (t) {
+ t.equal(toPrimitive(coercibleObject), coercibleObject.valueOf(), 'coercibleObject with no hint coerces to valueOf');
+ t.equal(toPrimitive(coercibleObject, String), coercibleObject.toString(), 'coercibleObject with hint String coerces to toString');
+ t.equal(toPrimitive(coercibleObject, Number), coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf');
+
+ t.equal(toPrimitive(coercibleFnObject), coercibleFnObject.toString(), 'coercibleFnObject coerces to toString');
+ t.equal(toPrimitive(coercibleFnObject, String), coercibleFnObject.toString(), 'coercibleFnObject with hint String coerces to toString');
+ t.equal(toPrimitive(coercibleFnObject, Number), coercibleFnObject.toString(), 'coercibleFnObject with hint Number coerces to toString');
+
+ t.ok(is(toPrimitive({}), '[object Object]'), '{} with no hint coerces to Object#toString');
+ t.equal(toPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString');
+ t.ok(is(toPrimitive({}, Number), '[object Object]'), '{} with hint Number coerces to Object#toString');
+
+ t.equal(toPrimitive(toStringOnlyObject), toStringOnlyObject.toString(), 'toStringOnlyObject returns toString');
+ t.equal(toPrimitive(toStringOnlyObject, String), toStringOnlyObject.toString(), 'toStringOnlyObject with hint String returns toString');
+ t.equal(toPrimitive(toStringOnlyObject, Number), toStringOnlyObject.toString(), 'toStringOnlyObject with hint Number returns toString');
+
+ t.equal(toPrimitive(valueOfOnlyObject), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf');
+ t.equal(toPrimitive(valueOfOnlyObject, String), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint String returns valueOf');
+ t.equal(toPrimitive(valueOfOnlyObject, Number), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint Number returns valueOf');
+
+ t.test('exceptions', function (st) {
+ st['throws'](toPrimitive.bind(null, uncoercibleObject), TypeError, 'uncoercibleObject throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleObject, String), TypeError, 'uncoercibleObject with hint String throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleObject, Number), TypeError, 'uncoercibleObject with hint Number throws a TypeError');
+
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject), TypeError, 'uncoercibleFnObject throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject, String), TypeError, 'uncoercibleFnObject with hint String throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject, Number), TypeError, 'uncoercibleFnObject with hint Number throws a TypeError');
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-to-primitive/test/es6.js b/node_modules/object.values/node_modules/es-to-primitive/test/es6.js
new file mode 100644
index 0000000..16ea0e8
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/test/es6.js
@@ -0,0 +1,151 @@
+'use strict';
+
+var test = require('tape');
+var toPrimitive = require('../es6');
+var is = require('object-is');
+var forEach = require('foreach');
+var functionName = require('function.prototype.name');
+var debug = require('object-inspect');
+
+var hasSymbols = require('has-symbols')();
+var hasSymbolToPrimitive = hasSymbols && typeof Symbol.toPrimitive === 'symbol';
+
+test('function properties', function (t) {
+ t.equal(toPrimitive.length, 1, 'length is 1');
+ t.equal(functionName(toPrimitive), 'ToPrimitive', 'name is ToPrimitive');
+
+ t.end();
+});
+
+var primitives = [null, undefined, true, false, 0, -0, 42, NaN, Infinity, -Infinity, '', 'abc'];
+
+test('primitives', function (t) {
+ forEach(primitives, function (i) {
+ t.ok(is(toPrimitive(i), i), 'toPrimitive(' + debug(i) + ') returns the same value');
+ t.ok(is(toPrimitive(i, String), i), 'toPrimitive(' + debug(i) + ', String) returns the same value');
+ t.ok(is(toPrimitive(i, Number), i), 'toPrimitive(' + debug(i) + ', Number) returns the same value');
+ });
+ t.end();
+});
+
+test('Symbols', { skip: !hasSymbols }, function (t) {
+ var symbols = [
+ Symbol('foo'),
+ Symbol.iterator,
+ Symbol['for']('foo') // eslint-disable-line no-restricted-properties
+ ];
+ forEach(symbols, function (sym) {
+ t.equal(toPrimitive(sym), sym, 'toPrimitive(' + debug(sym) + ') returns the same value');
+ t.equal(toPrimitive(sym, String), sym, 'toPrimitive(' + debug(sym) + ', String) returns the same value');
+ t.equal(toPrimitive(sym, Number), sym, 'toPrimitive(' + debug(sym) + ', Number) returns the same value');
+ });
+
+ var primitiveSym = Symbol('primitiveSym');
+ var objectSym = Object(primitiveSym);
+ t.equal(toPrimitive(objectSym), primitiveSym, 'toPrimitive(' + debug(objectSym) + ') returns ' + debug(primitiveSym));
+ t.equal(toPrimitive(objectSym, String), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', String) returns ' + debug(primitiveSym));
+ t.equal(toPrimitive(objectSym, Number), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', Number) returns ' + debug(primitiveSym));
+ t.end();
+});
+
+test('Arrays', function (t) {
+ var arrays = [[], ['a', 'b'], [1, 2]];
+ forEach(arrays, function (arr) {
+ t.equal(toPrimitive(arr), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array');
+ t.equal(toPrimitive(arr, String), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array');
+ t.equal(toPrimitive(arr, Number), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array');
+ });
+ t.end();
+});
+
+test('Dates', function (t) {
+ var dates = [new Date(), new Date(0), new Date(NaN)];
+ forEach(dates, function (date) {
+ t.equal(toPrimitive(date), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date');
+ t.equal(toPrimitive(date, String), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date');
+ t.ok(is(toPrimitive(date, Number), Number(date)), 'toPrimitive(' + debug(date) + ') returns the number version of the date');
+ });
+ t.end();
+});
+
+var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } };
+var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } };
+var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } };
+var coercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return 42; }
+};
+var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } };
+var uncoercibleFnObject = {
+ valueOf: function () { return function valueOfFn() {}; },
+ toString: function () { return function toStrFn() {}; }
+};
+
+test('Objects', function (t) {
+ t.equal(toPrimitive(coercibleObject), coercibleObject.valueOf(), 'coercibleObject with no hint coerces to valueOf');
+ t.equal(toPrimitive(coercibleObject, Number), coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf');
+ t.equal(toPrimitive(coercibleObject, String), coercibleObject.toString(), 'coercibleObject with hint String coerces to non-stringified toString');
+
+ t.equal(toPrimitive(coercibleFnObject), coercibleFnObject.toString(), 'coercibleFnObject coerces to non-stringified toString');
+ t.equal(toPrimitive(coercibleFnObject, Number), coercibleFnObject.toString(), 'coercibleFnObject with hint Number coerces to non-stringified toString');
+ t.equal(toPrimitive(coercibleFnObject, String), coercibleFnObject.toString(), 'coercibleFnObject with hint String coerces to non-stringified toString');
+
+ t.equal(toPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString');
+ t.equal(toPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to Object#toString');
+ t.equal(toPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString');
+
+ t.equal(toPrimitive(toStringOnlyObject), toStringOnlyObject.toString(), 'toStringOnlyObject returns non-stringified toString');
+ t.equal(toPrimitive(toStringOnlyObject, Number), toStringOnlyObject.toString(), 'toStringOnlyObject with hint Number returns non-stringified toString');
+ t.equal(toPrimitive(toStringOnlyObject, String), toStringOnlyObject.toString(), 'toStringOnlyObject with hint String returns non-stringified toString');
+
+ t.equal(toPrimitive(valueOfOnlyObject), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf');
+ t.equal(toPrimitive(valueOfOnlyObject, Number), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint Number returns valueOf');
+ t.equal(toPrimitive(valueOfOnlyObject, String), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint String returns non-stringified valueOf');
+
+ t.test('Symbol.toPrimitive', { skip: !hasSymbolToPrimitive }, function (st) {
+ var overriddenObject = { toString: st.fail, valueOf: st.fail };
+ overriddenObject[Symbol.toPrimitive] = function (hint) { return String(hint); };
+
+ st.equal(toPrimitive(overriddenObject), 'default', 'object with Symbol.toPrimitive + no hint invokes that');
+ st.equal(toPrimitive(overriddenObject, Number), 'number', 'object with Symbol.toPrimitive + hint Number invokes that');
+ st.equal(toPrimitive(overriddenObject, String), 'string', 'object with Symbol.toPrimitive + hint String invokes that');
+
+ var nullToPrimitive = { toString: coercibleObject.toString, valueOf: coercibleObject.valueOf };
+ nullToPrimitive[Symbol.toPrimitive] = null;
+ st.equal(toPrimitive(nullToPrimitive), toPrimitive(coercibleObject), 'object with no hint + null Symbol.toPrimitive ignores it');
+ st.equal(toPrimitive(nullToPrimitive, Number), toPrimitive(coercibleObject, Number), 'object with hint Number + null Symbol.toPrimitive ignores it');
+ st.equal(toPrimitive(nullToPrimitive, String), toPrimitive(coercibleObject, String), 'object with hint String + null Symbol.toPrimitive ignores it');
+
+ st.test('exceptions', function (sst) {
+ var nonFunctionToPrimitive = { toString: sst.fail, valueOf: sst.fail };
+ nonFunctionToPrimitive[Symbol.toPrimitive] = {};
+ sst['throws'](toPrimitive.bind(null, nonFunctionToPrimitive), TypeError, 'Symbol.toPrimitive returning a non-function throws');
+
+ var uncoercibleToPrimitive = { toString: sst.fail, valueOf: sst.fail };
+ uncoercibleToPrimitive[Symbol.toPrimitive] = function (hint) {
+ return { toString: function () { return hint; } };
+ };
+ sst['throws'](toPrimitive.bind(null, uncoercibleToPrimitive), TypeError, 'Symbol.toPrimitive returning an object throws');
+
+ var throwingToPrimitive = { toString: sst.fail, valueOf: sst.fail };
+ throwingToPrimitive[Symbol.toPrimitive] = function (hint) { throw new RangeError(hint); };
+ sst['throws'](toPrimitive.bind(null, throwingToPrimitive), RangeError, 'Symbol.toPrimitive throwing throws');
+
+ sst.end();
+ });
+
+ st.end();
+ });
+
+ t.test('exceptions', function (st) {
+ st['throws'](toPrimitive.bind(null, uncoercibleObject), TypeError, 'uncoercibleObject throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleObject, Number), TypeError, 'uncoercibleObject with hint Number throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleObject, String), TypeError, 'uncoercibleObject with hint String throws a TypeError');
+
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject), TypeError, 'uncoercibleFnObject throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject, Number), TypeError, 'uncoercibleFnObject with hint Number throws a TypeError');
+ st['throws'](toPrimitive.bind(null, uncoercibleFnObject, String), TypeError, 'uncoercibleFnObject with hint String throws a TypeError');
+ st.end();
+ });
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/es-to-primitive/test/index.js b/node_modules/object.values/node_modules/es-to-primitive/test/index.js
new file mode 100644
index 0000000..ad71f39
--- /dev/null
+++ b/node_modules/object.values/node_modules/es-to-primitive/test/index.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var toPrimitive = require('../');
+var ES5 = require('../es5');
+var ES6 = require('../es6');
+var ES2015 = require('../es2015');
+
+var test = require('tape');
+
+test('default export', function (t) {
+ t.equal(toPrimitive, ES2015, 'default export is ES2015');
+ t.equal(toPrimitive.ES5, ES5, 'ES5 property has ES5 method');
+ t.equal(toPrimitive.ES6, ES6, 'ES6 property has ES6 method');
+ t.equal(toPrimitive.ES2015, ES2015, 'ES2015 property has ES2015 method');
+ t.end();
+});
+
+require('./es5');
+require('./es6');
+require('./es2015');
diff --git a/node_modules/object.values/node_modules/has-symbols/.eslintrc b/node_modules/object.values/node_modules/has-symbols/.eslintrc
new file mode 100644
index 0000000..2d9a66a
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "max-statements-per-line": [2, { "max": 2 }],
+ "no-magic-numbers": 0,
+ "multiline-comment-style": 0,
+ }
+}
diff --git a/node_modules/object.values/node_modules/has-symbols/.github/FUNDING.yml b/node_modules/object.values/node_modules/has-symbols/.github/FUNDING.yml
new file mode 100644
index 0000000..04cf87e
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/has-symbols
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/object.values/node_modules/has-symbols/.github/workflows/rebase.yml b/node_modules/object.values/node_modules/has-symbols/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/node_modules/has-symbols/.travis.yml b/node_modules/object.values/node_modules/has-symbols/.travis.yml
new file mode 100644
index 0000000..2d1c1d2
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/.travis.yml
@@ -0,0 +1,12 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/node_modules/has-symbols/CHANGELOG.md b/node_modules/object.values/node_modules/has-symbols/CHANGELOG.md
new file mode 100644
index 0000000..4dcac04
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/CHANGELOG.md
@@ -0,0 +1,34 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+
+## [v1.0.1](https://github.com/inspect-js/has-symbols/compare/v1.0.0...v1.0.1) - 2019-11-17
+
+### Commits
+
+- [Tests] use shared travis-ci configs [`ce396c9`](https://github.com/inspect-js/has-symbols/commit/ce396c9419ff11c43d0da5d05cdbb79f7fb42229)
+- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v4.9`; use `nvm install-latest-npm` [`0690732`](https://github.com/inspect-js/has-symbols/commit/0690732801f47ab429f39ba1962f522d5c462d6b)
+- [meta] add `auto-changelog` [`2163d0b`](https://github.com/inspect-js/has-symbols/commit/2163d0b7f36343076b8f947cd1667dd1750f26fc)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `safe-publish-latest`, `tape` [`8e0951f`](https://github.com/inspect-js/has-symbols/commit/8e0951f1a7a2e52068222b7bb73511761e6e4d9c)
+- [actions] add automatic rebasing / merge commit blocking [`b09cdb7`](https://github.com/inspect-js/has-symbols/commit/b09cdb7cd7ee39e7a769878f56e2d6066f5ccd1d)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `core-js`, `get-own-property-symbols`, `tape` [`1dd42cd`](https://github.com/inspect-js/has-symbols/commit/1dd42cd86183ed0c50f99b1062345c458babca91)
+- [meta] create FUNDING.yml [`aa57a17`](https://github.com/inspect-js/has-symbols/commit/aa57a17b19708906d1927f821ea8e73394d84ca4)
+- Only apps should have lockfiles [`a2d8bea`](https://github.com/inspect-js/has-symbols/commit/a2d8bea23a97d15c09eaf60f5b107fcf9a4d57aa)
+- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`9e96cb7`](https://github.com/inspect-js/has-symbols/commit/9e96cb783746cbed0c10ef78e599a8eaa7ebe193)
+- [meta] add `funding` field [`a0b32cf`](https://github.com/inspect-js/has-symbols/commit/a0b32cf68e803f963c1639b6d47b0a9d6440bab0)
+- [Dev Deps] update `safe-publish-latest` [`cb9f0a5`](https://github.com/inspect-js/has-symbols/commit/cb9f0a521a3a1790f1064d437edd33bb6c3d6af0)
+
+## v1.0.0 - 2016-09-19
+
+### Commits
+
+- Tests. [`ecb6eb9`](https://github.com/inspect-js/has-symbols/commit/ecb6eb934e4883137f3f93b965ba5e0a98df430d)
+- package.json [`88a337c`](https://github.com/inspect-js/has-symbols/commit/88a337cee0864a0da35f5d19e69ff0ef0150e46a)
+- Initial commit [`42e1e55`](https://github.com/inspect-js/has-symbols/commit/42e1e5502536a2b8ac529c9443984acd14836b1c)
+- Initial implementation. [`33f5cc6`](https://github.com/inspect-js/has-symbols/commit/33f5cc6cdff86e2194b081ee842bfdc63caf43fb)
+- read me [`01f1170`](https://github.com/inspect-js/has-symbols/commit/01f1170188ff7cb1558aa297f6ba5b516c6d7b0c)
diff --git a/node_modules/object.values/node_modules/has-symbols/LICENSE b/node_modules/object.values/node_modules/has-symbols/LICENSE
new file mode 100644
index 0000000..df31cbf
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/object.values/node_modules/has-symbols/README.md b/node_modules/object.values/node_modules/has-symbols/README.md
new file mode 100644
index 0000000..b27b31a
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/README.md
@@ -0,0 +1,45 @@
+# has-symbols <sup>[![Version Badge][2]][1]</sup>
+
+[![Build Status][3]][4]
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+Determine if the JS environment has Symbol support. Supports spec, or shams.
+
+## Example
+
+```js
+var hasSymbols = require('has-symbols');
+
+hasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable.
+
+var hasSymbolsKinda = require('has-symbols/shams');
+hasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec.
+```
+
+## Supported Symbol shams
+ - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)
+ - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/has-symbols
+[2]: http://versionbadg.es/ljharb/has-symbols.svg
+[3]: https://travis-ci.org/ljharb/has-symbols.svg
+[4]: https://travis-ci.org/ljharb/has-symbols
+[5]: https://david-dm.org/ljharb/has-symbols.svg
+[6]: https://david-dm.org/ljharb/has-symbols
+[7]: https://david-dm.org/ljharb/has-symbols/dev-status.svg
+[8]: https://david-dm.org/ljharb/has-symbols#info=devDependencies
+[9]: https://ci.testling.com/ljharb/has-symbols.png
+[10]: https://ci.testling.com/ljharb/has-symbols
+[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/has-symbols.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/has-symbols.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=has-symbols
diff --git a/node_modules/object.values/node_modules/has-symbols/index.js b/node_modules/object.values/node_modules/has-symbols/index.js
new file mode 100644
index 0000000..f72159e
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/index.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var origSymbol = global.Symbol;
+var hasSymbolSham = require('./shams');
+
+module.exports = function hasNativeSymbols() {
+ if (typeof origSymbol !== 'function') { return false; }
+ if (typeof Symbol !== 'function') { return false; }
+ if (typeof origSymbol('foo') !== 'symbol') { return false; }
+ if (typeof Symbol('bar') !== 'symbol') { return false; }
+
+ return hasSymbolSham();
+};
diff --git a/node_modules/object.values/node_modules/has-symbols/package.json b/node_modules/object.values/node_modules/has-symbols/package.json
new file mode 100644
index 0000000..e6ca851
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/package.json
@@ -0,0 +1,89 @@
+{
+ "author": {
+ "email": "ljharb@gmail.com",
+ "name": "Jordan Harband",
+ "url": "http://ljharb.codes"
+ },
+ "auto-changelog": {
+ "backfillLimit": false,
+ "commitLimit": false,
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false
+ },
+ "contributors": [
+ {
+ "email": "ljharb@gmail.com",
+ "name": "Jordan Harband",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "dependencies": {},
+ "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^15.0.1",
+ "auto-changelog": "^1.16.2",
+ "core-js": "^2.6.10",
+ "eslint": "^6.6.0",
+ "get-own-property-symbols": "^0.9.4",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^4.11.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "keywords": [
+ "Symbol",
+ "symbols",
+ "typeof",
+ "sham",
+ "polyfill",
+ "native",
+ "core-js",
+ "ES6"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "has-symbols",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/has-symbols.git"
+ },
+ "scripts": {
+ "lint": "eslint *.js",
+ "posttest": "npx aud",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"",
+ "prepublish": "safe-publish-latest",
+ "pretest": "npm run --silent lint",
+ "test": "npm run --silent tests-only",
+ "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs",
+ "test:shams:corejs": "node test/shams/core-js.js",
+ "test:shams:getownpropertysymbols": "node test/shams/get-own-property-symbols.js",
+ "test:staging": "node --harmony --es-staging test",
+ "test:stock": "node test",
+ "tests-only": "npm run --silent test:stock && npm run --silent test:staging && npm run --silent test:shams",
+ "version": "auto-changelog && git add CHANGELOG.md"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test/index.js"
+ },
+ "version": "1.0.1"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/has-symbols/shams.js b/node_modules/object.values/node_modules/has-symbols/shams.js
new file mode 100644
index 0000000..9f80f79
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/shams.js
@@ -0,0 +1,42 @@
+'use strict';
+
+/* eslint complexity: [2, 18], max-statements: [2, 33] */
+module.exports = function hasSymbols() {
+ if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
+ if (typeof Symbol.iterator === 'symbol') { return true; }
+
+ var obj = {};
+ var sym = Symbol('test');
+ var symObj = Object(sym);
+ if (typeof sym === 'string') { return false; }
+
+ if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
+ if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
+
+ // temp disabled per https://github.com/ljharb/object.assign/issues/17
+ // if (sym instanceof Symbol) { return false; }
+ // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
+ // if (!(symObj instanceof Symbol)) { return false; }
+
+ // if (typeof Symbol.prototype.toString !== 'function') { return false; }
+ // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
+
+ var symVal = 42;
+ obj[sym] = symVal;
+ for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax
+ if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
+
+ if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
+
+ var syms = Object.getOwnPropertySymbols(obj);
+ if (syms.length !== 1 || syms[0] !== sym) { return false; }
+
+ if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
+
+ if (typeof Object.getOwnPropertyDescriptor === 'function') {
+ var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
+ if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
+ }
+
+ return true;
+};
diff --git a/node_modules/object.values/node_modules/has-symbols/test/index.js b/node_modules/object.values/node_modules/has-symbols/test/index.js
new file mode 100644
index 0000000..fc32aff
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/test/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var test = require('tape');
+var hasSymbols = require('../');
+var runSymbolTests = require('./tests');
+
+test('interface', function (t) {
+ t.equal(typeof hasSymbols, 'function', 'is a function');
+ t.equal(typeof hasSymbols(), 'boolean', 'returns a boolean');
+ t.end();
+});
+
+test('Symbols are supported', { skip: !hasSymbols() }, function (t) {
+ runSymbolTests(t);
+ t.end();
+});
+
+test('Symbols are not supported', { skip: hasSymbols() }, function (t) {
+ t.equal(typeof Symbol, 'undefined', 'global Symbol is undefined');
+ t.equal(typeof Object.getOwnPropertySymbols, 'undefined', 'Object.getOwnPropertySymbols does not exist');
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/has-symbols/test/shams/core-js.js b/node_modules/object.values/node_modules/has-symbols/test/shams/core-js.js
new file mode 100644
index 0000000..df5365c
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/test/shams/core-js.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var test = require('tape');
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+ test('has native Symbol support', function (t) {
+ t.equal(typeof Symbol, 'function');
+ t.equal(typeof Symbol(), 'symbol');
+ t.end();
+ });
+ return;
+}
+
+var hasSymbols = require('../../shams');
+
+test('polyfilled Symbols', function (t) {
+ /* eslint-disable global-require */
+ t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling');
+ require('core-js/fn/symbol');
+ require('core-js/fn/symbol/to-string-tag');
+
+ require('../tests')(t);
+
+ var hasSymbolsAfter = hasSymbols();
+ t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling');
+ /* eslint-enable global-require */
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/has-symbols/test/shams/get-own-property-symbols.js b/node_modules/object.values/node_modules/has-symbols/test/shams/get-own-property-symbols.js
new file mode 100644
index 0000000..9191b24
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/test/shams/get-own-property-symbols.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var test = require('tape');
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+ test('has native Symbol support', function (t) {
+ t.equal(typeof Symbol, 'function');
+ t.equal(typeof Symbol(), 'symbol');
+ t.end();
+ });
+ return;
+}
+
+var hasSymbols = require('../../shams');
+
+test('polyfilled Symbols', function (t) {
+ /* eslint-disable global-require */
+ t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling');
+
+ require('get-own-property-symbols');
+
+ require('../tests')(t);
+
+ var hasSymbolsAfter = hasSymbols();
+ t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling');
+ /* eslint-enable global-require */
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/has-symbols/test/tests.js b/node_modules/object.values/node_modules/has-symbols/test/tests.js
new file mode 100644
index 0000000..93ff0ea
--- /dev/null
+++ b/node_modules/object.values/node_modules/has-symbols/test/tests.js
@@ -0,0 +1,54 @@
+'use strict';
+
+module.exports = function runSymbolTests(t) {
+ t.equal(typeof Symbol, 'function', 'global Symbol is a function');
+
+ if (typeof Symbol !== 'function') { return false };
+
+ t.notEqual(Symbol(), Symbol(), 'two symbols are not equal');
+
+ /*
+ t.equal(
+ Symbol.prototype.toString.call(Symbol('foo')),
+ Symbol.prototype.toString.call(Symbol('foo')),
+ 'two symbols with the same description stringify the same'
+ );
+ */
+
+ var foo = Symbol('foo');
+
+ /*
+ t.notEqual(
+ String(foo),
+ String(Symbol('bar')),
+ 'two symbols with different descriptions do not stringify the same'
+ );
+ */
+
+ t.equal(typeof Symbol.prototype.toString, 'function', 'Symbol#toString is a function');
+ // t.equal(String(foo), Symbol.prototype.toString.call(foo), 'Symbol#toString equals String of the same symbol');
+
+ t.equal(typeof Object.getOwnPropertySymbols, 'function', 'Object.getOwnPropertySymbols is a function');
+
+ var obj = {};
+ var sym = Symbol('test');
+ var symObj = Object(sym);
+ t.notEqual(typeof sym, 'string', 'Symbol is not a string');
+ t.equal(Object.prototype.toString.call(sym), '[object Symbol]', 'symbol primitive Object#toStrings properly');
+ t.equal(Object.prototype.toString.call(symObj), '[object Symbol]', 'symbol primitive Object#toStrings properly');
+
+ var symVal = 42;
+ obj[sym] = symVal;
+ for (sym in obj) { t.fail('symbol property key was found in for..in of object'); }
+
+ t.deepEqual(Object.keys(obj), [], 'no enumerable own keys on symbol-valued object');
+ t.deepEqual(Object.getOwnPropertyNames(obj), [], 'no own names on symbol-valued object');
+ t.deepEqual(Object.getOwnPropertySymbols(obj), [sym], 'one own symbol on symbol-valued object');
+ t.equal(Object.prototype.propertyIsEnumerable.call(obj, sym), true, 'symbol is enumerable');
+ t.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), {
+ configurable: true,
+ enumerable: true,
+ value: 42,
+ writable: true
+ }, 'property descriptor is correct');
+};
diff --git a/node_modules/object.values/node_modules/is-callable/.editorconfig b/node_modules/object.values/node_modules/is-callable/.editorconfig
new file mode 100644
index 0000000..bc228f8
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/node_modules/object.values/node_modules/is-callable/.eslintrc b/node_modules/object.values/node_modules/is-callable/.eslintrc
new file mode 100644
index 0000000..db619b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "id-length": 0,
+ "max-statements": [2, 12],
+ "max-statements-per-line": [2, { "max": 2 }]
+ }
+}
diff --git a/node_modules/object.values/node_modules/is-callable/.github/FUNDING.yml b/node_modules/object.values/node_modules/is-callable/.github/FUNDING.yml
new file mode 100644
index 0000000..0fdebd0
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/is-callable
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/object.values/node_modules/is-callable/.github/main.workflow b/node_modules/object.values/node_modules/is-callable/.github/main.workflow
new file mode 100644
index 0000000..0494481
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.github/main.workflow
@@ -0,0 +1,14 @@
+workflow "Autorebase branch on merge commits" {
+ on = "push"
+ resolves = ["rebase"]
+}
+
+workflow "Autorebase PR on merge commits" {
+ on = "pull_request"
+ resolves = ["rebase"]
+}
+
+ action "rebase" {
+ uses = "ljharb/rebase@latest"
+ secrets = ["GITHUB_TOKEN"]
+}
diff --git a/node_modules/object.values/node_modules/is-callable/.github/workflows/rebase.yml b/node_modules/object.values/node_modules/is-callable/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/node_modules/is-callable/.istanbul.yml b/node_modules/object.values/node_modules/is-callable/.istanbul.yml
new file mode 100644
index 0000000..9affe0b
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.istanbul.yml
@@ -0,0 +1,47 @@
+verbose: false
+instrumentation:
+ root: .
+ extensions:
+ - .js
+ - .jsx
+ default-excludes: true
+ excludes: []
+ variable: __coverage__
+ compact: true
+ preserve-comments: false
+ complete-copy: false
+ save-baseline: false
+ baseline-file: ./coverage/coverage-baseline.raw.json
+ include-all-sources: false
+ include-pid: false
+ es-modules: false
+ auto-wrap: false
+reporting:
+ print: summary
+ reports:
+ - html
+ dir: ./coverage
+ summarizer: pkg
+ report-config: {}
+ watermarks:
+ statements: [50, 80]
+ functions: [50, 80]
+ branches: [50, 80]
+ lines: [50, 80]
+hooks:
+ hook-run-in-context: false
+ post-require-hook: null
+ handle-sigint: false
+check:
+ global:
+ statements: 100
+ lines: 100
+ branches: 100
+ functions: 100
+ excludes: []
+ each:
+ statements: 100
+ lines: 100
+ branches: 100
+ functions: 100
+ excludes: []
diff --git a/node_modules/object.values/node_modules/is-callable/.travis.yml b/node_modules/object.values/node_modules/is-callable/.travis.yml
new file mode 100644
index 0000000..2d1c1d2
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/.travis.yml
@@ -0,0 +1,12 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/node_modules/is-callable/CHANGELOG.md b/node_modules/object.values/node_modules/is-callable/CHANGELOG.md
new file mode 100644
index 0000000..36b77fb
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/CHANGELOG.md
@@ -0,0 +1,67 @@
+1.1.5 / 2019-12-18
+=================
+ * [meta] remove unused Makefile and associated utilities
+ * [meta] add `funding` field; add FUNDING.yml
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `semver`, `tape`, `covert`, `rimraf`
+ * [Tests] use shared travis configs
+ * [Tests] use `eccheck` over `editorconfig-tools`
+ * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops
+ * [Tests] remove `jscs`
+ * [actions] add automatic rebasing / merge commit blocking
+
+1.1.4 / 2018-07-02
+=================
+ * [Fix] improve `class` and arrow function detection (#30, #31)
+ * [Tests] on all latest node minors; improve matrix
+ * [Dev Deps] update all dev deps
+
+1.1.3 / 2016-02-27
+=================
+ * [Fix] ensure “class “ doesn’t screw up “class” detection
+ * [Tests] up to `node` `v5.7`, `v4.3`
+ * [Dev Deps] update to `eslint` v2, `@ljharb/eslint-config`, `jscs`
+
+1.1.2 / 2016-01-15
+=================
+ * [Fix] Make sure comments don’t screw up “class” detection (#4)
+ * [Tests] up to `node` `v5.3`
+ * [Tests] Add `parallelshell`, run both `--es-staging` and stock tests at once
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`
+ * [Refactor] convert `isNonES6ClassFn` into `isES6ClassFn`
+
+1.1.1 / 2015-11-30
+=================
+ * [Fix] do not throw when a non-function has a function in its [[Prototype]] (#2)
+ * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `jscs`, `nsp`, `semver`
+ * [Tests] up to `node` `v5.1`
+ * [Tests] no longer allow node 0.8 to fail.
+ * [Tests] fix npm upgrades in older nodes
+
+1.1.0 / 2015-10-02
+=================
+ * [Fix] Some browsers report TypedArray constructors as `typeof object`
+ * [New] return false for "class" constructors, when possible.
+ * [Tests] up to `io.js` `v3.3`, `node` `v4.1`
+ * [Dev Deps] update `eslint`, `editorconfig-tools`, `nsp`, `tape`, `semver`, `jscs`, `covert`, `make-arrow-function`
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG
+
+1.0.4 / 2015-01-30
+=================
+ * If @@toStringTag is not present, use the old-school Object#toString test.
+
+1.0.3 / 2015-01-29
+=================
+ * Add tests to ensure arrow functions are callable.
+ * Refactor to aid optimization of non-try/catch code.
+
+1.0.2 / 2015-01-29
+=================
+ * Fix broken package.json
+
+1.0.1 / 2015-01-29
+=================
+ * Add early exit for typeof not "function"
+
+1.0.0 / 2015-01-29
+=================
+ * Initial release.
diff --git a/node_modules/object.values/node_modules/is-callable/LICENSE b/node_modules/object.values/node_modules/is-callable/LICENSE
new file mode 100644
index 0000000..b43df44
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/object.values/node_modules/is-callable/README.md b/node_modules/object.values/node_modules/is-callable/README.md
new file mode 100644
index 0000000..0cb6587
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/README.md
@@ -0,0 +1,59 @@
+# is-callable <sup>[![Version Badge][2]][1]</sup>
+
+[![Build Status][3]][4]
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+[![browser support][9]][10]
+
+Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.
+
+## Example
+
+```js
+var isCallable = require('is-callable');
+var assert = require('assert');
+
+assert.notOk(isCallable(undefined));
+assert.notOk(isCallable(null));
+assert.notOk(isCallable(false));
+assert.notOk(isCallable(true));
+assert.notOk(isCallable([]));
+assert.notOk(isCallable({}));
+assert.notOk(isCallable(/a/g));
+assert.notOk(isCallable(new RegExp('a', 'g')));
+assert.notOk(isCallable(new Date()));
+assert.notOk(isCallable(42));
+assert.notOk(isCallable(NaN));
+assert.notOk(isCallable(Infinity));
+assert.notOk(isCallable(new Number(42)));
+assert.notOk(isCallable('foo'));
+assert.notOk(isCallable(Object('foo')));
+
+assert.ok(isCallable(function () {}));
+assert.ok(isCallable(function* () {}));
+assert.ok(isCallable(x => x * x));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/is-callable
+[2]: http://versionbadg.es/ljharb/is-callable.svg
+[3]: https://travis-ci.org/ljharb/is-callable.svg
+[4]: https://travis-ci.org/ljharb/is-callable
+[5]: https://david-dm.org/ljharb/is-callable.svg
+[6]: https://david-dm.org/ljharb/is-callable
+[7]: https://david-dm.org/ljharb/is-callable/dev-status.svg
+[8]: https://david-dm.org/ljharb/is-callable#info=devDependencies
+[9]: https://ci.testling.com/ljharb/is-callable.png
+[10]: https://ci.testling.com/ljharb/is-callable
+[11]: https://nodei.co/npm/is-callable.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/is-callable.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/is-callable.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=is-callable
diff --git a/node_modules/object.values/node_modules/is-callable/index.js b/node_modules/object.values/node_modules/is-callable/index.js
new file mode 100644
index 0000000..d9820b5
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/index.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var fnToStr = Function.prototype.toString;
+
+var constructorRegex = /^\s*class\b/;
+var isES6ClassFn = function isES6ClassFunction(value) {
+ try {
+ var fnStr = fnToStr.call(value);
+ return constructorRegex.test(fnStr);
+ } catch (e) {
+ return false; // not a function
+ }
+};
+
+var tryFunctionObject = function tryFunctionToStr(value) {
+ try {
+ if (isES6ClassFn(value)) { return false; }
+ fnToStr.call(value);
+ return true;
+ } catch (e) {
+ return false;
+ }
+};
+var toStr = Object.prototype.toString;
+var fnClass = '[object Function]';
+var genClass = '[object GeneratorFunction]';
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+
+module.exports = function isCallable(value) {
+ if (!value) { return false; }
+ if (typeof value !== 'function' && typeof value !== 'object') { return false; }
+ if (typeof value === 'function' && !value.prototype) { return true; }
+ if (hasToStringTag) { return tryFunctionObject(value); }
+ if (isES6ClassFn(value)) { return false; }
+ var strClass = toStr.call(value);
+ return strClass === fnClass || strClass === genClass;
+};
diff --git a/node_modules/object.values/node_modules/is-callable/package.json b/node_modules/object.values/node_modules/is-callable/package.json
new file mode 100644
index 0000000..9ffb695
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/package.json
@@ -0,0 +1,91 @@
+{
+ "author": {
+ "email": "ljharb@gmail.com",
+ "name": "Jordan Harband",
+ "url": "http://ljharb.codes"
+ },
+ "contributors": [
+ {
+ "email": "ljharb@gmail.com",
+ "name": "Jordan Harband",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "dependencies": {},
+ "description": "Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^15.0.2",
+ "covert": "^1.1.1",
+ "eclint": "^2.8.1",
+ "eslint": "^6.7.2",
+ "foreach": "^2.0.5",
+ "istanbul": "1.1.0-alpha.1",
+ "istanbul-merge": "^1.1.1",
+ "make-arrow-function": "^1.1.0",
+ "make-generator-function": "^1.1.0",
+ "rimraf": "^2.7.1",
+ "tape": "^4.12.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "keywords": [
+ "Function",
+ "function",
+ "callable",
+ "generator",
+ "generator function",
+ "arrow",
+ "arrow function",
+ "ES6",
+ "toStringTag",
+ "@@toStringTag"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-callable",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/is-callable.git"
+ },
+ "scripts": {
+ "coverage": "npm run --silent istanbul",
+ "covert": "covert test",
+ "covert:quiet": "covert test --quiet",
+ "istanbul": "npm run --silent istanbul:clean && npm run --silent istanbul:std && npm run --silent istanbul:harmony && npm run --silent istanbul:merge && istanbul check",
+ "istanbul:clean": "rimraf coverage coverage-std coverage-harmony",
+ "istanbul:harmony": "node --harmony ./node_modules/istanbul/lib/cli.js cover test --dir coverage-harmony",
+ "istanbul:merge": "istanbul-merge --out coverage/coverage.raw.json coverage-harmony/coverage.raw.json coverage-std/coverage.raw.json && istanbul report html",
+ "istanbul:std": "istanbul cover test --report html --dir coverage-std",
+ "lint": "eslint .",
+ "posttest": "npx aud",
+ "prelint": "eclint check *",
+ "pretest": "npm run --silent lint",
+ "test": "npm run --silent tests-only",
+ "test:staging": "node --es-staging test",
+ "test:stock": "node test",
+ "tests-only": "npm run --silent test:stock && npm run --silent test:staging"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test/index.js"
+ },
+ "version": "1.1.5"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/is-callable/test/index.js b/node_modules/object.values/node_modules/is-callable/test/index.js
new file mode 100644
index 0000000..2e4c362
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-callable/test/index.js
@@ -0,0 +1,159 @@
+'use strict';
+
+/* eslint no-magic-numbers: 1 */
+
+var test = require('tape');
+var isCallable = require('../');
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
+var genFn = require('make-generator-function');
+var arrowFn = require('make-arrow-function')();
+var weirdlyCommentedArrowFn;
+var asyncFn;
+var asyncArrowFn;
+try {
+ /* eslint-disable no-new-func */
+ weirdlyCommentedArrowFn = Function('return cl/*/**/=>/**/ass - 1;')();
+ asyncFn = Function('return async function foo() {};')();
+ asyncArrowFn = Function('return async () => {};')();
+ /* eslint-enable no-new-func */
+} catch (e) { /**/ }
+var forEach = require('foreach');
+
+var noop = function () {};
+var classFake = function classFake() { }; // eslint-disable-line func-name-matching
+var returnClass = function () { return ' class '; };
+var return3 = function () { return 3; };
+/* for coverage */
+noop();
+classFake();
+returnClass();
+return3();
+/* end for coverage */
+
+var invokeFunction = function invokeFunctionString(str) {
+ var result;
+ try {
+ /* eslint-disable no-new-func */
+ var fn = Function(str);
+ /* eslint-enable no-new-func */
+ result = fn();
+ } catch (e) {}
+ return result;
+};
+
+var classConstructor = invokeFunction('"use strict"; return class Foo {}');
+
+var commentedClass = invokeFunction('"use strict"; return class/*kkk*/\n//blah\n Bar\n//blah\n {}');
+var commentedClassOneLine = invokeFunction('"use strict"; return class/**/A{}');
+var classAnonymous = invokeFunction('"use strict"; return class{}');
+var classAnonymousCommentedOneLine = invokeFunction('"use strict"; return class/*/*/{}');
+
+test('not callables', function (t) {
+ t.test('non-number/string primitives', function (st) {
+ st.notOk(isCallable(), 'undefined is not callable');
+ st.notOk(isCallable(null), 'null is not callable');
+ st.notOk(isCallable(false), 'false is not callable');
+ st.notOk(isCallable(true), 'true is not callable');
+ st.end();
+ });
+
+ t.notOk(isCallable([]), 'array is not callable');
+ t.notOk(isCallable({}), 'object is not callable');
+ t.notOk(isCallable(/a/g), 'regex literal is not callable');
+ t.notOk(isCallable(new RegExp('a', 'g')), 'regex object is not callable');
+ t.notOk(isCallable(new Date()), 'new Date() is not callable');
+
+ t.test('numbers', function (st) {
+ st.notOk(isCallable(42), 'number is not callable');
+ st.notOk(isCallable(Object(42)), 'number object is not callable');
+ st.notOk(isCallable(NaN), 'NaN is not callable');
+ st.notOk(isCallable(Infinity), 'Infinity is not callable');
+ st.end();
+ });
+
+ t.test('strings', function (st) {
+ st.notOk(isCallable('foo'), 'string primitive is not callable');
+ st.notOk(isCallable(Object('foo')), 'string object is not callable');
+ st.end();
+ });
+
+ t.test('non-function with function in its [[Prototype]] chain', function (st) {
+ var Foo = function Bar() {};
+ Foo.prototype = noop;
+ st.equal(true, isCallable(Foo), 'sanity check: Foo is callable');
+ st.equal(false, isCallable(new Foo()), 'instance of Foo is not callable');
+ st.end();
+ });
+
+ t.end();
+});
+
+test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) {
+ var fakeFunction = {
+ toString: function () { return String(return3); },
+ valueOf: return3
+ };
+ fakeFunction[Symbol.toStringTag] = 'Function';
+ t.equal(String(fakeFunction), String(return3));
+ t.equal(Number(fakeFunction), return3());
+ t.notOk(isCallable(fakeFunction), 'fake Function with @@toStringTag "Function" is not callable');
+ t.end();
+});
+
+var typedArrayNames = [
+ 'Int8Array',
+ 'Uint8Array',
+ 'Uint8ClampedArray',
+ 'Int16Array',
+ 'Uint16Array',
+ 'Int32Array',
+ 'Uint32Array',
+ 'Float32Array',
+ 'Float64Array'
+];
+
+test('Functions', function (t) {
+ t.ok(isCallable(noop), 'function is callable');
+ t.ok(isCallable(classFake), 'function with name containing "class" is callable');
+ t.ok(isCallable(returnClass), 'function with string " class " is callable');
+ t.ok(isCallable(isCallable), 'isCallable is callable');
+ t.end();
+});
+
+test('Typed Arrays', function (st) {
+ forEach(typedArrayNames, function (typedArray) {
+ /* istanbul ignore if : covered in node 0.6 */
+ if (typeof global[typedArray] === 'undefined') {
+ st.comment('# SKIP typed array "' + typedArray + '" not supported');
+ } else {
+ st.ok(isCallable(global[typedArray]), typedArray + ' is callable');
+ }
+ });
+ st.end();
+});
+
+test('Generators', { skip: !genFn }, function (t) {
+ t.ok(isCallable(genFn), 'generator function is callable');
+ t.end();
+});
+
+test('Arrow functions', { skip: !arrowFn }, function (t) {
+ t.ok(isCallable(arrowFn), 'arrow function is callable');
+ t.ok(isCallable(weirdlyCommentedArrowFn), 'weirdly commented arrow functions are callable');
+ t.end();
+});
+
+test('"Class" constructors', { skip: !classConstructor || !commentedClass || !commentedClassOneLine || !classAnonymous }, function (t) {
+ t.notOk(isCallable(classConstructor), 'class constructors are not callable');
+ t.notOk(isCallable(commentedClass), 'class constructors with comments in the signature are not callable');
+ t.notOk(isCallable(commentedClassOneLine), 'one-line class constructors with comments in the signature are not callable');
+ t.notOk(isCallable(classAnonymous), 'anonymous class constructors are not callable');
+ t.notOk(isCallable(classAnonymousCommentedOneLine), 'anonymous one-line class constructors with comments in the signature are not callable');
+ t.end();
+});
+
+test('`async function`s', { skip: !asyncFn }, function (t) {
+ t.ok(isCallable(asyncFn), '`async function`s are callable');
+ t.ok(isCallable(asyncArrowFn), '`async` arrow functions are callable');
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/is-regex/.eslintrc b/node_modules/object.values/node_modules/is-regex/.eslintrc
new file mode 100644
index 0000000..fbb8e9d
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/.eslintrc
@@ -0,0 +1,9 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "id-length": [1]
+ }
+}
diff --git a/node_modules/object.values/node_modules/is-regex/.github/workflows/rebase.yml b/node_modules/object.values/node_modules/is-regex/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/node_modules/is-regex/.travis.yml b/node_modules/object.values/node_modules/is-regex/.travis.yml
new file mode 100644
index 0000000..2d1c1d2
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/.travis.yml
@@ -0,0 +1,12 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/node_modules/is-regex/CHANGELOG.md b/node_modules/object.values/node_modules/is-regex/CHANGELOG.md
new file mode 100644
index 0000000..c82d889
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/CHANGELOG.md
@@ -0,0 +1,148 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+
+## [v1.0.5](https://github.com/inspect-js/is-regex/compare/v1.0.4...v1.0.5) - 2019-12-15
+
+### Commits
+
+- [Tests] use shared travis-ci configs [`af728b2`](https://github.com/inspect-js/is-regex/commit/af728b21c5cc9e41234fb4015594bffdcfff597c)
+- [Tests] remove `jscs` [`1b8cfe8`](https://github.com/inspect-js/is-regex/commit/1b8cfe8cfb14820c196775f19d370276e4034791)
+- [meta] add `auto-changelog` [`c3131d8`](https://github.com/inspect-js/is-regex/commit/c3131d8ab5d06ea5fa05a4bb2ad28bbfb81668ad)
+- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`, `v4.8`; newer npm fails on older nodes [`660b658`](https://github.com/inspect-js/is-regex/commit/660b6585d1a9607dbdae879b70ce2f6a5684616c)
+- [Tests] up to `node` `v9.3`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS [`7c25218`](https://github.com/inspect-js/is-regex/commit/7c25218d540ab17c18e4ae333677c5725806a778)
+- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`fa95547`](https://github.com/inspect-js/is-regex/commit/fa955478950a5ba0a920010d5daaa29487500b30)
+- [meta] remove unused Makefile and associated utilities [`9fd2a29`](https://github.com/inspect-js/is-regex/commit/9fd2a29dc57ed125f3d61e94f6254a9dd8ee0044)
+- [Tests] up to `node` `v11.3`, `v10.14`, `v8.14`, `v6.15` [`7f2ac41`](https://github.com/inspect-js/is-regex/commit/7f2ac41ef5dc4d53bfe2fb1c24486c688a2537bd)
+- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`6fa2b0f`](https://github.com/inspect-js/is-regex/commit/6fa2b0fe171a5b02086a06679a92d989e83a8b8e)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`697e1de`](https://github.com/inspect-js/is-regex/commit/697e1de1c9e69f08e591cc0040d81fdbbde6fe4e)
+- [actions] add automatic rebasing / merge commit blocking [`ad86dc9`](https://github.com/inspect-js/is-regex/commit/ad86dc97a52e4f66fbfb3b8c9c78da3963588b54)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `jscs`, `nsp`, `replace`, `semver`, `tape` [`5c99c8e`](https://github.com/inspect-js/is-regex/commit/5c99c8e384d5ce2ef434be5853c301477cf35456)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace`, `semver`, `tape` [`bb63686`](https://github.com/inspect-js/is-regex/commit/bb63686a9d0fc586d121549cf484da95edec3b0a)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config@`, `replace`, `semver`, `tape` [`ddf3670`](https://github.com/inspect-js/is-regex/commit/ddf36705e5f7bd29832721e4a23abf06195032c6)
+- [Dev Deps] update `tape`, `nsp`, `eslint`, `@ljharb/eslint-config` [`e7b5a62`](https://github.com/inspect-js/is-regex/commit/e7b5a626eef3b9648c7d52d4620ce2e2a98a9ab8)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`c803db5`](https://github.com/inspect-js/is-regex/commit/c803db5cd94cf9e0a559617adbc1e4c9d22007ff)
+- [Tests] switch from `nsp` to `npm audit` [`b7239be`](https://github.com/inspect-js/is-regex/commit/b7239be9da263a0f7066f79d087eaf700a9613e9)
+- [Dev Deps] update `eslint`, `nsp`, `semver`, `tape` [`347ee6c`](https://github.com/inspect-js/is-regex/commit/347ee6c67ba0f56b03f21a5abe743658f6515963)
+- Only apps should have lockfiles. [`3866575`](https://github.com/inspect-js/is-regex/commit/38665755ecf028061f15816059e26023890a0dc7)
+- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`d099a39`](https://github.com/inspect-js/is-regex/commit/d099a3943eb7e156a3e64fb8b74e11d7c83a4bec)
+- [meta] add `funding` field [`741aecd`](https://github.com/inspect-js/is-regex/commit/741aecd92cd49868b3606c8cc99ce299e5f3c7d5)
+- [Tests] use `eclint` instead of `editorconfig-tools` [`bc6aa75`](https://github.com/inspect-js/is-regex/commit/bc6aa7539e506788709b96f7bf3d7549850a81c3)
+- [Tests] on `node` `v10.1` [`262226f`](https://github.com/inspect-js/is-regex/commit/262226f08fa34dff9a8dffd16daabb3dc6e262eb)
+- [Dev Deps] update `eslint` [`31fd719`](https://github.com/inspect-js/is-regex/commit/31fd719dd59a6111ca710cdb0d19a8adadf9b8c6)
+- [Deps] update `has` [`e9e25a3`](https://github.com/inspect-js/is-regex/commit/e9e25a3de7e89faaa6aadf5010477074140e8218)
+- [Dev Deps] update `replace` [`aeeb968`](https://github.com/inspect-js/is-regex/commit/aeeb968bf5a4fc07f0fa6905f2c699fc563b6c32)
+- [Tests] set audit level [`2a6290e`](https://github.com/inspect-js/is-regex/commit/2a6290e78b58bf14b734d7998fe53b4a84db5e44)
+- [Tests] remove `nsp` [`fc74c2b`](https://github.com/inspect-js/is-regex/commit/fc74c2bb6970a7f3280abe6eff3b492d77d89c9f)
+
+## [v1.0.4](https://github.com/inspect-js/is-regex/compare/v1.0.3...v1.0.4) - 2017-02-18
+
+### Fixed
+
+- [Fix] ensure that `lastIndex` is not mutated [`#3`](https://github.com/inspect-js/is-regex/issues/3)
+
+### Commits
+
+- Update `eslint`, `tape`, `semver`; use my personal shared `eslint` config [`c4a41c3`](https://github.com/inspect-js/is-regex/commit/c4a41c3a8203a3919b01cd0d1b577daadf30a452)
+- [Tests] on all node minors; improve test matrix [`58d7508`](https://github.com/inspect-js/is-regex/commit/58d7508a36eb92bd76717486b9e78bde502ffe3e)
+- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`7290076`](https://github.com/inspect-js/is-regex/commit/729007606e9ed162953d1f5812c37eb06c554ec2)
+- Update `covert`, `jscs`, `eslint`, `semver` [`dabc729`](https://github.com/inspect-js/is-regex/commit/dabc729cfc4458264c6f7642004d41dd5c214bfd)
+- Update `eslint` [`a946b05`](https://github.com/inspect-js/is-regex/commit/a946b051159396b4311c564880f96e3d00e8b8e2)
+- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`1744dde`](https://github.com/inspect-js/is-regex/commit/1744dde77526841f216fa2c1c866c5a82b1638c0)
+- [Refactor] when try/catch is needed, bail early if the value lacks an own `lastIndex` data property. [`288ad93`](https://github.com/inspect-js/is-regex/commit/288ad93dbfed9f6828de20de67105ee6d6504425)
+- Update `editorconfig-tools`, `eslint`, `semver`, `replace` [`4d895c6`](https://github.com/inspect-js/is-regex/commit/4d895c68a0cdbb5803185928963c15147aad0404)
+- Update `eslint`, `tape`, `semver` [`f387f03`](https://github.com/inspect-js/is-regex/commit/f387f03b260b56372bfca301d4e79c4067633854)
+- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`55e480f`](https://github.com/inspect-js/is-regex/commit/55e480f407cafb6c21a6c32aef04ccaa3ba4216c)
+- [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`89d9528`](https://github.com/inspect-js/is-regex/commit/89d95285b364913ebcd8ac7e0872570fe009a5d3)
+- [Dev Deps] update `jscs` [`eb222a8`](https://github.com/inspect-js/is-regex/commit/eb222a8435e59909354f3700fd4880e4ce1cb13e)
+- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`c65429c`](https://github.com/inspect-js/is-regex/commit/c65429cea0366508c10ad2ab773af7b83a34fc81)
+- Update `nsp`, `eslint` [`c60fbd8`](https://github.com/inspect-js/is-regex/commit/c60fbd8680f7fb3508ec3c5be8ebb788672516c8)
+- Update `eslint`, `semver` [`6a62116`](https://github.com/inspect-js/is-regex/commit/6a621168c63616bf004ca8b1f885b4eb8a58a3e5)
+- [Tests] on `node` `v7.5`, `v4.7` [`e764651`](https://github.com/inspect-js/is-regex/commit/e764651336f5da5e239e9fe8869f3a3201c19d2b)
+- Test up to `io.js` `v2.1` [`3bf326a`](https://github.com/inspect-js/is-regex/commit/3bf326a9bcd530fd16c9fc806e249a68e25ab7e3)
+- Test on the latest `io.js` versions. [`693d047`](https://github.com/inspect-js/is-regex/commit/693d0477631c5d7671f6c99eca5594ffffa75771)
+- [Refactor] use an early return instead of a ternary. [`31eaca2`](https://github.com/inspect-js/is-regex/commit/31eaca28b7d0aaac0599fe7a569b93b842f8ab16)
+- Test on `io.js` `v2.2` [`c18c55a`](https://github.com/inspect-js/is-regex/commit/c18c55aee6358d70531f935e98851e42b698d93c)
+- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`a1c237d`](https://github.com/inspect-js/is-regex/commit/a1c237d35f880fe0bcbc9275254611a6a2300aaf)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`aa3ea0f`](https://github.com/inspect-js/is-regex/commit/aa3ea0f148af31d75f7ef8a800412729d82def04)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`d97831d`](https://github.com/inspect-js/is-regex/commit/d97831d0e2ccd3d00d1f7354b7f81e2575f90953)
+- [Dev Deps] Update `tape`, `eslint` [`95e6def`](https://github.com/inspect-js/is-regex/commit/95e6defe3178c45dc9df16e474e558979d5f5c05)
+- Update `eslint`, `nsp` [`3844c93`](https://github.com/inspect-js/is-regex/commit/3844c935cfe7c52fae0dc74d27e884c417cb4616)
+- Update `tape`, `jscs` [`0d6dac8`](https://github.com/inspect-js/is-regex/commit/0d6dac818ed251910171965932f021291919e770)
+- Fix tests for faked @@toStringTag [`2ebef9f`](https://github.com/inspect-js/is-regex/commit/2ebef9f0759843e9a063de7a512b46e3e7daea7e)
+- Test up to `io.js` `v3.0` [`ec1d2d4`](https://github.com/inspect-js/is-regex/commit/ec1d2d44481fa0fa11448527da8030c99fe47a12)
+- [Refactor] bail earlier when the value is falsy. [`a9e333e`](https://github.com/inspect-js/is-regex/commit/a9e333e2ac8912ca05b7e31d30e4eea683c0da4b)
+- [Dev Deps] update `tape` [`8cdcaae`](https://github.com/inspect-js/is-regex/commit/8cdcaae07be8c790cdb99849e6076ea7702a4c84)
+- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`281c4ef`](https://github.com/inspect-js/is-regex/commit/281c4efeb71c86dd380e741bcaee3f7dbf956151)
+- Test on `io.js` `v2.4` [`4d54c68`](https://github.com/inspect-js/is-regex/commit/4d54c68a81b5332a3b76259d8aa8f514be5efd13)
+- Test on `io.js` `v2.3` [`23170f5`](https://github.com/inspect-js/is-regex/commit/23170f5cae632d0377de73bd2febc53db8aebbc9)
+- Test on `iojs-v1.6` [`4487ad0`](https://github.com/inspect-js/is-regex/commit/4487ad0194a5684223bfa2690da4e0a441f7132a)
+
+## [v1.0.3](https://github.com/inspect-js/is-regex/compare/v1.0.2...v1.0.3) - 2015-01-30
+
+### Commits
+
+- Update npm run scripts. [`dc528dd`](https://github.com/inspect-js/is-regex/commit/dc528dd25e775089bc0a3f5a8f7ae7ffc4cdf52a)
+- Add toStringTag tests. [`f48a83a`](https://github.com/inspect-js/is-regex/commit/f48a83a78720b78ab60ca586c16f6f3dbcfec825)
+- If @@toStringTag is not present, use the old-school Object#toString test. [`50b0ffd`](https://github.com/inspect-js/is-regex/commit/50b0ffd9c7fdbd54aee8cde1b07e680ae84f6a0d)
+
+## [v1.0.2](https://github.com/inspect-js/is-regex/compare/v1.0.1...v1.0.2) - 2015-01-29
+
+### Commits
+
+- `make release` [`a1de7ec`](https://github.com/inspect-js/is-regex/commit/a1de7eca4cecc8015fd27804669f8fc61bd16a68)
+- Improve optimization by separating the try/catch, and bailing out early when not typeof "object". [`5ab7632`](https://github.com/inspect-js/is-regex/commit/5ab76322a348487fa8b16761e83f6824c3c27d11)
+
+## [v1.0.1](https://github.com/inspect-js/is-regex/compare/v1.0.0...v1.0.1) - 2015-01-28
+
+### Commits
+
+- Using my standard jscs.json file [`1f1733a`](https://github.com/inspect-js/is-regex/commit/1f1733ac8433cdcceb25356f86b74136a4477cb9)
+- Adding `npm run lint` [`51ea70f`](https://github.com/inspect-js/is-regex/commit/51ea70fa7e461d022f611c195f343ea8d0333d71)
+- Use RegExp#exec to test if something is a regex, which works even with ES6 @@toStringTag. [`042c8c7`](https://github.com/inspect-js/is-regex/commit/042c8c734faade9015932b61f1e8ea4f3a93b1b3)
+- Adding license and downloads badges [`366d619`](https://github.com/inspect-js/is-regex/commit/366d61965d3a4119126e78e09b2166bbcddd0c5a)
+- Use SVG badges instead of PNG [`6a32e4f`](https://github.com/inspect-js/is-regex/commit/6a32e4fc87d7d3a3787b800dd033c9293aead6df)
+- Update `tape`, `jscs` [`f1b9462`](https://github.com/inspect-js/is-regex/commit/f1b9462f86d1b69de07176e7f277f668757ba964)
+- Update `jscs` [`1bff23f`](https://github.com/inspect-js/is-regex/commit/1bff23ff0fe88c8263e8bf04cf99e290af96d5b0)
+- Update `tape`, `jscs` [`c22ea2e`](https://github.com/inspect-js/is-regex/commit/c22ea2e7967f45618deed01ff5ea483f918be216)
+- Update `tape`, `jscs` [`b0479db`](https://github.com/inspect-js/is-regex/commit/b0479db99a1b1b872d1618fb0a71f0c74a78b29b)
+- Use consistent quotes [`1a6e347`](https://github.com/inspect-js/is-regex/commit/1a6e34730d9270f3f20519139faa4c4e6ec2e1f5)
+- Make travis builds faster. [`090a4ea`](https://github.com/inspect-js/is-regex/commit/090a4ea7c5fa709d108d596e3bc304e6ce973dec)
+- Update `tape` [`7d76129`](https://github.com/inspect-js/is-regex/commit/7d7612928bdd43230fbd835db71797249ca24f35)
+- Lock covert to v1.0.0. [`9a90b03`](https://github.com/inspect-js/is-regex/commit/9a90b03fb390e66f874223a34c58ba2bb109edd3)
+- Updating tape [`bfbc7f5`](https://github.com/inspect-js/is-regex/commit/bfbc7f593a007acd0411152bbb55f724dc4ca935)
+- Updating jscs [`13ad511`](https://github.com/inspect-js/is-regex/commit/13ad511d80cd67300c2c0c5387fc4b3b423e2768)
+- Updating jscs [`cda1945`](https://github.com/inspect-js/is-regex/commit/cda1945d603dfe99e24d5a909a931d366451bc4d)
+- Updating jscs [`de96c99`](https://github.com/inspect-js/is-regex/commit/de96c99d4bf5787df671de6df9138b6547a6545b)
+- Running linter as part of tests [`2cb6567`](https://github.com/inspect-js/is-regex/commit/2cb656733b1ed0af14ad11fb584006d22de0c69d)
+- Updating covert [`a56ae74`](https://github.com/inspect-js/is-regex/commit/a56ae74ec8d5f0473295a8b10519a18580f16624)
+- Updating tape [`ffe47f7`](https://github.com/inspect-js/is-regex/commit/ffe47f7fe9cf6d16896b4bdc286bd1d0805d5c49)
+
+## [v1.0.0](https://github.com/inspect-js/is-regex/compare/v0.0.0...v1.0.0) - 2014-05-19
+
+### Commits
+
+- Make sure old and unstable nodes don't break Travis [`05da747`](https://github.com/inspect-js/is-regex/commit/05da7478f960dc131ec3ad864e27e8c6b7d74a80)
+- toString is a reserved var name in old Opera [`885c48c`](https://github.com/inspect-js/is-regex/commit/885c48c120f921a55f1842b0607d3e7875379821)
+- Updating deps [`2ca0e79`](https://github.com/inspect-js/is-regex/commit/2ca0e79a2443ca34d85e8b2ea2e26f55855b74a7)
+- Updating tape. [`9678435`](https://github.com/inspect-js/is-regex/commit/96784355611deb0c23b9064be774216d76e3e457)
+- Updating covert [`c3bb898`](https://github.com/inspect-js/is-regex/commit/c3bb8985a422e3e0c81f9c43899b6c19a72c755f)
+- Updating tape [`7811708`](https://github.com/inspect-js/is-regex/commit/78117089688258b8f939b397b37897b5b3e30f74)
+- Testing on node 0.6 again [`dec36ae`](https://github.com/inspect-js/is-regex/commit/dec36ae58a39a3f80e832b702c3e19406363c160)
+- Run code coverage as part of tests [`e6f4ebe`](https://github.com/inspect-js/is-regex/commit/e6f4ebec26894543747603f2cb360e839f2ca290)
+
+## v0.0.0 - 2014-01-15
+
+### Commits
+
+- package.json [`aa60d43`](https://github.com/inspect-js/is-regex/commit/aa60d43d2c8adb9fdd47f5898e5e1e570bd238d8)
+- read me [`861e944`](https://github.com/inspect-js/is-regex/commit/861e944de88e84010eaa662ea9ea9f17c90cff8c)
+- Initial commit [`d0cdd71`](https://github.com/inspect-js/is-regex/commit/d0cdd71a637d8490b7ee3eaaf75c7e31d0f9242f)
+- Tests. [`b533f74`](https://github.com/inspect-js/is-regex/commit/b533f741a88dff002790fb7af054b2a74e72d4da)
+- Implementation. [`3c9a8c0`](https://github.com/inspect-js/is-regex/commit/3c9a8c06994003cdfffeb3620f251f4c4cae7755)
+- Travis CI [`742c440`](https://github.com/inspect-js/is-regex/commit/742c4407015f9108875fd108fde137f5245e9e7a)
diff --git a/node_modules/object.values/node_modules/is-regex/LICENSE b/node_modules/object.values/node_modules/is-regex/LICENSE
new file mode 100644
index 0000000..47b7b50
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/object.values/node_modules/is-regex/README.md b/node_modules/object.values/node_modules/is-regex/README.md
new file mode 100644
index 0000000..05baa0e
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/README.md
@@ -0,0 +1,54 @@
+#is-regex <sup>[![Version Badge][2]][1]</sup>
+
+[![Build Status][3]][4]
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+[![browser support][9]][10]
+
+Is this value a JS regex?
+This module works cross-realm/iframe, and despite ES6 @@toStringTag.
+
+## Example
+
+```js
+var isRegex = require('is-regex');
+var assert = require('assert');
+
+assert.notOk(isRegex(undefined));
+assert.notOk(isRegex(null));
+assert.notOk(isRegex(false));
+assert.notOk(isRegex(true));
+assert.notOk(isRegex(42));
+assert.notOk(isRegex('foo'));
+assert.notOk(isRegex(function () {}));
+assert.notOk(isRegex([]));
+assert.notOk(isRegex({}));
+
+assert.ok(isRegex(/a/g));
+assert.ok(isRegex(new RegExp('a', 'g')));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/is-regex
+[2]: http://versionbadg.es/ljharb/is-regex.svg
+[3]: https://travis-ci.org/ljharb/is-regex.svg
+[4]: https://travis-ci.org/ljharb/is-regex
+[5]: https://david-dm.org/ljharb/is-regex.svg
+[6]: https://david-dm.org/ljharb/is-regex
+[7]: https://david-dm.org/ljharb/is-regex/dev-status.svg
+[8]: https://david-dm.org/ljharb/is-regex#info=devDependencies
+[9]: https://ci.testling.com/ljharb/is-regex.png
+[10]: https://ci.testling.com/ljharb/is-regex
+[11]: https://nodei.co/npm/is-regex.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/is-regex.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/is-regex.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=is-regex
+
diff --git a/node_modules/object.values/node_modules/is-regex/index.js b/node_modules/object.values/node_modules/is-regex/index.js
new file mode 100644
index 0000000..93a5b4e
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/index.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+var regexExec = RegExp.prototype.exec;
+var gOPD = Object.getOwnPropertyDescriptor;
+
+var tryRegexExecCall = function tryRegexExec(value) {
+ try {
+ var lastIndex = value.lastIndex;
+ value.lastIndex = 0; // eslint-disable-line no-param-reassign
+
+ regexExec.call(value);
+ return true;
+ } catch (e) {
+ return false;
+ } finally {
+ value.lastIndex = lastIndex; // eslint-disable-line no-param-reassign
+ }
+};
+var toStr = Object.prototype.toString;
+var regexClass = '[object RegExp]';
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+
+module.exports = function isRegex(value) {
+ if (!value || typeof value !== 'object') {
+ return false;
+ }
+ if (!hasToStringTag) {
+ return toStr.call(value) === regexClass;
+ }
+
+ var descriptor = gOPD(value, 'lastIndex');
+ var hasLastIndexDataProperty = descriptor && has(descriptor, 'value');
+ if (!hasLastIndexDataProperty) {
+ return false;
+ }
+
+ return tryRegexExecCall(value);
+};
diff --git a/node_modules/object.values/node_modules/is-regex/package.json b/node_modules/object.values/node_modules/is-regex/package.json
new file mode 100644
index 0000000..d9a6f04
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/package.json
@@ -0,0 +1,78 @@
+{
+ "author": "Jordan Harband <ljharb@gmail.com>",
+ "auto-changelog": {
+ "backfillLimit": false,
+ "commitLimit": false,
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false
+ },
+ "bugs": {
+ "url": "https://github.com/ljharb/is-regex/issues"
+ },
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "description": "Is this value a JS regex? Works cross-realm/iframe, and despite ES6 @@toStringTag",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^15.0.2",
+ "auto-changelog": "^1.16.2",
+ "covert": "^1.1.1",
+ "eclint": "^2.8.1",
+ "eslint": "^6.7.2",
+ "tape": "^4.11.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "homepage": "https://github.com/ljharb/is-regex",
+ "keywords": [
+ "regex",
+ "regexp",
+ "is",
+ "regular expression",
+ "regular",
+ "expression"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-regex",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/is-regex.git"
+ },
+ "scripts": {
+ "coverage": "covert test/index.js",
+ "eccheck": "eclint check *.js **/*.js > /dev/null",
+ "lint": "eslint .",
+ "posttest": "npx aud",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"",
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "tests-only": "node --harmony --es-staging test",
+ "version": "auto-changelog && git add CHANGELOG.md"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..12.0",
+ "opera/15.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test.js"
+ },
+ "version": "1.0.5"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/is-regex/test/index.js b/node_modules/object.values/node_modules/is-regex/test/index.js
new file mode 100644
index 0000000..731c789
--- /dev/null
+++ b/node_modules/object.values/node_modules/is-regex/test/index.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var test = require('tape');
+var isRegex = require('..');
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+
+test('not regexes', function (t) {
+ t.notOk(isRegex(), 'undefined is not regex');
+ t.notOk(isRegex(null), 'null is not regex');
+ t.notOk(isRegex(false), 'false is not regex');
+ t.notOk(isRegex(true), 'true is not regex');
+ t.notOk(isRegex(42), 'number is not regex');
+ t.notOk(isRegex('foo'), 'string is not regex');
+ t.notOk(isRegex([]), 'array is not regex');
+ t.notOk(isRegex({}), 'object is not regex');
+ t.notOk(isRegex(function () {}), 'function is not regex');
+ t.end();
+});
+
+test('@@toStringTag', { skip: !hasToStringTag }, function (t) {
+ var regex = /a/g;
+ var fakeRegex = {
+ toString: function () { return String(regex); },
+ valueOf: function () { return regex; }
+ };
+ fakeRegex[Symbol.toStringTag] = 'RegExp';
+ t.notOk(isRegex(fakeRegex), 'fake RegExp with @@toStringTag "RegExp" is not regex');
+ t.end();
+});
+
+test('regexes', function (t) {
+ t.ok(isRegex(/a/g), 'regex literal is regex');
+ t.ok(isRegex(new RegExp('a', 'g')), 'regex object is regex');
+ t.end();
+});
+
+test('does not mutate regexes', function (t) {
+ t.test('lastIndex is a marker object', function (st) {
+ var regex = /a/;
+ var marker = {};
+ regex.lastIndex = marker;
+ st.equal(regex.lastIndex, marker, 'lastIndex is the marker object');
+ st.ok(isRegex(regex), 'is regex');
+ st.equal(regex.lastIndex, marker, 'lastIndex is the marker object after isRegex');
+ st.end();
+ });
+
+ t.test('lastIndex is nonzero', function (st) {
+ var regex = /a/;
+ regex.lastIndex = 3;
+ st.equal(regex.lastIndex, 3, 'lastIndex is 3');
+ st.ok(isRegex(regex), 'is regex');
+ st.equal(regex.lastIndex, 3, 'lastIndex is 3 after isRegex');
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/.eslintignore b/node_modules/object.values/node_modules/object-inspect/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/object.values/node_modules/object-inspect/.eslintrc b/node_modules/object.values/node_modules/object-inspect/.eslintrc
new file mode 100644
index 0000000..c137b67
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/.eslintrc
@@ -0,0 +1,61 @@
+{
+ "root": true,
+ "extends": "@ljharb",
+ "rules": {
+ "complexity": 0,
+ "func-style": [2, 'declaration'],
+ "indent": [2, 4],
+ "max-lines-per-function": [2, 130],
+ "max-params": [2, 4],
+ "max-statements": [2, 90],
+ "max-statements-per-line": [2, { "max": 2 }],
+ "no-magic-numbers": 0,
+ "no-param-reassign": 1,
+ "strict": 0, // TODO
+ },
+ "globals": {
+ "BigInt": false,
+ "WeakSet": false,
+ "WeakMap": false,
+ },
+ "overrides": [
+ {
+ "files": ["test/**", "test-*", "example/**"],
+ "rules": {
+ "array-bracket-newline": 0,
+ "max-params": 0,
+ "max-statements": 0,
+ "max-statements-per-line": 0,
+ "object-curly-newline": 0,
+ "sort-keys": 0,
+ },
+ },
+ {
+ "files": ["example/**"],
+ "rules": {
+ "no-console": 0,
+ },
+ },
+ {
+ "files": ["test/browser/**"],
+ "env": {
+ "browser": true,
+ },
+ },
+ {
+ "files": ["test/bigint*"],
+ "rules": {
+ "new-cap": [2, { "capIsNewExceptions": ["BigInt"] }],
+ },
+ },
+ {
+ "files": "index.js",
+ "globals": {
+ "HTMLElement": false,
+ },
+ "rules": {
+ "no-use-before-define": 1,
+ },
+ },
+ ],
+}
diff --git a/node_modules/object.values/node_modules/object-inspect/.nycrc b/node_modules/object.values/node_modules/object-inspect/.nycrc
new file mode 100644
index 0000000..7b95a1e
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/.nycrc
@@ -0,0 +1,17 @@
+{
+ "all": true,
+ "check-coverage": true,
+ "instrumentation": false,
+ "sourceMap": false,
+ "reporter": ["html", "text-summary"],
+ "lines": 93,
+ "statements": 93,
+ "functions": 96,
+ "branches": 89,
+ "exclude": [
+ "coverage",
+ "example",
+ "test",
+ "test-core-js.js"
+ ]
+}
diff --git a/node_modules/object.values/node_modules/object-inspect/.travis.yml b/node_modules/object.values/node_modules/object-inspect/.travis.yml
new file mode 100644
index 0000000..3a0cfc3
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/.travis.yml
@@ -0,0 +1,9 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
diff --git a/node_modules/object.values/node_modules/object-inspect/LICENSE b/node_modules/object.values/node_modules/object-inspect/LICENSE
new file mode 100644
index 0000000..ca64cc1
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013 James Halliday
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/object.values/node_modules/object-inspect/example/all.js b/node_modules/object.values/node_modules/object-inspect/example/all.js
new file mode 100644
index 0000000..2f3355c
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/example/all.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var inspect = require('../');
+var Buffer = require('safer-buffer').Buffer;
+
+var holes = ['a', 'b'];
+holes[4] = 'e';
+holes[6] = 'g';
+
+var obj = {
+ a: 1,
+ b: [3, 4, undefined, null],
+ c: undefined,
+ d: null,
+ e: {
+ regex: /^x/i,
+ buf: Buffer.from('abc'),
+ holes: holes
+ },
+ now: new Date()
+};
+obj.self = obj;
+console.log(inspect(obj));
diff --git a/node_modules/object.values/node_modules/object-inspect/example/circular.js b/node_modules/object.values/node_modules/object-inspect/example/circular.js
new file mode 100644
index 0000000..487a7c1
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/example/circular.js
@@ -0,0 +1,6 @@
+'use strict';
+
+var inspect = require('../');
+var obj = { a: 1, b: [3, 4] };
+obj.c = obj;
+console.log(inspect(obj));
diff --git a/node_modules/object.values/node_modules/object-inspect/example/fn.js b/node_modules/object.values/node_modules/object-inspect/example/fn.js
new file mode 100644
index 0000000..9b5db8d
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/example/fn.js
@@ -0,0 +1,5 @@
+'use strict';
+
+var inspect = require('../');
+var obj = [1, 2, function f(n) { return n + 5; }, 4];
+console.log(inspect(obj));
diff --git a/node_modules/object.values/node_modules/object-inspect/example/inspect.js b/node_modules/object.values/node_modules/object-inspect/example/inspect.js
new file mode 100644
index 0000000..e2df7c9
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/example/inspect.js
@@ -0,0 +1,10 @@
+'use strict';
+
+/* eslint-env browser */
+var inspect = require('../');
+
+var d = document.createElement('div');
+d.setAttribute('id', 'beep');
+d.innerHTML = '<b>wooo</b><i>iiiii</i>';
+
+console.log(inspect([d, { a: 3, b: 4, c: [5, 6, [7, [8, [9]]]] }]));
diff --git a/node_modules/object.values/node_modules/object-inspect/index.js b/node_modules/object.values/node_modules/object-inspect/index.js
new file mode 100644
index 0000000..1394e53
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/index.js
@@ -0,0 +1,307 @@
+var hasMap = typeof Map === 'function' && Map.prototype;
+var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;
+var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;
+var mapForEach = hasMap && Map.prototype.forEach;
+var hasSet = typeof Set === 'function' && Set.prototype;
+var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;
+var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;
+var setForEach = hasSet && Set.prototype.forEach;
+var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;
+var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
+var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
+var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
+var booleanValueOf = Boolean.prototype.valueOf;
+var objectToString = Object.prototype.toString;
+var match = String.prototype.match;
+var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
+
+var inspectCustom = require('./util.inspect').custom;
+var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;
+
+module.exports = function inspect_(obj, options, depth, seen) {
+ var opts = options || {};
+
+ if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {
+ throw new TypeError('option "quoteStyle" must be "single" or "double"');
+ }
+
+ if (typeof obj === 'undefined') {
+ return 'undefined';
+ }
+ if (obj === null) {
+ return 'null';
+ }
+ if (typeof obj === 'boolean') {
+ return obj ? 'true' : 'false';
+ }
+
+ if (typeof obj === 'string') {
+ return inspectString(obj, opts);
+ }
+ if (typeof obj === 'number') {
+ if (obj === 0) {
+ return Infinity / obj > 0 ? '0' : '-0';
+ }
+ return String(obj);
+ }
+ if (typeof obj === 'bigint') { // eslint-disable-line valid-typeof
+ return String(obj) + 'n';
+ }
+
+ var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;
+ if (typeof depth === 'undefined') { depth = 0; }
+ if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {
+ return '[Object]';
+ }
+
+ if (typeof seen === 'undefined') {
+ seen = [];
+ } else if (indexOf(seen, obj) >= 0) {
+ return '[Circular]';
+ }
+
+ function inspect(value, from) {
+ if (from) {
+ seen = seen.slice();
+ seen.push(from);
+ }
+ return inspect_(value, opts, depth + 1, seen);
+ }
+
+ if (typeof obj === 'function') {
+ var name = nameOf(obj);
+ return '[Function' + (name ? ': ' + name : '') + ']';
+ }
+ if (isSymbol(obj)) {
+ var symString = Symbol.prototype.toString.call(obj);
+ return typeof obj === 'object' ? markBoxed(symString) : symString;
+ }
+ if (isElement(obj)) {
+ var s = '<' + String(obj.nodeName).toLowerCase();
+ var attrs = obj.attributes || [];
+ for (var i = 0; i < attrs.length; i++) {
+ s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);
+ }
+ s += '>';
+ if (obj.childNodes && obj.childNodes.length) { s += '...'; }
+ s += '</' + String(obj.nodeName).toLowerCase() + '>';
+ return s;
+ }
+ if (isArray(obj)) {
+ if (obj.length === 0) { return '[]'; }
+ return '[ ' + arrObjKeys(obj, inspect).join(', ') + ' ]';
+ }
+ if (isError(obj)) {
+ var parts = arrObjKeys(obj, inspect);
+ if (parts.length === 0) { return '[' + String(obj) + ']'; }
+ return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';
+ }
+ if (typeof obj === 'object') {
+ if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {
+ return obj[inspectSymbol]();
+ } else if (typeof obj.inspect === 'function') {
+ return obj.inspect();
+ }
+ }
+ if (isMap(obj)) {
+ var mapParts = [];
+ mapForEach.call(obj, function (value, key) {
+ mapParts.push(inspect(key, obj) + ' => ' + inspect(value, obj));
+ });
+ return collectionOf('Map', mapSize.call(obj), mapParts);
+ }
+ if (isSet(obj)) {
+ var setParts = [];
+ setForEach.call(obj, function (value) {
+ setParts.push(inspect(value, obj));
+ });
+ return collectionOf('Set', setSize.call(obj), setParts);
+ }
+ if (isWeakMap(obj)) {
+ return weakCollectionOf('WeakMap');
+ }
+ if (isWeakSet(obj)) {
+ return weakCollectionOf('WeakSet');
+ }
+ if (isNumber(obj)) {
+ return markBoxed(inspect(Number(obj)));
+ }
+ if (isBigInt(obj)) {
+ return markBoxed(inspect(bigIntValueOf.call(obj)));
+ }
+ if (isBoolean(obj)) {
+ return markBoxed(booleanValueOf.call(obj));
+ }
+ if (isString(obj)) {
+ return markBoxed(inspect(String(obj)));
+ }
+ if (!isDate(obj) && !isRegExp(obj)) {
+ var xs = arrObjKeys(obj, inspect);
+ if (xs.length === 0) { return '{}'; }
+ return '{ ' + xs.join(', ') + ' }';
+ }
+ return String(obj);
+};
+
+function wrapQuotes(s, defaultStyle, opts) {
+ var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";
+ return quoteChar + s + quoteChar;
+}
+
+function quote(s) {
+ return String(s).replace(/"/g, '"');
+}
+
+function isArray(obj) { return toStr(obj) === '[object Array]'; }
+function isDate(obj) { return toStr(obj) === '[object Date]'; }
+function isRegExp(obj) { return toStr(obj) === '[object RegExp]'; }
+function isError(obj) { return toStr(obj) === '[object Error]'; }
+function isSymbol(obj) { return toStr(obj) === '[object Symbol]'; }
+function isString(obj) { return toStr(obj) === '[object String]'; }
+function isNumber(obj) { return toStr(obj) === '[object Number]'; }
+function isBigInt(obj) { return toStr(obj) === '[object BigInt]'; }
+function isBoolean(obj) { return toStr(obj) === '[object Boolean]'; }
+
+var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };
+function has(obj, key) {
+ return hasOwn.call(obj, key);
+}
+
+function toStr(obj) {
+ return objectToString.call(obj);
+}
+
+function nameOf(f) {
+ if (f.name) { return f.name; }
+ var m = match.call(f, /^function\s*([\w$]+)/);
+ if (m) { return m[1]; }
+ return null;
+}
+
+function indexOf(xs, x) {
+ if (xs.indexOf) { return xs.indexOf(x); }
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) { return i; }
+ }
+ return -1;
+}
+
+function isMap(x) {
+ if (!mapSize || !x || typeof x !== 'object') {
+ return false;
+ }
+ try {
+ mapSize.call(x);
+ try {
+ setSize.call(x);
+ } catch (s) {
+ return true;
+ }
+ return x instanceof Map; // core-js workaround, pre-v2.5.0
+ } catch (e) {}
+ return false;
+}
+
+function isWeakMap(x) {
+ if (!weakMapHas || !x || typeof x !== 'object') {
+ return false;
+ }
+ try {
+ weakMapHas.call(x, weakMapHas);
+ try {
+ weakSetHas.call(x, weakSetHas);
+ } catch (s) {
+ return true;
+ }
+ return x instanceof WeakMap; // core-js workaround, pre-v2.5.0
+ } catch (e) {}
+ return false;
+}
+
+function isSet(x) {
+ if (!setSize || !x || typeof x !== 'object') {
+ return false;
+ }
+ try {
+ setSize.call(x);
+ try {
+ mapSize.call(x);
+ } catch (m) {
+ return true;
+ }
+ return x instanceof Set; // core-js workaround, pre-v2.5.0
+ } catch (e) {}
+ return false;
+}
+
+function isWeakSet(x) {
+ if (!weakSetHas || !x || typeof x !== 'object') {
+ return false;
+ }
+ try {
+ weakSetHas.call(x, weakSetHas);
+ try {
+ weakMapHas.call(x, weakMapHas);
+ } catch (s) {
+ return true;
+ }
+ return x instanceof WeakSet; // core-js workaround, pre-v2.5.0
+ } catch (e) {}
+ return false;
+}
+
+function isElement(x) {
+ if (!x || typeof x !== 'object') { return false; }
+ if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {
+ return true;
+ }
+ return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';
+}
+
+function inspectString(str, opts) {
+ // eslint-disable-next-line no-control-regex
+ var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);
+ return wrapQuotes(s, 'single', opts);
+}
+
+function lowbyte(c) {
+ var n = c.charCodeAt(0);
+ var x = {
+ 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r'
+ }[n];
+ if (x) { return '\\' + x; }
+ return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16);
+}
+
+function markBoxed(str) {
+ return 'Object(' + str + ')';
+}
+
+function weakCollectionOf(type) {
+ return type + ' { ? }';
+}
+
+function collectionOf(type, size, entries) {
+ return type + ' (' + size + ') {' + entries.join(', ') + '}';
+}
+
+function arrObjKeys(obj, inspect) {
+ var isArr = isArray(obj);
+ var xs = [];
+ if (isArr) {
+ xs.length = obj.length;
+ for (var i = 0; i < obj.length; i++) {
+ xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
+ }
+ }
+ for (var key in obj) { // eslint-disable-line no-restricted-syntax
+ if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
+ if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
+ if ((/[^\w$]/).test(key)) {
+ xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));
+ } else {
+ xs.push(key + ': ' + inspect(obj[key], obj));
+ }
+ }
+ return xs;
+}
diff --git a/node_modules/object.values/node_modules/object-inspect/package.json b/node_modules/object.values/node_modules/object-inspect/package.json
new file mode 100644
index 0000000..a2e93ba
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/package.json
@@ -0,0 +1,68 @@
+{
+ "author": {
+ "email": "mail@substack.net",
+ "name": "James Halliday",
+ "url": "http://substack.net"
+ },
+ "browser": {
+ "./util.inspect.js": false
+ },
+ "description": "string representations of objects in node and the browser",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^15.0.1",
+ "core-js": "^2.6.10",
+ "eslint": "^6.6.0",
+ "nyc": "^10.3.2",
+ "tape": "^4.11.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "greenkeeper": {
+ "ignore": [
+ "nyc",
+ "core-js"
+ ]
+ },
+ "homepage": "https://github.com/substack/object-inspect",
+ "keywords": [
+ "inspect",
+ "util.inspect",
+ "object",
+ "stringify",
+ "pretty"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "object-inspect",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/object-inspect.git"
+ },
+ "scripts": {
+ "coverage": "nyc npm run tests-only",
+ "lint": "eslint .",
+ "posttest": "npx aud --production",
+ "pretest": "npm run lint",
+ "pretests-only": "node test-core-js",
+ "test": "npm run tests-only",
+ "tests-only": "tape test/*.js"
+ },
+ "testling": {
+ "browsers": [
+ "ie/6..latest",
+ "chrome/latest",
+ "firefox/latest",
+ "safari/latest",
+ "opera/latest",
+ "iphone/latest",
+ "ipad/latest",
+ "android/latest"
+ ],
+ "files": [
+ "test/*.js",
+ "test/browser/*.js"
+ ]
+ },
+ "version": "1.7.0"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/object-inspect/readme.markdown b/node_modules/object.values/node_modules/object-inspect/readme.markdown
new file mode 100644
index 0000000..744eeb5
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/readme.markdown
@@ -0,0 +1,61 @@
+# object-inspect
+
+string representations of objects in node and the browser
+
+[](https://ci.testling.com/substack/object-inspect)
+
+[](http://travis-ci.org/substack/object-inspect)
+
+# example
+
+## circular
+
+``` js
+var inspect = require('object-inspect');
+var obj = { a: 1, b: [3,4] };
+obj.c = obj;
+console.log(inspect(obj));
+```
+
+## dom element
+
+``` js
+var inspect = require('object-inspect');
+
+var d = document.createElement('div');
+d.setAttribute('id', 'beep');
+d.innerHTML = '<b>wooo</b><i>iiiii</i>';
+
+console.log(inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ]));
+```
+
+output:
+
+```
+[ <div id="beep">...</div>, { a: 3, b: 4, c: [ 5, 6, [ 7, [ 8, [ ... ] ] ] ] } ]
+```
+
+# methods
+
+``` js
+var inspect = require('object-inspect')
+```
+
+## var s = inspect(obj, opts={})
+
+Return a string `s` with the string representation of `obj` up to a depth of `opts.depth`.
+
+Additional options:
+ - `quoteStyle`: must be "single" or "double", if present
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install object-inspect
+```
+
+# license
+
+MIT
diff --git a/node_modules/object.values/node_modules/object-inspect/test-core-js.js b/node_modules/object.values/node_modules/object-inspect/test-core-js.js
new file mode 100644
index 0000000..12c4e2a
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test-core-js.js
@@ -0,0 +1,16 @@
+'use strict';
+
+require('core-js');
+
+var inspect = require('./');
+var test = require('tape');
+
+test('Maps', function (t) {
+ t.equal(inspect(new Map([[1, 2]])), 'Map (1) {1 => 2}');
+ t.end();
+});
+
+test('Sets', function (t) {
+ t.equal(inspect(new Set([[1, 2]])), 'Set (1) {[ 1, 2 ]}');
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/bigint.js b/node_modules/object.values/node_modules/object-inspect/test/bigint.js
new file mode 100644
index 0000000..3259143
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/bigint.js
@@ -0,0 +1,31 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('bigint', { skip: typeof BigInt === 'undefined' }, function (t) {
+ t.test('primitives', function (st) {
+ st.plan(3);
+
+ st.equal(inspect(BigInt(-256)), '-256n');
+ st.equal(inspect(BigInt(0)), '0n');
+ st.equal(inspect(BigInt(256)), '256n');
+ });
+
+ t.test('objects', function (st) {
+ st.plan(3);
+
+ st.equal(inspect(Object(BigInt(-256))), 'Object(-256n)');
+ st.equal(inspect(Object(BigInt(0))), 'Object(0n)');
+ st.equal(inspect(Object(BigInt(256))), 'Object(256n)');
+ });
+
+ t.test('syntactic primitives', function (st) {
+ st.plan(3);
+
+ /* eslint-disable no-new-func */
+ st.equal(inspect(Function('return -256n')()), '-256n');
+ st.equal(inspect(Function('return 0n')()), '0n');
+ st.equal(inspect(Function('return 256n')()), '256n');
+ });
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/browser/dom.js b/node_modules/object.values/node_modules/object-inspect/test/browser/dom.js
new file mode 100644
index 0000000..210c0b2
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/browser/dom.js
@@ -0,0 +1,15 @@
+var inspect = require('../../');
+var test = require('tape');
+
+test('dom element', function (t) {
+ t.plan(1);
+
+ var d = document.createElement('div');
+ d.setAttribute('id', 'beep');
+ d.innerHTML = '<b>wooo</b><i>iiiii</i>';
+
+ t.equal(
+ inspect([d, { a: 3, b: 4, c: [5, 6, [7, [8, [9]]]] }]),
+ '[ <div id="beep">...</div>, { a: 3, b: 4, c: [ 5, 6, [ 7, [ 8, [Object] ] ] ] } ]'
+ );
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/circular.js b/node_modules/object.values/node_modules/object-inspect/test/circular.js
new file mode 100644
index 0000000..e864cfe
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/circular.js
@@ -0,0 +1,9 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('circular', function (t) {
+ t.plan(1);
+ var obj = { a: 1, b: [3, 4] };
+ obj.c = obj;
+ t.equal(inspect(obj), '{ a: 1, b: [ 3, 4 ], c: [Circular] }');
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/deep.js b/node_modules/object.values/node_modules/object-inspect/test/deep.js
new file mode 100644
index 0000000..5c443f2
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/deep.js
@@ -0,0 +1,9 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('deep', function (t) {
+ t.plan(2);
+ var obj = [[[[[[500]]]]]];
+ t.equal(inspect(obj), '[ [ [ [ [ [Object] ] ] ] ] ]');
+ t.equal(inspect(obj, { depth: 2 }), '[ [ [Object] ] ]');
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/element.js b/node_modules/object.values/node_modules/object-inspect/test/element.js
new file mode 100644
index 0000000..47fa9e2
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/element.js
@@ -0,0 +1,53 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('element', function (t) {
+ t.plan(3);
+ var elem = {
+ nodeName: 'div',
+ attributes: [{ name: 'class', value: 'row' }],
+ getAttribute: function (key) { return key; },
+ childNodes: []
+ };
+ var obj = [1, elem, 3];
+ t.deepEqual(inspect(obj), '[ 1, <div class="row"></div>, 3 ]');
+ t.deepEqual(inspect(obj, { quoteStyle: 'single' }), "[ 1, <div class='row'></div>, 3 ]");
+ t.deepEqual(inspect(obj, { quoteStyle: 'double' }), '[ 1, <div class="row"></div>, 3 ]');
+});
+
+test('element no attr', function (t) {
+ t.plan(1);
+ var elem = {
+ nodeName: 'div',
+ getAttribute: function (key) { return key; },
+ childNodes: []
+ };
+ var obj = [1, elem, 3];
+ t.deepEqual(inspect(obj), '[ 1, <div></div>, 3 ]');
+});
+
+test('element with contents', function (t) {
+ t.plan(1);
+ var elem = {
+ nodeName: 'div',
+ getAttribute: function (key) { return key; },
+ childNodes: [{ nodeName: 'b' }]
+ };
+ var obj = [1, elem, 3];
+ t.deepEqual(inspect(obj), '[ 1, <div>...</div>, 3 ]');
+});
+
+test('element instance', function (t) {
+ t.plan(1);
+ var h = global.HTMLElement;
+ global.HTMLElement = function (name, attr) {
+ this.nodeName = name;
+ this.attributes = attr;
+ };
+ global.HTMLElement.prototype.getAttribute = function () {};
+
+ var elem = new global.HTMLElement('div', []);
+ var obj = [1, elem, 3];
+ t.deepEqual(inspect(obj), '[ 1, <div></div>, 3 ]');
+ global.HTMLElement = h;
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/err.js b/node_modules/object.values/node_modules/object-inspect/test/err.js
new file mode 100644
index 0000000..db96338
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/err.js
@@ -0,0 +1,31 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('type error', function (t) {
+ t.plan(1);
+ var aerr = new TypeError();
+ aerr.foo = 555;
+ aerr.bar = [1, 2, 3];
+
+ var berr = new TypeError('tuv');
+ berr.baz = 555;
+
+ var cerr = new SyntaxError();
+ cerr.message = 'whoa';
+ cerr['a-b'] = 5;
+
+ var obj = [
+ new TypeError(),
+ new TypeError('xxx'),
+ aerr,
+ berr,
+ cerr
+ ];
+ t.equal(inspect(obj), '[ ' + [
+ '[TypeError]',
+ '[TypeError: xxx]',
+ '{ [TypeError] foo: 555, bar: [ 1, 2, 3 ] }',
+ '{ [TypeError: tuv] baz: 555 }',
+ '{ [SyntaxError: whoa] message: \'whoa\', \'a-b\': 5 }'
+ ].join(', ') + ' ]');
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/fn.js b/node_modules/object.values/node_modules/object-inspect/test/fn.js
new file mode 100644
index 0000000..fd644be
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/fn.js
@@ -0,0 +1,28 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('function', function (t) {
+ t.plan(1);
+ var obj = [1, 2, function f(n) { return n; }, 4];
+ t.equal(inspect(obj), '[ 1, 2, [Function: f], 4 ]');
+});
+
+test('function name', function (t) {
+ t.plan(1);
+ var f = (function () {
+ return function () {};
+ }());
+ f.toString = function () { return 'function xxx () {}'; };
+ var obj = [1, 2, f, 4];
+ t.equal(inspect(obj), '[ 1, 2, [Function: xxx], 4 ]');
+});
+
+test('anon function', function (t) {
+ var f = (function () {
+ return function () {};
+ }());
+ var obj = [1, 2, f, 4];
+ t.equal(inspect(obj), '[ 1, 2, [Function], 4 ]');
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/has.js b/node_modules/object.values/node_modules/object-inspect/test/has.js
new file mode 100644
index 0000000..026d6d5
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/has.js
@@ -0,0 +1,34 @@
+var inspect = require('../');
+var test = require('tape');
+
+function withoutProperty(object, property, fn) {
+ var original;
+ if (Object.getOwnPropertyDescriptor) {
+ original = Object.getOwnPropertyDescriptor(object, property);
+ } else {
+ original = object[property];
+ }
+ delete object[property];
+ try {
+ fn();
+ } finally {
+ if (Object.getOwnPropertyDescriptor) {
+ Object.defineProperty(object, property, original);
+ } else {
+ object[property] = original;
+ }
+ }
+}
+
+test('when Object#hasOwnProperty is deleted', function (t) {
+ t.plan(1);
+ var arr = [1, , 3]; // eslint-disable-line no-sparse-arrays
+
+ // eslint-disable-next-line no-extend-native
+ Array.prototype[1] = 2; // this is needed to account for "in" vs "hasOwnProperty"
+
+ withoutProperty(Object.prototype, 'hasOwnProperty', function () {
+ t.equal(inspect(arr), '[ 1, , 3 ]');
+ });
+ delete Array.prototype[1];
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/holes.js b/node_modules/object.values/node_modules/object-inspect/test/holes.js
new file mode 100644
index 0000000..87fc8c8
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/holes.js
@@ -0,0 +1,15 @@
+var test = require('tape');
+var inspect = require('../');
+
+var xs = ['a', 'b'];
+xs[5] = 'f';
+xs[7] = 'j';
+xs[8] = 'k';
+
+test('holes', function (t) {
+ t.plan(1);
+ t.equal(
+ inspect(xs),
+ "[ 'a', 'b', , , , 'f', , 'j', 'k' ]"
+ );
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/inspect.js b/node_modules/object.values/node_modules/object-inspect/test/inspect.js
new file mode 100644
index 0000000..4f202c2
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/inspect.js
@@ -0,0 +1,20 @@
+var test = require('tape');
+var hasSymbols = require('has-symbols')();
+var utilInspect = require('../util.inspect');
+
+var inspect = require('..');
+
+test('inspect', function (t) {
+ t.plan(1);
+ var obj = [{ inspect: function () { return '!XYZ¡'; } }, []];
+ t.equal(inspect(obj), '[ !XYZ¡, [] ]');
+});
+
+test('inspect custom symbol', { skip: !hasSymbols || !utilInspect }, function (t) {
+ t.plan(1);
+
+ var obj = { inspect: function () { return 'string'; } };
+ obj[utilInspect.custom] = function () { return 'symbol'; };
+
+ t.equal(inspect([obj, []]), '[ ' + (utilInspect.custom ? 'symbol' : 'string') + ', [] ]');
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/lowbyte.js b/node_modules/object.values/node_modules/object-inspect/test/lowbyte.js
new file mode 100644
index 0000000..d234242
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/lowbyte.js
@@ -0,0 +1,12 @@
+var test = require('tape');
+var inspect = require('../');
+
+var obj = { x: 'a\r\nb', y: '\x05! \x1f \x12' };
+
+test('interpolate low bytes', function (t) {
+ t.plan(1);
+ t.equal(
+ inspect(obj),
+ "{ x: 'a\\r\\nb', y: '\\x05! \\x1f \\x12' }"
+ );
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/number.js b/node_modules/object.values/node_modules/object-inspect/test/number.js
new file mode 100644
index 0000000..448304e
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/number.js
@@ -0,0 +1,12 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('negative zero', function (t) {
+ t.equal(inspect(0), '0', 'inspect(0) === "0"');
+ t.equal(inspect(Object(0)), 'Object(0)', 'inspect(Object(0)) === "Object(0)"');
+
+ t.equal(inspect(-0), '-0', 'inspect(-0) === "-0"');
+ t.equal(inspect(Object(-0)), 'Object(-0)', 'inspect(Object(-0)) === "Object(-0)"');
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/quoteStyle.js b/node_modules/object.values/node_modules/object-inspect/test/quoteStyle.js
new file mode 100644
index 0000000..ae4d734
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/quoteStyle.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var inspect = require('../');
+var test = require('tape');
+
+test('quoteStyle option', function (t) {
+ t['throws'](function () { inspect(null, { quoteStyle: false }); }, 'false is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: true }); }, 'true is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: '' }); }, '"" is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: {} }); }, '{} is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: [] }); }, '[] is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: 42 }); }, '42 is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: NaN }); }, 'NaN is not a valid value');
+ t['throws'](function () { inspect(null, { quoteStyle: function () {} }); }, 'a function is not a valid value');
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/undef.js b/node_modules/object.values/node_modules/object-inspect/test/undef.js
new file mode 100644
index 0000000..e3f4961
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/undef.js
@@ -0,0 +1,12 @@
+var test = require('tape');
+var inspect = require('../');
+
+var obj = { a: 1, b: [3, 4, undefined, null], c: undefined, d: null };
+
+test('undef and null', function (t) {
+ t.plan(1);
+ t.equal(
+ inspect(obj),
+ '{ a: 1, b: [ 3, 4, undefined, null ], c: undefined, d: null }'
+ );
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/test/values.js b/node_modules/object.values/node_modules/object-inspect/test/values.js
new file mode 100644
index 0000000..20709d5
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/test/values.js
@@ -0,0 +1,156 @@
+var inspect = require('../');
+var test = require('tape');
+
+test('values', function (t) {
+ t.plan(1);
+ var obj = [{}, [], { 'a-b': 5 }];
+ t.equal(inspect(obj), '[ {}, [], { \'a-b\': 5 } ]');
+});
+
+test('arrays with properties', function (t) {
+ t.plan(1);
+ var arr = [3];
+ arr.foo = 'bar';
+ var obj = [1, 2, arr];
+ obj.baz = 'quux';
+ obj.index = -1;
+ t.equal(inspect(obj), '[ 1, 2, [ 3, foo: \'bar\' ], baz: \'quux\', index: -1 ]');
+});
+
+test('has', function (t) {
+ t.plan(1);
+ var has = Object.prototype.hasOwnProperty;
+ delete Object.prototype.hasOwnProperty;
+ t.equal(inspect({ a: 1, b: 2 }), '{ a: 1, b: 2 }');
+ Object.prototype.hasOwnProperty = has; // eslint-disable-line no-extend-native
+});
+
+test('indexOf seen', function (t) {
+ t.plan(1);
+ var xs = [1, 2, 3, {}];
+ xs.push(xs);
+
+ var seen = [];
+ seen.indexOf = undefined;
+
+ t.equal(
+ inspect(xs, {}, 0, seen),
+ '[ 1, 2, 3, {}, [Circular] ]'
+ );
+});
+
+test('seen seen', function (t) {
+ t.plan(1);
+ var xs = [1, 2, 3];
+
+ var seen = [xs];
+ seen.indexOf = undefined;
+
+ t.equal(
+ inspect(xs, {}, 0, seen),
+ '[Circular]'
+ );
+});
+
+test('seen seen seen', function (t) {
+ t.plan(1);
+ var xs = [1, 2, 3];
+
+ var seen = [5, xs];
+ seen.indexOf = undefined;
+
+ t.equal(
+ inspect(xs, {}, 0, seen),
+ '[Circular]'
+ );
+});
+
+test('symbols', { skip: typeof Symbol !== 'function' }, function (t) {
+ var sym = Symbol('foo');
+ t.equal(inspect(sym), 'Symbol(foo)', 'Symbol("foo") should be "Symbol(foo)"');
+ t.equal(inspect(Object(sym)), 'Object(Symbol(foo))', 'Object(Symbol("foo")) should be "Object(Symbol(foo))"');
+ t.end();
+});
+
+test('Map', { skip: typeof Map !== 'function' }, function (t) {
+ var map = new Map();
+ map.set({ a: 1 }, ['b']);
+ map.set(3, NaN);
+ var expectedString = 'Map (2) {' + inspect({ a: 1 }) + ' => ' + inspect(['b']) + ', 3 => NaN}';
+ t.equal(inspect(map), expectedString, 'new Map([[{ a: 1 }, ["b"]], [3, NaN]]) should show size and contents');
+ t.equal(inspect(new Map()), 'Map (0) {}', 'empty Map should show as empty');
+
+ var nestedMap = new Map();
+ nestedMap.set(nestedMap, map);
+ t.equal(inspect(nestedMap), 'Map (1) {[Circular] => ' + expectedString + '}', 'Map containing a Map should work');
+
+ t.end();
+});
+
+test('WeakMap', { skip: typeof WeakMap !== 'function' }, function (t) {
+ var map = new WeakMap();
+ map.set({ a: 1 }, ['b']);
+ var expectedString = 'WeakMap { ? }';
+ t.equal(inspect(map), expectedString, 'new WeakMap([[{ a: 1 }, ["b"]]]) should not show size or contents');
+ t.equal(inspect(new WeakMap()), 'WeakMap { ? }', 'empty WeakMap should not show as empty');
+
+ t.end();
+});
+
+test('Set', { skip: typeof Set !== 'function' }, function (t) {
+ var set = new Set();
+ set.add({ a: 1 });
+ set.add(['b']);
+ var expectedString = 'Set (2) {' + inspect({ a: 1 }) + ', ' + inspect(['b']) + '}';
+ t.equal(inspect(set), expectedString, 'new Set([{ a: 1 }, ["b"]]) should show size and contents');
+ t.equal(inspect(new Set()), 'Set (0) {}', 'empty Set should show as empty');
+
+ var nestedSet = new Set();
+ nestedSet.add(set);
+ nestedSet.add(nestedSet);
+ t.equal(inspect(nestedSet), 'Set (2) {' + expectedString + ', [Circular]}', 'Set containing a Set should work');
+
+ t.end();
+});
+
+test('WeakSet', { skip: typeof WeakSet !== 'function' }, function (t) {
+ var map = new WeakSet();
+ map.add({ a: 1 });
+ var expectedString = 'WeakSet { ? }';
+ t.equal(inspect(map), expectedString, 'new WeakSet([{ a: 1 }]) should not show size or contents');
+ t.equal(inspect(new WeakSet()), 'WeakSet { ? }', 'empty WeakSet should not show as empty');
+
+ t.end();
+});
+
+test('Strings', function (t) {
+ var str = 'abc';
+
+ t.equal(inspect(str), "'" + str + "'", 'primitive string shows as such');
+ t.equal(inspect(str, { quoteStyle: 'single' }), "'" + str + "'", 'primitive string shows as such, single quoted');
+ t.equal(inspect(str, { quoteStyle: 'double' }), '"' + str + '"', 'primitive string shows as such, double quoted');
+ t.equal(inspect(Object(str)), 'Object(' + inspect(str) + ')', 'String object shows as such');
+ t.equal(inspect(Object(str), { quoteStyle: 'single' }), 'Object(' + inspect(str, { quoteStyle: 'single' }) + ')', 'String object shows as such, single quoted');
+ t.equal(inspect(Object(str), { quoteStyle: 'double' }), 'Object(' + inspect(str, { quoteStyle: 'double' }) + ')', 'String object shows as such, double quoted');
+
+ t.end();
+});
+
+test('Numbers', function (t) {
+ var num = 42;
+
+ t.equal(inspect(num), String(num), 'primitive number shows as such');
+ t.equal(inspect(Object(num)), 'Object(' + inspect(num) + ')', 'Number object shows as such');
+
+ t.end();
+});
+
+test('Booleans', function (t) {
+ t.equal(inspect(true), String(true), 'primitive true shows as such');
+ t.equal(inspect(Object(true)), 'Object(' + inspect(true) + ')', 'Boolean object true shows as such');
+
+ t.equal(inspect(false), String(false), 'primitive false shows as such');
+ t.equal(inspect(Object(false)), 'Object(' + inspect(false) + ')', 'Boolean false object shows as such');
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/object-inspect/util.inspect.js b/node_modules/object.values/node_modules/object-inspect/util.inspect.js
new file mode 100644
index 0000000..7784fab
--- /dev/null
+++ b/node_modules/object.values/node_modules/object-inspect/util.inspect.js
@@ -0,0 +1 @@
+module.exports = require('util').inspect;
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/.editorconfig b/node_modules/object.values/node_modules/string.prototype.trimleft/.editorconfig
new file mode 100644
index 0000000..bc228f8
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/.eslintrc b/node_modules/object.values/node_modules/string.prototype.trimleft/.eslintrc
new file mode 100644
index 0000000..1fa9542
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/.eslintrc
@@ -0,0 +1,15 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "overrides": [
+ {
+ "files": "test/*",
+ "rules": {
+ "id-length": 0,
+ "no-invalid-this": 1,
+ },
+ },
+ ],
+}
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/.github/workflows/rebase.yml b/node_modules/object.values/node_modules/string.prototype.trimleft/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/.travis.yml b/node_modules/object.values/node_modules/string.prototype.trimleft/.travis.yml
new file mode 100644
index 0000000..2d1c1d2
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/.travis.yml
@@ -0,0 +1,12 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/CHANGELOG.md b/node_modules/object.values/node_modules/string.prototype.trimleft/CHANGELOG.md
new file mode 100644
index 0000000..1e8d799
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/CHANGELOG.md
@@ -0,0 +1,37 @@
+2.1.1 / 2019-12-17
+=================
+ * [meta] add `funding` field
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `functions-have-names`, `tape`
+ * [Tests] use shared travis-ci configs
+ * [actions] add automatic rebasing / merge commit blocking
+
+2.1.0 / 2019-09-09
+=================
+ * [New] add `auto` entry point
+ * [Deps] update `function-bind`, `define-properties`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape`, `@es-shims/api`
+ * [meta] clean up scripts
+ * [meta] Only apps should have lockfiles
+ * [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v9.11`, `v8.16`, `v7.10`, `v6.17`, `v5.10`, `v4.9`; use `nvm install-latest-npm`
+ * [Tests] allow a name of `trimLeft` or `trimStart`
+ * [Tests] fix tests for the mongolian vowel separator
+ * [Tests] use `functions-have-names`
+ * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops
+ * [Tests] remove `jscs`
+ * [Tests] use pretest/posttest for linting/security
+
+2.0.0 / 2016-02-06
+=================
+ * [Breaking] conform to the es-shim API
+ * [Deps] update `define-properties`
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] up to `node` `v5.5`
+ * [Tests] fix npm upgrades on older nodes
+
+1.0.1 / 2015-07-29
+=================
+ * Fix deps mistakenly being dev deps
+
+1.0.0 / 2015-07-29
+=================
+ * v1.0.0
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/LICENSE b/node_modules/object.values/node_modules/string.prototype.trimleft/LICENSE
new file mode 100644
index 0000000..b43df44
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/README.md b/node_modules/object.values/node_modules/string.prototype.trimleft/README.md
new file mode 100644
index 0000000..7a73718
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/README.md
@@ -0,0 +1,47 @@
+String.prototype.trimLeft <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+[![browser support][testling-svg]][testling-url]
+
+An ES2019-spec-compliant `String.prototype.trimLeft` shim. Invoke its "shim" method to shim `String.prototype.trimLeft` if it is unavailable.
+
+This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](http://www.ecma-international.org/ecma-262/6.0/#sec-object.assign). In an ES6 environment, it will also work properly with `Symbol`s.
+
+Most common usage:
+```js
+var trimLeft = require('string.prototype.trimleft');
+
+assert(trimLeft(' \t\na \t\n') === 'a \t\n');
+
+if (!String.prototype.trimLeft) {
+ trimLeft.shim();
+}
+
+assert(trimLeft(' \t\na \t\n') === ' \t\na \t\n'.trimLeft());
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.com/package/string.prototype.trimleft
+[npm-version-svg]: http://vb.teelaun.ch/es-shims/String.prototype.trimLeft.svg
+[travis-svg]: https://travis-ci.org/es-shims/String.prototype.trimLeft.svg
+[travis-url]: https://travis-ci.org/es-shims/String.prototype.trimLeft
+[deps-svg]: https://david-dm.org/es-shims/String.prototype.trimLeft.svg
+[deps-url]: https://david-dm.org/es-shims/String.prototype.trimLeft
+[dev-deps-svg]: https://david-dm.org/es-shims/String.prototype.trimLeft/dev-status.svg
+[dev-deps-url]: https://david-dm.org/es-shims/String.prototype.trimLeft#info=devDependencies
+[testling-svg]: https://ci.testling.com/es-shims/String.prototype.trimLeft.png
+[testling-url]: https://ci.testling.com/es-shims/String.prototype.trimLeft
+[npm-badge-png]: https://nodei.co/npm/string.prototype.trimleft.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/string.prototype.trimleft.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/string.prototype.trimleft.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=string.prototype.trimleft
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/auto.js b/node_modules/object.values/node_modules/string.prototype.trimleft/auto.js
new file mode 100644
index 0000000..8ebf606
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/auto.js
@@ -0,0 +1,3 @@
+'use strict';
+
+require('./shim')();
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/implementation.js b/node_modules/object.values/node_modules/string.prototype.trimleft/implementation.js
new file mode 100644
index 0000000..980c1b0
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/implementation.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('string.prototype.trimstart/implementation');
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/index.js b/node_modules/object.values/node_modules/string.prototype.trimleft/index.js
new file mode 100644
index 0000000..3232160
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/index.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBind = require('es-abstract/helpers/callBind');
+var define = require('define-properties');
+
+var implementation = require('./implementation');
+var getPolyfill = require('./polyfill');
+var shim = require('./shim');
+
+var bound = callBind(getPolyfill());
+
+define(bound, {
+ getPolyfill: getPolyfill,
+ implementation: implementation,
+ shim: shim
+});
+
+module.exports = bound;
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/package.json b/node_modules/object.values/node_modules/string.prototype.trimleft/package.json
new file mode 100644
index 0000000..375be74
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/package.json
@@ -0,0 +1,75 @@
+{
+ "author": "Jordan Harband <ljharb@gmail.com>",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ },
+ "description": "ES2019 spec-compliant String.prototype.trimLeft shim.",
+ "devDependencies": {
+ "@es-shims/api": "^2.1.2",
+ "@ljharb/eslint-config": "^16.0.0",
+ "covert": "^1.1.1",
+ "eslint": "^6.8.0",
+ "functions-have-names": "^1.2.1",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.0.0-next.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "keywords": [
+ "String.prototype.trimLeft",
+ "string",
+ "ES7",
+ "ES2019",
+ "shim",
+ "trim",
+ "trimLeft",
+ "trimStart",
+ "trimRight",
+ "trimEnd",
+ "polyfill",
+ "es-shim API"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "string.prototype.trimleft",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/es-shims/String.prototype.trimLeft.git"
+ },
+ "scripts": {
+ "coverage": "covert test/*.js",
+ "lint": "eslint .",
+ "posttest": "npx aud",
+ "prepublish": "safe-publish-latest",
+ "pretest": "npm run lint && es-shim-api --bound",
+ "test": "npm run tests-only",
+ "test:module": "node test",
+ "test:shimmed": "node test/shimmed",
+ "tests-only": "npm run --silent test:shimmed && npm run --silent test:module"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/9.0..latest",
+ "firefox/4.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/11.6..latest",
+ "opera/next",
+ "safari/5.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test/index.js"
+ },
+ "version": "2.1.2"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/polyfill.js b/node_modules/object.values/node_modules/string.prototype.trimleft/polyfill.js
new file mode 100644
index 0000000..dc33a23
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/polyfill.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var implementation = require('./implementation');
+
+module.exports = function getPolyfill() {
+ if (!String.prototype.trimLeft) {
+ return implementation;
+ }
+ var zeroWidthSpace = '\u200b';
+ if (zeroWidthSpace.trimLeft() !== zeroWidthSpace) {
+ return implementation;
+ }
+ return String.prototype.trimLeft;
+};
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/shim.js b/node_modules/object.values/node_modules/string.prototype.trimleft/shim.js
new file mode 100644
index 0000000..23314f0
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/shim.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var define = require('define-properties');
+var getPolyfill = require('./polyfill');
+
+module.exports = function shimTrimLeft() {
+ var polyfill = getPolyfill();
+ define(
+ String.prototype,
+ { trimLeft: polyfill },
+ { trimLeft: function () { return String.prototype.trimLeft !== polyfill; } }
+ );
+ return polyfill;
+};
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/test/index.js b/node_modules/object.values/node_modules/string.prototype.trimleft/test/index.js
new file mode 100644
index 0000000..9979507
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/test/index.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var trimLeft = require('../');
+var test = require('tape');
+
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+ t.test('bad array/this value', function (st) {
+ st['throws'](function () { trimLeft(undefined, 'a'); }, TypeError, 'undefined is not an object');
+ st['throws'](function () { trimLeft(null, 'a'); }, TypeError, 'null is not an object');
+ st.end();
+ });
+
+ runTests(trimLeft, t);
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/test/shimmed.js b/node_modules/object.values/node_modules/string.prototype.trimleft/test/shimmed.js
new file mode 100644
index 0000000..8fec692
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/test/shimmed.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var trimLeft = require('../');
+trimLeft.shim();
+
+var runTests = require('./tests');
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var callBind = require('es-abstract/helpers/callBind');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var functionsHaveNames = require('functions-have-names')();
+
+test('shimmed', function (t) {
+ t.equal(String.prototype.trimLeft.length, 0, 'String#trimLeft has a length of 0');
+ t.test('Function name', { skip: !functionsHaveNames }, function (st) {
+ st.equal((/^(?:trimLeft|trimStart)$/).test(String.prototype.trimLeft.name), true, 'String#trimLeft has name "trimLeft" or "trimStart"');
+ st.end();
+ });
+
+ t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+ et.equal(false, isEnumerable.call(String.prototype, 'trimLeft'), 'String#trimLeft is not enumerable');
+ et.end();
+ });
+
+ var supportsStrictMode = (function () { return typeof this === 'undefined'; }());
+
+ t.test('bad string/this value', { skip: !supportsStrictMode }, function (st) {
+ st['throws'](function () { return trimLeft(undefined, 'a'); }, TypeError, 'undefined is not an object');
+ st['throws'](function () { return trimLeft(null, 'a'); }, TypeError, 'null is not an object');
+ st.end();
+ });
+
+ runTests(callBind(String.prototype.trimLeft), t);
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/string.prototype.trimleft/test/tests.js b/node_modules/object.values/node_modules/string.prototype.trimleft/test/tests.js
new file mode 100644
index 0000000..fe7926a
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimleft/test/tests.js
@@ -0,0 +1,26 @@
+'use strict';
+
+module.exports = function (trimLeft, t) {
+ t.test('normal cases', function (st) {
+ st.equal(trimLeft(' \t\na \t\n'), 'a \t\n', 'strips whitespace off the left side');
+ st.equal(trimLeft('a'), 'a', 'noop when no whitespace');
+
+ var allWhitespaceChars = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+ st.equal(trimLeft(allWhitespaceChars + 'a' + allWhitespaceChars), 'a' + allWhitespaceChars, 'all expected whitespace chars are trimmed');
+
+ st.end();
+ });
+
+ // see https://codeblog.jonskeet.uk/2014/12/01/when-is-an-identifier-not-an-identifier-attack-of-the-mongolian-vowel-separator/
+ var mongolianVowelSeparator = '\u180E';
+ t.test('unicode >= 4 && < 6.3', { skip: !(/^\s$/).test(mongolianVowelSeparator) }, function (st) {
+ st.equal(trimLeft(mongolianVowelSeparator + 'a' + mongolianVowelSeparator), 'a' + mongolianVowelSeparator, 'mongolian vowel separator is whitespace');
+ st.end();
+ });
+
+ t.test('zero-width spaces', function (st) {
+ var zeroWidth = '\u200b';
+ st.equal(trimLeft(zeroWidth), zeroWidth, 'zero width space does not trim');
+ st.end();
+ });
+};
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/.editorconfig b/node_modules/object.values/node_modules/string.prototype.trimright/.editorconfig
new file mode 100644
index 0000000..bc228f8
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/.eslintrc b/node_modules/object.values/node_modules/string.prototype.trimright/.eslintrc
new file mode 100644
index 0000000..1fa9542
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/.eslintrc
@@ -0,0 +1,15 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "overrides": [
+ {
+ "files": "test/*",
+ "rules": {
+ "id-length": 0,
+ "no-invalid-this": 1,
+ },
+ },
+ ],
+}
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/.github/workflows/rebase.yml b/node_modules/object.values/node_modules/string.prototype.trimright/.github/workflows/rebase.yml
new file mode 100644
index 0000000..436cb79
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/.travis.yml b/node_modules/object.values/node_modules/string.prototype.trimright/.travis.yml
new file mode 100644
index 0000000..2d1c1d2
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/.travis.yml
@@ -0,0 +1,12 @@
+version: ~> 1.0
+language: node_js
+os:
+ - linux
+import:
+ - ljharb/travis-ci:node/all.yml
+ - ljharb/travis-ci:node/pretest.yml
+ - ljharb/travis-ci:node/posttest.yml
+ - ljharb/travis-ci:node/coverage.yml
+matrix:
+ allow_failures:
+ - env: COVERAGE=true
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/CHANGELOG.md b/node_modules/object.values/node_modules/string.prototype.trimright/CHANGELOG.md
new file mode 100644
index 0000000..1e8d799
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/CHANGELOG.md
@@ -0,0 +1,37 @@
+2.1.1 / 2019-12-17
+=================
+ * [meta] add `funding` field
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `functions-have-names`, `tape`
+ * [Tests] use shared travis-ci configs
+ * [actions] add automatic rebasing / merge commit blocking
+
+2.1.0 / 2019-09-09
+=================
+ * [New] add `auto` entry point
+ * [Deps] update `function-bind`, `define-properties`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape`, `@es-shims/api`
+ * [meta] clean up scripts
+ * [meta] Only apps should have lockfiles
+ * [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v9.11`, `v8.16`, `v7.10`, `v6.17`, `v5.10`, `v4.9`; use `nvm install-latest-npm`
+ * [Tests] allow a name of `trimLeft` or `trimStart`
+ * [Tests] fix tests for the mongolian vowel separator
+ * [Tests] use `functions-have-names`
+ * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops
+ * [Tests] remove `jscs`
+ * [Tests] use pretest/posttest for linting/security
+
+2.0.0 / 2016-02-06
+=================
+ * [Breaking] conform to the es-shim API
+ * [Deps] update `define-properties`
+ * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] up to `node` `v5.5`
+ * [Tests] fix npm upgrades on older nodes
+
+1.0.1 / 2015-07-29
+=================
+ * Fix deps mistakenly being dev deps
+
+1.0.0 / 2015-07-29
+=================
+ * v1.0.0
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/LICENSE b/node_modules/object.values/node_modules/string.prototype.trimright/LICENSE
new file mode 100644
index 0000000..b43df44
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/README.md b/node_modules/object.values/node_modules/string.prototype.trimright/README.md
new file mode 100644
index 0000000..33d7e21
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/README.md
@@ -0,0 +1,47 @@
+String.prototype.trimRight <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+[![browser support][testling-svg]][testling-url]
+
+A ES2019-spec-compliant `String.prototype.trimRight` shim. Invoke its "shim" method to shim `String.prototype.trimRight` if it is unavailable.
+
+This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](http://www.ecma-international.org/ecma-262/6.0/#sec-object.assign). In an ES6 environment, it will also work properly with `Symbol`s.
+
+Most common usage:
+```js
+var trimRight = require('string.prototype.trimright');
+
+assert(trimRight(' \t\na \t\n') === 'a \t\n');
+
+if (!String.prototype.trimRight) {
+ trimRight.shim();
+}
+
+assert(trimRight(' \t\na \t\n ') === ' \t\na \t\n '.trimRight());
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.com/package/string.prototype.trimright
+[npm-version-svg]: http://vb.teelaun.ch/es-shims/String.prototype.trimRight.svg
+[travis-svg]: https://travis-ci.org/es-shims/String.prototype.trimRight.svg
+[travis-url]: https://travis-ci.org/es-shims/String.prototype.trimRight
+[deps-svg]: https://david-dm.org/es-shims/String.prototype.trimRight.svg
+[deps-url]: https://david-dm.org/es-shims/String.prototype.trimRight
+[dev-deps-svg]: https://david-dm.org/es-shims/String.prototype.trimRight/dev-status.svg
+[dev-deps-url]: https://david-dm.org/es-shims/String.prototype.trimRight#info=devDependencies
+[testling-svg]: https://ci.testling.com/es-shims/String.prototype.trimRight.png
+[testling-url]: https://ci.testling.com/es-shims/String.prototype.trimRight
+[npm-badge-png]: https://nodei.co/npm/string.prototype.trimright.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/string.prototype.trimright.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/string.prototype.trimright.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=string.prototype.trimright
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/auto.js b/node_modules/object.values/node_modules/string.prototype.trimright/auto.js
new file mode 100644
index 0000000..8ebf606
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/auto.js
@@ -0,0 +1,3 @@
+'use strict';
+
+require('./shim')();
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/implementation.js b/node_modules/object.values/node_modules/string.prototype.trimright/implementation.js
new file mode 100644
index 0000000..e2272ef
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/implementation.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('string.prototype.trimend/implementation');
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/index.js b/node_modules/object.values/node_modules/string.prototype.trimright/index.js
new file mode 100644
index 0000000..3232160
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/index.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBind = require('es-abstract/helpers/callBind');
+var define = require('define-properties');
+
+var implementation = require('./implementation');
+var getPolyfill = require('./polyfill');
+var shim = require('./shim');
+
+var bound = callBind(getPolyfill());
+
+define(bound, {
+ getPolyfill: getPolyfill,
+ implementation: implementation,
+ shim: shim
+});
+
+module.exports = bound;
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/package.json b/node_modules/object.values/node_modules/string.prototype.trimright/package.json
new file mode 100644
index 0000000..5e96293
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/package.json
@@ -0,0 +1,75 @@
+{
+ "author": "Jordan Harband",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ },
+ "description": "ES2019 spec-compliant String.prototype.trimLeft shim.",
+ "devDependencies": {
+ "@es-shims/api": "^2.1.2",
+ "@ljharb/eslint-config": "^16.0.0",
+ "covert": "^1.1.1",
+ "eslint": "^6.8.0",
+ "functions-have-names": "^1.2.1",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.0.0-next.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "keywords": [
+ "String.prototype.trimRight",
+ "string",
+ "ES7",
+ "ES2019",
+ "shim",
+ "trim",
+ "trimLeft",
+ "trimStart",
+ "trimRight",
+ "trimEnd",
+ "polyfill",
+ "es-shim API"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "string.prototype.trimright",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/es-shims/String.prototype.trimRight.git"
+ },
+ "scripts": {
+ "coverage": "covert test/*.js",
+ "lint": "eslint .",
+ "posttest": "npx aud",
+ "prepublish": "safe-publish-latest",
+ "pretest": "npm run lint && es-shim-api --bound",
+ "test": "npm run tests-only",
+ "test:module": "node test",
+ "test:shimmed": "node test/shimmed",
+ "tests-only": "npm run test:shimmed && npm run test:module"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/9.0..latest",
+ "firefox/4.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/11.6..latest",
+ "opera/next",
+ "safari/5.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test/index.js"
+ },
+ "version": "2.1.2"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/polyfill.js b/node_modules/object.values/node_modules/string.prototype.trimright/polyfill.js
new file mode 100644
index 0000000..7c2aa99
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/polyfill.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var implementation = require('./implementation');
+
+module.exports = function getPolyfill() {
+ if (!String.prototype.trimRight) {
+ return implementation;
+ }
+ var zeroWidthSpace = '\u200b';
+ if (zeroWidthSpace.trimRight() !== zeroWidthSpace) {
+ return implementation;
+ }
+ return String.prototype.trimRight;
+};
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/shim.js b/node_modules/object.values/node_modules/string.prototype.trimright/shim.js
new file mode 100644
index 0000000..e073afe
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/shim.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var define = require('define-properties');
+var getPolyfill = require('./polyfill');
+
+module.exports = function shimTrimRight() {
+ var polyfill = getPolyfill();
+ define(
+ String.prototype,
+ { trimRight: polyfill },
+ { trimRight: function () { return String.prototype.trimRight !== polyfill; } }
+ );
+ return polyfill;
+};
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/test/index.js b/node_modules/object.values/node_modules/string.prototype.trimright/test/index.js
new file mode 100644
index 0000000..84e5e3d
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/test/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var trimRight = require('../');
+var test = require('tape');
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+ t.test('bad array/this value', function (st) {
+ st['throws'](function () { trimRight(undefined, 'a'); }, TypeError, 'undefined is not an object');
+ st['throws'](function () { trimRight(null, 'a'); }, TypeError, 'null is not an object');
+ st.end();
+ });
+
+ runTests(trimRight, t);
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/test/shimmed.js b/node_modules/object.values/node_modules/string.prototype.trimright/test/shimmed.js
new file mode 100644
index 0000000..8bdb20c
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/test/shimmed.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var trimRight = require('../');
+trimRight.shim();
+
+var runTests = require('./tests');
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var callBind = require('es-abstract/helpers/callBind');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var functionsHaveNames = require('functions-have-names')();
+
+test('shimmed', function (t) {
+ t.equal(String.prototype.trimRight.length, 0, 'String#trimRight has a length of 0');
+ t.test('Function name', { skip: !functionsHaveNames }, function (st) {
+ st.equal((/^(?:trimRight|trimEnd)$/).test(String.prototype.trimRight.name), true, 'String#trimRight has name "trimRight" or "trimEnd"');
+ st.end();
+ });
+
+ t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+ et.equal(false, isEnumerable.call(String.prototype, 'trimRight'), 'String#trimRight is not enumerable');
+ et.end();
+ });
+
+ var supportsStrictMode = (function () { return typeof this === 'undefined'; }());
+
+ t.test('bad string/this value', { skip: !supportsStrictMode }, function (st) {
+ st['throws'](function () { return trimRight(undefined, 'a'); }, TypeError, 'undefined is not an object');
+ st['throws'](function () { return trimRight(null, 'a'); }, TypeError, 'null is not an object');
+ st.end();
+ });
+
+ runTests(callBind(String.prototype.trimRight), t);
+
+ t.end();
+});
diff --git a/node_modules/object.values/node_modules/string.prototype.trimright/test/tests.js b/node_modules/object.values/node_modules/string.prototype.trimright/test/tests.js
new file mode 100644
index 0000000..b62a413
--- /dev/null
+++ b/node_modules/object.values/node_modules/string.prototype.trimright/test/tests.js
@@ -0,0 +1,26 @@
+'use strict';
+
+module.exports = function (trimRight, t) {
+ t.test('normal cases', function (st) {
+ st.equal(trimRight(' \t\na \t\n'), ' \t\na', 'strips whitespace off the left side');
+ st.equal(trimRight('a'), 'a', 'noop when no whitespace');
+
+ var allWhitespaceChars = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+ st.equal(trimRight(allWhitespaceChars + 'a' + allWhitespaceChars), allWhitespaceChars + 'a', 'all expected whitespace chars are trimmed');
+
+ st.end();
+ });
+
+ // see https://codeblog.jonskeet.uk/2014/12/01/when-is-an-identifier-not-an-identifier-attack-of-the-mongolian-vowel-separator/
+ var mongolianVowelSeparator = '\u180E';
+ t.test('unicode >= 4 && < 6.3', { skip: !(/^\s$/).test(mongolianVowelSeparator) }, function (st) {
+ st.equal(trimRight(mongolianVowelSeparator + 'a' + mongolianVowelSeparator), mongolianVowelSeparator + 'a', 'mongolian vowel separator is whitespace');
+ st.end();
+ });
+
+ t.test('zero-width spaces', function (st) {
+ var zeroWidth = '\u200b';
+ st.equal(trimRight(zeroWidth), zeroWidth, 'zero width space does not trim');
+ st.end();
+ });
+};
diff --git a/node_modules/object.values/package.json b/node_modules/object.values/package.json
new file mode 100644
index 0000000..173077b
--- /dev/null
+++ b/node_modules/object.values/package.json
@@ -0,0 +1,77 @@
+{
+ "author": "Jordan Harband <ljharb@gmail.com>",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ },
+ "description": "ES2017 spec-compliant Object.values shim.",
+ "devDependencies": {
+ "@es-shims/api": "^2.1.2",
+ "@ljharb/eslint-config": "^15.0.2",
+ "array-map": "^0.0.0",
+ "covert": "^1.1.1",
+ "eslint": "^6.7.2",
+ "functions-have-names": "^1.2.0",
+ "object-keys": "^1.1.1",
+ "tape": "^4.11.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "keywords": [
+ "Object.values",
+ "Object.keys",
+ "Object.entries",
+ "values",
+ "ES7",
+ "ES8",
+ "ES2017",
+ "shim",
+ "object",
+ "keys",
+ "entries",
+ "polyfill",
+ "es-shim API"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "object.values",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/es-shims/Object.values.git"
+ },
+ "scripts": {
+ "coverage": "covert test/*.js",
+ "lint": "eslint .",
+ "posttest": "npx aud",
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "test:module": "node test/index",
+ "test:shimmed": "node test/shimmed",
+ "tests-only": "es-shim-api && npm run test:shimmed && npm run test:module"
+ },
+ "testling": {
+ "browsers": [
+ "iexplore/9.0..latest",
+ "firefox/4.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/11.6..latest",
+ "opera/next",
+ "safari/5.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ],
+ "files": "test/index.js"
+ },
+ "version": "1.1.1"
+}
\ No newline at end of file
diff --git a/node_modules/object.values/polyfill.js b/node_modules/object.values/polyfill.js
new file mode 100644
index 0000000..2790be4
--- /dev/null
+++ b/node_modules/object.values/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/node_modules/object.values/shim.js b/node_modules/object.values/shim.js
new file mode 100644
index 0000000..a680e98
--- /dev/null
+++ b/node_modules/object.values/shim.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var getPolyfill = require('./polyfill');
+var define = require('define-properties');
+
+module.exports = function shimValues() {
+ var polyfill = getPolyfill();
+ define(Object, { values: polyfill }, {
+ values: function testValues() {
+ return Object.values !== polyfill;
+ }
+ });
+ return polyfill;
+};
diff --git a/node_modules/object.values/test/.eslintrc b/node_modules/object.values/test/.eslintrc
new file mode 100644
index 0000000..5562962
--- /dev/null
+++ b/node_modules/object.values/test/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "rules": {
+ "array-bracket-newline": 0,
+ "max-lines-per-function": 0,
+ "max-nested-callbacks": [2, 3],
+ "max-statements": [2, 12],
+ "max-statements-per-line": [2, { "max": 2 }],
+ "no-invalid-this": [1],
+ "object-curly-newline": 0,
+ }
+}
diff --git a/node_modules/object.values/test/index.js b/node_modules/object.values/test/index.js
new file mode 100644
index 0000000..2c1bba5
--- /dev/null
+++ b/node_modules/object.values/test/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var values = require('../');
+var test = require('tape');
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+ t.test('bad array/this value', function (st) {
+ st['throws'](function () { values(undefined); }, TypeError, 'undefined is not an object');
+ st['throws'](function () { values(null); }, TypeError, 'null is not an object');
+ st.end();
+ });
+
+ runTests(values, t);
+
+ t.end();
+});
diff --git a/node_modules/object.values/test/shimmed.js b/node_modules/object.values/test/shimmed.js
new file mode 100644
index 0000000..c5db49b
--- /dev/null
+++ b/node_modules/object.values/test/shimmed.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var values = require('../');
+values.shim();
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var functionsHaveNames = require('functions-have-names')();
+
+var runTests = require('./tests');
+
+test('shimmed', function (t) {
+ t.equal(Object.values.length, 1, 'Object.values has a length of 1');
+ t.test('Function name', { skip: !functionsHaveNames }, function (st) {
+ st.equal(Object.values.name, 'values', 'Object.values has name "values"');
+ st.end();
+ });
+
+ t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+ et.equal(false, isEnumerable.call(Object, 'values'), 'Object.values is not enumerable');
+ et.end();
+ });
+
+ var supportsStrictMode = (function () { return typeof this === 'undefined'; }());
+
+ t.test('bad object value', { skip: !supportsStrictMode }, function (st) {
+ st['throws'](function () { return Object.values(undefined); }, TypeError, 'undefined is not an object');
+ st['throws'](function () { return Object.values(null); }, TypeError, 'null is not an object');
+ st.end();
+ });
+
+ runTests(Object.values, t);
+
+ t.end();
+});
diff --git a/node_modules/object.values/test/tests.js b/node_modules/object.values/test/tests.js
new file mode 100644
index 0000000..6055983
--- /dev/null
+++ b/node_modules/object.values/test/tests.js
@@ -0,0 +1,82 @@
+'use strict';
+
+var keys = require('object-keys');
+var map = require('array-map');
+var define = require('define-properties');
+
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
+
+module.exports = function (values, t) {
+ var a = {};
+ var b = {};
+ var c = {};
+ var obj = { a: a, b: b, c: c };
+
+ t.deepEqual(values(obj), [a, b, c], 'basic support');
+ t.deepEqual(values({ a: a, b: a, c: c }), [a, a, c], 'duplicate values are included');
+
+ t.test('values are in the same order as keys', function (st) {
+ var object = { a: a, b: b };
+ object[0] = 3;
+ object.c = c;
+ object[1] = 4;
+ delete object[0];
+ var objKeys = keys(object);
+ var objValues = map(objKeys, function (key) {
+ return object[key];
+ });
+ st.deepEqual(values(object), objValues, 'values match key order');
+ st.end();
+ });
+
+ t.test('non-enumerable properties are omitted', { skip: !Object.defineProperty }, function (st) {
+ var object = { a: a, b: b };
+ Object.defineProperty(object, 'c', { enumerable: false, value: c });
+ st.deepEqual(values(object), [a, b], 'non-enumerable property‘s value is omitted');
+ st.end();
+ });
+
+ t.test('inherited properties are omitted', function (st) {
+ var F = function G() {};
+ F.prototype.a = a;
+ var f = new F();
+ f.b = b;
+ st.deepEqual(values(f), [b], 'only own properties are included');
+ st.end();
+ });
+
+ t.test('Symbol properties are omitted', { skip: !hasSymbols }, function (st) {
+ var object = { a: a, b: b, c: c };
+ var enumSym = Symbol('enum');
+ var nonEnumSym = Symbol('non enum');
+ object[enumSym] = enumSym;
+ object.d = enumSym;
+ Object.defineProperty(object, nonEnumSym, { enumerable: false, value: nonEnumSym });
+ st.deepEqual(values(object), [a, b, c, enumSym], 'symbol properties are omitted');
+ st.end();
+ });
+
+ t.test('not-yet-visited keys deleted on [[Get]] must not show up in output', { skip: !define.supportsDescriptors }, function (st) {
+ var o = { a: 1, b: 2, c: 3 };
+ Object.defineProperty(o, 'a', {
+ get: function () {
+ delete this.b;
+ return 1;
+ }
+ });
+ st.deepEqual(values(o), [1, 3], 'when "b" is deleted prior to being visited, it should not show up');
+ st.end();
+ });
+
+ t.test('not-yet-visited keys made non-enumerable on [[Get]] must not show up in output', { skip: !define.supportsDescriptors }, function (st) {
+ var o = { a: 'A', b: 'B' };
+ Object.defineProperty(o, 'a', {
+ get: function () {
+ Object.defineProperty(o, 'b', { enumerable: false });
+ return 'A';
+ }
+ });
+ st.deepEqual(values(o), ['A'], 'when "b" is made non-enumerable prior to being visited, it should not show up');
+ st.end();
+ });
+};