Skip to content

Commit f0da8d9

Browse files
committed
Clean up EOCallExpressionProp
1 parent e19ac57 commit f0da8d9

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

transforms/helpers/ast.ts

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,41 @@ export interface EOPropertyWithCallExpression extends EOProperty {
156156
export function isEOPropertyWithCallExpression(
157157
u: unknown
158158
): u is EOPropertyWithCallExpression {
159-
return isEOProperty(u) && isNode(u.value, 'CallExpression');
159+
return isEOProperty(u) && isEOCallExpression(u.value);
160160
}
161161

162162
/** A CallExpression value for an EOProperty */
163-
export interface EOCallExpression extends CallExpression {}
163+
export interface EOCallExpression extends CallExpression {
164+
callee: Identifier | EOMemberExpressionForModifier;
165+
}
166+
167+
export function isEOCallExpression(u: unknown): u is EOCallExpression {
168+
return (
169+
isNode(u, 'CallExpression') &&
170+
(isNode(u.callee, 'Identifier') ||
171+
isEOMemberExpressionForModifier(u.callee))
172+
);
173+
}
174+
175+
export interface EOMemberExpressionForModifier extends MemberExpression {
176+
object: EOCallExpression;
177+
}
178+
179+
export function isEOMemberExpressionForModifier(
180+
u: unknown
181+
): u is EOMemberExpressionForModifier {
182+
return isNode(u, 'MemberExpression') && isEOCallExpression(u.object);
183+
}
184+
185+
export interface EOCallExpressionInnerCallee extends CallExpression {
186+
callee: Identifier;
187+
}
188+
189+
export function isEOCallExpressionInnerCallee(
190+
u: unknown
191+
): u is EOCallExpressionInnerCallee {
192+
return isNode(u, 'CallExpression') && isNode(u.callee, 'Identifier');
193+
}
164194

165195
export interface EOPropertyWithFunctionExpression extends EOProperty {
166196
value: EOFunctionExpression;

transforms/helpers/eo-prop/private/call-expression.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import type {
22
CallExpression,
33
EOCallExpression,
4+
EOCallExpressionInnerCallee,
45
EOPropertyWithCallExpression,
56
} from '../../ast';
7+
import {
8+
isEOCallExpressionInnerCallee,
9+
isEOMemberExpressionForModifier,
10+
} from '../../ast';
611
import type { DecoratorImportInfoMap } from '../../decorator-info';
712
import type { RuntimeData } from '../../runtime-data';
8-
import { assert, isString, verified } from '../../util/types';
13+
import { verified } from '../../util/types';
914
import AbstractEOProp from './abstract';
1015

1116
interface CallExpressionModifier {
@@ -29,7 +34,7 @@ function getModifier(calleeObject: EOCallExpression): CallExpressionModifier {
2934
}
3035

3136
export default class EOCallExpressionProp extends AbstractEOProp<EOPropertyWithCallExpression> {
32-
private calleeObject: CallExpression;
37+
private calleeObject: EOCallExpressionInnerCallee;
3338
readonly modifiers: CallExpressionModifier[];
3439

3540
constructor(
@@ -41,15 +46,11 @@ export default class EOCallExpressionProp extends AbstractEOProp<EOPropertyWithC
4146

4247
let calleeObject = this._prop.value;
4348
const modifiers = [getModifier(calleeObject)];
44-
while (
45-
'callee' in calleeObject &&
46-
calleeObject.callee.type === 'MemberExpression' &&
47-
calleeObject.callee.object.type === 'CallExpression'
48-
) {
49+
while (isEOMemberExpressionForModifier(calleeObject.callee)) {
4950
calleeObject = calleeObject.callee.object;
5051
modifiers.push(getModifier(calleeObject));
5152
}
52-
this.calleeObject = calleeObject;
53+
this.calleeObject = verified(calleeObject, isEOCallExpressionInnerCallee);
5354
this.modifiers = modifiers.reverse();
5455
this.modifiers.shift();
5556

@@ -64,8 +65,7 @@ export default class EOCallExpressionProp extends AbstractEOProp<EOPropertyWithC
6465
}
6566

6667
private get calleeName(): string {
67-
assert('name' in this.calleeObject.callee);
68-
return verified(this.calleeObject.callee.name, isString);
68+
return this.calleeObject.callee.name;
6969
}
7070

7171
get arguments(): CallExpression['arguments'] {

0 commit comments

Comments
 (0)