Spaces:
Sleeping
Sleeping
const isPromise = (v) => !!v && typeof v.then === 'function'; | |
const jsValueToScratchValue = (v) => { | |
if (typeof v === 'boolean' || typeof v === 'number' || typeof v === 'string') { | |
return v; | |
} | |
return '' + v; | |
}; | |
class UnsafeCloudBehaviorsProvider { | |
enable () { | |
} | |
setEvalValue (value) { | |
this.manager.setVariable(this, 'β eval output', jsValueToScratchValue(value)); | |
} | |
setEvalError (error) { | |
console.error('Error evaluating β eval', error); | |
this.manager.setVariable(this, 'β eval error', jsValueToScratchValue(error)); | |
} | |
evaluateAsync (js) { | |
try { | |
const value = eval(js); | |
if (isPromise(value)) { | |
value | |
.then((v) => this.setEvalValue(v)) | |
.catch((e) => this.setEvalError(e)); | |
} else { | |
this.setEvalValue(value) | |
} | |
} catch (e) { | |
this.setEvalError(e); | |
} | |
} | |
handleUpdateVariable (name, value) { | |
if (name === 'β eval') { | |
this.evaluateAsync(value); | |
} | |
} | |
} | |
export default function ({ scaffolding }) { | |
const provider = new UnsafeCloudBehaviorsProvider(); | |
scaffolding.addCloudProvider(provider); | |
scaffolding.addCloudProviderOverride('β eval', provider); | |
scaffolding.addCloudProviderOverride('β eval output', provider); | |
scaffolding.addCloudProviderOverride('β eval error', provider); | |
} | |