13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ciimport type {IOptions} from '../configs/IOptions';
173af6ab5fSopenharmony_ciimport type {Node, TransformerFactory} from 'typescript';
183af6ab5fSopenharmony_ci
193af6ab5fSopenharmony_ciexport interface TransformPlugin {
203af6ab5fSopenharmony_ci  name: string;
213af6ab5fSopenharmony_ci  order: number
223af6ab5fSopenharmony_ci  createTransformerFactory: (option: IOptions) => TransformerFactory<Node>;
233af6ab5fSopenharmony_ci}
243af6ab5fSopenharmony_ci
253af6ab5fSopenharmony_ci// The order of identifier obfuscation should be as early as possible, because create or update nodes will cause the NodeFlags of the parent node 
263af6ab5fSopenharmony_ci// on the ast to be cleared. NodeFlags will affect the binding result. The following scenarios have been found to affect the obfuscation function:
273af6ab5fSopenharmony_ci// Problem scenario: A export name in a namespace scope within a declaration file
283af6ab5fSopenharmony_ci// ```
293af6ab5fSopenharmony_ci// declare namespace ns {
303af6ab5fSopenharmony_ci//   class A { // -keep-global-name A is invalid.
313af6ab5fSopenharmony_ci//       temp: number;
323af6ab5fSopenharmony_ci//   }
333af6ab5fSopenharmony_ci// }
343af6ab5fSopenharmony_ci// ```
353af6ab5fSopenharmony_ci// Problem description: because the property temp is obfuscated, a node update occurs, causing -keep-global-name A to be invalid.
363af6ab5fSopenharmony_ciexport enum TransformerOrder {
373af6ab5fSopenharmony_ci  SHORTHAND_PROPERTY_TRANSFORMER,
383af6ab5fSopenharmony_ci  RENAME_IDENTIFIER_TRANSFORMER,
393af6ab5fSopenharmony_ci  VIRTUAL_CONSTRUCTOR_TRANSFORMER,
403af6ab5fSopenharmony_ci  DISABLE_CONSOLE_TRANSFORMER,
413af6ab5fSopenharmony_ci  RENAME_PROPERTIES_TRANSFORMER,
423af6ab5fSopenharmony_ci  RENAME_FILE_NAME_TRANSFORMER
433af6ab5fSopenharmony_ci}