From 38397ce11f2ab9ed48dde0e134fb2862508fd113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 20 Sep 2018 20:03:45 +0200 Subject: [PATCH] Use toPropertyKey in the "decorate" helper This commit also makes the "toPropertyKey" helper call @@toPrimitive when needed. --- .../misc/regression-4855/options.json | 5 ++- packages/babel-helpers/src/helpers.js | 36 +++++++++++++------ .../fixtures/duplicated-keys/options.json | 2 +- .../fixtures/element-descriptors/options.json | 2 +- .../test/fixtures/finishers/options.json | 2 +- .../test/fixtures/ordering/options.json | 2 +- .../async-generator-method/options.json | 2 +- .../class-decorators-yield-await/options.json | 2 +- .../test/fixtures/transformation/options.json | 2 +- .../test/fixtures/object-rest/options.json | 2 +- .../es7-object-rest-builtins/options.json | 2 +- .../es7-object-rest-loose/options.json | 3 +- .../es7-object-rest-loose/output.js | 19 +++------- .../test/fixtures/destructuring/options.json | 2 +- 14 files changed, 47 insertions(+), 36 deletions(-) diff --git a/packages/babel-core/test/fixtures/transformation/misc/regression-4855/options.json b/packages/babel-core/test/fixtures/transformation/misc/regression-4855/options.json index 2f59220d17..489d3a868c 100644 --- a/packages/babel-core/test/fixtures/transformation/misc/regression-4855/options.json +++ b/packages/babel-core/test/fixtures/transformation/misc/regression-4855/options.json @@ -1,5 +1,8 @@ { "compact": false, "presets": ["env"], - "plugins": ["external-helpers", "proposal-object-rest-spread"] + "plugins": [ + ["external-helpers", { "helperVersion": "7.1.5" }], + "proposal-object-rest-spread" + ] } diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 7aa8518aec..f3556f2513 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -935,13 +935,28 @@ helpers.skipFirstGeneratorNext = helper("7.0.0-beta.0")` } `; -helpers.toPropertyKey = helper("7.0.0-beta.0")` - export default function _toPropertyKey(key) { - if (typeof key === "symbol") { - return key; - } else { - return String(key); +helpers.toPrimitive = helper("7.1.5")` + export default function _toPrimitive( + input, + hint /*: "default" | "string" | "number" | void */ + ) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); } + return (hint === "string" ? String : Number)(input); + } +`; + +helpers.toPropertyKey = helper("7.1.5")` + import toPrimitive from "toPrimitive"; + + export default function _toPropertyKey(arg) { + var key = toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); } `; @@ -1077,10 +1092,12 @@ helpers.classStaticPrivateFieldSpecSet = helper("7.0.2")` descriptor.value = value; return value; } + `; -helpers.decorate = helper("7.0.2")` +helpers.decorate = helper("7.1.5")` import toArray from "toArray"; + import toPropertyKey from "toPropertyKey"; // These comments are stripped by @babel/template /*:: @@ -1574,8 +1591,7 @@ helpers.decorate = helper("7.0.2")` ); } - var key = elementObject.key; - if (typeof key !== "string" && typeof key !== "symbol") key = String(key); + var key = toPropertyKey(elementObject.key); var placement = String(elementObject.placement); if ( @@ -1716,4 +1732,4 @@ helpers.decorate = helper("7.0.2")` } return constructor; } - `; +`; diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/duplicated-keys/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/duplicated-keys/options.json index 3c8fc37168..0fbe73eecd 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/duplicated-keys/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/duplicated-keys/options.json @@ -5,7 +5,7 @@ [ "external-helpers", { - "helperVersion": "7.0.2" + "helperVersion": "7.1.5" } ] ] diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/element-descriptors/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/element-descriptors/options.json index 3c8fc37168..0fbe73eecd 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/element-descriptors/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/element-descriptors/options.json @@ -5,7 +5,7 @@ [ "external-helpers", { - "helperVersion": "7.0.2" + "helperVersion": "7.1.5" } ] ] diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/finishers/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/finishers/options.json index 3c8fc37168..0fbe73eecd 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/finishers/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/finishers/options.json @@ -5,7 +5,7 @@ [ "external-helpers", { - "helperVersion": "7.0.2" + "helperVersion": "7.1.5" } ] ] diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/ordering/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/ordering/options.json index 3c8fc37168..0fbe73eecd 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/ordering/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/ordering/options.json @@ -5,7 +5,7 @@ [ "external-helpers", { - "helperVersion": "7.0.2" + "helperVersion": "7.1.5" } ] ] diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/async-generator-method/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/async-generator-method/options.json index c77f4109f4..a3587a401c 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/async-generator-method/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/async-generator-method/options.json @@ -3,6 +3,6 @@ ["proposal-decorators", { "decoratorsBeforeExport": false }], "proposal-class-properties", "syntax-async-generators", - ["external-helpers", { "helperVersion": "7.0.2" }] + ["external-helpers", { "helperVersion": "7.1.5" }] ] } diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/class-decorators-yield-await/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/class-decorators-yield-await/options.json index 34ff48433b..7879b5a667 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/class-decorators-yield-await/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/class-decorators-yield-await/options.json @@ -5,7 +5,7 @@ [ "external-helpers", { - "helperVersion": "7.0.2" + "helperVersion": "7.1.5" } ], "syntax-async-generators" diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/options.json index 3c8fc37168..0fbe73eecd 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/options.json +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/transformation/options.json @@ -5,7 +5,7 @@ [ "external-helpers", { - "helperVersion": "7.0.2" + "helperVersion": "7.1.5" } ] ] diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/options.json b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/options.json index fc3756652a..ac791b82ac 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/options.json +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/options.json @@ -2,6 +2,6 @@ "plugins": [ "syntax-async-generators", "proposal-object-rest-spread", - "external-helpers" + ["external-helpers", { "helperVersion": "7.1.5" }] ] } diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-builtins/options.json b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-builtins/options.json index a4a5f2d213..9b67610435 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-builtins/options.json +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-builtins/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.1.5" }], ["transform-destructuring", { "useBuiltIns": true }], "transform-spread", "transform-parameters", diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/options.json b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/options.json index 30b537ae91..ec06f619d0 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/options.json +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/options.json @@ -1,6 +1,7 @@ { "plugins": [ ["transform-destructuring", { "loose": true }], - "proposal-object-rest-spread" + "proposal-object-rest-spread", + ["external-helpers", { "helperVersion": "7.1.5" }] ] } diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/output.js index 4351f25743..e202791b6f 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/output.js +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/es7-object-rest-loose/output.js @@ -1,29 +1,20 @@ -function _toPropertyKey(key) { if (typeof key === "symbol") { return key; } else { return String(key); } } - -function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } - -function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } - var z = {}; - var _z = z, - x = _extends({}, _z); - + x = babelHelpers.extends({}, _z); var _z2 = z, x = _z2.x, - y = _objectWithoutPropertiesLoose(_z2, ["x"]); - + y = babelHelpers.objectWithoutPropertiesLoose(_z2, ["x"]); var _z3 = z, x = _z3[x], - y = _objectWithoutPropertiesLoose(_z3, [x].map(_toPropertyKey)); + y = babelHelpers.objectWithoutPropertiesLoose(_z3, [x].map(babelHelpers.toPropertyKey)); (function (_ref) { let x = _ref.x, - y = _objectWithoutPropertiesLoose(_ref, ["x"]); + y = babelHelpers.objectWithoutPropertiesLoose(_ref, ["x"]); }); var _o = o; x = _o.x; y = _o.y; -z = _objectWithoutPropertiesLoose(_o, ["x", "y"]); +z = babelHelpers.objectWithoutPropertiesLoose(_o, ["x", "y"]); _o; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/options.json b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/options.json index 0a58a1e00d..780d83b9b4 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/options.json +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.1.5" }], "transform-destructuring", "transform-spread", "transform-parameters",