MCPcopy Index your code
hub / github.com/nodejs/node / flattenObjectBindingOrAssignmentPattern

Function flattenObjectBindingOrAssignmentPattern

test/fixtures/snapshot/typescript.js:91237–91284  ·  view source on GitHub ↗

* Flattens an ObjectBindingOrAssignmentPattern into zero or more bindings or assignments. * * @param flattenContext Options used to control flattening. * @param parent The parent element of the pattern. * @param pattern The ObjectBindingOrAssignmentPattern to flatten. * @par

(flattenContext, parent, pattern, value, location)

Source from the content-addressed store, hash-verified

91235 * @param location The location to use for source maps and comments.
91236 */
91237 function flattenObjectBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) {
91238 var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern);
91239 var numElements = elements.length;
91240 if (numElements !== 1) {
91241 // For anything other than a single-element destructuring we need to generate a temporary
91242 // to ensure value is evaluated exactly once. Additionally, if we have zero elements
91243 // we need to emit *something* to ensure that in case a 'var' keyword was already emitted,
91244 // so in that case, we'll intentionally create that temporary.
91245 var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0;
91246 value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location);
91247 }
91248 var bindingElements;
91249 var computedTempVariables;
91250 for (var i = 0; i < numElements; i++) {
91251 var element = elements[i];
91252 if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) {
91253 var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(element);
91254 if (flattenContext.level >= 1 /* FlattenLevel.ObjectRest */
91255 && !(element.transformFlags & (16384 /* TransformFlags.ContainsRestOrSpread */ | 32768 /* TransformFlags.ContainsObjectRestOrSpread */))
91256 && !(ts.getTargetOfBindingOrAssignmentElement(element).transformFlags & (16384 /* TransformFlags.ContainsRestOrSpread */ | 32768 /* TransformFlags.ContainsObjectRestOrSpread */))
91257 && !ts.isComputedPropertyName(propertyName)) {
91258 bindingElements = ts.append(bindingElements, ts.visitNode(element, flattenContext.visitor));
91259 }
91260 else {
91261 if (bindingElements) {
91262 flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
91263 bindingElements = undefined;
91264 }
91265 var rhsValue = createDestructuringPropertyAccess(flattenContext, value, propertyName);
91266 if (ts.isComputedPropertyName(propertyName)) {
91267 computedTempVariables = ts.append(computedTempVariables, rhsValue.argumentExpression);
91268 }
91269 flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element);
91270 }
91271 }
91272 else if (i === numElements - 1) {
91273 if (bindingElements) {
91274 flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
91275 bindingElements = undefined;
91276 }
91277 var rhsValue = flattenContext.context.getEmitHelperFactory().createRestHelper(value, elements, computedTempVariables, pattern);
91278 flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
91279 }
91280 }
91281 if (bindingElements) {
91282 flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
91283 }
91284 }
91285 /**
91286 * Flattens an ArrayBindingOrAssignmentPattern into zero or more bindings or assignments.
91287 *

Callers 1

Calls 4

ensureIdentifierFunction · 0.85
appendMethod · 0.45

Tested by

no test coverage detected