* Copyright (c) 2025 Huawei Technologies Co., Ltd.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import mustache from 'mustache';
const TEMPLATE = `
import {
AnyJSBundleProvider,
MetroJSBundleProvider,
RNApp,
RNOHErrorDialog,
ResourceJSBundleProvider,
RNOHCoreContext
} from '@rnoh/react-native-openharmony';
import { getRNOHPackages } from '../PackageProvider';
@Entry
@Component
struct Index {
@StorageLink('RNOHCoreContext') private rnohCoreContext: RNOHCoreContext | undefined = undefined
build() {
Column() {
if (this.rnohCoreContext) {
if (this.rnohCoreContext?.isDebugModeEnabled) {
RNOHErrorDialog({ ctx: this.rnohCoreContext })
}
RNApp({
rnInstanceConfig: {
name: "{{name}}",
createRNPackages: getRNOHPackages,
fontResourceByFontFamily: {},
enableDebugger: this.rnohCoreContext?.isDebugModeEnabled,
},
appKey: "{{name}}",
jsBundleProvider: this.rnohCoreContext?.isDebugModeEnabled ?
new AnyJSBundleProvider([
new MetroJSBundleProvider(),
new ResourceJSBundleProvider(this.rnohCoreContext.uiAbilityContext.resourceManager, 'hermes_bundle.hbc'),
]) :
/**
* NOTE: The HBC format is recommended for Hermes in a production environment. HBC provides better performance and loading times.
*/
new ResourceJSBundleProvider(this.rnohCoreContext.uiAbilityContext.resourceManager, 'hermes_bundle.hbc'),
})
}
}
.height('100%')
.width('100%')
}
}
`;
export class EntryIndexTemplate {
constructor(private name: string) {}
build(): string {
return mustache.render(TEMPLATE.trimStart(), {
name: this.name,
});
}
}