From bad51d062000ffdc19d925723a6515458318cf92 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 28 Jun 2023 10:28:22 -0500 Subject: [PATCH] [Refactor] use `array.prototype.flat` `object.values` over `.reduce` --- package.json | 4 +++- src/eventHandlers.js | 10 ++++------ src/values/expressions/ObjectExpression.js | 7 +++---- src/values/expressions/TemplateLiteral.js | 15 ++++++--------- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index e75cd4d..c145fa0 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,9 @@ "license": "MIT", "dependencies": { "array-includes": "^3.1.6", - "object.assign": "^4.1.4" + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "auto-changelog": { "output": "CHANGELOG.md", diff --git a/src/eventHandlers.js b/src/eventHandlers.js index 959e08f..dff8a50 100644 --- a/src/eventHandlers.js +++ b/src/eventHandlers.js @@ -1,3 +1,6 @@ +import flat from 'array.prototype.flat'; +import values from 'object.values'; + /** * Common event handlers for JSX element event binding. */ @@ -102,11 +105,6 @@ const eventHandlersByType = { ], }; -const eventHandlers = Object.keys(eventHandlersByType).reduce( - (accumulator, type) => accumulator.concat(eventHandlersByType[type]), - [], -); - -export default eventHandlers; +export default flat(values(eventHandlersByType)); export { eventHandlersByType }; diff --git a/src/values/expressions/ObjectExpression.js b/src/values/expressions/ObjectExpression.js index 2a5580d..383b569 100644 --- a/src/values/expressions/ObjectExpression.js +++ b/src/values/expressions/ObjectExpression.js @@ -10,15 +10,14 @@ export default function extractValueFromObjectExpression(value) { // eslint-disable-next-line global-require const getValue = require('.').default; return value.properties.reduce((obj, property) => { - const object = { ...obj }; // Support types: SpreadProperty and ExperimentalSpreadProperty if (/^(?:Experimental)?Spread(?:Property|Element)$/.test(property.type)) { if (property.argument.type === 'ObjectExpression') { - return assign(object, extractValueFromObjectExpression(property.argument)); + return assign({}, obj, extractValueFromObjectExpression(property.argument)); } } else { - object[getValue(property.key)] = getValue(property.value); + return assign({}, obj, { [getValue(property.key)]: getValue(property.value) }); } - return object; + return obj; }, {}); } diff --git a/src/values/expressions/TemplateLiteral.js b/src/values/expressions/TemplateLiteral.js index 5b9d826..966ebb2 100644 --- a/src/values/expressions/TemplateLiteral.js +++ b/src/values/expressions/TemplateLiteral.js @@ -17,22 +17,19 @@ export default function extractValueFromTemplateLiteral(value) { } = value; const partitions = quasis.concat(expressions); - return partitions.sort(sortStarts).reduce((raw, part) => { - const { - type, - } = part; + return partitions.sort(sortStarts).map(({ type, value: { raw } = {}, name }) => { if (type === 'TemplateElement') { - return raw + part.value.raw; + return raw; } if (type === 'Identifier') { - return part.name === 'undefined' ? `${raw}${part.name}` : `${raw}{${part.name}}`; + return name === 'undefined' ? name : `{${name}}`; } if (type.indexOf('Expression') > -1) { - return `${raw}{${type}}`; + return `{${type}}`; } - return raw; - }, ''); + return ''; + }).join(''); }