Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 0e4b411

Browse files
committedMar 9, 2025·
fix(component-meta): update event type representation to include array notation
1 parent f36112c commit 0e4b411

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed
 

‎packages/component-meta/lib/base.ts

+27-3
Original file line numberDiff line numberDiff line change
@@ -581,9 +581,33 @@ function createSchemaResolvers(
581581
};
582582
}
583583
function resolveEventSignature(call: ts.Signature): EventMeta {
584-
const subtype = typeChecker.getTypeOfSymbolAtLocation(call.parameters[1], symbolNode);
585584
let schema: PropertyMetaSchema[];
586585
let declarations: Declaration[];
586+
let subtype = undefined;
587+
let subtypeStr = '[]';
588+
let getSchema = () => [] as PropertyMetaSchema[];
589+
590+
if (call.parameters.length >= 2) {
591+
subtype = typeChecker.getTypeOfSymbolAtLocation(call.parameters[1], symbolNode);
592+
if ((call.parameters[1].valueDeclaration as any)?.dotDotDotToken) {
593+
subtypeStr = typeChecker.typeToString(subtype);
594+
getSchema = () => typeChecker.getTypeArguments(subtype! as ts.TypeReference).map(resolveSchema);
595+
}
596+
else {
597+
subtypeStr = '[';
598+
for (let i = 1; i < call.parameters.length; i++) {
599+
subtypeStr += typeChecker.typeToString(typeChecker.getTypeOfSymbolAtLocation(call.parameters[i], symbolNode)) + ', ';
600+
}
601+
subtypeStr = subtypeStr.slice(0, -2) + ']';
602+
getSchema = () => {
603+
const result: PropertyMetaSchema[] = [];
604+
for (let i = 1; i < call.parameters.length; i++) {
605+
result.push(resolveSchema(typeChecker.getTypeOfSymbolAtLocation(call.parameters[i], symbolNode)));
606+
}
607+
return result;
608+
};
609+
}
610+
}
587611

588612
return {
589613
name: (typeChecker.getTypeOfSymbolAtLocation(call.parameters[0], symbolNode) as ts.StringLiteralType).value,
@@ -592,14 +616,14 @@ function createSchemaResolvers(
592616
name: tag.name,
593617
text: tag.text !== undefined ? ts.displayPartsToString(tag.text) : undefined,
594618
})),
595-
type: typeChecker.typeToString(subtype),
619+
type: subtypeStr,
596620
rawType: rawType ? subtype : undefined,
597621
signature: typeChecker.signatureToString(call),
598622
get declarations() {
599623
return declarations ??= call.declaration ? getDeclarations([call.declaration]) : [];
600624
},
601625
get schema() {
602-
return schema ??= typeChecker.getTypeArguments(subtype as ts.TypeReference).map(resolveSchema);
626+
return schema ??= getSchema();
603627
},
604628
};
605629
}

‎packages/component-meta/tests/index.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
606606
const onBar = meta.events.find(event => event.name === 'bar');
607607

608608
expect(onBar).toBeDefined();
609-
expect(onBar?.type).toEqual('number');
609+
expect(onBar?.type).toEqual('[number]');
610610
expect(onBar?.signature).toEqual('(e: "bar", data: number): void');
611611
});
612612

0 commit comments

Comments
 (0)
Please sign in to comment.