UNPKG

mwoffliner

Version:
95 lines 4.27 kB
import MediaWiki from './../MediaWiki.js'; import { VisualEditorRenderer } from './visual-editor.renderer.js'; import { WikimediaDesktopRenderer } from './wikimedia-desktop.renderer.js'; import { WikimediaMobileRenderer } from './wikimedia-mobile.renderer.js'; import { RestApiRenderer } from './rest-api.renderer.js'; import * as logger from './../Logger.js'; export class RendererBuilder { async createRenderer(downloader, options) { const { renderType, renderName } = options; const [hasVisualEditorApi, hasWikimediaDesktopApi, hasWikimediaMobileApi, hasRestApi] = await Promise.all([ MediaWiki.hasVisualEditorApi(downloader), MediaWiki.hasWikimediaDesktopApi(downloader), MediaWiki.hasWikimediaMobileApi(downloader), MediaWiki.hasRestApi(downloader), ]); switch (renderType) { case 'desktop': if (hasWikimediaDesktopApi) { // Choose WikimediaDesktopRenderer if it's present, regardless of hasVisualEditorApi value return new WikimediaDesktopRenderer(); } else if (hasVisualEditorApi) { return new VisualEditorRenderer(); } else if (hasRestApi) { return new RestApiRenderer(); } else { logger.error('No available desktop renderer.'); process.exit(1); } case 'mobile': if (hasWikimediaMobileApi) { return new WikimediaMobileRenderer(); } logger.error('No available mobile renderer.'); process.exit(1); case 'auto': if (hasWikimediaDesktopApi) { // Choose WikimediaDesktopRenderer if it's present, regardless of hasVisualEditorApi value return new WikimediaDesktopRenderer(); } else if (hasVisualEditorApi) { return new VisualEditorRenderer(); } else if (hasRestApi) { return new RestApiRenderer(); } else if (hasWikimediaMobileApi) { return new WikimediaMobileRenderer(); } else { logger.error('No render available at all.'); process.exit(1); } case 'specific': // renderName argument is required for 'specific' mode return this.handleSpecificRender(renderName, hasVisualEditorApi, hasWikimediaDesktopApi, hasWikimediaMobileApi, hasRestApi); default: throw new Error(`Unknown render: ${renderType}`); } } handleSpecificRender(renderName, hasVisualEditorApi, hasWikimediaDesktopApi, hasWikimediaMobileApi, hasRestApi) { // renderName argument is required for 'specific' mode switch (renderName) { case 'WikimediaDesktop': if (hasWikimediaDesktopApi) { return new WikimediaDesktopRenderer(); } logger.error('Cannot create an instance of WikimediaDesktop renderer.'); process.exit(1); case 'VisualEditor': if (hasVisualEditorApi) { return new VisualEditorRenderer(); } logger.error('Cannot create an instance of VisualEditor renderer.'); process.exit(1); case 'WikimediaMobile': if (hasWikimediaMobileApi) { return new WikimediaMobileRenderer(); } logger.error('No available mobile renderer.'); process.exit(1); case 'RestApi': if (hasRestApi) { return new RestApiRenderer(); } logger.error('Cannot create an instance of RestApi renderer.'); process.exit(1); default: throw new Error(`Unknown renderName for specific mode: ${renderName}`); } } } //# sourceMappingURL=renderer.builder.js.map