From fc86f99091fa7e7f464a7ae738e116a8fb6a85a1 Mon Sep 17 00:00:00 2001 From: laibo102 Date: Wed, 16 Mar 2022 20:39:22 +0800 Subject: [PATCH 1/3] fixbug: validate root component Signed-off-by: laibo102 Change-Id: I846e8a4390038e8db0c1fb9c1c427b3c06c4ca2a (cherry picked from commit 5ff6670b29b2dc15f8e4c3c16ea6801c8e4a0a90) --- compiler/src/process_component_build.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index efb72094e..4211761e1 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -129,10 +129,8 @@ export function processComponentBlock(node: ts.Block, isLazy: boolean, log: LogI function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { let isValid: boolean = false; if (node.body.statements.length === 1) { - const statement: ts.Node = node.body.statements[0]; - if (ts.isIfStatement(statement) || ts.isExpressionStatement(statement) && statement.expression && - (ts.isEtsComponentExpression(statement.expression) || ts.isCallExpression(statement.expression)) && - validateEtsComponentNode(statement.expression)) { + const statement: ts.Statement = node.body.statements[0]; + if (ts.isIfStatement(statement) || validateFirstNode(statement)) { isValid = true; } } else { @@ -148,6 +146,24 @@ function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { return isValid; } +function validateFirstNode(node: ts.Statement): boolean { + const isEntryComponent: boolean = + componentCollection.entryComponent === componentCollection.currentClassName; + if (isEntryComponent) { + if (!validateContainerComponent(node)) { + return false; + } + } + return true; +} + +function validateContainerComponent(node: ts.Statement): boolean { + if (ts.isExpressionStatement(node) && BUILDIN_CONTAINER_COMPONENT.has(getName(node))) { + return true; + } + return false; +} + interface supplementType { isAcceleratePreview: boolean, line: number, -- Gitee From 3eac0b31872e9c8464137b057356d2c2bb2886b1 Mon Sep 17 00:00:00 2001 From: laibo102 Date: Thu, 17 Mar 2022 00:48:21 +0800 Subject: [PATCH 2/3] fixbug: validate root component Signed-off-by: laibo102 Change-Id: I9fd416c1a0316ae6471109cd7f8baa954a5bed4a (cherry picked from commit 8b3e02df45a1d2e5d09948eda1ddf5f2b84dc055) --- compiler/components/sideBar_container.json | 2 +- compiler/src/process_component_build.ts | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/compiler/components/sideBar_container.json b/compiler/components/sideBar_container.json index cad5291e9..a870c0d62 100644 --- a/compiler/components/sideBar_container.json +++ b/compiler/components/sideBar_container.json @@ -1,6 +1,6 @@ { "name": "SideBarContainer", "attrs": [ - "showSideBar", "controlButton", "showControlButton", "onChange", "sideBarWidth", "maxSideBarWidth", "maxSideBarWidth" + "showSideBar", "controlButton", "showControlButton", "onChange", "sideBarWidth", "minSideBarWidth", "maxSideBarWidth" ] } \ No newline at end of file diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index 4211761e1..b094b0a52 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -158,8 +158,13 @@ function validateFirstNode(node: ts.Statement): boolean { } function validateContainerComponent(node: ts.Statement): boolean { - if (ts.isExpressionStatement(node) && BUILDIN_CONTAINER_COMPONENT.has(getName(node))) { - return true; + if (ts.isExpressionStatement(node) && node.expression && + (ts.isEtsComponentExpression(node.expression) || ts.isCallExpression(node.expression))) { + const nameResult: NameResult = { name: null }; + validateEtsComponentNode(node.expression, nameResult); + if (nameResult.name && BUILDIN_CONTAINER_COMPONENT.has(nameResult.name)) { + return true; + } } return false; } @@ -178,13 +183,21 @@ let newsupplement: supplementType = { fileName: '' }; -function validateEtsComponentNode(node: ts.CallExpression | ts.EtsComponentExpression) { +type NameResult = { + name: string +} + +function validateEtsComponentNode(node: ts.CallExpression | ts.EtsComponentExpression, result?: NameResult) { let childNode: ts.Node = node; + result.name = null; while (ts.isCallExpression(childNode) && childNode.expression && ts.isPropertyAccessExpression(childNode.expression) && childNode.expression.expression) { childNode = childNode.expression.expression; } if (ts.isEtsComponentExpression(childNode)) { + if (ts.isIdentifier(childNode.expression)) { + result.name = childNode.expression.getText(); + } return true; } else { return false; -- Gitee From cd519fe5a183d622a364bbb7dad4486f27203d12 Mon Sep 17 00:00:00 2001 From: laibo102 Date: Thu, 17 Mar 2022 00:59:43 +0800 Subject: [PATCH 3/3] fixbug: validate root component Signed-off-by: laibo102 Change-Id: Ice816cff23bf2b17c8a4da61c7c444486d4bf822 (cherry picked from commit 49ac311b35b6e06549f5c287fa4bb313929ec534) --- compiler/src/process_component_build.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index b094b0a52..cc6349ecd 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -149,10 +149,8 @@ function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { function validateFirstNode(node: ts.Statement): boolean { const isEntryComponent: boolean = componentCollection.entryComponent === componentCollection.currentClassName; - if (isEntryComponent) { - if (!validateContainerComponent(node)) { - return false; - } + if (isEntryComponent && !validateContainerComponent(node)) { + return false; } return true; } -- Gitee