1- import * as angular from '@angular/compiler' ;
1+ import type * as angular from '@angular/compiler' ;
22import type * as babel from '@babel/types' ;
33
44import { type Transformer } from '../transform-ast.ts' ;
55import type { NGChainedExpression , NGPipeExpression } from '../types.ts' ;
6- import { visitCall , visitSafeCall } from './transform-call.ts' ;
6+ import { visitBinary } from './transform-binary-expression.ts' ;
7+ import { visitCall , visitSafeCall } from './transform-call-expression.ts' ;
78import {
89 visitLiteralPrimitive ,
910 visitRegularExpressionLiteral ,
@@ -15,6 +16,11 @@ import {
1516 visitSafePropertyRead ,
1617} from './transform-member-expression.ts' ;
1718import { visitLiteralMap } from './transform-object-expression.ts' ;
19+ import {
20+ visitTaggedTemplateLiteral ,
21+ visitTemplateLiteral ,
22+ visitTemplateLiteralElement ,
23+ } from './transform-template-literal.ts' ;
1824import {
1925 visitPrefixNot ,
2026 visitTypeofExpression ,
@@ -40,43 +46,16 @@ export const transformVisitor: AstVisitor = {
4046 visitVoidExpression,
4147 visitUnary,
4248
49+ visitBinary,
50+
4351 visitLiteralMap,
4452
4553 visitLiteralPrimitive,
4654 visitRegularExpressionLiteral,
4755
48- visitBinary ( node : angular . Binary , transformer : Transformer ) {
49- const { operation : operator } = node ;
50- const [ left , right ] = transformer . transformChildren < babel . Expression > ( [
51- node . left ,
52- node . right ,
53- ] ) ;
54-
55- if ( operator === '&&' || operator === '||' || operator === '??' ) {
56- return transformer . createNode < babel . LogicalExpression > ( {
57- type : 'LogicalExpression' ,
58- operator : operator as babel . LogicalExpression [ 'operator' ] ,
59- left,
60- right,
61- } ) ;
62- }
63-
64- if ( angular . Binary . isAssignmentOperation ( operator ) ) {
65- return transformer . createNode < babel . AssignmentExpression > ( {
66- type : 'AssignmentExpression' ,
67- left : left as babel . MemberExpression ,
68- right,
69- operator : operator as babel . AssignmentExpression [ 'operator' ] ,
70- } ) ;
71- }
72-
73- return transformer . createNode < babel . BinaryExpression > ( {
74- left,
75- right,
76- type : 'BinaryExpression' ,
77- operator : operator as babel . BinaryExpression [ 'operator' ] ,
78- } ) ;
79- } ,
56+ visitTaggedTemplateLiteral,
57+ visitTemplateLiteral,
58+ visitTemplateLiteralElement,
8059
8160 visitPipe ( node : angular . BindingPipe , transformer : Transformer ) {
8261 return transformer . createNode < NGPipeExpression > ( {
@@ -137,52 +116,6 @@ export const transformVisitor: AstVisitor = {
137116 } ) ;
138117 } ,
139118
140- visitTaggedTemplateLiteral (
141- node : angular . TaggedTemplateLiteral ,
142- transformer : Transformer ,
143- ) {
144- return transformer . createNode < babel . TaggedTemplateExpression > ( {
145- type : 'TaggedTemplateExpression' ,
146- tag : transformer . transformChild < babel . Expression > ( node . tag ) ,
147- quasi : transformer . transformChild < babel . TemplateLiteral > ( node . template ) ,
148- } ) ;
149- } ,
150-
151- visitTemplateLiteral (
152- node : angular . TemplateLiteral ,
153- transformer : Transformer ,
154- ) {
155- return transformer . createNode < babel . TemplateLiteral > ( {
156- type : 'TemplateLiteral' ,
157- quasis : transformer . transformChildren ( node . elements ) ,
158- expressions : transformer . transformChildren ( node . expressions ) ,
159- } ) ;
160- } ,
161-
162- visitTemplateLiteralElement (
163- node : angular . TemplateLiteralElement ,
164- transformer : Transformer ,
165- ) {
166- const [ parent ] = transformer . ancestors ;
167- const { elements } = parent as angular . TemplateLiteral ;
168- const elementIndex = elements . indexOf ( node ) ;
169- const isFirst = elementIndex === 0 ;
170- const isLast = elementIndex === elements . length - 1 ;
171-
172- const end = node . sourceSpan . end - ( isLast ? 1 : 0 ) ;
173- const start = node . sourceSpan . start + ( isFirst ? 1 : 0 ) ;
174- const raw = transformer . text . slice ( start , end ) ;
175-
176- return transformer . createNode < babel . TemplateElement > (
177- {
178- type : 'TemplateElement' ,
179- value : { cooked : node . text , raw } ,
180- tail : isLast ,
181- } ,
182- [ start , end ] ,
183- ) ;
184- } ,
185-
186119 visitParenthesizedExpression (
187120 node : angular . ParenthesizedExpression ,
188121 transformer : Transformer ,
0 commit comments