UNPKG

@appshuttle.io/bell

Version:

Device and Emulator Library used in Shuttle

112 lines (98 loc) 4.03 kB
const AndroidManager = require('./Android/AndroidManager') const iOSManager = require('./iOS/iOSManager') const IOS_PLATFORM = 'IOS' const ANDROID_PLATFORM = 'ANDROID' const BOTH_PLATFORMS = 'BOTH' class SHBell { constructor (params) { this.params = params this.run = function () { this.params.platforms = [] if (this.params.ios && this.canRunPlatform(IOS_PLATFORM)) { this.params.platforms.push(IOS_PLATFORM) this.iosManager = new iOSManager(this.params.ios) } if (this.params.android && this.canRunPlatform(ANDROID_PLATFORM)) { this.params.platforms.push(ANDROID_PLATFORM) this.androidManager = new AndroidManager(this.params.android) } var runPromises = [] for (const platform of params.platforms) { runPromises.push(this.runPlatform(platform)) } return Promise.all(runPromises) } this.canRunPlatform = function (platform) { switch (platform) { case IOS_PLATFORM: if (!this.iosManager) { var tempiOSManager = new iOSManager({ buildPath: '.', appBundleId: '.', deviceStringID: '.' }) return tempiOSManager.checkIOSEnvironment() } else { return this.iosManager.checkIOSEnvironment() } break case ANDROID_PLATFORM: if (!this.androidManager) { var tempAndroidManager = new AndroidManager({ buildPath: '.', appBundleId: '.', deviceStringID: '.' }) return tempAndroidManager.checkAndroidEnvironment() } else { return this.androidManager.checkAndroidEnvironment() } break default: return } } this.runPlatform = function (platform) { switch (platform) { case IOS_PLATFORM: return this.iosManager.run() case ANDROID_PLATFORM: return this.androidManager.run() default: return; } } this.getAvailableRunTargets = function (platform) { const context = this return new Promise((resolve, reject) => { var targets = { iOS: undefined, Android: undefined } switch (platform) { case IOS_PLATFORM: if (context.canRunPlatform(IOS_PLATFORM)) { var tempiOSManager = new iOSManager({ buildPath: '.', appBundleId: '.', deviceStringID: '.' }) return tempiOSManager.getAvailableDevices().then(function (value) { targets.iOS = value resolve(targets) }).catch(function (error) { reject(error) }) } else { reject('Can\'t run selected platform: ' + platform) } break; case ANDROID_PLATFORM: //TODO: Get Android Available Devices resolve(targets) break; case BOTH_PLATFORMS: resolve(targets) break; } }) } } } module.exports = SHBell