| import { OptionCodename } from '../../options/optionsPrototype'; |
| import Script, { ConcreteScript } from '../scripts/Script'; |
| |
| export default abstract class Feature { |
| /** |
| * Internal codename used for the feature. |
| * |
| * It will be used for i18n translations, shown in log messages, etc. |
| */ |
| abstract readonly codename: string; |
| |
| /** |
| * Options which control the behavior of this feature. |
| */ |
| abstract readonly relatedOptions: OptionCodename[]; |
| |
| /** |
| * Uninitialized scripts which are associated with the feature. |
| */ |
| abstract readonly scripts: ConcreteScript[]; |
| |
| private initializedScripts: Script[]; |
| |
| public getScripts() { |
| if (this.initializedScripts === undefined) { |
| this.initializedScripts = this.scripts.map((script) => new script()); |
| } |
| return this.initializedScripts; |
| } |
| } |