@jplorg/jpl
Version:
JPL interpreter
69 lines (68 loc) • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _library = require("../../../library");
var _default = exports.default = {
/** { optional: boolean } */
async op(runtime, input, target, params, scope, next) {
const vt = runtime.unwrapValue(target);
const tt = runtime.type(vt);
switch (tt) {
case 'object':
{
const items = Object.entries(vt);
const outputs = await runtime.muxAsync([items], async item => runtime.muxAsync([await next(item[1] ?? null)], output => {
if (output === undefined) return item;
return [item[0], output];
}));
return runtime.muxAsync([(0, _library.applyCombinations)(items, outputs)], results => {
if (items === results) return target;
return runtime.alterValue(target, () => Object.fromEntries(results));
});
}
case 'array':
{
const items = vt;
const outputs = await runtime.muxAsync([items], async item => runtime.muxAsync([await next(item ?? null)], output => {
if (output === undefined) return item;
return output;
}));
return runtime.muxAsync([(0, _library.applyCombinations)(items, outputs)], results => {
if (items === results) return target;
return runtime.alterValue(target, () => results);
});
}
case 'string':
{
const items = [...vt];
const outputs = await runtime.muxAsync([items], async item => runtime.muxAsync([await next(item)], output => {
if (output === undefined) return item;
const r = runtime.unwrapValue(output);
const tr = runtime.type(r);
switch (tr) {
case 'null':
case 'string':
return r ?? ' ';
default:
}
throw new _library.JPLTypeError('cannot assign %s (%*<100v) to string (%*<100v)', tr, r, vt);
}));
return runtime.muxAsync([(0, _library.applyCombinations)(items, outputs)], results => {
if (items === results) return target;
return runtime.alterValue(target, () => results.join(''));
});
}
default:
}
if (params.optional) return [undefined];
throw new _library.JPLTypeError('cannot iterate over %s (%*<100v) (assignment)', tt, vt);
},
/** { optional: boolean } */
map(runtime, params) {
return {
optional: runtime.assertType(params.optional, 'boolean')
};
}
};