UNPKG

@autobe/compiler

Version:

AI backend server code generator

85 lines (75 loc) 2.75 kB
import { AutoBeTest } from "@autobe/interface"; import ts from "typescript"; import { IAutoBeTestProgrammerContext } from "./IAutoBeTestProgrammerContext"; import { writeTestExpression } from "./writeTestExpression"; export namespace AutoBeTestOperatorProgrammer { export const conditionalExpression = ( ctx: IAutoBeTestProgrammerContext, expr: AutoBeTest.IConditionalExpression, ): ts.ConditionalExpression => ts.factory.createConditionalExpression( writeTestExpression(ctx, expr.condition), undefined, writeTestExpression(ctx, expr.whenTrue), undefined, writeTestExpression(ctx, expr.whenFalse), ); export const typeOfExpression = ( ctx: IAutoBeTestProgrammerContext, expr: AutoBeTest.ITypeOfExpression, ): ts.TypeOfExpression => ts.factory.createTypeOfExpression( writeTestExpression(ctx, expr.expression), ); export const prefixUnaryExpression = ( ctx: IAutoBeTestProgrammerContext, expr: AutoBeTest.IPrefixUnaryExpression, ): ts.TypeOfExpression | ts.PrefixUnaryExpression => ts.factory.createPrefixUnaryExpression( PREFIX_UNARY_OPERATORS[expr.operator], writeTestExpression(ctx, expr.operand), ); export const postfixUnaryExpression = ( ctx: IAutoBeTestProgrammerContext, expr: AutoBeTest.IPostfixUnaryExpression, ): ts.PostfixUnaryExpression => ts.factory.createPostfixUnaryExpression( writeTestExpression(ctx, expr.operand), POSTFIX_UNARY_OPERATORS[expr.operator], ); export const binaryExpression = ( ctx: IAutoBeTestProgrammerContext, expr: AutoBeTest.IBinaryExpression, ): ts.BinaryExpression => ts.factory.createBinaryExpression( writeTestExpression(ctx, expr.left), BINARY_OPERATORS[expr.operator], writeTestExpression(ctx, expr.right), ); } const POSTFIX_UNARY_OPERATORS = { "++": ts.SyntaxKind.PlusPlusToken, "--": ts.SyntaxKind.MinusMinusToken, } as const; const PREFIX_UNARY_OPERATORS = { ...POSTFIX_UNARY_OPERATORS, "+": ts.SyntaxKind.PlusToken, "-": ts.SyntaxKind.MinusToken, "!": ts.SyntaxKind.ExclamationToken, } as const; const BINARY_OPERATORS = { "===": ts.SyntaxKind.EqualsEqualsEqualsToken, "!==": ts.SyntaxKind.ExclamationEqualsEqualsToken, "<": ts.SyntaxKind.LessThanToken, "<=": ts.SyntaxKind.LessThanEqualsToken, ">": ts.SyntaxKind.GreaterThanToken, ">=": ts.SyntaxKind.GreaterThanEqualsToken, "+": ts.SyntaxKind.PlusToken, "-": ts.SyntaxKind.MinusToken, "*": ts.SyntaxKind.AsteriskToken, "/": ts.SyntaxKind.SlashToken, "%": ts.SyntaxKind.PercentToken, "&&": ts.SyntaxKind.AmpersandAmpersandToken, "||": ts.SyntaxKind.BarBarToken, instanceof: ts.SyntaxKind.InstanceOfKeyword, } as const;