import { DynamicValue, Listener, Unsubscriber } from "./DynamicValue" import { parse as parseXML, X2jOptionsOptional } from "fast-xml-parser" /** * A [[DynamicValue]] reducer returning the input XML parsed * * @example * ```javascript * new XMLValue(new TextValue("test")).onValue(parsed=> * parsed.root === "test" //true * ) * ``` */ export class XMLValue implements DynamicValue { __variant__="XMLValue" input:DynamicValue name:string|void options:X2jOptionsOptional constructor(input:DynamicValue,options?: X2jOptionsOptional,name?:string){ this.input = input this.name = name this.options = options } onValue(listener:Listener):Unsubscriber{ const unsubscribe = this.input.onValue(val=> { listener(parseXML(val,this.options)) }) return ()=> { unsubscribe() } } async getValue(){ return parseXML(await this.input.getValue(),this.options) } static fromJSON(json: { input: any, options?: X2jOptionsOptional,name?:string }){ return new XMLValue(DynamicValue.fromJSON(json.input),json.options,json.name) } }