* Transforms a set of related get/set accessors into an expression for either a class * body function or an ObjectLiteralExpression with computed properties. * * @param receiver The receiver for the member.
(receiver, _a, container, startsOnNewLine)
| 99674 | * @param receiver The receiver for the member. |
| 99675 | */ |
| 99676 | function transformAccessorsToExpression(receiver, _a, container, startsOnNewLine) { |
| 99677 | var firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor; |
| 99678 | // To align with source maps in the old emitter, the receiver and property name |
| 99679 | // arguments are both mapped contiguously to the accessor name. |
| 99680 | // TODO(rbuckton): Does this need to be parented? |
| 99681 | var target = ts.setParent(ts.setTextRange(factory.cloneNode(receiver), receiver), receiver.parent); |
| 99682 | ts.setEmitFlags(target, 1536 /* EmitFlags.NoComments */ | 32 /* EmitFlags.NoTrailingSourceMap */); |
| 99683 | ts.setSourceMapRange(target, firstAccessor.name); |
| 99684 | var visitedAccessorName = ts.visitNode(firstAccessor.name, visitor, ts.isPropertyName); |
| 99685 | if (ts.isPrivateIdentifier(visitedAccessorName)) { |
| 99686 | return ts.Debug.failBadSyntaxKind(visitedAccessorName, "Encountered unhandled private identifier while transforming ES2015."); |
| 99687 | } |
| 99688 | var propertyName = ts.createExpressionForPropertyName(factory, visitedAccessorName); |
| 99689 | ts.setEmitFlags(propertyName, 1536 /* EmitFlags.NoComments */ | 16 /* EmitFlags.NoLeadingSourceMap */); |
| 99690 | ts.setSourceMapRange(propertyName, firstAccessor.name); |
| 99691 | var properties = []; |
| 99692 | if (getAccessor) { |
| 99693 | var getterFunction = transformFunctionLikeToExpression(getAccessor, /*location*/ undefined, /*name*/ undefined, container); |
| 99694 | ts.setSourceMapRange(getterFunction, ts.getSourceMapRange(getAccessor)); |
| 99695 | ts.setEmitFlags(getterFunction, 512 /* EmitFlags.NoLeadingComments */); |
| 99696 | var getter = factory.createPropertyAssignment("get", getterFunction); |
| 99697 | ts.setCommentRange(getter, ts.getCommentRange(getAccessor)); |
| 99698 | properties.push(getter); |
| 99699 | } |
| 99700 | if (setAccessor) { |
| 99701 | var setterFunction = transformFunctionLikeToExpression(setAccessor, /*location*/ undefined, /*name*/ undefined, container); |
| 99702 | ts.setSourceMapRange(setterFunction, ts.getSourceMapRange(setAccessor)); |
| 99703 | ts.setEmitFlags(setterFunction, 512 /* EmitFlags.NoLeadingComments */); |
| 99704 | var setter = factory.createPropertyAssignment("set", setterFunction); |
| 99705 | ts.setCommentRange(setter, ts.getCommentRange(setAccessor)); |
| 99706 | properties.push(setter); |
| 99707 | } |
| 99708 | properties.push(factory.createPropertyAssignment("enumerable", getAccessor || setAccessor ? factory.createFalse() : factory.createTrue()), factory.createPropertyAssignment("configurable", factory.createTrue())); |
| 99709 | var call = factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Object"), "defineProperty"), |
| 99710 | /*typeArguments*/ undefined, [ |
| 99711 | target, |
| 99712 | propertyName, |
| 99713 | factory.createObjectLiteralExpression(properties, /*multiLine*/ true) |
| 99714 | ]); |
| 99715 | if (startsOnNewLine) { |
| 99716 | ts.startOnNewLine(call); |
| 99717 | } |
| 99718 | return call; |
| 99719 | } |
| 99720 | /** |
| 99721 | * Visits an ArrowFunction and transforms it into a FunctionExpression. |
| 99722 | * |
no test coverage detected
searching dependent graphs…