From 2d8fdf30457021c287a23c19fc5bb48eb8f46a67 Mon Sep 17 00:00:00 2001 From: Adam Miller Date: Sun, 4 Sep 2016 20:59:52 -0700 Subject: [PATCH] Allow native Symbols as computed property names (#6705) The for-in loop in helpers.defineEnumerableProperties doesn't iterate over Symbols. If Object.getOwnPropertySymbols exists, include the discovered values when defining properties. --- packages/babel-helpers/src/helpers.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index b4b8c203a2..24e796a48c 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -278,6 +278,20 @@ helpers.defineEnumerableProperties = template(` if ("value" in desc) desc.writable = true; Object.defineProperty(obj, key, desc); } + + // Symbols are not enumerated over by for-in loops. If native + // Symbols are available, fetch all of the descs object's own + // symbol properties and define them on our target object too. + if (Object.getOwnPropertySymbols) { + var objectSymbols = Object.getOwnPropertySymbols(descs); + for (var idx in objectSymbols) { + var sym = objectSymbols[idx]; + var desc = descs[sym]; + desc.configurable = desc.enumerable = true; + if ("value" in desc) desc.writable = true; + Object.defineProperty(obj, sym, desc); + } + } return obj; }) `);