* 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 path from 'path';
import { projectConfig } from '../main';
import {
resourceFileName,
isDynamic
} from './process_ui_syntax';
import {
PAGE_PATH,
INTEGRATED_HSP,
TRUE,
FALSE,
RESOURCE_NAME_BUNDLE,
RESOURCE_NAME_MODULE
} from './pre_define';
import constantDefine from './constant_define';
export function routerOrNavPathWrite(context: ts.TransformationContext, keyName: string, projectPath: string,
projectRootPath: string = ''): ts.PropertyAssignment {
return context.factory.createPropertyAssignment(
context.factory.createIdentifier(keyName),
context.factory.createStringLiteral(
projectConfig.compileHar ? keyName === PAGE_PATH ? byteCodeHarPagePath(projectRootPath) : '' :
pathMessage(projectPath))
);
}
function byteCodeHarPagePath(projectRootPath: string): string {
return projectConfig.byteCodeHar ? pathMessage(projectRootPath) : constantDefine.HAR_DEFAULT_PAGE_PATH;
}
function pathMessage(projectPathName: string): string {
return path.relative(projectPathName || '', resourceFileName).replace(/\\/g, '/').replace(/\.ets$/, '');
}
export function integratedHspType(): string {
return projectConfig.integratedHsp ? TRUE : projectConfig.compileHar ? constantDefine.HAR_DEFAULT_INTEGRATED_HSP_TYPE : FALSE;
}
export function routerModuleType(context: ts.TransformationContext): ts.PropertyAssignment {
return context.factory.createPropertyAssignment(
context.factory.createIdentifier(constantDefine.MODULE_TYPE),
context.factory.createStringLiteral(moduleType())
);
}
function moduleType(): string {
if (projectConfig.compileHar) {
return projectConfig.byteCodeHar ? constantDefine.BYTE_CODE_HAR : constantDefine.CLOSED_SOURCE_HAR;
} else if (projectConfig.compileShared) {
return projectConfig.integratedHsp ? INTEGRATED_HSP : constantDefine.SHARED_HSP;
}
return constantDefine.FOLLOW_WITH_HAP;
}
export function routerBundleOrModule(context: ts.TransformationContext, type: string): ts.PropertyAssignment {
const typeKey: string = type === RESOURCE_NAME_BUNDLE ? RESOURCE_NAME_BUNDLE : RESOURCE_NAME_MODULE;
if (isDynamic()) {
return context.factory.createPropertyAssignment(
context.factory.createIdentifier(typeKey),
context.factory.createIdentifier(type === RESOURCE_NAME_BUNDLE ? (projectConfig.allowEmptyBundleName ? '' : '__BUNDLE_NAME__') : '__MODULE_NAME__')
);
}
return context.factory.createPropertyAssignment(
context.factory.createIdentifier(typeKey),
context.factory.createStringLiteral(type === RESOURCE_NAME_BUNDLE ? (projectConfig.allowEmptyBundleName ? '' : (projectConfig.bundleName || '')) :
(projectConfig.moduleName || ''))
);
}