forked from prettier/angular-estree-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtransform-object-expression.ts
More file actions
59 lines (53 loc) · 1.74 KB
/
transform-object-expression.ts
File metadata and controls
59 lines (53 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import type * as angular from '@angular/compiler';
import type * as babel from '@babel/types';
import type { NGNode, RawNGSpan } from '../types.ts';
import { type Transformer } from './transform.ts';
export const visitLiteralMap = (
node: angular.LiteralMap,
transformer: Transformer,
): babel.ObjectExpression => {
const { keys, values } = node;
const createChild = <T extends NGNode>(
properties: Partial<T> & { type: T['type'] },
location: angular.AST | RawNGSpan | [number, number] = node,
) =>
transformer.create(properties, location, [node, ...transformer.ancestors]);
return {
type: 'ObjectExpression',
properties: keys.map((keyNode, index) => {
const valueNode = values[index];
const range: [number, number] = [
keyNode.sourceSpan.start,
valueNode.sourceSpan.end,
];
if (keyNode.kind === 'spread') {
return createChild<babel.SpreadElement>(
{
type: 'SpreadElement',
argument: transformer.transformChild<babel.Expression>(valueNode),
},
range,
);
}
const shorthand = Boolean(keyNode.isShorthandInitialized);
const key = createChild<babel.Identifier | babel.StringLiteral>(
keyNode.quoted
? { type: 'StringLiteral', value: keyNode.key }
: { type: 'Identifier', name: keyNode.key },
keyNode.sourceSpan,
);
return createChild<babel.ObjectPropertyNonComputed>(
{
type: 'ObjectProperty',
key,
value: transformer.transformChild<babel.Expression>(valueNode),
shorthand,
computed: false,
// @ts-expect-error -- Missed in types
method: false,
},
range,
);
}),
};
};