Skip to content

Commit 9673926

Browse files
committed
Refactor
1 parent 1f4d75b commit 9673926

File tree

4 files changed

+112
-80
lines changed

4 files changed

+112
-80
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { Binary } from '@angular/compiler';
2+
import type * as babel from '@babel/types';
3+
4+
import { type Transformer } from '../transform-ast.ts';
5+
6+
const isAssignmentOperator = (
7+
operator: Binary['operation'],
8+
): operator is babel.AssignmentExpression['operator'] =>
9+
Binary.isAssignmentOperation(operator);
10+
11+
const isLogicalOperator = (
12+
operator: Binary['operation'],
13+
): operator is babel.LogicalExpression['operator'] =>
14+
operator === '&&' || operator === '||' || operator === '??';
15+
16+
export const visitBinary = (node: Binary, transformer: Transformer) => {
17+
const { operation: operator } = node;
18+
const [left, right] = transformer.transformChildren<babel.Expression>([
19+
node.left,
20+
node.right,
21+
]);
22+
23+
if (isLogicalOperator(operator)) {
24+
return transformer.createNode<babel.LogicalExpression>({
25+
type: 'LogicalExpression',
26+
operator,
27+
left,
28+
right,
29+
});
30+
}
31+
32+
if (isAssignmentOperator(operator)) {
33+
return transformer.createNode<babel.AssignmentExpression>({
34+
type: 'AssignmentExpression',
35+
left: left as babel.MemberExpression,
36+
right,
37+
operator: operator,
38+
});
39+
}
40+
41+
return transformer.createNode<babel.BinaryExpression>({
42+
left,
43+
right,
44+
type: 'BinaryExpression',
45+
operator: operator as babel.BinaryExpression['operator'],
46+
});
47+
};
File renamed without changes.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import {
2+
type TaggedTemplateLiteral,
3+
type TemplateLiteral,
4+
type TemplateLiteralElement,
5+
} from '@angular/compiler';
6+
import type * as babel from '@babel/types';
7+
8+
import { type Transformer } from '../transform-ast.ts';
9+
10+
export const visitTaggedTemplateLiteral = (
11+
node: TaggedTemplateLiteral,
12+
transformer: Transformer,
13+
) =>
14+
transformer.createNode<babel.TaggedTemplateExpression>({
15+
type: 'TaggedTemplateExpression',
16+
tag: transformer.transformChild<babel.Expression>(node.tag),
17+
quasi: transformer.transformChild<babel.TemplateLiteral>(node.template),
18+
});
19+
20+
export const visitTemplateLiteral = (
21+
node: TemplateLiteral,
22+
transformer: Transformer,
23+
) =>
24+
transformer.createNode<babel.TemplateLiteral>({
25+
type: 'TemplateLiteral',
26+
quasis: transformer.transformChildren(node.elements),
27+
expressions: transformer.transformChildren(node.expressions),
28+
});
29+
30+
export const visitTemplateLiteralElement = (
31+
node: TemplateLiteralElement,
32+
transformer: Transformer,
33+
) => {
34+
const [parent] = transformer.ancestors;
35+
const { elements } = parent as TemplateLiteral;
36+
const elementIndex = elements.indexOf(node);
37+
const isFirst = elementIndex === 0;
38+
const isLast = elementIndex === elements.length - 1;
39+
40+
const end = node.sourceSpan.end - (isLast ? 1 : 0);
41+
const start = node.sourceSpan.start + (isFirst ? 1 : 0);
42+
const raw = transformer.text.slice(start, end);
43+
44+
return transformer.createNode<babel.TemplateElement>(
45+
{
46+
type: 'TemplateElement',
47+
value: { cooked: node.text, raw },
48+
tail: isLast,
49+
},
50+
[start, end],
51+
);
52+
};

src/transforms/visitor.ts

Lines changed: 13 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import * as angular from '@angular/compiler';
1+
import type * as angular from '@angular/compiler';
22
import type * as babel from '@babel/types';
33

44
import { type Transformer } from '../transform-ast.ts';
55
import 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';
78
import {
89
visitLiteralPrimitive,
910
visitRegularExpressionLiteral,
@@ -15,6 +16,11 @@ import {
1516
visitSafePropertyRead,
1617
} from './transform-member-expression.ts';
1718
import { visitLiteralMap } from './transform-object-expression.ts';
19+
import {
20+
visitTaggedTemplateLiteral,
21+
visitTemplateLiteral,
22+
visitTemplateLiteralElement,
23+
} from './transform-template-literal.ts';
1824
import {
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

Comments
 (0)