1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import * as arkts from '@koalaui/libarkts'; 17import { PluginContext, Plugins } from '../../../common/plugin-context'; 18import { ProgramVisitor } from '../../../common/program-visitor'; 19import { EXTERNAL_SOURCE_PREFIX_NAMES } from '../../../common/predefines'; 20import { ComponentTransformer } from '../../../ui-plugins/component-transformer'; 21 22/** 23 * AfterParse transform struct to component. 24 */ 25export const structToComponent: Plugins = { 26 name: 'struct-to-component', 27 parsed(this: PluginContext): arkts.EtsScript | undefined { 28 let script: arkts.EtsScript | undefined; 29 const contextPtr = arkts.arktsGlobal.compilerContext?.peer ?? this.getContextPtr(); 30 if (!!contextPtr) { 31 let program = arkts.getOrUpdateGlobalContext(contextPtr).program; 32 script = program.astNode; 33 const componentTransformer = new ComponentTransformer(); 34 const programVisitor = new ProgramVisitor({ 35 pluginName: structToComponent.name, 36 state: arkts.Es2pandaContextState.ES2PANDA_STATE_PARSED, 37 visitors: [componentTransformer], 38 skipPrefixNames: EXTERNAL_SOURCE_PREFIX_NAMES, 39 pluginContext: this, 40 }); 41 program = programVisitor.programVisitor(program); 42 script = program.astNode; 43 return script; 44 } 45 return script; 46 }, 47}; 48