diff --git a/dev-packages/application-manager/src/generator/frontend-generator.ts b/dev-packages/application-manager/src/generator/frontend-generator.ts index 63382ff599ff3..dc0e0e12fc50e 100644 --- a/dev-packages/application-manager/src/generator/frontend-generator.ts +++ b/dev-packages/application-manager/src/generator/frontend-generator.ts @@ -15,6 +15,7 @@ ********************************************************************************/ import { AbstractGenerator } from './abstract-generator'; +import { existsSync, readFileSync } from 'fs'; export class FrontendGenerator extends AbstractGenerator { @@ -27,6 +28,20 @@ export class FrontendGenerator extends AbstractGenerator { } } + protected compileIndexPreload(frontendModules: Map): string { + const template = this.pck.props.generator.config.preloadTemplate; + if (!template) { + return ''; + } + + // Support path to html file + if (existsSync(template)) { + return readFileSync(template).toString(); + } + + return template; + } + protected compileIndexHtml(frontendModules: Map): string { return ` @@ -36,7 +51,7 @@ export class FrontendGenerator extends AbstractGenerator { -
+
${this.compileIndexPreload(frontendModules)}
`; diff --git a/dev-packages/application-package/src/application-props.ts b/dev-packages/application-package/src/application-props.ts index 5502e1bc486c5..0d0539dfd12de 100644 --- a/dev-packages/application-package/src/application-props.ts +++ b/dev-packages/application-package/src/application-props.ts @@ -57,6 +57,10 @@ export interface ApplicationProps extends NpmRegistryProps { */ readonly backend: Readonly<{ config: BackendApplicationConfig }>; + /** + * Generator specific properties. + */ + readonly generator: Readonly<{ config: GeneratorConfig }>; } export namespace ApplicationProps { @@ -72,6 +76,11 @@ export namespace ApplicationProps { config: { applicationName: 'Theia' } + }, + generator: { + config: { + preloadTemplate: '' + } } }; @@ -115,3 +124,15 @@ export interface BackendApplicationConfig extends ApplicationConfig { readonly startupTimeout?: number; } + +/** + * Configuration for the generator. + */ +export interface GeneratorConfig { + + /** + * Template to use for extra preload content markup (file path or HTML) + */ + readonly preloadTemplate: string; + +}