From 1982bc1bcd0ce95ffe02dcc8d40147cb88506cee Mon Sep 17 00:00:00 2001 From: LuLaValva Date: Mon, 13 Nov 2023 09:05:18 -0800 Subject: [PATCH 1/2] fix(babel): use correct types for params and args --- packages/compiler/src/babel-plugin/parser.js | 2 +- .../src/babel-types/generator/patch.js | 4 +-- .../src/babel-types/types/definitions.js | 27 ++++++++++--------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/compiler/src/babel-plugin/parser.js b/packages/compiler/src/babel-plugin/parser.js index 8a3f9112b0..575bd25c08 100644 --- a/packages/compiler/src/babel-plugin/parser.js +++ b/packages/compiler/src/babel-plugin/parser.js @@ -208,7 +208,7 @@ export function parseMarko(file) { ); }, onTagTypeParams(part) { - currentTag.node.typeParameters = parseTypeParams( + currentBody.node.typeParameters = parseTypeParams( file, parser.read(part.value), part.start, diff --git a/packages/compiler/src/babel-types/generator/patch.js b/packages/compiler/src/babel-types/generator/patch.js index b291fb6924..3fe92dc87a 100644 --- a/packages/compiler/src/babel-types/generator/patch.js +++ b/packages/compiler/src/babel-types/generator/patch.js @@ -193,12 +193,12 @@ Object.assign(Printer.prototype, { } if (node.body.params.length) { - if (node.typeParameters) { + if (node.body.typeParameters) { if (!node.typeArguments) { this.token(" "); } this.token("<"); - this.printList(node.typeParameters.params, node); + this.printList(node.body.typeParameters.params, node); this.token(">"); } this.token("|"); diff --git a/packages/compiler/src/babel-types/types/definitions.js b/packages/compiler/src/babel-types/types/definitions.js index 21e11c4f32..14de36c771 100644 --- a/packages/compiler/src/babel-types/types/definitions.js +++ b/packages/compiler/src/babel-types/types/definitions.js @@ -147,7 +147,7 @@ const MarkoDefinitions = { MarkoTagBody: { aliases: ["Marko", "BlockParent", "Scope"], builder: ["body", "params"], - visitor: ["params", "body"], + visitor: ["typeParameters", "params", "body"], fields: { params: { validate: chain( @@ -156,6 +156,10 @@ const MarkoDefinitions = { ), default: [], }, + typeParameters: { + validate: assertNodeType("TSTypeParameterDeclaration"), + optional: true, + }, body: { validate: arrayOfType([ "MarkoTag", @@ -173,7 +177,14 @@ const MarkoDefinitions = { MarkoTag: { aliases: ["Marko", "Statement"], builder: ["name", "attributes", "body", "arguments", "var"], - visitor: ["name", "attributes", "body", "arguments", "var"], + visitor: [ + "name", + "typeArguments", + "attributes", + "body", + "arguments", + "var", + ], fields: { name: { validate: assertNodeType("Expression"), @@ -193,17 +204,7 @@ const MarkoDefinitions = { optional: true, }, typeArguments: { - validate: chain( - assertValueType("array"), - assertEach(assertNodeType("TypeAnnotation")) - ), - optional: true, - }, - typeParameters: { - validate: chain( - assertValueType("array"), - assertEach(assertNodeType("TypeAnnotation")) - ), + validate: assertNodeType("TSTypeParameterInstantiation"), optional: true, }, rawValue: { From 98b8bdf4ae4583fe3f1f09c07aaf14c1a7c53f7f Mon Sep 17 00:00:00 2001 From: LuLaValva Date: Mon, 13 Nov 2023 09:10:00 -0800 Subject: [PATCH 2/2] chore: add changeset --- .changeset/witty-apricots-travel.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/witty-apricots-travel.md diff --git a/.changeset/witty-apricots-travel.md b/.changeset/witty-apricots-travel.md new file mode 100644 index 0000000000..5e2a37064a --- /dev/null +++ b/.changeset/witty-apricots-travel.md @@ -0,0 +1,5 @@ +--- +"@marko/compiler": patch +--- + +fix AST types