/* * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import ts from 'typescript'; import { ELMTID, FINALIZE_CONSTRUCTION } from './pre_define'; import { IFileLog, LogInfo } from './utils'; class FileLog implements IFileLog { private _sourceFile: ts.SourceFile | undefined; private _errors: LogInfo[] = []; public get sourceFile(): ts.SourceFile | undefined { return this._sourceFile; } public set sourceFile(newValue: ts.SourceFile) { this._sourceFile = newValue; } public get errors(): LogInfo[] { return this._errors; } public set errors(newValue: LogInfo[]) { this._errors = newValue; } public cleanUp(): void { this._sourceFile = undefined; this._errors = []; } } function createParameterDeclaration(name: string): ts.ParameterDeclaration { let initializer: ts.Expression; if (name === ELMTID) { initializer = ts.factory.createPrefixUnaryExpression( ts.SyntaxKind.MinusToken, ts.factory.createNumericLiteral('1')); } return ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier(name), undefined, undefined, initializer); } function createFinalizeConstruction(freezeParamNode: ts.Expression): ts.Statement { const params: ts.Expression[] = []; if (freezeParamNode) { params.push(freezeParamNode); } return ts.factory.createExpressionStatement(ts.factory.createCallExpression( ts.factory.createPropertyAccessExpression( ts.factory.createThis(), ts.factory.createIdentifier(FINALIZE_CONSTRUCTION) ), undefined, params )); } function createImportNodeForModuleInfo(): ts.ImportDeclaration { return ts.factory.createImportDeclaration( undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports([ts.factory.createImportSpecifier( false, undefined, ts.factory.createIdentifier('__MODULE_NAME__') ), ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('__BUNDLE_NAME__'))]) ), ts.factory.createStringLiteral('ModuleInfo'), undefined ); } export default { FileLog: FileLog, createParameterDeclaration: createParameterDeclaration, createFinalizeConstruction: createFinalizeConstruction, createImportNodeForModuleInfo: createImportNodeForModuleInfo };