Spaces:
Sleeping
Sleeping
File size: 1,386 Bytes
7aec436 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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);
}
|