diff --git a/complete/completion_oafp.sh b/complete/completion_oafp.sh index 45a21220..40e2ee6f 100644 --- a/complete/completion_oafp.sh +++ b/complete/completion_oafp.sh @@ -108,6 +108,7 @@ F_in__in_snmp_insnmptimeout_=1 F_in__in_snmp_insnmpretries_=1 F_in__in_snmp_insnmpsec_=1 F_in__in_toml=0 +F_in__in_toon=0 F_in__in_xls=0 F_in__in_xls_inxlssheet_=1 F_in__in_xls_inxlsevalformulas_=1 @@ -227,6 +228,7 @@ F_out__out_template_templatedata_=1 F_out__out_template_templatetmpl_=1 F_out__out_text=0 F_out__out_toml=0 +F_out__out_toon=0 F_out__out_tree=0 F_out__out_xls=0 F_out__out_xls_xlsfile_=1 @@ -458,6 +460,7 @@ if [ $# -gt 0 ]; then if [ "${arg#insnmpretries=}" != "$arg" ]; then FFOUND=1; F_in__in_snmp_insnmpretries_=0; fi if [ "${arg#insnmpsec=}" != "$arg" ]; then FFOUND=1; F_in__in_snmp_insnmpsec_=0; fi if [ "$arg" = "in=toml" ]; then FFOUND=1; F_in__in_toml=1; F_in_=0; fi + if [ "$arg" = "in=toon" ]; then FFOUND=1; F_in__in_toon=1; F_in_=0; fi if [ "$arg" = "in=xls" ]; then FFOUND=1; F_in__in_xls=1; F_in_=0; fi if [ "${arg#inxlssheet=}" != "$arg" ]; then FFOUND=1; F_in__in_xls_inxlssheet_=0; fi if [ "${arg#inxlsevalformulas=}" != "$arg" ]; then FFOUND=1; F_in__in_xls_inxlsevalformulas_=0; fi @@ -577,6 +580,7 @@ if [ $# -gt 0 ]; then if [ "${arg#templatetmpl=}" != "$arg" ]; then FFOUND=1; F_out__out_template_templatetmpl_=0; fi if [ "$arg" = "out=text" ]; then FFOUND=1; F_out__out_text=1; F_out_=0; fi if [ "$arg" = "out=toml" ]; then FFOUND=1; F_out__out_toml=1; F_out_=0; fi + if [ "$arg" = "out=toon" ]; then FFOUND=1; F_out__out_toon=1; F_out_=0; fi if [ "$arg" = "out=tree" ]; then FFOUND=1; F_out__out_tree=1; F_out_=0; fi if [ "$arg" = "out=xls" ]; then FFOUND=1; F_out__out_xls=1; F_out_=0; fi if [ "${arg#xlsfile=}" != "$arg" ]; then FFOUND=1; F_out__out_xls_xlsfile_=0; fi @@ -809,6 +813,7 @@ if [ $F_in_ -eq 1 ]; then echo "in=sql One or more SQLs statements to AST -Abstract Syntax Tree- or beautified SQL" echo "in=snmp Retrieves data from a SNMP device" echo "in=toml TOML format" + echo "in=toon TOON format" echo "in=xls A XLSx compatible file -requires file=abc.xlsx-" echo "in=xml An XML format -auto-detected-" echo "in=yaml A YAML format -auto-detected-" @@ -1141,6 +1146,7 @@ if [ $F_out_ -eq 1 ]; then echo "out=template A Handlebars template format" echo "out=text A string text format" echo "out=toml A TOML format -arrays will have outkey=list-" + echo "out=toon A TOON format" echo "out=tree A tree-like format" echo "out=xls A XLSx output format" echo "out=xml An XML format" diff --git a/complete/completion_oafp.yaml b/complete/completion_oafp.yaml index 92a96603..bc499a09 100644 --- a/complete/completion_oafp.yaml +++ b/complete/completion_oafp.yaml @@ -238,6 +238,8 @@ complete: desc: JSON/SLON map with SNMPv3 security options - name: in=toml desc: TOML format + - name: in=toon + desc: TOON format - name: in=xls desc: A XLSx compatible file -requires file=abc.xlsx- opts: @@ -500,6 +502,8 @@ complete: desc: A string text format - name: out=toml desc: A TOML format -arrays will have outkey=list- + - name: out=toon + desc: A TOON format - name: out=tree desc: A tree-like format - name: out=xls diff --git a/js/oafp.js b/js/oafp.js index b9243ebd..7da943f6 100755 --- a/js/oafp.js +++ b/js/oafp.js @@ -1,9 +1,9 @@ var params=processExpr(" "); -// (author: Nuno Aguiar, version: 20251213, license: Apache 2.0, url: https://github.com/openaf/oafp) +// (author: Nuno Aguiar, version: 20260117, license: Apache 2.0, url: https://github.com/openaf/oafp) // --- const _oafphelp={'docs/EXAMPLES.md':af.fromBytes2String(io.gunzip(af.fromBase64("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"))), 'docs/TEMPLATE.md':af.fromBytes2String(io.gunzip(af.fromBase64("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"))), -'docs/USAGE.md':af.fromBytes2String(io.gunzip(af.fromBase64("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"))), +'docs/USAGE.md':af.fromBytes2String(io.gunzip(af.fromBase64("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"))), 'docs/FILTERS.md':af.fromBytes2String(io.gunzip(af.fromBase64("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")))}; var _params=processExpr(" "); const oafp=a=>{if(!isUnDef(a)&&!isDef(a.____ojob)){isDef($sec().procMap)&&(a=$sec().procMap(a));var T=b=>{for(var c=Object.keys(H),d=0;d{a.__origr=b;c.__ifrom&&(b=$from(isArray(b)?b:[b]).query(af.fromNLinq(c.__ifrom.trim())),delete c.__ifrom);if(c.__isql){var d=__;if(isString(a.sqlfilter))switch(a.sqlfilter.toLowerCase()){case "simple":d="nlinq";break;case "advanced":d="h2";break;default:d=__}if(isArray(b)&&b.length>0)if(isString(a.isqlfiltertables)){var f= @@ -54,22 +54,22 @@ a.flatmapsep):b,merge:b=>{if(toBoolean(a.merge)&&isArray(b)&&b.length>1){for(var ow.format.fromISODate(d);break}}else if(d.trim().match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/)){g[c]=new Date(d);break}d.trim().match(/^\d{4}-\d{2}-\d{2}$/)?g[c]=new Date(d):d.trim().match(/^\d{2}:\d{2}:\d{2}$/)?g[c]=new Date(d):d.trim().match(/^\d{2}:\d{2}$/)&&(g[c]=new Date(d))}}});return b},removenulls:b=>{toBoolean(a.removenulls)&&traverse(b,(c,d,f,g)=>{(isNull(d)||isUnDef(d))&&delete g[c]});return b},removeempty:b=>toBoolean(a.removeempty)&&isArray(b)?b.filter(c=>isDef(c)&&!isNull(c)):b,trim:b=> {toBoolean(a.trim)&&traverse(b,(c,d,f,g)=>{isString(d)&&(g[c]=d.trim())});return b},removedups:b=>{if(toBoolean(a.removedups)){if(isArray(b)){var c=new Set,d=[];b.forEach(f=>{var g=f;isObject(f)&&(g=sortMapKeys(g));g=stringify(g,__,!0);c.has(g)||(c.add(g),d.push(f))});return d}l(-1,"removedups is only supported for arrays")}return b},llmprompt:b=>{if(isString(a.llmprompt)){a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").isString().default(__); isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");var c=$llm(X(isDef(a.llmoptions)?a.llmoptions:$sec("system","envs").get(a.llmenv)));isDef(a.llmconversation)&&io.fileExists(a.llmconversation)&&c.getGPT().setConversation(io.readFileJSON(a.llmconversation));var d="json",f=!0;isString(a.in)&&(a.in=="md"&&(d="markdown",f=!1),a.in=="mdtable"&&(d="markdown table",f=!1),a.in=="hsperf"&&(d="java hsperf file"),a.in=="raw"&&(d="raw",f=!1));c=c.withContext(f? -stringify(b,__,!0):b,isDef(a.llmcontext)?a.llmcontext:`${d} input data`);if(isString(a.out)&&(a.out=="md"||a.out=="mdtable"||a.out=="raw"))return cprint(c.getGPT().getConversation()),b=c.prompt(a.llmprompt),isDef(a.llmconversation)&&io.writeFileJSON(a.llmconversation,c.getGPT().getConversation(),""),b;b=c.promptJSON(a.llmprompt);isDef(a.llmconversation)&&io.writeFileJSON(a.llmconversation,c.getGPT().getConversation(),"");return b}return b},splitlines:b=>toBoolean(a.splitlines)&&isString(b)?b.split(/\r?\n/): -b,regression:b=>{if(isString(a.regression)){ow.loadAI();var c=ow.ai.regression(),d=_$(a.regressionpath,"regressionpath").isString().default("@");let f=y(_$(a.regressionoptions,"regressionoptions").or().isString().isMap().default("{order:2,precision:5}"));d=$path(b,d);if(isArray(d)){if(isString(a.regressionx)){let e=$path(b,a.regressionx);d=d.map((h,k)=>[e[k],h])}else d=d.map((e,h)=>[h+1,e]);let g;switch(a.regression){case "exp":g=c.exponential(d,f);break;case "poly":g=c.polynomial(d,f);break;case "power":g= -c.power(d,f);break;case "log":g=c.logarithmic(d,f);break;default:g=c.linear(d,f)}return isDef(g)&&isDef(g.points)?(isString(a.regressionforecast)&&(b=$path(b,a.regressionforecast),isArray(b)?b.forEach(e=>{g.points.push(g.predict(e))}):l(-1,"Invalid array of x for regression forecast")),g.points.map(e=>({x:e[0],y:e[1]}))):g}l(-1,"Invalid data for regression analysis")}return b},normalize:b=>{if(isString(a.normalize)||isMap(a.normalize)){var c=y(a.normalize);if(isMap(c)){ow.loadAI();if(isMap(b))return ow.ai.normalize.withSchema(b, -c,!0);if(isArray(b))return b.map(d=>ow.ai.normalize.withSchema(d,c,!0))}else l(-1,"Invalid normalize schema")}else l(-1,"Invalid normalize schema")},denormalize:b=>{if(isString(a.denormalize)||isMap(a.denormalize)){var c=y(a.denormalize);if(isMap(c)){ow.loadAI();isUnDef(ow.ai.normalize.denormalizeWithSchema)&&l(-1,"This version of OpenAF does not support denormalizeWithSchema");if(isMap(b))return ow.ai.normalize.denormalizeWithSchema(b,c,!1);if(isArray(b))return b.map(d=>ow.ai.normalize.denormalizeWithSchema(d, -c,!1))}else l(-1,"Invalid denormalize schema")}else l(-1,"Invalid denormalize schema")},kmeans:b=>{isNumber(a.kmeans)||(a.kmeans=5);isArray(b)||l(-1,"For kmeans transform you need to provide an array as input");ow.loadAI();return ow.ai.cluster({type:"kmeans",numberOfClusters:Number(a.kmeans)}).classify(b)},getlist:b=>{if(isObject(b)&&(toBoolean(a.getlist)||isNumber(a.getlist))){var c=!1,d,f=isNumber(a.getlist)?a.getlist:1;traverse(b,(g,e,h,k)=>{!c&&isArray(e)&&(f--,f==0&&(c=!0),d=e)});return c?d: -b}},set:b=>{var c=y(a.set);!isMap(c)&&isUnDef(c.a)&&isUnDef(c.b)&&l(-1,"set.a path and set.b path are required.");isUnDef(pForEach)&&l(-1,"This version of OpenAF does not support the set transform");isString(c.a)||l(-1,"set.a path is not a string.");isString(c.b)||l(-1,"set.b path is not a string.");let d=$path(b,c.a);b=$path(b,c.b);isArray(d)||l(-1,"set.a path result is not an array.");isArray(b)||l(-1,"set.b path result is not an array.");let f;if(isString(a.setkeys)){ow.loadObj();var g=a.setkeys.split(",").map(e=> -e.trim());f=e=>stringify(isObject(e)?sortMapKeys(ow.obj.filterKeys(g,e),!0):e,__,"");c=e=>pForEach(e,f).reduce((h,k)=>h.concat(k),[])}else f=e=>stringify(isObject(e)?sortMapKeys(e,!0):e,__,""),c=e=>pForEach(e,f).reduce((h,k)=>h.concat(k),[]);switch(a.setop){case "union":let e=new Set(c(d));return d.concat(b.filter(m=>!e.has(f(m))));case "diffa":let h=new Set(c(b));return d.filter(m=>!h.has(f(m)));case "diffb":let k=new Set(c(d));return b.filter(m=>!k.has(f(m)));case "diffab":let q=new Set(c(d)),t= -new Set(c(b));return d.filter(m=>!t.has(f(m))).concat(b.filter(m=>!q.has(f(m))));case "diff":let v=new Set(c(d)),r=new Set(c(b));return d.map(m=>Object.assign({"*":r.has(f(m))?__:"a"},m)).concat(b.map(m=>Object.assign({"*":v.has(f(m))?__:"b"},m))).filter(m=>isDef(m["*"]));default:let u=new Set(c(b));return d.filter(m=>u.has(f(m)))}},forcearray:b=>isMap(b)?[b]:b,spacekeys:b=>{isMap(b)&&traverse(b,(c,d,f,g)=>{c.indexOf(" ")>=0&&(g[c.replace(/ /g,a.spacekeys||"_")]=d,delete g[c])});return b},numformat:b=> -{traverse(b,(c,d,f,g)=>{isTNumber(d)&&isString(a.numformat)&&(g[c]=$ft(a.numformat,d))});return b},xjs:b=>{if(isString(a.xjs)&&io.fileExists(a.xjs)){var c=io.readFileString(a.xjs);if(isString(c))return(new Function("args",c+"; return args"))(b)}return b},xpy:b=>isString(a.xpy)&&io.fileExists(a.xpy)?(b=$py(a.xpy,{args:b},["args"]),$pyStop(),b):b,xfn:b=>{if(isString(a.xfn))return(new Function("args","return "+a.xfn))(b)},xrjs:b=>{if(isString(a.xrjs)&&isArray(b)&&io.fileExists(a.xrjs)){var c=io.readFileString(a.xrjs); -if(isString(c))return c=new Function("args",c+"; return args"),pForEach(b,c)}return b},xrpy:b=>isString(a.xrpy)&&isArray(b)&&io.fileExists(a.xrpy)?($pyStart(),b=pForEach(b,c=>$py(a.xrpy,{args:c},["args"])),$pyStop(),b):b,xrfn:b=>{if(isString(a.xrfn)&&isArray(b)){let c=new Function("args","return "+a.xrfn);return pForEach(b,c)}return b},val2icon:b=>{var c=["\ud83d\udd73\ufe0f","\u2705","\u274c"],d=["\u254d","\u2713","\u2715"];if(isDef(a.val2icon)){switch(a.val2icon){case "simple":var f=d;break;default:case "default":f= -c}traverse(b,(g,e,h,k)=>{isUnDef(e)||isNull(e)?k[g]=f[0]:isBoolean(e)&&(k[g]=e?f[1]:f[2])})}return b},field2date:b=>{let c=a.field2date.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{if(c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isNumber(f)&&f>0)try{e[d]=isString(f)?ow.format.fromISODate(f):new Date(f)}catch(h){printErr(h)}});return b},field2si:b=>{let c=a.field2si.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+ -"."+d:d)>=0&&isNumber(f)&&(e[d]=ow.format.toAbbreviation(f))});return b},field2byte:b=>{let c=a.field2byte.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isNumber(f)&&(e[d]=ow.format.toBytesAbbreviation(f))});return b},field4map:b=>{let c=a.field4map.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isString(f)&&(e[d]=y(f))});return b},field2str:b=>{let c= -a.field2str.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&!isString(f)&&(e[d]=isMap(e[d])||isArray(e[d])?af.toSLON(e[d]):String(e[d]))});return b},allstrings:b=>{toBoolean(a.allstrings)&&traverse(b,(c,d,f,g)=>{isDef(d)&&!isString(d)&&(isNumber(d)?g[c]=String(d):isBoolean(d)?g[c]=String(d):isNull(d)&&(g[c]=""))});return b},oaf:b=>{if(isString(a.oaf)){let c;c=io.fileExists(a.oaf)?io.readFileString(a.oaf):a.oaf;if(isString(c))return(new Function("data", -c+";return data"))(b)}return b}},M=new Map([["?",(b,c)=>{b=Array.from(M.keys()).filter(d=>d!="?").sort();z(b,c)}],["pm",(b,c)=>{z(b,c)}],["key",(b,c)=>{z(b,c)}],["html",(b,c)=>{let d;c=!1;a.htmlopen=_$(toBoolean(a.htmlopen),"htmlopen").isBoolean().default(!0);a.htmlwait=_$(a.htmlwait,"htmlwait").isNumber().default(2500);a.htmlopen&&(d=io.createTempFile("oafp_",".html"));ow.loadTemplate();a.htmldark=_$(toBoolean(a.htmldark),"htmldark").isBoolean().default(!1);isString(b)?(b=ow.template.html.genStaticVersion(ow.template.parseMD2HTML(b, -!toBoolean(a.htmlpart),!toBoolean(a.htmlcompact),__,a.htmldark)),b=b.replace("",'')):(b=ow.template.html.parseMap(b,!0,a.htmldark),b='"+b.out+"");a.htmlopen&&(io.writeFileString(d,b),c=openInBrowser("file:///"+d.replace(/\\/g,"/")));c?sleep(a.htmlwait,!0):w(b)}],["ctable",(b,c)=>{z(b,c)}],["stable",(b,c)=>{z(b,c)}],["table",(b,c)=>{z(b,c)}],["json",(b, -c)=>{z(b,c)}],["yaml",(b,c)=>{z(b,c)}],["cyaml",(b,c)=>{z(b,c)}],["kyaml",(b,c)=>{z(b,c)}],["ckyaml",(b,c)=>{z(b,c)}],["lkyaml",(b,c)=>{z(b,c)}],["clkyaml",(b,c)=>{z(b,c)}],["cjson",(b,c)=>{z(b,c)}],["slon",(b,c)=>{z(b,c)}],["cslon",(b,c)=>{z(b,c)}],["ctree",(b,c)=>{z(b,c)}],["tree",(b,c)=>{z(b,c)}],["mtree",(b,c)=>{typeof __flags.TREE.mono=="undefined"&&(c.__format="ctree");z(b,c)}],["btree",(b,c)=>{typeof __flags.TREE.mono=="undefined"&&(c.__format="btree");z(b,c)}],["res",(b,c)=>{z(b,c)}],["key", +stringify(b,__,!0):b,isDef(a.llmcontext)?a.llmcontext:`${d} input data`);if(isString(a.out)&&(a.out=="md"||a.out=="mdtable"||a.out=="raw"))return b=c.prompt(a.llmprompt),isDef(a.llmconversation)&&io.writeFileJSON(a.llmconversation,c.getGPT().getConversation(),""),b;b=c.promptJSON(a.llmprompt);isDef(a.llmconversation)&&io.writeFileJSON(a.llmconversation,c.getGPT().getConversation(),"");return b}return b},splitlines:b=>toBoolean(a.splitlines)&&isString(b)?b.split(/\r?\n/):b,regression:b=>{if(isString(a.regression)){ow.loadAI(); +var c=ow.ai.regression(),d=_$(a.regressionpath,"regressionpath").isString().default("@");let f=y(_$(a.regressionoptions,"regressionoptions").or().isString().isMap().default("{order:2,precision:5}"));d=$path(b,d);if(isArray(d)){if(isString(a.regressionx)){let e=$path(b,a.regressionx);d=d.map((h,k)=>[e[k],h])}else d=d.map((e,h)=>[h+1,e]);let g;switch(a.regression){case "exp":g=c.exponential(d,f);break;case "poly":g=c.polynomial(d,f);break;case "power":g=c.power(d,f);break;case "log":g=c.logarithmic(d, +f);break;default:g=c.linear(d,f)}return isDef(g)&&isDef(g.points)?(isString(a.regressionforecast)&&(b=$path(b,a.regressionforecast),isArray(b)?b.forEach(e=>{g.points.push(g.predict(e))}):l(-1,"Invalid array of x for regression forecast")),g.points.map(e=>({x:e[0],y:e[1]}))):g}l(-1,"Invalid data for regression analysis")}return b},normalize:b=>{if(isString(a.normalize)||isMap(a.normalize)){var c=y(a.normalize);if(isMap(c)){ow.loadAI();if(isMap(b))return ow.ai.normalize.withSchema(b,c,!0);if(isArray(b))return b.map(d=> +ow.ai.normalize.withSchema(d,c,!0))}else l(-1,"Invalid normalize schema")}else l(-1,"Invalid normalize schema")},denormalize:b=>{if(isString(a.denormalize)||isMap(a.denormalize)){var c=y(a.denormalize);if(isMap(c)){ow.loadAI();isUnDef(ow.ai.normalize.denormalizeWithSchema)&&l(-1,"This version of OpenAF does not support denormalizeWithSchema");if(isMap(b))return ow.ai.normalize.denormalizeWithSchema(b,c,!1);if(isArray(b))return b.map(d=>ow.ai.normalize.denormalizeWithSchema(d,c,!1))}else l(-1,"Invalid denormalize schema")}else l(-1, +"Invalid denormalize schema")},kmeans:b=>{isNumber(a.kmeans)||(a.kmeans=5);isArray(b)||l(-1,"For kmeans transform you need to provide an array as input");ow.loadAI();return ow.ai.cluster({type:"kmeans",numberOfClusters:Number(a.kmeans)}).classify(b)},getlist:b=>{if(isObject(b)&&(toBoolean(a.getlist)||isNumber(a.getlist))){var c=!1,d,f=isNumber(a.getlist)?a.getlist:1;traverse(b,(g,e,h,k)=>{!c&&isArray(e)&&(f--,f==0&&(c=!0),d=e)});return c?d:b}},set:b=>{var c=y(a.set);!isMap(c)&&isUnDef(c.a)&&isUnDef(c.b)&& +l(-1,"set.a path and set.b path are required.");isUnDef(pForEach)&&l(-1,"This version of OpenAF does not support the set transform");isString(c.a)||l(-1,"set.a path is not a string.");isString(c.b)||l(-1,"set.b path is not a string.");let d=$path(b,c.a);b=$path(b,c.b);isArray(d)||l(-1,"set.a path result is not an array.");isArray(b)||l(-1,"set.b path result is not an array.");let f;if(isString(a.setkeys)){ow.loadObj();var g=a.setkeys.split(",").map(e=>e.trim());f=e=>stringify(isObject(e)?sortMapKeys(ow.obj.filterKeys(g, +e),!0):e,__,"");c=e=>pForEach(e,f).reduce((h,k)=>h.concat(k),[])}else f=e=>stringify(isObject(e)?sortMapKeys(e,!0):e,__,""),c=e=>pForEach(e,f).reduce((h,k)=>h.concat(k),[]);switch(a.setop){case "union":let e=new Set(c(d));return d.concat(b.filter(m=>!e.has(f(m))));case "diffa":let h=new Set(c(b));return d.filter(m=>!h.has(f(m)));case "diffb":let k=new Set(c(d));return b.filter(m=>!k.has(f(m)));case "diffab":let q=new Set(c(d)),t=new Set(c(b));return d.filter(m=>!t.has(f(m))).concat(b.filter(m=>!q.has(f(m)))); +case "diff":let v=new Set(c(d)),r=new Set(c(b));return d.map(m=>Object.assign({"*":r.has(f(m))?__:"a"},m)).concat(b.map(m=>Object.assign({"*":v.has(f(m))?__:"b"},m))).filter(m=>isDef(m["*"]));default:let u=new Set(c(b));return d.filter(m=>u.has(f(m)))}},forcearray:b=>isMap(b)?[b]:b,spacekeys:b=>{isMap(b)&&traverse(b,(c,d,f,g)=>{c.indexOf(" ")>=0&&(g[c.replace(/ /g,a.spacekeys||"_")]=d,delete g[c])});return b},numformat:b=>{traverse(b,(c,d,f,g)=>{isTNumber(d)&&isString(a.numformat)&&(g[c]=$ft(a.numformat, +d))});return b},xjs:b=>{if(isString(a.xjs)&&io.fileExists(a.xjs)){var c=io.readFileString(a.xjs);if(isString(c))return(new Function("args",c+"; return args"))(b)}return b},xpy:b=>isString(a.xpy)&&io.fileExists(a.xpy)?(b=$py(a.xpy,{args:b},["args"]),$pyStop(),b):b,xfn:b=>{if(isString(a.xfn))return(new Function("args","return "+a.xfn))(b)},xrjs:b=>{if(isString(a.xrjs)&&isArray(b)&&io.fileExists(a.xrjs)){var c=io.readFileString(a.xrjs);if(isString(c))return c=new Function("args",c+"; return args"),pForEach(b, +c)}return b},xrpy:b=>isString(a.xrpy)&&isArray(b)&&io.fileExists(a.xrpy)?($pyStart(),b=pForEach(b,c=>$py(a.xrpy,{args:c},["args"])),$pyStop(),b):b,xrfn:b=>{if(isString(a.xrfn)&&isArray(b)){let c=new Function("args","return "+a.xrfn);return pForEach(b,c)}return b},val2icon:b=>{var c=["\ud83d\udd73\ufe0f","\u2705","\u274c"],d=["\u254d","\u2713","\u2715"];if(isDef(a.val2icon)){switch(a.val2icon){case "simple":var f=d;break;default:case "default":f=c}traverse(b,(g,e,h,k)=>{isUnDef(e)||isNull(e)?k[g]= +f[0]:isBoolean(e)&&(k[g]=e?f[1]:f[2])})}return b},field2date:b=>{let c=a.field2date.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{if(c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isNumber(f)&&f>0)try{e[d]=isString(f)?ow.format.fromISODate(f):new Date(f)}catch(h){printErr(h)}});return b},field2si:b=>{let c=a.field2si.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isNumber(f)&&(e[d]=ow.format.toAbbreviation(f))}); +return b},field2byte:b=>{let c=a.field2byte.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isNumber(f)&&(e[d]=ow.format.toBytesAbbreviation(f))});return b},field4map:b=>{let c=a.field4map.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length>0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&isString(f)&&(e[d]=y(f))});return b},field2str:b=>{let c=a.field2str.split(",").map(d=>d.trim());traverse(b,(d,f,g,e)=>{c.indexOf(g.length> +0&&!g.startsWith("[")?g.substring(1)+"."+d:d)>=0&&!isString(f)&&(e[d]=isMap(e[d])||isArray(e[d])?af.toSLON(e[d]):String(e[d]))});return b},allstrings:b=>{toBoolean(a.allstrings)&&traverse(b,(c,d,f,g)=>{isDef(d)&&!isString(d)&&(isNumber(d)?g[c]=String(d):isBoolean(d)?g[c]=String(d):isNull(d)&&(g[c]=""))});return b},oaf:b=>{if(isString(a.oaf)){let c;c=io.fileExists(a.oaf)?io.readFileString(a.oaf):a.oaf;if(isString(c))return(new Function("data",c+";return data"))(b)}return b}},M=new Map([["?",(b,c)=> +{b=Array.from(M.keys()).filter(d=>d!="?").sort();z(b,c)}],["pm",(b,c)=>{z(b,c)}],["key",(b,c)=>{z(b,c)}],["html",(b,c)=>{let d;c=!1;a.htmlopen=_$(toBoolean(a.htmlopen),"htmlopen").isBoolean().default(!0);a.htmlwait=_$(a.htmlwait,"htmlwait").isNumber().default(2500);a.htmlopen&&(d=io.createTempFile("oafp_",".html"));ow.loadTemplate();a.htmldark=_$(toBoolean(a.htmldark),"htmldark").isBoolean().default(!1);isString(b)?(b=ow.template.html.genStaticVersion(ow.template.parseMD2HTML(b,!toBoolean(a.htmlpart), +!toBoolean(a.htmlcompact),__,a.htmldark)),b=b.replace("",'')):(b=ow.template.html.parseMap(b,!0,a.htmldark),b='"+b.out+"");a.htmlopen&&(io.writeFileString(d,b),c=openInBrowser("file:///"+d.replace(/\\/g,"/")));c?sleep(a.htmlwait,!0):w(b)}],["ctable",(b,c)=>{z(b,c)}],["stable",(b,c)=>{z(b,c)}],["table",(b,c)=>{z(b,c)}],["json",(b,c)=>{z(b,c)}],["yaml", +(b,c)=>{z(b,c)}],["cyaml",(b,c)=>{z(b,c)}],["kyaml",(b,c)=>{z(b,c)}],["ckyaml",(b,c)=>{z(b,c)}],["lkyaml",(b,c)=>{z(b,c)}],["clkyaml",(b,c)=>{z(b,c)}],["toon",(b,c)=>{z(b,c)}],["cjson",(b,c)=>{z(b,c)}],["slon",(b,c)=>{z(b,c)}],["cslon",(b,c)=>{z(b,c)}],["ctree",(b,c)=>{z(b,c)}],["tree",(b,c)=>{z(b,c)}],["mtree",(b,c)=>{typeof __flags.TREE.mono=="undefined"&&(c.__format="ctree");z(b,c)}],["btree",(b,c)=>{typeof __flags.TREE.mono=="undefined"&&(c.__format="btree");z(b,c)}],["res",(b,c)=>{z(b,c)}],["key", (b,c)=>{z(b,c)}],["text",(b,c)=>{z(b,c)}],["csv",(b,c)=>{z(b,c)}],["map",(b,c)=>{z(b,c)}],["md",(b,c)=>{z(toBoolean(a.mdtemplate)?$t(b):b,c)}],["log",(b,c)=>{if(isString(b)&&toBoolean(a.logprintall))w(b.replace(/\n$/,""));else if(c=b,isMap(b)&&(c=[b]),isArray(c)){isUnDef(a.logtheme)&&isDef(getEnv("OAFP_LOGTHEME"))&&(a.logtheme=getEnv("OAFP_LOGTHEME"));b=y(_$(a.logtheme,"logtheme").isString().default(""));b=merge({errorLevel:"RED,BOLD",warnLevel:"YELLOW",timestamp:"BOLD"},b);var d=ansiColor(b.timestamp, "").replace("\u001b[m",""),f=ansiColor(b.errorLevel,"").replace("\u001b[m",""),g=ansiColor(b.warnLevel,"").replace("\u001b[m","");c.forEach(e=>{if(isMap(e)){let h=isDef(e["@timestamp"])&&isString(e["@timestamp"])?e["@timestamp"]:__,k=isDef(e.level)?e.level:__;e=isDef(e.message)?e.message:__;let q="";isDef(k)&&(k.toLowerCase().indexOf("err")>=0&&(q=f),k.toLowerCase().indexOf("warn")>=0&&(q=g));isDef(h)&&h.length>24&&(h=h.substring(0,23)+"Z");(isDef(e)||isDef(h))&&w([d,h,isDef(k)?"\u001b[m | "+q+k: "","\u001b[m | ",q,e,"\u001b[m"].join(""))}})}}],["rawascii",(b,c)=>{isDef(a.rawasciistart)&&!isNumber(a.rawasciistart)&&l(-1,"rawasciistart must be a number");isDef(a.rawasciiend)&&!isNumber(a.rawasciiend)&&l(-1,"rawasciiend must be a number");if(isUnDef(a.rawasciitab)||!isNumber(a.rawasciitab))a.rawasciitab=8;var d=String(b).split("\n");b=d.length;var f=0;isNumber(a.rawasciistart)&&a.rawasciistart>0&&a.rawasciistart<=b&&(d=d.slice(a.rawasciistart-1),f=Number(a.rawasciistart-1));isNumber(a.rawasciiend)&& @@ -150,19 +150,20 @@ x();plugin("JMX");ow.loadJava();let d;isUnDef(a.jmxurl)?(ow.loadServer(),d=new o d.getAll()}n(f,c)}],["snmp",(b,c)=>{_$(a.insnmp,"insnmp").isString().$_();a.insnmpcommunity=_$(a.insnmpcommunity,"insnmpcommunity").isString().default("public");a.insnmptimeout=_$(a.insnmptimeout,"insnmptimeout").isNumber().default(__);a.insnmpretries=_$(a.insnmpretries,"insnmpretries").isNumber().default(__);a.insnmpversion=_$(a.insnmpversion,"insnmpversion").isString().default(__);a.insnmpsec=y(_$(a.insnmpsec,"insnmpsec").or().isString().isMap().default(__));x();plugin("SNMP");var d=new SNMP(a.insnmp, a.insnmpcommunity,a.insnmptimeout,a.insnmpversion,a.insnmpsec),f={};f=y(b,!0);if(isString(f))f=f.split("\n").map(e=>e.trim()).filter(e=>e.length>0),f.length==1?(f=d.get(b),isMap(f)&&(f=f[b])):f=pForEach(f,e=>{var h=d.get(e);isMap(h)&&(h=h[e]);return h});else{b=isMap(f);ow.loadObj();var g=e=>d.get(e)[e];if(b){let e=[];traverse(f,(h,k,q,t)=>{isString(k)&&e.push({o:t,k:h,v:k})});pForEach(e,h=>h.o[h.k]=g(h.v))}else f=pForEach(f,e=>g(e))}n(f,c)}],["ls",(b,c)=>{x();if(isString(b)){var d=toBoolean(a.lsposix); isDef(a.file)&&(b=a.file);var f=io.fileExists(b),g;f&&(g=io.fileInfo(b));if(f&&g.isFile)switch(isDef(a.lsext)?a.lsext:g.filename.replace(/^.*\./,"").toLowerCase()){case "tgz":case "gz":b=io.listFilesTAR(b,!0);break;case "tar":b=io.listFilesTAR(b);break;default:plugin("ZIP"),b=$m4a((new ZIP).list(b))}else b=toBoolean(a.lsrecursive)?listFilesRecursive(b,d):io.listFiles(b,d).files;n(b,c)}else l(-1,"ls is only supported with a string.")}],["mcp",(b,c)=>{x();isUnDef($mcp)&&l(-1,"mcp support not found."); -var d=y(b,!0);b=$mcp(d);b=b.initialize();toBoolean(a.inmcptoolslist)?(d=b.listTools(),isMap(d)&&isDef(d.tools)&&(d=d.tools)):toBoolean(a.inmcplistprompts)?(d=b.listPrompts(),isMap(d)&&isDef(d.prompts)&&(d=d.prompts)):(isUnDef(d.tool)&&l(-1,"For in=mcp a tool needs to be defined."),isUnDef(d.params)&&(d.params={}),d=b.callTool(d.tool,d.params));b.destroy();n(d,c)}],["toml",(b,c)=>{x();isUnDef(af.fromTOML)&&l(-1,"TOML support not found.");n(af.fromTOML(b),c)}],["slon",(b,c)=>{x();n(af.fromSLON(b),c)}], -["json",(b,c)=>{x();n(jsonParse(b,__,__,isString(b)),c)}]]),G={};isString(a.libs)&&(a.libs=a.libs.split(",").map(b=>b.trim()).filter(b=>b.length>0));isDef(__flags.OAFP)&&isArray(__flags.OAFP.libs)&&isArray(a.libs)?a.libs=__flags.OAFP.libs.concat(a.libs):a.libs=isDef(__flags.OAFP)?__flags.OAFP.libs:[];isArray(a.libs)&&a.libs.forEach(b=>{try{if(b.startsWith("@"))if(/^@([^\/]+)\/(.+)\.js$/.test(b)){var c=b.match(/^@([^\/]+)\/(.+)\.js$/),d=getOPackPath(c[1])+"/"+c[2]+".js";io.fileExists(d)?loadLib(d): -l(-1,"ERROR: Library '"+b+"' not found.")}else l(-1,"ERROR: Library '"+b+"' does not have the correct format (@oPack/library.js).");else{var f=require("oafp_"+b+".js");if(isDef(f.oafplib)){var g=f.oafplib(clone(a),n,z,{_runCmd2Bytes:C,_fromJSSLON:y,_msg:"(processing data...)",_showTmpMsg:x,_clearTmpMsg:L,_chartPathParse:V,_exit:l,_print:w,_o$o:z});isMap(g)&&(isArray(g.fileExtensions)&&g.fileExtensions.forEach(e=>{var h=e.ext;e=e.type;W.has(h)?a.debug&&printErr("WARN: Extension '"+h+"' already exists."): -W.set(h,e)}),isArray(g.fileExtensionsNoMem)&&g.fileExtensionsNoMem.forEach(e=>{e=e.ext;Z.has(e)?a.debug&&printErr("WARN: Extension '"+e+"' already exists."):Z.add(e)}),isArray(g.input)&&g.input.forEach(e=>{var h=e.type;e=e.fn;K.has(h)?a.debug&&printErr("WARN: Input type '"+h+"' already exists."):K.set(h,e)}),isArray(g.inputLine)&&g.inputLine.forEach(e=>{var h=e.type;e=e.fn;isUnDef(_inputLinesFns[h])?aa[h]=e:a.debug&&printErr("WARN: Input type '"+h+"' already exists.")}),isArray(g.transform)&&g.transform.forEach(e=> -{var h=e.type;e=e.fn;isUnDef(H[h])?H[h]=e:a.debug&&printErr("WARN: Transform '"+h+"' already exists.")}),isArray(g.output)&&g.output.forEach(e=>{var h=e.type;e=e.fn;M.has(h)?a.debug&&printErr("WARN: Output type '"+h+"' already exists."):M.set(h,e)}),isString(g.help)&&(G[b.toLowerCase()]=g.help))}else printErr("WARN: Library '"+b+"' does not have oafplib.")}}catch(e){printErr("WARN: Library '"+b+"' error: "+e)}});(a["-h"]==""||isString(a.help)&&a.help.length>0)&&I();a.format=_$(a.format,"format").isString().default(__); -__initializeCon();B=!String(java.lang.System.getProperty("os.name")).match(/Windows/);I=getEnv("OAFP_RESET");var da=getEnv("OAFP_CODESET");isDef(I)&&(B=toBoolean(I)?!1:!0);B&&isDef(__con)&&__con.getTerminal().settings.set("sane");if(isDef(a.secKey)){toBoolean(a.secEnv)&&(a.secRepo="system",a.secBucket="envs");a.secRepo=_$(a.secRepo,"secRepo").isString().default(getEnv("OAFP_SECREPO"));a.secBucket=_$(a.secBucket,"secBucket").isString().default(getEnv("OAFP_SECBUCKET"));a.secPass=_$(a.secPass,"secPass").isString().default(getEnv("OAFP_SECPASS")); -a.secMainPass=_$(a.secMainPass,"secMainPass").isString().default(getEnv("OAFP_SECMAINPASS"));a.secFile=_$(a.secFile,"secFile").isString().default(getEnv("OAFP_SECFILE"));let b=$sec(a.secRepo,a.secBucket,a.secPass,a.secMainPass,a.secFile).get(secKey);isDef(b)&&Object.keys(b).forEach(c=>a[c]=b[c])}var D={__format:a.format,__from:a.from,__ifrom:a.ifrom,__isql:a.isql,__sql:a.sql,__path:a.path,__opath:a.opath,__csv:a.csv,__pause:a.pause,__key:a.__key};isDef(a.inputcsv)&&(a.inputcsv=y(a.inputcsv));isDef(a.incsv)&& -(a.incsv=y(a.incsv));isDef(a.csv)&&(a.csv=y(a.csv));var ea=!1;if(a["-v"]==""||toBoolean(a.version))ea=!0,ca();if(a["-examples"]==""||isString(a.examples)&&a.examples.length>0)a.url="https://ojob.io/oafp-examples.yaml",a.in="yaml",isString(a.examples)&&a.examples.length>0?(a.examples.trim()!="?"&&(D.__format="template"),D.__path="data",a.templatepath="tmpl",a.examples.indexOf("::")>0?(B=a.examples.split("::").filter(b=>b.length>0),D.__sql=B.length==1?"select * where c like '"+B[0]+"'":"select * where c like '"+ -B[0]+"' and s like '"+B[1]+"'"):a.examples.trim()=="?"?(D.__path="data.sort(map(&concat(c,concat('::',s)),[]))",a.removedups=!0):D.__sql="select * where d like '%"+a.examples+"%' or s like '%"+a.examples+"%' or c like '%"+a.examples+"%'"):(D.__path="data[].{category:c,subCategory:s,description:d}",D.__from="sort(category,subCategory,description)",D.__format="ctable"),delete a["-examples"];var A="",N=!1;typeof a.outfile!=="undefined"&&("undefined"===typeof global.__oafp_streams&&(global.__oafp_streams= -{}),"undefined"===typeof global.__oafp_streams[a.outfile]&&toBoolean(a.outfileappend)&&(global.__oafp_streams[a.outfile]={s:io.writeFileStream(a.outfile,toBoolean(a.outfileappend))}));if(isString(a.chs)||isMap(a.chs))B=af.fromJSSLON(a.chs),isArray(B)||(B=[B]),B.forEach(b=>{isMap(b)?isString(b.name)&&isString(b.type)?$ch(b.name).create(b.type,b.options):l(-1,"ERROR: chs must have a name and a type."):l(-1,"ERROR: chs must be an object or array of objects with name and a type")});B=()=>{if(ea)A=ca(); -else if(a.jsonprefix=_$(a.jsonprefix,"jsonprefix").isString().default(__),a.jsondesc=_$(toBoolean(a.jsondesc),"jsondesc").isBoolean().default(!1),typeof a.insecure!=="undefined"&&toBoolean(a.insecure)&&ow.loadJava().setIgnoreSSLDomains(),isDef(a.file)){if(a.file.indexOf("::")<0&&!io.fileExists(a.file)&&l(-1,"ERROR: File not found: '"+a.file+"'"),!Z.has(a.type))if(a.type=="json"||isUnDef(a.type))if(a.jsondesc){var b=new Set;io.readStreamJSON(a.file,f=>{f=f.substring(2);isDef(a.jsonprefix)?f.startsWith(a.jsonprefix)&& -b.add(f):b.add(f);return!1});A=stringify(Array.from(b),__,"")}else if(isDef(a.jsonprefix)){var c=io.readStreamJSON(a.file,f=>f.substring(2).startsWith(a.jsonprefix));A=stringify(c,__,"")}else A=io.readFileString(a.file,da),toBoolean(a._shebang)&&(A=A.replace(/^#!.*\n/,""));else A=io.readFileString(a.file,da),toBoolean(a._shebang)&&(A=A.replace(/^#!.*\n/,""))}else if(a.jsondesc&&l(-1,"ERROR: jsondesc only available for file input."),a.jsonprefix&&l(-1,"ERROR: jsonprefix only available for file input."), -typeof a.cmd!=="undefined")A=C(a.cmd,!0);else if(isString(a.data))A=a.data;else if(isDef(a.url)){a.urlmethod=_$(a.urlmethod,"urlmethod").isString().default("GET");c=y(_$(a.urlparams).or().isString().isMap().default("{}"));let f;isDef(a.urldata)&&(f=y(a.urldata));switch(a.urlmethod.toLowerCase()){case "post":A=$rest(c).post(a.url,f);break;case "put":A=$rest(c).put(a.url,f);break;case "delete":A=$rest(c).delete(a.url,f);break;case "head":A=$rest(c).head(a.url,f);break;default:A=$rest(c).get(a.url)}isObject(A)&& -(A=stringify(A,__,""))}else if(a.input!="pm"){A=[];var d=P();ow.loadObj();d._sres=new ow.obj.syncArray;io.pipeLn(f=>{try{S(d,g=>{isDef(aa[a.type])?aa[a.type](T(f),merge(clone(D),{part:g}))&&d._sres.add(f):d._sres.add(f);return!1})}catch(g){printErr("ERROR: "+g)}d=Q(d);return!1});R(d);A=A.concat(d._sres.toArray());A=A.join("\n")}N||(isUnDef(a.type)&&(isDef(a.file)&&(c=a.file.substring(a.file.lastIndexOf(".")),W.has(c)&&(a.type=W.get(c))),isUnDef(a.type)&&(c=A.trim(),c.startsWith("{")||c.startsWith("[")? -a.type="json":c.startsWith("(")?a.type="slon":c.startsWith("<")?a.type="xml":isString(c)&&c.length>0?c.substring(0,c.indexOf("\n")).split(",").length>1?a.type="csv":c.substring(0,c.indexOf(": ")>0)&&(a.type="yaml"):l(-1,"Please provide the input type."))),isDef(a.type)&&K.has(a.type)?K.get(a.type)(A,D):(isString(a.type)&&printErr("WARN: "+a.type+" input type not supported. Using json."),K.get("json")(A,D)),delete a.__origr)};a.debug&&printErr("DEBUG: "+colorify(a));if(isNumber(a.loop))for(;;)toBoolean(a.loopcls)&& -isDef(a.outfile)&&isDef(global.__oafp_streams[a.outfile])&&(global.__oafp_streams[a.outfile].close(),global.__oafp_streams[a.outfile]=io.writeFileStream(a.outfile,toBoolean(a.outfileappend))),B(),sleep(a.loop*1E3,!0),isDef(J)&&(a=clone(J));else B();typeof global.__oafp_streams!=="undefined"&&Object.keys(global.__oafp_streams).forEach(b=>global.__oafp_streams[b].s.close())}};oafp(_params); +var d=y(b,!0);b=$mcp(d);b=b.initialize();toBoolean(a.inmcptoolslist)?(d=b.listTools(),isMap(d)&&isDef(d.tools)&&(d=d.tools)):toBoolean(a.inmcplistprompts)?(d=b.listPrompts(),isMap(d)&&isDef(d.prompts)&&(d=d.prompts)):(isUnDef(d.tool)&&l(-1,"For in=mcp a tool needs to be defined."),isUnDef(d.params)&&(d.params={}),d=b.callTool(d.tool,d.params));b.destroy();n(d,c)}],["toml",(b,c)=>{x();isUnDef(af.fromTOML)&&l(-1,"TOML support not found.");n(af.fromTOML(b),c)}],["toon",(b,c)=>{x();isUnDef(af.fromTOON)&& +l(-1,"TOON support not found.");n(af.fromTOON(b),c)}],["slon",(b,c)=>{x();n(af.fromSLON(b),c)}],["json",(b,c)=>{x();n(jsonParse(b,__,__,isString(b)),c)}]]),G={};isString(a.libs)&&(a.libs=a.libs.split(",").map(b=>b.trim()).filter(b=>b.length>0));isDef(__flags.OAFP)&&isArray(__flags.OAFP.libs)&&isArray(a.libs)?a.libs=__flags.OAFP.libs.concat(a.libs):a.libs=isDef(__flags.OAFP)?__flags.OAFP.libs:[];isArray(a.libs)&&a.libs.forEach(b=>{try{if(b.startsWith("@"))if(/^@([^\/]+)\/(.+)\.js$/.test(b)){var c= +b.match(/^@([^\/]+)\/(.+)\.js$/),d=getOPackPath(c[1])+"/"+c[2]+".js";io.fileExists(d)?loadLib(d):l(-1,"ERROR: Library '"+b+"' not found.")}else l(-1,"ERROR: Library '"+b+"' does not have the correct format (@oPack/library.js).");else{var f=require("oafp_"+b+".js");if(isDef(f.oafplib)){var g=f.oafplib(clone(a),n,z,{_runCmd2Bytes:C,_fromJSSLON:y,_msg:"(processing data...)",_showTmpMsg:x,_clearTmpMsg:L,_chartPathParse:V,_exit:l,_print:w,_o$o:z});isMap(g)&&(isArray(g.fileExtensions)&&g.fileExtensions.forEach(e=> +{var h=e.ext;e=e.type;W.has(h)?a.debug&&printErr("WARN: Extension '"+h+"' already exists."):W.set(h,e)}),isArray(g.fileExtensionsNoMem)&&g.fileExtensionsNoMem.forEach(e=>{e=e.ext;Z.has(e)?a.debug&&printErr("WARN: Extension '"+e+"' already exists."):Z.add(e)}),isArray(g.input)&&g.input.forEach(e=>{var h=e.type;e=e.fn;K.has(h)?a.debug&&printErr("WARN: Input type '"+h+"' already exists."):K.set(h,e)}),isArray(g.inputLine)&&g.inputLine.forEach(e=>{var h=e.type;e=e.fn;isUnDef(_inputLinesFns[h])?aa[h]= +e:a.debug&&printErr("WARN: Input type '"+h+"' already exists.")}),isArray(g.transform)&&g.transform.forEach(e=>{var h=e.type;e=e.fn;isUnDef(H[h])?H[h]=e:a.debug&&printErr("WARN: Transform '"+h+"' already exists.")}),isArray(g.output)&&g.output.forEach(e=>{var h=e.type;e=e.fn;M.has(h)?a.debug&&printErr("WARN: Output type '"+h+"' already exists."):M.set(h,e)}),isString(g.help)&&(G[b.toLowerCase()]=g.help))}else printErr("WARN: Library '"+b+"' does not have oafplib.")}}catch(e){printErr("WARN: Library '"+ +b+"' error: "+e)}});(a["-h"]==""||isString(a.help)&&a.help.length>0)&&I();a.format=_$(a.format,"format").isString().default(__);__initializeCon();B=!String(java.lang.System.getProperty("os.name")).match(/Windows/);I=getEnv("OAFP_RESET");var da=getEnv("OAFP_CODESET");isDef(I)&&(B=toBoolean(I)?!1:!0);B&&isDef(__con)&&__con.getTerminal().settings.set("sane");if(isDef(a.secKey)){toBoolean(a.secEnv)&&(a.secRepo="system",a.secBucket="envs");a.secRepo=_$(a.secRepo,"secRepo").isString().default(getEnv("OAFP_SECREPO")); +a.secBucket=_$(a.secBucket,"secBucket").isString().default(getEnv("OAFP_SECBUCKET"));a.secPass=_$(a.secPass,"secPass").isString().default(getEnv("OAFP_SECPASS"));a.secMainPass=_$(a.secMainPass,"secMainPass").isString().default(getEnv("OAFP_SECMAINPASS"));a.secFile=_$(a.secFile,"secFile").isString().default(getEnv("OAFP_SECFILE"));let b=$sec(a.secRepo,a.secBucket,a.secPass,a.secMainPass,a.secFile).get(secKey);isDef(b)&&Object.keys(b).forEach(c=>a[c]=b[c])}var D={__format:a.format,__from:a.from,__ifrom:a.ifrom, +__isql:a.isql,__sql:a.sql,__path:a.path,__opath:a.opath,__csv:a.csv,__pause:a.pause,__key:a.__key};isDef(a.inputcsv)&&(a.inputcsv=y(a.inputcsv));isDef(a.incsv)&&(a.incsv=y(a.incsv));isDef(a.csv)&&(a.csv=y(a.csv));var ea=!1;if(a["-v"]==""||toBoolean(a.version))ea=!0,ca();if(a["-examples"]==""||isString(a.examples)&&a.examples.length>0)a.url="https://ojob.io/oafp-examples.yaml",a.in="yaml",isString(a.examples)&&a.examples.length>0?(a.examples.trim()!="?"&&(D.__format="template"),D.__path="data",a.templatepath= +"tmpl",a.examples.indexOf("::")>0?(B=a.examples.split("::").filter(b=>b.length>0),D.__sql=B.length==1?"select * where c like '"+B[0]+"'":"select * where c like '"+B[0]+"' and s like '"+B[1]+"'"):a.examples.trim()=="?"?(D.__path="data.sort(map(&concat(c,concat('::',s)),[]))",a.removedups=!0):D.__sql="select * where d like '%"+a.examples+"%' or s like '%"+a.examples+"%' or c like '%"+a.examples+"%'"):(D.__path="data[].{category:c,subCategory:s,description:d}",D.__from="sort(category,subCategory,description)", +D.__format="ctable"),delete a["-examples"];var A="",N=!1;typeof a.outfile!=="undefined"&&("undefined"===typeof global.__oafp_streams&&(global.__oafp_streams={}),"undefined"===typeof global.__oafp_streams[a.outfile]&&toBoolean(a.outfileappend)&&(global.__oafp_streams[a.outfile]={s:io.writeFileStream(a.outfile,toBoolean(a.outfileappend))}));if(isString(a.chs)||isMap(a.chs))B=af.fromJSSLON(a.chs),isArray(B)||(B=[B]),B.forEach(b=>{isMap(b)?isString(b.name)&&isString(b.type)?$ch(b.name).create(b.type, +b.options):l(-1,"ERROR: chs must have a name and a type."):l(-1,"ERROR: chs must be an object or array of objects with name and a type")});B=()=>{if(ea)A=ca();else if(a.jsonprefix=_$(a.jsonprefix,"jsonprefix").isString().default(__),a.jsondesc=_$(toBoolean(a.jsondesc),"jsondesc").isBoolean().default(!1),typeof a.insecure!=="undefined"&&toBoolean(a.insecure)&&ow.loadJava().setIgnoreSSLDomains(),isDef(a.file)){if(a.file.indexOf("::")<0&&!io.fileExists(a.file)&&l(-1,"ERROR: File not found: '"+a.file+ +"'"),!Z.has(a.type))if(a.type=="json"||isUnDef(a.type))if(a.jsondesc){var b=new Set;io.readStreamJSON(a.file,f=>{f=f.substring(2);isDef(a.jsonprefix)?f.startsWith(a.jsonprefix)&&b.add(f):b.add(f);return!1});A=stringify(Array.from(b),__,"")}else if(isDef(a.jsonprefix)){var c=io.readStreamJSON(a.file,f=>f.substring(2).startsWith(a.jsonprefix));A=stringify(c,__,"")}else A=io.readFileString(a.file,da),toBoolean(a._shebang)&&(A=A.replace(/^#!.*\n/,""));else A=io.readFileString(a.file,da),toBoolean(a._shebang)&& +(A=A.replace(/^#!.*\n/,""))}else if(a.jsondesc&&l(-1,"ERROR: jsondesc only available for file input."),a.jsonprefix&&l(-1,"ERROR: jsonprefix only available for file input."),typeof a.cmd!=="undefined")A=C(a.cmd,!0);else if(isString(a.data))A=a.data;else if(isDef(a.url)){a.urlmethod=_$(a.urlmethod,"urlmethod").isString().default("GET");c=y(_$(a.urlparams).or().isString().isMap().default("{}"));let f;isDef(a.urldata)&&(f=y(a.urldata));switch(a.urlmethod.toLowerCase()){case "post":A=$rest(c).post(a.url, +f);break;case "put":A=$rest(c).put(a.url,f);break;case "delete":A=$rest(c).delete(a.url,f);break;case "head":A=$rest(c).head(a.url,f);break;default:A=$rest(c).get(a.url)}isObject(A)&&(A=stringify(A,__,""))}else if(a.input!="pm"){A=[];var d=P();ow.loadObj();d._sres=new ow.obj.syncArray;io.pipeLn(f=>{try{S(d,g=>{isDef(aa[a.type])?aa[a.type](T(f),merge(clone(D),{part:g}))&&d._sres.add(f):d._sres.add(f);return!1})}catch(g){printErr("ERROR: "+g)}d=Q(d);return!1});R(d);A=A.concat(d._sres.toArray());A=A.join("\n")}N|| +(isUnDef(a.type)&&(isDef(a.file)&&(c=a.file.substring(a.file.lastIndexOf(".")),W.has(c)&&(a.type=W.get(c))),isUnDef(a.type)&&(c=A.trim(),c.startsWith("{")||c.startsWith("[")?a.type="json":c.startsWith("(")?a.type="slon":c.startsWith("<")?a.type="xml":isString(c)&&c.length>0?c.substring(0,c.indexOf("\n")).split(",").length>1?a.type="csv":c.substring(0,c.indexOf(": ")>0)&&(a.type="yaml"):l(-1,"Please provide the input type."))),isDef(a.type)&&K.has(a.type)?K.get(a.type)(A,D):(isString(a.type)&&printErr("WARN: "+ +a.type+" input type not supported. Using json."),K.get("json")(A,D)),delete a.__origr)};a.debug&&printErr("DEBUG: "+colorify(a));if(isNumber(a.loop))for(;;)toBoolean(a.loopcls)&&isDef(a.outfile)&&isDef(global.__oafp_streams[a.outfile])&&(global.__oafp_streams[a.outfile].close(),global.__oafp_streams[a.outfile]=io.writeFileStream(a.outfile,toBoolean(a.outfileappend))),B(),sleep(a.loop*1E3,!0),isDef(J)&&(a=clone(J));else B();typeof global.__oafp_streams!=="undefined"&&Object.keys(global.__oafp_streams).forEach(b=> +global.__oafp_streams[b].s.close())}};oafp(_params); diff --git a/js/openaf.js b/js/openaf.js index 6994b147..03efb85a 100644 --- a/js/openaf.js +++ b/js/openaf.js @@ -4728,6 +4728,7 @@ var $from = function(a) { * at(arrayIndex)\ * to_numSpace(num, space), from_numSpace(num, space)\ * to_kyaml(obj), from_kyaml(str)\ + * to_toon(obj), from_toon(str)\ * to_base64(str), from_base64(str)\ * to_xml(obj), from_xml(str)\ * @@ -4932,6 +4933,14 @@ const $path = function(aObj, aPath, customFunctions) { _func: ar => ar[0].replace(new RegExp(ar[1], ar[2]), ar[3]), _signature: [ { types: [ jmespath.types.string ] }, { types: [ jmespath.types.string ] }, { types: [ jmespath.types.string ] }, { types: [ jmespath.types.string ] } ] }, + to_toon: { + _func: ar => af.toTOON(ar[0]), + _signature: [ { types: [ jmespath.types.any ] } ] + }, + from_toon: { + _func: ar => af.fromTOON(ar[0]), + _signature: [ { types: [ jmespath.types.string ] } ] + }, trim: { _func: ar => ar[0].trim(), _signature: [ { types: [ jmespath.types.string ] } ] @@ -9985,6 +9994,17 @@ const loadJSYAML = function() { loadCompiledLib("js-yaml_js", __, __, true) } +/** + * + * loadTOON() + * Loads the TOON image encoding/decoding library. + * + */ +const loadTOON = function() { + if (isUnDef(global.toon) || global.toon.decode || global.toon.encode) + global.toon = require(getOpenAFJar() + "::js/toon.js") +} + /** * * loadOAFP() @@ -10183,7 +10203,6 @@ AF.prototype.setInteractiveTerminal = () => isDef(__con) ? __con.getTerminal().s * */ AF.prototype.unsetInteractiveTerminal = () => isDef(__con) ? __con.getTerminal().settings.set("icanon echo") : __ - /** * * AF.toYAML(aJson, multiDoc, sanitize, shouldColor) : String @@ -10382,6 +10401,28 @@ AF.prototype.toKYAML = function(aJson, multiDoc, sanitize, shouldColor, perEntry return colored } +/** + * + * AF.toTOON(aObj) : String + * Tries to convert aObj into a TOON string. + * + */ +AF.prototype.toTOON = function(aObj) { + loadTOON() + return toon.encode(aObj) +} + +/** + * + * AF.fromTOON(aTOONStr) : Object + * Tries to parse aTOONStr into a javascript object. + * + */ +AF.prototype.fromTOON = function(aTOONStr) { + loadTOON() + return toon.decode(aTOONStr) +} + /** * * AF.fromYAML(aYaml) : Object @@ -14640,6 +14681,8 @@ const $output = function(aObj, args, aFunc, shouldReturn) { __ansiColorFlag = true __conConsole = true return fnP(af.toYAML(res, __, true, true)) + case "toon": + return fnP(af.toTOON(res)) case "table": if (isMap(res)) res = [res] if (isArray(res)) return fnP(printTable(res, __, __, __conAnsi, (__conAnsi || isDef(this.__codepage) ? "utf" : __))) diff --git a/js/owrap.ai.js b/js/owrap.ai.js index 24426981..53d83024 100644 --- a/js/owrap.ai.js +++ b/js/owrap.ai.js @@ -1978,6 +1978,20 @@ OpenWrap.ai.prototype.gpt.prototype.jsonPromptWithStats = function(aPrompt, aMod return { response: parsed, stats: this.getLastStats() } } +/** + * + * ow.ai.gpt.jsonPromptWithStatsRaw(aPrompt, aModel, aTemperature, tools) : Map + * Executes jsonPrompt and returns the raw response, parsed response, and statistics ({ response, raw, stats }). + * + */ +OpenWrap.ai.prototype.gpt.prototype.jsonPromptWithStatsRaw = function(aPrompt, aModel, aTemperature, tools) { + this.setInstructions("json") + + var out = this.model.prompt(aPrompt, aModel, aTemperature, true, tools) + var parsed = isString(out) ? jsonParse(out, __, __, true) : out + return { response: parsed, raw: out, stats: this.getLastStats() } +} + /** * * ow.ai.gpt.booleanPrompt(aPrompt, aModel, aTemperature, tools) : boolean @@ -2283,6 +2297,15 @@ global.$gpt = function(aModel) { promptJSONWithStats: (aPrompt, aModel, aTemperature, tools) => { return _g.jsonPromptWithStats(aPrompt, aModel, aTemperature, tools) }, + /** + * + * $gpt.promptJSONWithStatsRaw(aPrompt, aModel, aTemperature) + * Tries to prompt aPrompt (a string or an array of strings) and aModel (defaults to the one provided on the constructor) returning a map with the raw response, parsed JSON response, and statistics ({ response, raw, stats }). + * + */ + promptJSONWithStatsRaw: (aPrompt, aModel, aTemperature, tools) => { + return _g.jsonPromptWithStatsRaw(aPrompt, aModel, aTemperature, tools) + }, /** * * $gpt.iniPrompt(aPrompt, aRole, aModel, aTemperature) : String diff --git a/js/owrap.oJob.js b/js/owrap.oJob.js index 738471dd..52db2038 100755 --- a/js/owrap.oJob.js +++ b/js/owrap.oJob.js @@ -2878,7 +2878,7 @@ OpenWrap.oJob.prototype.addJob = function(aJobsCh, _aName, _jobDeps, _jobType, _ aJobTypeArgs.shell = _$(aJobTypeArgs.shell, "aJobTypeArgs.shell").isString().default("powershell"); } var m = parent.__langs[aJobTypeArgs.lang] - if (isDef(aJobTypeArgs.lang) && isUnDef(m) && ["javascript", "oaf", "js"].indexOf(aJobTypeArgs.lang) === -1) throw "Language '" + aJobTypeArgs.lang + "' not supported or defined for job '" + aName + "'." + if (isDef(aJobTypeArgs.lang) && isUnDef(m) && ["javascript", "oaf", "js", "python"].indexOf(aJobTypeArgs.lang) === -1) throw "Language '" + aJobTypeArgs.lang + "' not supported or defined for job '" + aName + "'." if (isDef(m) && isUnDef(aJobTypeArgs.returnRE) && isDef(m.returnRE)) aJobTypeArgs.returnRE = m.returnRE if (isDef(m) && isUnDef(aJobTypeArgs.returnFn) && isDef(m.returnFn)) aJobTypeArgs.returnFn = m.returnFn diff --git a/js/owrap.template.js b/js/owrap.template.js index 2859dc20..61f914f0 100644 --- a/js/owrap.template.js +++ b/js/owrap.template.js @@ -71,6 +71,7 @@ OpenWrap.template.prototype.__addHelpers = function(aHB) { * - $toYAML -- returns the YAML version of the parameter\ * - $toKYAML -- returns the KYAML version fo the parameter\ * - $toJSON -- returns the JSON version of the parameter\ + * - $toTOON -- returns the TOON version of the parameter\ * - $env -- returns the current environment variable identified by the parameter\ * - $escape -- returns an escaped version of the parameter\ * - $acolor -- returns an ansi color (first argument) escape sequence of the string parameter (second argument)\ @@ -151,6 +152,7 @@ OpenWrap.template.prototype.addOpenAFHelpers = function() { toYAML: af.toYAML, toKYAML: af.toKYAML, toJSON: stringify, + toTOON: s => af.toTOON(af), ptree: r => printTree(r), pmap: r => printMap(r), pbar: (v, m, min, size, indicator, space) => ow.format.string.progress(v, isMap(m) ? __ : m, isMap(min) ? __ : min, isMap(size) ? __ : size, isMap(indicator) ? __ : indicator, isMap(space) ? __ : space), diff --git a/js/repack.js b/js/repack.js index 5e17240b..2a076f57 100644 --- a/js/repack.js +++ b/js/repack.js @@ -304,7 +304,7 @@ if (createTmp) { "del %SRC% >nul 2>&1", //"if errorlevel 1 goto wait", "set OAF_JARGS=\"-Xshare:dump -XX:SharedArchiveFile=%DIR%.shared.oaf %OAF_JARGS%\"", - "\"%DIR%oaf.bat\" -c \"ow.loadOJob();loadOAFP();ow.loadSec();loadLodash();loadFuse();ow.loadFormat();ow.loadObj();ow.loadServer();loadUnderscore();ow.loadMetrics();loadJSYAML();ow.loadPython();ow.loadTemplate();loadHandlebars();__initializeCon();loadCompiledLib('jmespath_js');oafp({data:'()'});oJobRun({todo:[]})\"", + "\"%DIR%oaf.bat\" -c \"ow.loadOJob();loadOAFP();loadTOON();loadJSYAML();loadPy();ow.loadSec();loadLodash();loadFuse();ow.loadFormat();ow.loadObj();ow.loadServer();loadUnderscore();ow.loadMetrics();loadJSYAML();ow.loadPython();ow.loadTemplate();loadHandlebars();__initializeCon();loadCompiledLib('jmespath_js');oafp({data:'()'});oJobRun({todo:[]})\"", "del /F /Q \"%~f0\" >nul 2>&1" ].join("\r\n") io.writeFileString(_updBat, _bat) diff --git a/js/toon.js b/js/toon.js new file mode 100644 index 00000000..21557d79 --- /dev/null +++ b/js/toon.js @@ -0,0 +1,169 @@ +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(a){return $jscomp.createTemplateTagFirstArgWithRaw(a,a)};$jscomp.createTemplateTagFirstArgWithRaw=function(a,b){a.raw=b;Object.freeze&&(Object.freeze(a),Object.freeze(b));return a};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE? +$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+"$"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};$jscomp.toObject=function(a){if(a==null)throw new TypeError("No nullish arg");return Object(a)}; +$jscomp.assign=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.assign=="function"?Object.assign:function(a,b){a=$jscomp.toObject(a);for(var c=1;c0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a}; +$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()}; +$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(c){return{value:c,done:!0}},a,this.context_["return"]);this.context_["return"](a);return this.nextStep_()}; +$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()}; +$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()}; +$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a["return"],done:!0}}return{value:void 0,done:!0}}; +$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this["throw"]=function(b){return a.throw_(b)};this["return"]=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){var c=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(c,a.prototype);return c}; +$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a["throw"](d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))}; +$jscomp.initSymbol=function(){};$jscomp.polyfill("Symbol",function(a){if(a)return a;var b=function(f,g){this.$jscomp$symbol$id_=f;$jscomp.defineProperty(this,"description",{configurable:!0,writable:!0,value:g})};b.prototype.toString=function(){return this.$jscomp$symbol$id_};var c="jscomp_symbol_"+(Math.random()*1E9>>>0)+"_",d=0,e=function(f){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(f||"")+"_"+d++,f)};return e},"es6","es3"); +$jscomp.polyfill("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}});return a},"es6","es3");$jscomp.polyfill("Symbol.asyncIterator",function(a){return a?a:Symbol("Symbol.asyncIterator")},"es9","es3");$jscomp.iteratorPrototype=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}; +$jscomp.makeAsyncIterator=function(a){var b=a[Symbol.asyncIterator];return b!==void 0?b.call(a):new $jscomp.AsyncIteratorFromSyncWrapper($jscomp.makeIterator(a))}; +$jscomp.AsyncIteratorFromSyncWrapper=function(a){this[Symbol.asyncIterator]=function(){return this};this[Symbol.iterator]=function(){return a};this.next=function(b){return Promise.resolve(a.next(b))};this["throw"]=function(b){return new Promise(function(c,d){var e=a["throw"];e!==void 0?c(e.call(a,b)):(e=a["return"],e!==void 0&&e.call(a),d(new TypeError("no `throw` method")))})};a["return"]!==void 0&&(this["return"]=function(b){return Promise.resolve(a["return"](b))})}; +$jscomp.AsyncGeneratorWrapper$ActionEnum={YIELD_VALUE:0,YIELD_STAR:1,AWAIT_VALUE:2};$jscomp.AsyncGeneratorWrapper$ActionRecord=function(a,b){this.action=a;this.value=b};$jscomp.AsyncGeneratorWrapper$GeneratorMethod={NEXT:"next",THROW:"throw",RETURN:"return"};$jscomp.AsyncGeneratorWrapper$ExecutionFrame_=function(a,b,c,d){this.method=a;this.param=b;this.resolve=c;this.reject=d};$jscomp.AsyncGeneratorWrapper$ExecutionNode_=function(a,b){this.frame=a;this.next=b}; +$jscomp.AsyncGeneratorWrapper$ExecutionQueue_=function(){this.tail_=this.head_=null};$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.isEmpty=function(){return this.head_===null};$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.first=function(){if(this.head_)return this.head_.frame;throw Error("no frames in executionQueue");};$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.drop=function(){this.head_&&(this.head_=this.head_.next,this.head_||(this.tail_=null))}; +$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.enqueue=function(a){a=new $jscomp.AsyncGeneratorWrapper$ExecutionNode_(a,null);this.tail_?this.tail_.next=a:this.head_=a;this.tail_=a}; +$jscomp.AsyncGeneratorWrapper=function(a){this.generator_=a;this.delegate_=null;this.executionQueue_=new $jscomp.AsyncGeneratorWrapper$ExecutionQueue_;this[Symbol.asyncIterator]=function(){return this};var b=this;this.boundHandleDelegateResult_=function(c){b.handleDelegateResult_(c)};this.boundHandleDelegateError_=function(c){b.handleDelegateError_(c)};this.boundRejectAndClose_=function(c){b.rejectAndClose_(c)}}; +$jscomp.AsyncGeneratorWrapper.prototype.enqueueMethod_=function(a,b){var c=this;return new Promise(function(d,e){var f=c.executionQueue_.isEmpty();c.executionQueue_.enqueue(new $jscomp.AsyncGeneratorWrapper$ExecutionFrame_(a,b,d,e));f&&c.runFrame_()})};$jscomp.AsyncGeneratorWrapper.prototype.next=function(a){return this.enqueueMethod_($jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT,a)}; +$jscomp.AsyncGeneratorWrapper.prototype["return"]=function(a){return this.enqueueMethod_($jscomp.AsyncGeneratorWrapper$GeneratorMethod.RETURN,new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,a))};$jscomp.AsyncGeneratorWrapper.prototype["throw"]=function(a){return this.enqueueMethod_($jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW,a)}; +$jscomp.AsyncGeneratorWrapper.prototype.runFrame_=function(){if(!this.executionQueue_.isEmpty())try{this.delegate_?this.runDelegateFrame_():this.runGeneratorFrame_()}catch(a){this.rejectAndClose_(a)}}; +$jscomp.AsyncGeneratorWrapper.prototype.runGeneratorFrame_=function(){var a=this,b=this.executionQueue_.first();try{var c=this.generator_[b.method](b.param);if(c.value instanceof $jscomp.AsyncGeneratorWrapper$ActionRecord)switch(c.value.action){case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE:Promise.resolve(c.value.value).then(function(d){b.resolve({value:d,done:c.done});a.executionQueue_.drop();a.runFrame_()},function(d){b.reject(d);a.executionQueue_.drop();a.runFrame_()})["catch"](this.boundRejectAndClose_); +break;case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR:a.delegate_=$jscomp.makeAsyncIterator(c.value.value);b.method=$jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;b.param=void 0;a.runFrame_();break;case $jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE:Promise.resolve(c.value.value).then(function(d){b.method=$jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;b.param=d;a.runFrame_()},function(d){b.method=$jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;b.param=d;a.runFrame_()})["catch"](this.boundRejectAndClose_); +break;default:throw Error("Unrecognized AsyncGeneratorWrapper$ActionEnum");}else b.resolve(c),a.executionQueue_.drop(),a.runFrame_()}catch(d){b.reject(d),a.executionQueue_.drop(),a.runFrame_()}}; +$jscomp.AsyncGeneratorWrapper.prototype.runDelegateFrame_=function(){if(!this.delegate_)throw Error("no delegate to perform execution");var a=this.executionQueue_.first();if(a.method in this.delegate_)try{this.delegate_[a.method](a.param).then(this.boundHandleDelegateResult_,this.boundHandleDelegateError_)["catch"](this.boundRejectAndClose_)}catch(b){this.handleDelegateError_(b)}else this.delegate_=null,this.runFrame_()}; +$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateResult_=function(a){var b=this.executionQueue_.first();a.done===!0?(this.delegate_=null,b.method=$jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT,b.param=a.value):(b.resolve({value:a.value,done:!1}),this.executionQueue_.drop());this.runFrame_()}; +$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateError_=function(a){var b=this.executionQueue_.first();this.delegate_=null;b.method=$jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;b.param=a;this.runFrame_()}; +$jscomp.AsyncGeneratorWrapper.prototype.rejectAndClose_=function(a){this.executionQueue_.isEmpty()||(this.executionQueue_.first().reject(a),this.executionQueue_.drop());this.delegate_&&"return"in this.delegate_&&(this.delegate_["return"](void 0),this.delegate_=null);this.generator_["return"](void 0);this.runFrame_()}; +var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=function(a,b){for(var c in b)__defProp(a,c,{get:b[c],enumerable:!0})},__copyProps=function(a,b,c,d){if(b&&typeof b==="object"||typeof b==="function")for(var e=(0,$jscomp.makeIterator)(__getOwnPropNames(b)),f=e.next(),g={};!f.done;g={key$jscomp$13:void 0},f=e.next())g.key$jscomp$13=f.value,__hasOwnProp.call(a,g.key$jscomp$13)|| +g.key$jscomp$13===c||__defProp(a,g.key$jscomp$13,{get:function(h){return function(){return b[h.key$jscomp$13]}}(g),enumerable:!(d=__getOwnPropDesc(b,g.key$jscomp$13))||d.enumerable});return a},__toCommonJS=function(a){return __copyProps(__defProp({},"__esModule",{value:!0}),a)},index_exports={}; +__export(index_exports,{DEFAULT_DELIMITER:function(){return DEFAULT_DELIMITER},DELIMITERS:function(){return DELIMITERS},decode:function(){return decode},decodeFromLines:function(){return decodeFromLines},decodeStream:function(){return decodeStream},decodeStreamSync:function(){return decodeStreamSync},encode:function(){return encode},encodeLines:function(){return encodeLines}});module.exports=__toCommonJS(index_exports); +var LIST_ITEM_MARKER="-",LIST_ITEM_PREFIX="- ",COMMA=",",COLON=":",SPACE=" ",PIPE="|",DOT=".",OPEN_BRACKET="[",CLOSE_BRACKET="]",OPEN_BRACE="{",CLOSE_BRACE="}",NULL_LITERAL="null",TRUE_LITERAL="true",FALSE_LITERAL="false",BACKSLASH="\\",DOUBLE_QUOTE='"',NEWLINE="\n",CARRIAGE_RETURN="\r",TAB="\t",DELIMITERS={comma:COMMA,tab:TAB,pipe:PIPE},DEFAULT_DELIMITER=DELIMITERS.comma; +function escapeString(a){return a.replace(/\\/g,""+BACKSLASH+BACKSLASH).replace(/"/g,""+BACKSLASH+DOUBLE_QUOTE).replace(/\n/g,BACKSLASH+"n").replace(/\r/g,BACKSLASH+"r").replace(/\t/g,BACKSLASH+"t")} +function unescapeString(a){for(var b="",c=0;c=a.length)throw new SyntaxError("Invalid escape sequence: backslash at end of string");var d=a[c+1];if(d==="n"){b+=NEWLINE;c+=2;continue}if(d==="t"){b+=TAB;c+=2;continue}if(d==="r"){b+=CARRIAGE_RETURN;c+=2;continue}if(d===BACKSLASH){b+=BACKSLASH;c+=2;continue}if(d===DOUBLE_QUOTE){b+=DOUBLE_QUOTE;c+=2;continue}throw new SyntaxError("Invalid escape sequence: \\"+d);}b+=a[c];c++}return b} +function findClosingQuote(a,b){for(var c=b+1;c1&&a[0]==="0"&&a[1]!==".")return!1;a=Number(a);return!Number.isNaN(a)&&Number.isFinite(a)} +function parseArrayHeaderLine(a,b){var c=a.trimStart(),d=-1;if(c.startsWith(DOUBLE_QUOTE)){var e=findClosingQuote(c,0);if(e===-1||!c.slice(e+1).startsWith(OPEN_BRACKET))return;d=a.indexOf(OPEN_BRACKET,a.length-c.length+e+1)}else d=a.indexOf(OPEN_BRACKET);if(d!==-1){var f=a.indexOf(CLOSE_BRACKET,d);if(f!==-1){e=f+1;c=a.indexOf(OPEN_BRACE,f);if(c!==-1&&c0){var h=a.slice(0,d).trim();h= +h.startsWith(DOUBLE_QUOTE)?parseStringLiteral(h):h}g=a.slice(e+1).trim();d=a.slice(d+1,f);try{var m=parseBracketSegment(d,b)}catch(q){return}d=m;m=d.length;d=d.delimiter;var p;c!==-1&&c0)&&c.push(d.trim());return c}function mapRowValuesToPrimitives(a){return a.map(function(b){return parsePrimitiveToken(b)})} +function parsePrimitiveToken(a){a=a.trim();if(!a)return"";if(a.startsWith(DOUBLE_QUOTE))return parseStringLiteral(a);if(isBooleanOrNullLiteral(a)){if(a===TRUE_LITERAL)return!0;if(a===FALSE_LITERAL)return!1;if(a===NULL_LITERAL)return null}return isNumericLiteral(a)?(a=Number.parseFloat(a),Object.is(a,-0)?0:a):a} +function parseStringLiteral(a){a=a.trim();if(a.startsWith(DOUBLE_QUOTE)){var b=findClosingQuote(a,0);if(b===-1)throw new SyntaxError("Unterminated string: missing closing quote");if(b!==a.length-1)throw new SyntaxError("Unexpected characters after closing quote");return unescapeString(a.slice(1,b))}return a} +function parseUnquotedKey(a,b){for(var c=b;c=a.length||a[c]!==COLON)throw new SyntaxError("Missing colon after key");var d=a.slice(b,c).trim();c++;return{key:d,end:c}}function parseQuotedKey(a,b){var c=findClosingQuote(a,b);if(c===-1)throw new SyntaxError("Unterminated quoted key");var d=unescapeString(a.slice(b+1,c));c+=1;if(c>=a.length||a[c]!==COLON)throw new SyntaxError("Missing colon after key");c++;return{key:d,end:c}} +function parseKeyToken(a,b){var c=a[b]===DOUBLE_QUOTE;return Object.assign({},c?parseQuotedKey(a,b):parseUnquotedKey(a,b),{isQuoted:c})}function isArrayHeaderContent(a){return a.trim().startsWith(OPEN_BRACKET)&&findUnquotedChar(a,COLON)!==-1}function isKeyValueContent(a){return findUnquotedChar(a,COLON)!==-1}function createScanState(){return{lineNumber:0,blankLines:[]}} +function parseLineIncremental(a,b,c,d){b.lineNumber++;for(var e=b.lineNumber,f=0;f0&&f%c!==0)throw new SyntaxError("Line "+e+": Indentation must be exact multiple of "+c+", but found "+f+" spaces");}return{raw:a,indent:f,content:g, +depth:b,lineNumber:e}}a=computeDepthFromIndent(f,c);b.blankLines.push({lineNumber:e,indent:f,depth:a})}function parseLinesSync(a,b,c,d){var e,f,g,h;return $jscomp.generator.createGenerator(parseLinesSync,function(m){m.nextAddress==1&&(e=(0,$jscomp.makeIterator)(a),f=e.next());if(m.nextAddress!=3){if(f.done)return m.jumpTo(0);g=f.value;h=parseLineIncremental(g,d,b,c);return h===void 0?m.jumpTo(3):m.yield(h,3)}f=e.next();return m.jumpTo(2)})} +function parseLinesAsync(a,b,c,d){return new $jscomp.AsyncGeneratorWrapper(function f(){var g,h,m,p,q,n,u;return $jscomp.generator.createGenerator(f,function(k){switch(k.nextAddress){case 1:k.setCatchFinallyBlocks(2,3),p=(0,$jscomp.makeAsyncIterator)(a);case 5:return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,p.next()),8);case 8:h=k.yieldResult;if(h.done){k.jumpTo(3);break}q=h.value;n=parseLineIncremental(q,d,b,c);if(n===void 0){k.jumpTo(5); +break}return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,n),5);case 3:k.enterFinallyBlock();k.setFinallyBlock(11);if(!h||h.done||!(m=p["return"])){k.jumpTo(11);break}return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,m.call(p)),11);case 11:k.enterFinallyBlock(0,0,1);if(g)throw g.error;k.leaveFinallyBlock(12,1);break;case 12:k.leaveFinallyBlock(0);break;case 2:u=k.enterCatchBlock(), +g={error:u},k.jumpTo(3)}})}())}function computeDepthFromIndent(a,b){return Math.floor(a/b)}function assertExpectedCount(a,b,c,d){if(d.strict&&a!==b)throw new RangeError("Expected "+b+" "+c+", but got "+a);}function validateNoExtraListItems(a,b,c){if((a==null?void 0:a.depth)===b&&a.content.startsWith(LIST_ITEM_PREFIX))throw new RangeError("Expected "+c+" list array items, but found more");} +function validateNoExtraTabularRows(a,b,c){if((a==null?void 0:a.depth)===b&&!a.content.startsWith(LIST_ITEM_PREFIX)&&isDataRow(a.content,c.delimiter))throw new RangeError("Expected "+c.length+" tabular rows, but found more");}function validateNoBlankLinesInRange(a,b,c,d,e){if(d&&(c=c.find(function(f){return f.lineNumber>a&&f.lineNumber0?c["return"](a.buffer[0]):a.done?c["return"]():c.yield(a.generator.next(),2);b=c.yieldResult;if(b.done)return a.done=!0,c["return"]();a.buffer.push(b.value);return c["return"](b.value)})}; +StreamingLineCursor.prototype.next=function(){var a=this,b;return(0,$jscomp.asyncExecutePromiseGeneratorProgram)(function(c){if(c.nextAddress==1)return c.yield(a.peek(),2);b=c.yieldResult;b!==void 0&&(a.buffer.shift(),a.lastLine=b);return c["return"](b)})};StreamingLineCursor.prototype.advance=function(){var a=this;return(0,$jscomp.asyncExecutePromiseGeneratorProgram)(function(b){return b.yield(a.next(),0)})};StreamingLineCursor.prototype.current=function(){return this.lastLine}; +StreamingLineCursor.prototype.atEnd=function(){var a=this;return(0,$jscomp.asyncExecutePromiseGeneratorProgram)(function(b){return b.nextAddress==1?b.yield(a.peek(),2):b["return"](b.yieldResult===void 0)})};StreamingLineCursor.prototype.peekSync=function(){if(this.buffer.length>0)return this.buffer[0];if(!this.done){var a=this.generator.next();if(a.done)this.done=!0;else return this.buffer.push(a.value),a.value}}; +StreamingLineCursor.prototype.nextSync=function(){var a=this.peekSync();a!==void 0&&(this.buffer.shift(),this.lastLine=a);return a};StreamingLineCursor.prototype.advanceSync=function(){this.nextSync()};StreamingLineCursor.prototype.atEndSync=function(){return this.peekSync()===void 0}; +function decodeStreamSync$1(a,b){var c,d,e,f,g,h,m,p,q,n,u;return $jscomp.generator.createGenerator(decodeStreamSync$1,function(k){switch(k.nextAddress){case 1:if(((c=b)==null?void 0:c.expandPaths)!==void 0)throw Error("expandPaths is not supported in streaming decode");h={indent:(f=(d=b)==null?void 0:d.indent)!=null?f:2,strict:(g=(e=b)==null?void 0:e.strict)!=null?g:!0};m=createScanState();p=new StreamingLineCursor(parseLinesSync(a,h.indent,h.strict,m),m);if(q=p.peekSync()){k.jumpTo(2);break}return k.yield({type:"startObject"}, +3);case 3:return k.yield({type:"endObject"},4);case 4:return k["return"]();case 2:if(!isArrayHeaderContent(q.content)){k.jumpTo(5);break}n=parseArrayHeaderLine(q.content,DEFAULT_DELIMITER);if(!n){k.jumpTo(5);break}p.advanceSync();return k.yieldAll(decodeArrayFromHeaderSync(n.header,n.inlineValues,p,0,h),7);case 7:return k["return"]();case 5:p.advanceSync();if(!p.atEndSync()||isKeyValueLineSync(q)){k.jumpTo(8);break}return k.yield({type:"primitive",value:parsePrimitiveToken(q.content.trim())},9);case 9:return k["return"](); +case 8:return k.yield({type:"startObject"},10);case 10:return k.yieldAll(decodeKeyValueSync(q.content,p,0,h),12);case 12:if(p.atEndSync()){k.jumpTo(14);break}u=p.peekSync();if(!u||u.depth!==0){k.jumpTo(14);break}p.advanceSync();return k.yieldAll(decodeKeyValueSync(u.content,p,0,h),12);case 14:return k.yield({type:"endObject"},0)}})} +function decodeKeyValueSync(a,b,c,d){var e,f,g,h,m,p,q;return $jscomp.generator.createGenerator(decodeKeyValueSync,function(n){switch(n.nextAddress){case 1:e=parseArrayHeaderLine(a,DEFAULT_DELIMITER);if(!e||!e.header.key){n.jumpTo(2);break}return n.yield({type:"key",key:e.header.key},3);case 3:return n.yieldAll(decodeArrayFromHeaderSync(e.header,e.inlineValues,b,c,d),4);case 4:return n["return"]();case 2:return f=parseKeyToken(a,0),g=f.key,h=f.isQuoted,m=a.indexOf(COLON,g.length),p=m>=0?a.slice(m+ +1).trim():"",n.yield(h?{type:"key",key:g,wasQuoted:!0}:{type:"key",key:g},5);case 5:if(p){n.jumpTo(6);break}q=b.peekSync();if(!(q&&q.depth>c)){n.jumpTo(7);break}return n.yield({type:"startObject"},8);case 8:return n.yieldAll(decodeObjectFieldsSync(b,c+1,d),9);case 9:return n.yield({type:"endObject"},10);case 10:return n["return"]();case 7:return n.yield({type:"startObject"},11);case 11:return n.yield({type:"endObject"},12);case 12:return n["return"]();case 6:return n.yield({type:"primitive",value:parsePrimitiveToken(p)}, +0)}})}function decodeObjectFieldsSync(a,b,c){var d,e;return $jscomp.generator.createGenerator(decodeObjectFieldsSync,function(f){if(a.atEndSync())return f.jumpTo(0);e=a.peekSync();if(!e||e.depth=b&&(d=e.depth);if(e.depth!==d)return f.jumpTo(0);a.advanceSync();return f.yieldAll(decodeKeyValueSync(e.content,a,d,c),1)})} +function decodeArrayFromHeaderSync(a,b,c,d,e){return $jscomp.generator.createGenerator(decodeArrayFromHeaderSync,function(f){switch(f.nextAddress){case 1:return f.yield({type:"startArray",length:a.length},2);case 2:if(!b){f.jumpTo(3);break}return f.yieldAll(decodeInlinePrimitiveArraySync(a,b,e),4);case 4:return f.yield({type:"endArray"},5);case 5:return f["return"]();case 3:if(!(a.fields&&a.fields.length>0)){f.jumpTo(6);break}return f.yieldAll(decodeTabularArraySync(a,c,d,e),7);case 7:return f.yield({type:"endArray"}, +8);case 8:return f["return"]();case 6:return f.yieldAll(decodeListArraySync(a,c,d,e),9);case 9:return f.yield({type:"endArray"},0)}})} +function decodeInlinePrimitiveArraySync(a,b,c){var d,e,f,g;return $jscomp.generator.createGenerator(decodeInlinePrimitiveArraySync,function(h){if(h.nextAddress==1){if(!b.trim())return assertExpectedCount(0,a.length,"inline array items",c),h["return"]();d=mapRowValuesToPrimitives(parseDelimitedValues(b,a.delimiter));assertExpectedCount(d.length,a.length,"inline array items",c);e=(0,$jscomp.makeIterator)(d);f=e.next()}if(h.nextAddress!=3){if(f.done)return h.jumpTo(0);g=f.value;return h.yield({type:"primitive", +value:g},3)}f=e.next();return h.jumpTo(2)})} +function decodeTabularArraySync(a,b,c,d){var e,f,g,h,m,p,q;return $jscomp.generator.createGenerator(decodeTabularArraySync,function(n){switch(n.nextAddress){case 1:e=c+1,f=0;case 2:if(b.atEndSync()||!(f=0?a.slice(q+1).trim():"",k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,p?{type:"key",key:m,wasQuoted:!0}:{type:"key",key:m}),5);case 5:if(n){k.jumpTo(6); +break}return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,b.peek()),7);case 7:u=k.yieldResult;if(!(u&&u.depth>c)){k.jumpTo(8);break}return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"startObject"}),9);case 9:return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR,decodeObjectFieldsAsync(b,c+1,d)),10);case 10:return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, +{type:"endObject"}),11);case 11:return k["return"](new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,void 0));case 8:return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"startObject"}),12);case 12:return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"endObject"}),13);case 13:return k["return"](new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, +void 0));case 6:return k.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"primitive",value:parsePrimitiveToken(n)}),0)}})}())} +function decodeObjectFieldsAsync(a,b,c){return new $jscomp.AsyncGeneratorWrapper(function e(){var f,g;return $jscomp.generator.createGenerator(e,function(h){switch(h.nextAddress){case 1:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,a.atEnd()),5);case 5:if(h.yieldResult){h.jumpTo(0);break}return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,a.peek()),6);case 6:g=h.yieldResult; +if(!g||g.depth=b&&(f=g.depth);if(g.depth!==f){h.jumpTo(0);break}return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,a.advance()),8);case 8:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR,decodeKeyValueAsync(g.content,a,f,c)),1)}})}())} +function decodeArrayFromHeaderAsync(a,b,c,d,e){return new $jscomp.AsyncGeneratorWrapper(function g(){return $jscomp.generator.createGenerator(g,function(h){switch(h.nextAddress){case 1:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"startArray",length:a.length}),2);case 2:if(!b){h.jumpTo(3);break}return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR,decodeInlinePrimitiveArraySync(a, +b,e)),4);case 4:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"endArray"}),5);case 5:return h["return"](new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,void 0));case 3:if(!(a.fields&&a.fields.length>0)){h.jumpTo(6);break}return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR,decodeTabularArrayAsync(a,c,d,e)),7);case 7:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, +{type:"endArray"}),8);case 8:return h["return"](new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,void 0));case 6:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR,decodeListArrayAsync(a,c,d,e)),9);case 9:return h.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE,{type:"endArray"}),0)}})}())} +function decodeTabularArrayAsync(a,b,c,d){return new $jscomp.AsyncGeneratorWrapper(function f(){var g,h,m,p,q,n,u,k;return $jscomp.generator.createGenerator(f,function(t){switch(t.nextAddress){case 1:g=c+1,h=0;case 2:return t.yield(new $jscomp.AsyncGeneratorWrapper$ActionRecord($jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE,b.atEnd()),5);case 5:if(t.yieldResult||!(h=Number.MIN_SAFE_INTEGER&&a<=Number.MAX_SAFE_INTEGER?Number(a):a.toString();if(a instanceof Date)return a.toISOString();if(Array.isArray(a))return a.map(normalizeValue); +if(a instanceof Set)return Array.from(a).map(normalizeValue);if(a instanceof Map)return Object.fromEntries(Array.from(a,function(d){var e=(0,$jscomp.makeIterator)(d);d=e.next().value;e=e.next().value;return[String(d),normalizeValue(e)]}));if(isPlainObject(a)){b={};for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=normalizeValue(a[c]));return b}return null}function isJsonPrimitive(a){return a===null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"} +function isJsonArray(a){return Array.isArray(a)}function isJsonObject(a){return a!==null&&typeof a==="object"&&!Array.isArray(a)}function isEmptyObject(a){return Object.keys(a).length===0}function isPlainObject(a){if(a===null||typeof a!=="object")return!1;a=Object.getPrototypeOf(a);return a===null||a===Object.prototype}function isArrayOfPrimitives(a){return a.length===0||a.every(function(b){return isJsonPrimitive(b)})} +function isArrayOfArrays(a){return a.length===0||a.every(function(b){return isJsonArray(b)})}function isArrayOfObjects(a){return a.length===0||a.every(function(b){return isJsonObject(b)})}function isValidUnquotedKey(a){return/^[A-Z_][\w.]*$/i.test(a)}function isIdentifierSegment(a){return/^[A-Z_]\w*$/i.test(a)} +function isSafeUnquoted(a,b){b=b===void 0?DEFAULT_DELIMITER:b;return!a||a!==a.trim()||isBooleanOrNullLiteral(a)||isNumericLike(a)||a.includes(":")||a.includes('"')||a.includes("\\")||/[[\]{}]/.test(a)||/[\n\r\t]/.test(a)||a.includes(b)||a.startsWith(LIST_ITEM_MARKER)?!1:!0}function isNumericLike(a){return/^-?\d+(?:\.\d+)?(?:e[+-]?\d+)?$/i.test(a)||/^0\d+$/.test(a)}var QUOTED_KEY_MARKER=Symbol("quotedKey"); +function expandPathsSafe(a,b){if(Array.isArray(a))return a.map(function(p){return expandPathsSafe(p,b)});if(isJsonObject(a)){for(var c={},d=a[QUOTED_KEY_MARKER],e=(0,$jscomp.makeIterator)(Object.entries(a)),f=e.next();!f.done;f=e.next()){var g=(0,$jscomp.makeIterator)(f.value);f=g.next().value;g=g.next().value;var h=void 0,m=(h=d)==null?void 0:h.has(f);if(f.includes(DOT)&&!m&&(h=f.split(DOT),h.every(function(p){return isIdentifierSegment(p)}))){insertPathSafe(c,h,expandPathsSafe(g,b),b);continue}g= +expandPathsSafe(g,b);if(f in c)if(h=c[f],canMerge(h,g))mergeObjects(h,g,b);else{if(b)throw new TypeError('Path expansion conflict at key "'+f+'": cannot merge '+typeof h+" with "+typeof g);c[f]=g}else c[f]=g}return c}return a} +function insertPathSafe(a,b,c,d){for(var e=0;e0&&Object.defineProperty(d.obj,QUOTED_KEY_MARKER,{value:d.quotedKeys,enumerable:!1,writable:!1,configurable:!1});c.length===0&&(a.root=d.obj);break;case "startArray":d=[];if(c.length!==0)if(e=c[c.length-1],e.type==="object"){if(e.currentKey===void 0)throw Error("Array startArray event without preceding key");e.obj[e.currentKey]=d;e.currentKey=void 0}else e.type==="array"&&e.arr.push(d);c.push({type:"array",arr:d});break;case "endArray":if(c.length===0)throw Error("Unexpected endArray event"); +d=c.pop();if(d.type!=="array")throw Error("Mismatched endArray event");c.length===0&&(a.root=d.arr);break;case "key":if(c.length===0)throw Error("Key event outside of object context");c=c[c.length-1];if(c.type!=="object")throw Error("Key event in non-object context");c.currentKey=b.key;b.wasQuoted&&c.quotedKeys.add(b.key);break;case "primitive":if(c.length===0)a.root=b.value;else if(c=c[c.length-1],c.type==="object"){if(c.currentKey===void 0)throw Error("Primitive event without preceding key in object"); +c.obj[c.currentKey]=b.value;c.currentKey=void 0}else c.type==="array"&&c.arr.push(b.value)}}function finalizeState(a){if(a.stack.length!==0)throw Error("Incomplete event stream: stack not empty at end");if(a.root===void 0)throw Error("No root value built from events");return a.root} +function tryFoldKeyChain(a,b,c,d,e,f,g){if(d.keyFolding==="safe"&&isJsonObject(b)&&(d=collectSingleKeyChain(a,b,g!=null?g:d.flattenDepth),a=d.segments,b=d.tail,d=d.leafValue,!(a.length<2||!a.every(function(h){return isIdentifierSegment(h)})||(g=buildFoldedKey(a),f=f?""+f+DOT+g:g,c.includes(g)||e&&e.has(f)))))return{foldedKey:g,remainder:b,leafValue:d,segmentCount:a.length}} +function collectSingleKeyChain(a,b,c){for(a=[a];a.length0)){k.jumpTo(8);break}return k.yieldAll(encodeObjectLines(Object.fromEntries(h),b+1,c),8);case 8:return k["return"]();case 4:p=encodeKey(f);if(isJsonPrimitive(g))return k.yield(indentedListItem(b,p+": "+encodePrimitive(g,c.delimiter),c.indent),11);if(isJsonArray(g))return g.length===0?k.yield(indentedListItem(b, +""+p+formatHeader(0,{delimiter:c.delimiter}),c.indent),11):isArrayOfPrimitives(g)?k.yield(indentedListItem(b,""+p+encodeInlineArrayLine(g,c.delimiter),c.indent),11):k.yield(indentedListItem(b,""+p+formatHeader(g.length,{delimiter:c.delimiter}),c.indent),22);if(!isJsonObject(g)){k.jumpTo(11);break}return k.yield(indentedListItem(b,p+":",c.indent),15);case 15:if(isEmptyObject(g)){k.jumpTo(11);break}return k.yieldAll(encodeObjectLines(g,b+2,c),11);case 22:q=(0,$jscomp.makeIterator)(g),n=q.next();case 23:if(n.done){k.jumpTo(11); +break}u=n.value;return k.yieldAll(encodeListItemValueLines(u,b+2,c),24);case 24:n=q.next();k.jumpTo(23);break;case 11:if(h.length>0)return k.yieldAll(encodeObjectLines(Object.fromEntries(h),b+1,c),0);k.jumpTo(0)}})} +function encodeListItemValueLines(a,b,c){var d,e,f;return $jscomp.generator.createGenerator(encodeListItemValueLines,function(g){switch(g.nextAddress){case 1:if(isJsonPrimitive(a))return g.yield(indentedListItem(b,encodePrimitive(a,c.delimiter),c.indent),0);if(isJsonArray(a))return isArrayOfPrimitives(a)?g.yield(indentedListItem(b,encodeInlineArrayLine(a,c.delimiter),c.indent),0):g.yield(indentedListItem(b,formatHeader(a.length,{delimiter:c.delimiter}),c.indent),10);if(!isJsonObject(a)){g.jumpTo(0); +break}return g.yieldAll(encodeObjectAsListItemLines(a,b,c),0);case 10:d=(0,$jscomp.makeIterator)(a),e=d.next();case 11:if(e.done){g.jumpTo(0);break}f=e.value;return g.yieldAll(encodeListItemValueLines(f,b+1,c),12);case 12:e=d.next(),g.jumpTo(11)}})}function indentedLine(a,b,c){return" ".repeat(c*a)+b}function indentedListItem(a,b,c){return indentedLine(a,LIST_ITEM_PREFIX+b,c)} +function applyReplacer(a,b){var c=b("",a,[]);return c===void 0?transformChildren(a,b,[]):transformChildren(normalizeValue(c),b,[])}function transformChildren(a,b,c){return isJsonObject(a)?transformObject(a,b,c):isJsonArray(a)?transformArray(a,b,c):a} +function transformObject(a,b,c){var d={};a=(0,$jscomp.makeIterator)(Object.entries(a));for(var e=a.next();!e.done;e=a.next()){var f=(0,$jscomp.makeIterator)(e.value);e=f.next().value;var g=f.next().value;f=[].concat((0,$jscomp.arrayFromIterable)(c),[e]);g=b(e,g,f);g!==void 0&&(d[e]=transformChildren(normalizeValue(g),b,f))}return d} +function transformArray(a,b,c){for(var d=[],e=0;e