UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

76 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ScriptPlayer { ui; scriptsByKey = {}; onboardingStore; commandExecuter; constructor(options) { this.ui = options.ui; this.onboardingStore = options.onboardingStore; this.commandExecuter = options.commandExecuter; } async playScriptWithKey(key) { const script = this.scriptsByKey[key]; if (!script) { throw new Error(`Onboarding script '${key}' not found.`); } await this.playScript(script); } loadScript(key, script) { this.scriptsByKey[key] = script; } async playScript(script) { for (let item of script) { let possibleRedirect; switch (typeof item) { case 'string': if (this.isRedirect(item)) { possibleRedirect = item; } else { this.ui.renderLine(item); this.ui.renderLine(''); } break; case 'function': { const r = await item(this.buildCallbackOptions()); if (r) { possibleRedirect = r; } break; } default: possibleRedirect = item; } if (this.isRedirect(possibleRedirect)) { await this.redirectAndPlay(possibleRedirect); } } } buildCallbackOptions() { return { ui: this.ui, redirect: ScriptPlayer.redirect, onboardingStore: this.onboardingStore, executeCommand: this.commandExecuter, }; } async redirectAndPlay(possibleRedirect) { const destination = this.extractDestination(possibleRedirect); if (destination) { await this.playScriptWithKey(destination); } } static redirect(toScriptKey) { return `redirect->${toScriptKey}`; } extractDestination(possibleRedirect) { return possibleRedirect.split('->').pop(); } isRedirect(item) { return !!(item && item.substr(0, 10) === 'redirect->'); } } exports.default = ScriptPlayer; //# sourceMappingURL=ScriptPlayer.js.map