@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
76 lines • 2.39 kB
JavaScript
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
;