From 155adf5a1683c5afe0f42c908986d8374f88550d Mon Sep 17 00:00:00 2001 From: nmaguiar Date: Thu, 5 Mar 2026 21:16:40 +0000 Subject: [PATCH 1/9] refactor(file-response): improve path handling and security checks - Refactored serveFile logic to use canonical paths and stricter validation - Enhanced security by preventing directory traversal and invalid path access - Improved code clarity and robustness for file serving in both modules --- src/com/nwu/httpd/responses/FileResponse.java | 231 ++++++++++-------- .../nwu2/httpd/responses/FileResponse.java | 231 ++++++++++-------- 2 files changed, 252 insertions(+), 210 deletions(-) diff --git a/src/com/nwu/httpd/responses/FileResponse.java b/src/com/nwu/httpd/responses/FileResponse.java index f35df0af3..265702db4 100644 --- a/src/com/nwu/httpd/responses/FileResponse.java +++ b/src/com/nwu/httpd/responses/FileResponse.java @@ -22,10 +22,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; import com.nwu.httpd.Codes; import com.nwu.httpd.HTTPd; @@ -79,71 +79,98 @@ public FileResponse(IHTTPd httpd, String rUri, Map props) { * Serves file from homeDir and its' subdirectories (only). Uses only URI, * ignores all headers and HTTP parameters. */ - public com.nwu.httpd.responses.Response serveFile(String uri, - Map header, File homeDir, boolean allowDirectoryListing) { - - uri = uri.replaceFirst(this.rURI, ""); - - // Make sure we won't die of an exception later - if (!homeDir.isDirectory()) - return new com.nwu.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, - "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); - - // Remove URL arguments - uri = uri.trim().replace(File.separatorChar, '/'); - if (uri.indexOf('?') >= 0) - uri = uri.substring(0, uri.indexOf('?')); - - // Prohibit getting out of current directory - if (uri.startsWith("..") || uri.endsWith("..") - || uri.indexOf("../") >= 0) - return new com.nwu.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Won't serve ../ for security reasons."); - - File f = new File(homeDir, uri); - if (!f.exists()) - return new com.nwu.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, - "Error 404, file not found."); + public com.nwu.httpd.responses.Response serveFile(String uri, + Map header, File homeDir, boolean allowDirectoryListing) { + String relativeUri = uri; + if (relativeUri == null) relativeUri = ""; + if (this.rURI != null && relativeUri.startsWith(this.rURI)) { + relativeUri = relativeUri.substring(this.rURI.length()); + } + + // Make sure we won't die of an exception later + if (!homeDir.isDirectory()) + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, + "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); + + // Remove URL arguments + relativeUri = relativeUri.trim().replace('\\', '/'); + if (relativeUri.indexOf('?') >= 0) + relativeUri = relativeUri.substring(0, relativeUri.indexOf('?')); + while (relativeUri.startsWith("/")) relativeUri = relativeUri.substring(1); + if (relativeUri.indexOf('\0') >= 0) { + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + // Prohibit getting out of current directory + if (relativeUri.startsWith("..") || relativeUri.endsWith("..") + || relativeUri.indexOf("../") >= 0) + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Won't serve ../ for security reasons."); + + File f; + File baseDir; + try { + baseDir = homeDir.getCanonicalFile(); + f = relativeUri.isEmpty() ? baseDir : new File(baseDir, relativeUri).getCanonicalFile(); + String basePath = baseDir.getPath(); + String filePath = f.getPath(); + if (!filePath.equals(basePath) && !filePath.startsWith(basePath + File.separator)) { + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + } catch (IOException ioe) { + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + String uriForLinks = relativeUri; + if (!f.exists()) + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, + "Error 404, file not found."); - // List the directory, if necessary - if (f.isDirectory()) { - // Browsers get confused without '/' after the - // directory, send a redirect. - if (!uri.endsWith("/")) { - uri += "/"; -// com.nwu.httpd.responses.Response r = new com.nwu.httpd.responses.SimpleResponse( -// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, -// ""+HTML_STYLE+"Redirected: " -// + this.rURI + uri + ""); -// r.addHeader("Location", this.rURI + uri); -// return r; - } - - this.rURI = this.rURI.replaceAll("/+", "/"); - uri = uri.replaceAll("/+", "/"); - - // First try index.html and index.htm - if (new File(f, "index.html").exists()) - f = new File(homeDir, uri + "/index.html"); - else if (new File(f, "index.htm").exists()) - f = new File(homeDir, uri + "/index.htm"); - // No index file, list the directory - else if (allowDirectoryListing) { - String[] files = f.list(); - String msg = ""+HTML_STYLE+"

Directory " + uri + "


"; - - if (uri.length() > 1) { - String u = uri.substring(0, uri.length() - 1); - int slash = u.lastIndexOf('/'); - if (slash >= 0 && slash < u.length()) - msg += "..
"; - } - - for (int i = 0; i < files.length; ++i) { + // List the directory, if necessary + if (f.isDirectory()) { + // Browsers get confused without '/' after the + // directory, send a redirect. + if (!uriForLinks.endsWith("/")) { + uriForLinks += "/"; +// com.nwu.httpd.responses.Response r = new com.nwu.httpd.responses.SimpleResponse( +// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, +// ""+HTML_STYLE+"Redirected: " +// + this.rURI + uri + ""); +// r.addHeader("Location", this.rURI + uri); +// return r; + } + + this.rURI = this.rURI.replaceAll("/+", "/"); + uriForLinks = uriForLinks.replaceAll("/+", "/"); + + // First try index.html and index.htm + if (new File(f, "index.html").exists()) + f = new File(f, "index.html"); + else if (new File(f, "index.htm").exists()) + f = new File(f, "index.htm"); + // No index file, list the directory + else if (allowDirectoryListing) { + String[] files = f.list(); + String msg = ""+HTML_STYLE+"

Directory /" + uriForLinks + "


"; + + if (uriForLinks.length() > 1) { + String u = uriForLinks.substring(0, uriForLinks.length() - 1); + int slash = u.lastIndexOf('/'); + if (slash >= 0 && slash < u.length()) + msg += "..
"; + } + + for (int i = 0; i < files.length; ++i) { File curFile = new File(f, files[i]); boolean dir = curFile.isDirectory(); if (dir) { @@ -151,8 +178,8 @@ else if (allowDirectoryListing) { files[i] += "/"; } - msg += "" - + files[i] + ""; + msg += "" + + files[i] + ""; // Show file size if (curFile.isFile()) { @@ -197,41 +224,35 @@ else if (len < 1024 * 1024) // Support (simple) skipping: long startFrom = 0; String range = header.get("range"); - if (range != null) { - if (range.startsWith("bytes=")) { - range = range.substring("bytes=".length()); - int minus = range.indexOf('-'); - if (minus > 0) - range = range.substring(0, minus); - try { - startFrom = Long.parseLong(range); - } catch (NumberFormatException nfe) { - } - } - } - - FileInputStream fis = null; - try { - fis = new FileInputStream(f); - fis.skip(startFrom); - com.nwu.httpd.responses.Response r = new com.nwu.httpd.responses.SimpleResponse( - httpd, Codes.HTTP_OK, mime, fis); - r.addHeader("Content-length", "" + (f.length() - startFrom)); - r.addHeader("Content-range", "" + startFrom + "-" - + (f.length() - 1) + "/" + f.length()); - return r; - } finally { - if (fis != null) { - try { - fis.close(); - } catch (IOException e) { - // Log the exception or handle it as needed - } - } - } - } catch (IOException ioe) { - return new com.nwu.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + if (range != null) { + if (range.startsWith("bytes=")) { + range = range.substring("bytes=".length()); + int minus = range.indexOf('-'); + if (minus > 0) + range = range.substring(0, minus); + try { + startFrom = Long.parseLong(range); + } catch (NumberFormatException nfe) { + } + } + } + if (startFrom < 0 || startFrom >= f.length()) { + return new com.nwu.httpd.responses.SimpleResponse(httpd, + com.nwu.httpd.NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, Codes.MIME_PLAINTEXT, + "Requested Range Not Satisfiable"); + } + + FileInputStream fis = new FileInputStream(f); + fis.skip(startFrom); + com.nwu.httpd.responses.Response r = new com.nwu.httpd.responses.SimpleResponse( + httpd, Codes.HTTP_OK, mime, fis); + r.addHeader("Content-length", "" + (f.length() - startFrom)); + r.addHeader("Content-range", "" + startFrom + "-" + + (f.length() - 1) + "/" + f.length()); + return r; + } catch (IOException ioe) { + return new com.nwu.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed."); } } diff --git a/src/com/nwu2/httpd/responses/FileResponse.java b/src/com/nwu2/httpd/responses/FileResponse.java index 82c57141a..a04dff34c 100644 --- a/src/com/nwu2/httpd/responses/FileResponse.java +++ b/src/com/nwu2/httpd/responses/FileResponse.java @@ -22,10 +22,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; import com.nwu2.httpd.Codes; import com.nwu2.httpd.HTTPd; @@ -79,71 +79,98 @@ public FileResponse(IHTTPd httpd, String rUri, Map props) { * Serves file from homeDir and its' subdirectories (only). Uses only URI, * ignores all headers and HTTP parameters. */ - public com.nwu2.httpd.responses.Response serveFile(String uri, - Map header, File homeDir, boolean allowDirectoryListing) { - - uri = uri.replaceFirst(this.rURI, ""); - - // Make sure we won't die of an exception later - if (!homeDir.isDirectory()) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, - "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); - - // Remove URL arguments - uri = uri.trim().replace(File.separatorChar, '/'); - if (uri.indexOf('?') >= 0) - uri = uri.substring(0, uri.indexOf('?')); - - // Prohibit getting out of current directory - if (uri.startsWith("..") || uri.endsWith("..") - || uri.indexOf("../") >= 0) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Won't serve ../ for security reasons."); - - File f = new File(homeDir, uri); - if (!f.exists()) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, - "Error 404, file not found."); + public com.nwu2.httpd.responses.Response serveFile(String uri, + Map header, File homeDir, boolean allowDirectoryListing) { + String relativeUri = uri; + if (relativeUri == null) relativeUri = ""; + if (this.rURI != null && relativeUri.startsWith(this.rURI)) { + relativeUri = relativeUri.substring(this.rURI.length()); + } + + // Make sure we won't die of an exception later + if (!homeDir.isDirectory()) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, + "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); + + // Remove URL arguments + relativeUri = relativeUri.trim().replace('\\', '/'); + if (relativeUri.indexOf('?') >= 0) + relativeUri = relativeUri.substring(0, relativeUri.indexOf('?')); + while (relativeUri.startsWith("/")) relativeUri = relativeUri.substring(1); + if (relativeUri.indexOf('\0') >= 0) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + // Prohibit getting out of current directory + if (relativeUri.startsWith("..") || relativeUri.endsWith("..") + || relativeUri.indexOf("../") >= 0) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Won't serve ../ for security reasons."); + + File f; + File baseDir; + try { + baseDir = homeDir.getCanonicalFile(); + f = relativeUri.isEmpty() ? baseDir : new File(baseDir, relativeUri).getCanonicalFile(); + String basePath = baseDir.getPath(); + String filePath = f.getPath(); + if (!filePath.equals(basePath) && !filePath.startsWith(basePath + File.separator)) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + } catch (IOException ioe) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + String uriForLinks = relativeUri; + if (!f.exists()) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, + "Error 404, file not found."); - // List the directory, if necessary - if (f.isDirectory()) { - // Browsers get confused without '/' after the - // directory, send a redirect. - if (!uri.endsWith("/")) { - uri += "/"; -// com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( -// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, -// ""+HTML_STYLE+"Redirected: " -// + this.rURI + uri + ""); -// r.addHeader("Location", this.rURI + uri); -// return r; - } - - this.rURI = this.rURI.replaceAll("/+", "/"); - uri = uri.replaceAll("/+", "/"); - - // First try index.html and index.htm - if (new File(f, "index.html").exists()) - f = new File(homeDir, uri + "/index.html"); - else if (new File(f, "index.htm").exists()) - f = new File(homeDir, uri + "/index.htm"); - // No index file, list the directory - else if (allowDirectoryListing) { - String[] files = f.list(); - String msg = ""+HTML_STYLE+"

Directory " + uri + "


"; - - if (uri.length() > 1) { - String u = uri.substring(0, uri.length() - 1); - int slash = u.lastIndexOf('/'); - if (slash >= 0 && slash < u.length()) - msg += "..
"; - } - - for (int i = 0; i < files.length; ++i) { + // List the directory, if necessary + if (f.isDirectory()) { + // Browsers get confused without '/' after the + // directory, send a redirect. + if (!uriForLinks.endsWith("/")) { + uriForLinks += "/"; +// com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( +// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, +// ""+HTML_STYLE+"Redirected: " +// + this.rURI + uri + ""); +// r.addHeader("Location", this.rURI + uri); +// return r; + } + + this.rURI = this.rURI.replaceAll("/+", "/"); + uriForLinks = uriForLinks.replaceAll("/+", "/"); + + // First try index.html and index.htm + if (new File(f, "index.html").exists()) + f = new File(f, "index.html"); + else if (new File(f, "index.htm").exists()) + f = new File(f, "index.htm"); + // No index file, list the directory + else if (allowDirectoryListing) { + String[] files = f.list(); + String msg = ""+HTML_STYLE+"

Directory /" + uriForLinks + "


"; + + if (uriForLinks.length() > 1) { + String u = uriForLinks.substring(0, uriForLinks.length() - 1); + int slash = u.lastIndexOf('/'); + if (slash >= 0 && slash < u.length()) + msg += "..
"; + } + + for (int i = 0; i < files.length; ++i) { File curFile = new File(f, files[i]); boolean dir = curFile.isDirectory(); if (dir) { @@ -151,8 +178,8 @@ else if (allowDirectoryListing) { files[i] += "/"; } - msg += "" - + files[i] + ""; + msg += "" + + files[i] + ""; // Show file size if (curFile.isFile()) { @@ -197,41 +224,35 @@ else if (len < 1024 * 1024) // Support (simple) skipping: long startFrom = 0; String range = header.get("range"); - if (range != null) { - if (range.startsWith("bytes=")) { - range = range.substring("bytes=".length()); - int minus = range.indexOf('-'); - if (minus > 0) - range = range.substring(0, minus); - try { - startFrom = Long.parseLong(range); - } catch (NumberFormatException nfe) { - } - } - } - - FileInputStream fis = null; - try { - fis = new FileInputStream(f); - fis.skip(startFrom); - com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( - httpd, Codes.HTTP_OK, mime, fis); - r.addHeader("Content-length", "" + (f.length() - startFrom)); - r.addHeader("Content-range", "" + startFrom + "-" - + (f.length() - 1) + "/" + f.length()); - return r; - } finally { - if (fis != null) { - try { - fis.close(); - } catch (IOException e) { - // Log the exception or handle it as needed - } - } - } - } catch (IOException ioe) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + if (range != null) { + if (range.startsWith("bytes=")) { + range = range.substring("bytes=".length()); + int minus = range.indexOf('-'); + if (minus > 0) + range = range.substring(0, minus); + try { + startFrom = Long.parseLong(range); + } catch (NumberFormatException nfe) { + } + } + } + if (startFrom < 0 || startFrom >= f.length()) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + com.nwu2.httpd.NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, Codes.MIME_PLAINTEXT, + "Requested Range Not Satisfiable"); + } + + FileInputStream fis = new FileInputStream(f); + fis.skip(startFrom); + com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( + httpd, Codes.HTTP_OK, mime, fis); + r.addHeader("Content-length", "" + (f.length() - startFrom)); + r.addHeader("Content-range", "" + startFrom + "-" + + (f.length() - 1) + "/" + f.length()); + return r; + } catch (IOException ioe) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed."); } } From ebfda396e60792ff783b69d15468c92ed93526ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 23:07:16 +0000 Subject: [PATCH 2/9] chore(deps): bump org.eclipse.jetty:jetty-util from 12.1.6 to 12.1.7 Bumps org.eclipse.jetty:jetty-util from 12.1.6 to 12.1.7. --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-util dependency-version: 12.1.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8526ec5e1..a5f2a1b3f 100644 --- a/pom.xml +++ b/pom.xml @@ -250,7 +250,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma org.eclipse.jetty jetty-util - 12.1.6 + 12.1.7 org.eclipse.jetty.compression From 06a66f197ec1a7a498625e5c6786c5e88c0fd8ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 23:07:22 +0000 Subject: [PATCH 3/9] chore(deps): bump org.eclipse.jetty:jetty-io from 12.1.6 to 12.1.7 Bumps org.eclipse.jetty:jetty-io from 12.1.6 to 12.1.7. --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-io dependency-version: 12.1.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8526ec5e1..a180f76ab 100644 --- a/pom.xml +++ b/pom.xml @@ -245,7 +245,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma org.eclipse.jetty jetty-io - 12.1.6 + 12.1.7 org.eclipse.jetty From 36da053fcd6dd6f0dd0d6f38fadfd7911d7f90a5 Mon Sep 17 00:00:00 2001 From: nmaguiar Date: Fri, 6 Mar 2026 05:43:24 +0000 Subject: [PATCH 4/9] sync oafproc --- js/oafp.js | 220 ++++++++++++++++++++++++++--------------------------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/js/oafp.js b/js/oafp.js index 7da943f6e..b39cea8cf 100755 --- a/js/oafp.js +++ b/js/oafp.js @@ -1,33 +1,33 @@ var params=processExpr(" "); -// (author: Nuno Aguiar, version: 20260117, license: Apache 2.0, url: https://github.com/openaf/oafp) +// (author: Nuno Aguiar, version: 20260306, 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/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/FILTERS.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= -$sql();d=y(a.isqlfiltertables);isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in isqlfiltertables");g.path=_$(g.path,"isqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&&(f=f.table(g.table,e))}),b=f.closeQuery(c.__isql.trim()))}else b=$sql(b,c.__isql.trim(),d);delete c.__isql}c.__path&&(b=$path(b,c.__path.trim()),delete c.__path);if(isString(b))return T(b);b=T(b);c.__from&&(b=$from(isArray(b)?b:[b]).query(af.fromNLinq(c.__from.trim())), -delete c.__from);if(c.__sql){d=__;if(isString(a.sqlfilter))switch(a.sqlfilter.toLowerCase()){case "simple":d="nlinq";break;case "advanced":d="h2";break;default:d=__}isArray(b)&&b.length>0&&(isString(a.sqlfiltertables)?(f=$sql(),d=y(a.sqlfiltertables),isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in sqlfiltertables");g.path=_$(g.path,"sqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&&(f=f.table(g.table,e))}),b=f.closeQuery(c.__sql.trim()))): -b=$sql(b,c.__sql.trim(),d));delete c.__sql}c.__opath&&(b=$path(b,c.__opath.trim()),delete c.__opath);return b},n=(b,c,d)=>{b==null||"undefined"==typeof b?L():(c=clone(c),toBoolean(a.color)?__conConsole=!0:isDef(a.color)&&(__conAnsi=!1),isString(b)?isDef(a.in)&&a.in!="raw"||isUnDef(a.in)?(d=b.trim(),b=d.startsWith("{")&&d.endsWith("}")||d.startsWith("[")&&d.endsWith("]")&&/^\[\s*\{/.test(d)?U(jsonParse(b,__,__,!0),c):U(b,c)):b=T(b):b=d?U([b],c)[0]:U(b,c),isDef(a.outputkey)&&(b=$$({}).set(a.outputkey, -b)),isDef(a.outkey)&&(b=$$({}).set(a.outkey,b)),L(),isUnDef(c.__format)&&(c.__format=getEnvsDef("OAFP_OUTPUT",c.__format,"ctree")),M.has(c.__format)?M.get(c.__format)(b,c):z(b,c,__))},C=(b,c)=>{var d=af.fromString2Bytes(""),f=af.newOutputStream();$sh(b).cb((g,e,h)=>{ioStreamCopy(f,g);g=f.toByteArray();g.length>0&&(d=g)}).get();return c?af.fromBytes2String(d):d},y=(b,c)=>{if("[object Object]"==Object.prototype.toString.call(b)||Array.isArray(b))return b;if(!isString(b)||b==""||isNull(b))return"";b= -b.trim();var d;isDef(af.fromJSSLON)&&(d=af.fromJSSLON(b));isUnDef(d)?d=b.startsWith("{")?jsonParse(b,__,__,!0):af.fromSLON(b):isString(d)&&c&&(d=af.fromYAML(d));return d},V=(b,c,d,f)=>{d=_$(d).isString().default("_oafp_fn_");c=splitBySepWithEnc(c," ",[['"','"'],["'","'"]]);let g=[];$ch("__oaf::chart").create();if(c.length>1){for(let e=0;e{if(q==0){if(k.startsWith("-"))return k;global[d+e]=()=> -{if(isString(f)){var t=$ch("__oaf::chart").get({name:f});t=isUnDef(t)?[]:t.data;var v=$path(b,k);if(isArray(v))return v.forEach((r,u)=>{isArray(t[u])?t[u].push(r):t[u]=[r]}),v=t.pop(),$ch("__oaf::chart").set({name:f},{name:f,data:t}),v[0]}else return $path(b,k)};return d+e}return k}).join(":");g.push(h)}return g.join(" ")}return""},w=b=>{if("undefined"!==typeof b)if("undefined"===typeof a.outfile)if(toBoolean(a.loopcls)&&cls(),isDef(a.pipe)){var c=isMap(a.pipe)?a.pipe:y(a.pipe,!0);isMap(c)&&(c.data= -b,oafp(c))}else print(b);else"undefined"===typeof global.__oafp_streams&&(global.__oafp_streams={}),"undefined"!==typeof global.__oafp_streams[a.outfile]?(c=toBoolean(a.outfileappend))?ioStreamWrite(global.__oafp_streams[a.outfile].s,b+(c?"\n":"")):io.writeFileBytes(a.outfile,isString(b)?af.fromString2Bytes(b):b):io.writeFileBytes(a.outfile,isString(b)||b instanceof java.lang.String?af.fromString2Bytes(b):b)},z=(b,c,d)=>{"undefined"!==typeof b&&(b=$o(b,c,d,!0),isDef(b)&&w(b))},P=()=>({_resC:$atomic(), -_nc:getNumberOfCores(),times:$atomic(),execs:$atomic(0,"long"),_opar:isDef(a.parallel)&&toBoolean(a.parallel)||String(getEnv("OAFP_PARALLEL")).toLowerCase()=="true",_par:!1,_ts:[]}),Q=b=>{b._opar&&b._nc>=3&&(b.times.get()/b.execs.get()/1E6<__flags.PFOREACH.seq_thrs_ms||__getThreadPools().active/getNumberOfCores()>__flags.PFOREACH.seq_ratio?b._par=!0:b._par=!1);return b},R=b=>{var c=0;do $doWait($doAll(b._ts)),b._resC.get()>0&&sleep(__getThreadPools().queued*__flags.PFOREACH.waitms,!0),c++;while(b._resC.get()> -0&&c<100)},S=(b,c)=>{var d=nowNano(),f;if(b._par){if(b._ts.push($do(()=>{b._resC.inc();return c(b.execs.inc())}).then(()=>b._resC.dec()).catch(g=>{f=g})),isDef(f))throw f;}else c(b.execs.inc());b.times.getAdd(nowNano()-d);d=__getThreadPools();d.queued>d.poolSize/__flags.PFOREACH.threads_thrs&&$doWait(b._ts.pop())},X=(b,c)=>{b=_$(b).isMap().default({});return isDef(b.secKey)?(aMap=clone(b),aMap.secRepo=_$(aMap.secRepo).default(getEnv("OAFP_SECREPO")),aMap.secBucket=_$(aMap.secBucket).default(getEnv("OAFP_SECBUCKET")), +const oafp=a=>{if(!isUnDef(a)&&!isDef(a.____ojob)){isDef($sec().procMap)&&(a=$sec().procMap(a));var U=null,V=b=>{U===null&&(U=Object.keys(H).filter(d=>isDef(a[d])));for(var c=0;c{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=$sql();d=y(a.isqlfiltertables);isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in isqlfiltertables");g.path=_$(g.path,"isqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&&(f=f.table(g.table,e))}),b=f.closeQuery(c.__isql.trim()))}else b=$sql(b,c.__isql.trim(),d);delete c.__isql}c.__path&&(b=$path(b,c.__path.trim()),delete c.__path);if(isString(b))return V(b);b=V(b);c.__from&&(b=$from(isArray(b)? +b:[b]).query(af.fromNLinq(c.__from.trim())),delete c.__from);if(c.__sql){d=__;if(isString(a.sqlfilter))switch(a.sqlfilter.toLowerCase()){case "simple":d="nlinq";break;case "advanced":d="h2";break;default:d=__}isArray(b)&&b.length>0&&(isString(a.sqlfiltertables)?(f=$sql(),d=y(a.sqlfiltertables),isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in sqlfiltertables");g.path=_$(g.path,"sqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&& +(f=f.table(g.table,e))}),b=f.closeQuery(c.__sql.trim()))):b=$sql(b,c.__sql.trim(),d));delete c.__sql}c.__opath&&(b=$path(b,c.__opath.trim()),delete c.__opath);return b},q=(b,c,d)=>{b==null||"undefined"==typeof b?L():(c=clone(c),toBoolean(a.color)?__conConsole=!0:isDef(a.color)&&(__conAnsi=!1),isString(b)?isDef(a.in)&&a.in!="raw"||isUnDef(a.in)?(d=b.trim(),b=d.startsWith("{")&&d.endsWith("}")||d.startsWith("[")&&d.endsWith("]")&&/^\[\s*\{/.test(d)?W(jsonParse(b,__,__,!0),c):W(b,c)):b=V(b):b=d?W([b], +c)[0]:W(b,c),isDef(a.outputkey)&&(b=$$({}).set(a.outputkey,b)),isDef(a.outkey)&&(b=$$({}).set(a.outkey,b)),L(),isUnDef(c.__format)&&(c.__format=getEnvsDef("OAFP_OUTPUT",c.__format,"ctree")),M.has(c.__format)?M.get(c.__format)(b,c):z(b,c,__))},C=(b,c)=>{var d=af.fromString2Bytes(""),f=af.newOutputStream();$sh(b).cb((g,e,h)=>{ioStreamCopy(f,g);g=f.toByteArray();g.length>0&&(d=g)}).get();return c?af.fromBytes2String(d):d},y=(b,c)=>{if("[object Object]"==Object.prototype.toString.call(b)||Array.isArray(b))return b; +if(!isString(b)||b==""||isNull(b))return"";b=b.trim();var d;isDef(af.fromJSSLON)&&(d=af.fromJSSLON(b));isUnDef(d)?d=b.startsWith("{")?jsonParse(b,__,__,!0):af.fromSLON(b):isString(d)&&c&&(d=af.fromYAML(d));return d},X=(b,c,d,f)=>{d=_$(d).isString().default("_oafp_fn_");c=splitBySepWithEnc(c," ",[['"','"'],["'","'"]]);let g=[];$ch("__oaf::chart").create();if(c.length>1){for(let e=0;e{if(p==0){if(k.startsWith("-"))return k; +global[d+e]=()=>{if(isString(f)){var n=$ch("__oaf::chart").get({name:f});n=isUnDef(n)?[]:n.data;var v=$path(b,k);if(isArray(v))return v.forEach((t,u)=>{isArray(n[u])?n[u].push(t):n[u]=[t]}),v=n.pop(),$ch("__oaf::chart").set({name:f},{name:f,data:n}),v[0]}else return $path(b,k)};return d+e}return k}).join(":");g.push(h)}return g.join(" ")}return""},w=b=>{if("undefined"!==typeof b)if("undefined"===typeof a.outfile)if(toBoolean(a.loopcls)&&cls(),isDef(a.pipe)){var c=isMap(a.pipe)?a.pipe:y(a.pipe,!0); +isMap(c)&&(c.data=b,oafp(c))}else print(b);else"undefined"===typeof global.__oafp_streams&&(global.__oafp_streams={}),"undefined"!==typeof global.__oafp_streams[a.outfile]?(c=toBoolean(a.outfileappend))?ioStreamWrite(global.__oafp_streams[a.outfile].s,b+(c?"\n":"")):io.writeFileBytes(a.outfile,isString(b)?af.fromString2Bytes(b):b):io.writeFileBytes(a.outfile,isString(b)||b instanceof java.lang.String?af.fromString2Bytes(b):b)},z=(b,c,d)=>{"undefined"!==typeof b&&(b=$o(b,c,d,!0),isDef(b)&&w(b))},P= +()=>({_resC:$atomic(),_nc:getNumberOfCores(),times:$atomic(),execs:$atomic(0,"long"),_opar:isDef(a.parallel)&&toBoolean(a.parallel)||String(getEnv("OAFP_PARALLEL")).toLowerCase()=="true",_par:!1,_ts:[]}),Q=b=>{b._opar&&b._nc>=3&&(b.times.get()/b.execs.get()/1E6<__flags.PFOREACH.seq_thrs_ms||__getThreadPools().active/getNumberOfCores()>__flags.PFOREACH.seq_ratio?b._par=!0:b._par=!1);return b},R=b=>{var c=0;do $doWait($doAll(b._ts)),b._resC.get()>0&&sleep(__getThreadPools().queued*__flags.PFOREACH.waitms, +!0),c++;while(b._resC.get()>0&&c<100)},S=(b,c)=>{var d=nowNano(),f;if(b._par){if(b._ts.push($do(()=>{b._resC.inc();return c(b.execs.inc())}).then(()=>b._resC.dec()).catch(g=>{f=g})),isDef(f))throw f;}else c(b.execs.inc());b.times.getAdd(nowNano()-d);d=__getThreadPools();d.queued>d.poolSize/__flags.PFOREACH.threads_thrs&&$doWait(b._ts.pop())},aa=(b,c)=>{b=_$(b).isMap().default({});return isDef(b.secKey)?(aMap=clone(b),aMap.secRepo=_$(aMap.secRepo).default(getEnv("OAFP_SECREPO")),aMap.secBucket=_$(aMap.secBucket).default(getEnv("OAFP_SECBUCKET")), aMap.secPass=_$(aMap.secPass).default(getEnv("OAFP_SECPASS")),aMap.secMainPass=_$(aMap.secMainPass).default(getEnv("OAFP_SECMAINPASS")),aMap.secFile=_$(aMap.secFile).default(getEnv("OAFP_SECFILE")),b=$sec(aMap.secRepo,aMap.secBucket,aMap.secPass,aMap.secMainPass,aMap.secFile).get(aMap.secKey),delete aMap.secRepo,delete aMap.secBucket,delete aMap.secPass,delete aMap.secMainPass,delete aMap.secFile,delete aMap.secKey,isDef(c)?$$(aMap).set(c,merge($$(aMap).get(c),b)):merge(aMap,b)):b},x=b=>{a.out=="grid"|| a.__inception||toBoolean(a.loopcls)||toBoolean(a.chartcls)||printErrnl(_$(b).default("(processing data...)"))},L=b=>{a.out=="grid"||a.__inception||toBoolean(a.loopcls)||toBoolean(a.chartcls)||printErrnl("\r"+" ".repeat(_$(b).default("(processing data...)").length)+"\r")};ow.loadFormat();var I=()=>{a.format=a.output||a.format||a.out;a.type=a.input||a.type||a.in;a.out=a.format;a.output=a.format;a.in=a.type;a.input=a.type;isUnDef(a._id)&&(a._id=nowNano())};I();var J;isDef(a.loop)&&(isDef(J)?a=clone(J): -J=clone(a));if(Object.keys(a).indexOf("-f")>=0){let b=Object.keys(a).length;var F=Object.keys(a).indexOf("-f");b>F+1&&Object.keys(a)[F+1].length>0&&(a.paramsfile=Object.keys(a)[F+1],delete a[a.paramsfile]);delete a["-f"]}if(isDef(a.paramsfile)){if(a.paramsfile=="-"){var ba=[];io.pipeLn(b=>{ba.push(b);return!1});var Y=ba.join("\n")}else io.fileExists(a.paramsfile)&&(Y=io.readFileString(a.paramsfile));isString(Y)&&(_margs=y(Y,!0),isMap(_margs)&&Object.keys(_margs).forEach(b=>{isUnDef(a[b])&&(a[b]=_margs[b])}))}I(); -Object.keys(a).forEach(b=>{if(typeof a[b]=="string"&&a[b].length>0){var c=b.toLowerCase();b!=c&&isUnDef(a[c])&&(a[c]=a[b],delete a[b])}});var l=(b,c)=>{isUnDef(c)&&(c="exit: "+b);if(isUnDef(ow.oJob)&&!toBoolean(a.noexit))b!=0&&printErr(c),exit(b);else throw c;};I=()=>{__initializeCon();a.help=_$(a.help,"help").isString().default("");switch(a.help.toLowerCase()){case "filters":var b="docs/FILTERS.md";break;case "template":b="docs/TEMPLATE.md";break;case "examples":b="docs/EXAMPLES.md";break;case "readme":case "usage":b= -"docs/USAGE.md";break;default:b=a.help.toLowerCase(),b=isDef(G[b])?"docs/"+b+".md":"docs/USAGE.md"}var c=(getOPackPath("oafproc")||".")+"/"+b;let d="";if(b=="docs/USAGE.md"&&Object.keys(G).length>0){d="\n---\n\n## \ud83d\udcda Libs help documents\n\n| Lib | Help |\n| --- | --- |\n";for(let f in G)d+="| "+f+" | help="+f+" |\n"}isDef(c)&&io.fileExists(c)?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)?ow.format.string.pauseString(ow.format.withMD(io.readFileString(c)+ +J=clone(a));if(Object.keys(a).indexOf("-f")>=0){let b=Object.keys(a).length;var F=Object.keys(a).indexOf("-f");b>F+1&&Object.keys(a)[F+1].length>0&&(a.paramsfile=Object.keys(a)[F+1],delete a[a.paramsfile]);delete a["-f"]}if(isDef(a.paramsfile)){if(a.paramsfile=="-"){var ea=[];io.pipeLn(b=>{ea.push(b);return!1});var ba=ea.join("\n")}else io.fileExists(a.paramsfile)&&(ba=io.readFileString(a.paramsfile));isString(ba)&&(_margs=y(ba,!0),isMap(_margs)&&Object.keys(_margs).forEach(b=>{isUnDef(a[b])&&(a[b]= +_margs[b])}))}I();Object.keys(a).forEach(b=>{if(typeof a[b]=="string"&&a[b].length>0){var c=b.toLowerCase();b!=c&&isUnDef(a[c])&&(a[c]=a[b],delete a[b])}});var l=(b,c)=>{isUnDef(c)&&(c="exit: "+b);if(isUnDef(ow.oJob)&&!toBoolean(a.noexit))b!=0&&printErr(c),exit(b);else throw c;};I=()=>{__initializeCon();a.help=_$(a.help,"help").isString().default("");switch(a.help.toLowerCase()){case "filters":var b="docs/FILTERS.md";break;case "template":b="docs/TEMPLATE.md";break;case "examples":b="docs/EXAMPLES.md"; +break;case "readme":case "usage":b="docs/USAGE.md";break;default:b=a.help.toLowerCase(),b=isDef(G[b])?"docs/"+b+".md":"docs/USAGE.md"}var c=(getOPackPath("oafproc")||".")+"/"+b;let d="";if(b=="docs/USAGE.md"&&Object.keys(G).length>0){d="\n---\n\n## \ud83d\udcda Libs help documents\n\n| Lib | Help |\n| --- | --- |\n";for(let f in G)d+="| "+f+" | help="+f+" |\n"}isDef(c)&&io.fileExists(c)?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)?ow.format.string.pauseString(ow.format.withMD(io.readFileString(c)+ d)):w(isDef(a.out)&&a.out=="raw"?io.readFileString(c)+d:ow.format.withMD(io.readFileString(c)+d))):isDef(global._oafphelp)&&isDef(global._oafphelp[b])?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)?ow.format.string.pauseString(ow.format.withMD(global._oafphelp[b]+d)):w(isDef(a.out)&&a.out=="raw"?global._oafphelp[b]+d:ow.format.withMD(global._oafphelp[b]+d))):isString(G[a.help])?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)? -ow.format.string.pauseString(ow.format.withMD(G[a.help])):w(isDef(a.out)&&a.out=="raw"?G[a.help]:ow.format.withMD(G[a.help]))):w("Check https://github.com/OpenAF/oafp/blob/master/src/"+b);l(0)};var ca=()=>{var b=(getOPackPath("oafproc")||".")+"/.package.yaml";b={oafp:{version:io.fileExists(b)?io.readFileYAML(b).version:"(not available/embedded)",inputs:Array.from(K.keys()).filter(c=>c!="?").sort(),transforms:Object.keys(H).filter(c=>c!="transforms").sort(),outputs:Array.from(M.keys()).filter(c=>c!= +ow.format.string.pauseString(ow.format.withMD(G[a.help])):w(isDef(a.out)&&a.out=="raw"?G[a.help]:ow.format.withMD(G[a.help]))):w("Check https://github.com/OpenAF/oafp/blob/master/src/"+b);l(0)};var fa=()=>{var b=(getOPackPath("oafproc")||".")+"/.package.yaml";b={oafp:{version:io.fileExists(b)?io.readFileYAML(b).version:"(not available/embedded)",inputs:Array.from(K.keys()).filter(c=>c!="?").sort(),transforms:Object.keys(H).filter(c=>c!="transforms").sort(),outputs:Array.from(M.keys()).filter(c=>c!= "?").sort(),flags:__flags.OAFP},openaf:{version:getVersion(),distribution:getDistribution(),home:getOpenAFPath(),opacks:$from($m4a(getOPackLocalDB())).notEquals("name","OpenAF").sort("name").select({name:"",version:""})},java:{version:ow.format.getJavaVersion(),home:ow.format.getJavaHome(),vendor:String(java.lang.System.getProperty("java.vendor")),params:af.fromJavaArray(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments())},os:{name:String(java.lang.System.getProperty("os.name")), version:String(java.lang.System.getProperty("os.version")),arch:ow.format.getOSArch(),cpuCores:getNumberOfCores(!0),mem:{max:Number(java.lang.Runtime.getRuntime().maxMemory()),total:Number(java.lang.Runtime.getRuntime().totalMemory())},store:{tmpDirPath:String(java.lang.System.getProperty("java.io.tmpdir")),freeTmpDirBytes:Number(java.nio.file.Files.getFileStore(java.nio.file.Paths.get(java.lang.System.getProperty("java.io.tmpdir"))).getUsableSpace())}}};return stringify(b,__,"")};if("undefined"== -typeof a.file&&"undefined"==typeof a.cmd&&"undefined"==typeof a.data&&"undefined"==typeof a.url){F=__;for(var B in a)if("undefined"==typeof F&&a[B]===""&&B!="-debug"&&B!="-v"&&B!="-examples"){F=B;break}a.file=F;isDef(J)&&(J.file=F)}typeof a.debug!=="undefined"&&(a.debug=toBoolean(a.debug));isDef(a["-debug"])&&(a.debug=!0);if("[object Object]"==Object.prototype.toString.call(a.data)||Array.isArray(a.data))a.data=stringify(a.data,__,"");var W=new Map([[".json","json"],[".ndjson","ndjson"],[".ndslon", -"ndslon"],[".slon","slon"],[".yaml","yaml"],[".xml","xml"],[".csv","csv"],[".ini","ini"],[".md","md"],[".xls","xls"],[".xlsx","xls"],[".sql","sql"],[".toml","toml"],[".jwt","jwt"],[".jfr","jfr"]]),Z=new Set(["csv","ndjson","ndslon","lines","dsv"]),aa={lines:(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);if(!a.linesjoin&&isBoolean(b))b.trim().length!=0&&(b.trim().length>0&&(b=b.trim().split(/\r?\n/)),n(b,c,!0)),N=!0;else return!0},javagc:(b,c)=>{a.javagcjoin=_$(toBoolean(a.javagcjoin), -"javagcjoin").isBoolean().default(!1);if(a.javagcjoin)return!0;if(isUnDef(global.__javagc_buffer)||global.__javagc_buffer.length>1048576)global.__javagc_buffer="";global.__javagc_buffer+=b;b=(d=>{try{let f=[/([^ ]+) (\d+\.\d+): \[GC \((.*?)\)(.+?)\[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/s,/([^ ]+) (\d+\.\d+): \[GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\]/, +typeof a.file&&"undefined"==typeof a.cmd&&"undefined"==typeof a.data&&"undefined"==typeof a.url){F=__;for(var B in a)if("undefined"==typeof F&&a[B]===""&&B!="-debug"&&B!="-v"&&B!="-examples"){F=B;break}a.file=F;isDef(J)&&(J.file=F)}typeof a.debug!=="undefined"&&(a.debug=toBoolean(a.debug));isDef(a["-debug"])&&(a.debug=!0);if("[object Object]"==Object.prototype.toString.call(a.data)||Array.isArray(a.data))a.data=stringify(a.data,__,"");var Y=new Map([[".json","json"],[".ndjson","ndjson"],[".ndslon", +"ndslon"],[".slon","slon"],[".yaml","yaml"],[".xml","xml"],[".csv","csv"],[".ini","ini"],[".md","md"],[".xls","xls"],[".xlsx","xls"],[".sql","sql"],[".toml","toml"],[".jwt","jwt"],[".jfr","jfr"]]),ca=new Set(["csv","ndjson","ndslon","lines","dsv"]),T=null,Z=null,da={lines:(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);if(!a.linesjoin&&isBoolean(b))b.trim().length!=0&&(b.trim().length>0&&(b=b.trim().split(/\r?\n/)),q(b,c,!0)),N=!0;else return!0},javagc:(b,c)=>{a.javagcjoin= +_$(toBoolean(a.javagcjoin),"javagcjoin").isBoolean().default(!1);if(a.javagcjoin)return!0;if(isUnDef(global.__javagc_buffer)||global.__javagc_buffer.length>1048576)global.__javagc_buffer="";global.__javagc_buffer+=b;b=(d=>{try{let f=[/([^ ]+) (\d+\.\d+): \[GC \((.*?)\)(.+?)\[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/s,/([^ ]+) (\d+\.\d+): \[GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\]/, /([^ ]+) (\d+\.\d+): \[Full GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] \[ParOldGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), \[Metaspace: (\d+K)->(\d+K)\(.*?\)\], (\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[Full GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] \[ParOldGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), \[Metaspace: (\d+K)->(\d+K)\(.*?\)\], (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/, /^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*(\d+[GMK])->(\d+[GMK])\((\d+[GMK])\)\s*(\d+\.\d+)ms/,/^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*Metaspace:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*NonClass:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*Class:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)/,/^\[(.+)\]\s+GC\((\d+)\)\s*(Allocation Failure)\s*(.*?)\s+(\d+[KMGT])->(\d+[KMGT])\((\d+[KMGT])\)\s+(\d+\.\d+)ms/];for(let g=0;g{k.match(/^\d+\.\d+s$/)?h.sinceStart=parseFloat(k.replace(/s$/,"")):k.match(/\d{4}-\d{2}-\d{2}T/)&&(h.timestamp=ow.format.toDate(k,"yyyy-MM-dd'T'HH:mm:ss.SSSZ"))}),h.gcId=parseInt(e[2]),h.gcType=e[3].trim(),h.gcType==""&&(h.gcType="none"),h.durationSecs=parseFloat(e[e.length-1])/1E3,g===5?(h.heapBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.heapAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.heapTotal=ow.format.fromBytesAbbreviation(e[6]+"B")):g>5&&(g==6?(h.metaUsedBeforeGC= @@ -36,32 +36,32 @@ ow.format.fromBytesAbbreviation(e[12]+"B"),h.classTotalBeforeGC=ow.format.fromBy e[3],h.durationSecs=parseFloat(e[e.length-1]),g===0||g===6?(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[6]+"B"),h.afterGC=ow.format.fromBytesAbbreviation(e[7]+"B"),g===6&&d.includes("Allocation Failure")&&(h.gcCause="Allocation Failure")):g===1||g===3?(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"), h.ParOldGenBeforeGC=ow.format.fromBytesAbbreviation(e[6]+"B"),h.ParOldGenAfterGC=ow.format.fromBytesAbbreviation(e[7]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[8]+"B"),h.afterGC=ow.format.fromBytesAbbreviation(e[9]+"B"),h.metaspaceBeforeGC=ow.format.fromBytesAbbreviation(e[10]+"B"),h.metaspaceAfterGC=ow.format.fromBytesAbbreviation(e[11]+"B")):g===2?(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[6]+ "B"),h.afterGC=ow.format.fromBytesAbbreviation(e[7]+"B"),h.userTime=parseFloat(e[8]),h.sysTime=parseFloat(e[9]),h.realTime=parseFloat(e[10])):g===6&&(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[6]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[7]+"B"),h.afterGC=ow.format.fromBytesAbbreviation(e[8]+"B"),h.durationSecs=parseFloat(e[9]),e[10]&&(h.userTime=parseFloat(e[10]),h.sysTime=parseFloat(e[11]),h.realTime=parseFloat(e[12])), -h.gcCause="Allocation Failure"));return h}}}catch(f){printErr(f),l(-2,"Error parsing Java GC log: "+f)}})(b);isMap(b)&&(n(b,c,!0),global.__javagc_buffer="")},ndjson:(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);if(a.ndjsonjoin)return!0;isUnDef(global.__ndjsonbuf)&&b.length!=0&&b.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(b.length!=0&&!b.trim().endsWith("}")){global.__ndjsonbuf+=b.trim();return}global.__ndjsonbuf.length> -0&&(b=global.__ndjsonbuf+b,global.__ndjsonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="{"?(n(jsonParse(global.__ndjsonbuf,__,__,!0),c,!0),N=!0,global.__ndjsonbuf=__):(n(jsonParse(b,__,__,!0),c,!0),N=!0)},ndslon:(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);if(a.ndslonjoin)return!0;isUnDef(global.__ndslonbuf)&&b.length!=0&&b.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(b.length!=0&&!b.trim().endsWith(")")){global.__ndslonbuf+= -b.trim();return}global.__ndslonbuf.length>0&&(b=global.__ndslonbuf+b,global.__ndslonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="("?(n(af.fromSLON(global.__ndslonbuf),c,!0),N=!0,global.__ndslonbuf=__):(n(af.fromSLON(String(b)),c,!0),N=!0)},dsv:(b,c)=>{isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&& -(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim=!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&&(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(g=>g.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);var d=g=>{var e={};a.indsvfields.forEach((h,k)=>{e[h]=g[k]});return e},f=g=>{if(isUnDef(g)||g.length==0)return __;if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields= -g.trim().split(a.indsvsep):a.indsvfields=g.trim().split(new RegExp(a.indsvsepre)),a.indsvfields=a.indsvfields.map(h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return h}),__;var e={};if(isString(g))return e=isUnDef(a.indsvsepre)?pForEach(g.split(a.indsvsep),h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&& -(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return h}):pForEach(g.split(new RegExp(a.indsvsepre)),h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return h}),d(e)};if(a.indsvjoin)return!0;b=String(b);if(b.length>0&&b.trim().substring(0,1)!=a.indsvcomment)return b= -f(b),isDef(b)&&n(b,c,!0),!0}};if(typeof O==="undefined")var O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b};var H={transforms:b=>{if(toBoolean(a.transforms))return Object.keys(H).filter(c=>c!="transforms").sort()},cmlt:b=>{if(toBoolean(a.cmlt)){b=isArray(b)?b:[b];a.cmltch=_$(a.cmltch,"cmltch").or().isString().isMap().default("(type: simple)");var c=y(a.cmltch);if(isMap(c))return isUnDef(c.type)&&l(-1,"cmltch.type is not defined."), -isDef(c.lib)&&loadLib(c.lib),$ch().list().indexOf("oafp::cmltdata")<0&&(c.type=="remote"?$ch("oafp::cmltdata").createRemote(c.url):$ch("oafp::cmltdata").create(c.type,c.options),c=Number(_$(a.cmltsize,"cmltsize").isNumber().default(100))-1,c>0&&$ch("oafp::cmltdata").subscribe(ow.ch.utils.getHousekeepSubscriber("oafp::cmltdata",c))),b.forEach(d=>$ch("oafp::cmltdata").set({t:nowNano()},d)),$ch("oafp::cmltdata").getAll();l(-1,"Invalid cmltch parameter")}},diff:b=>{var c=y(a.diff);if(isMap(c)){isDef(c.a)&& -isDef(c.b)||l(-1,"diff.a path and diff.b path are required.");loadDiff();let d=$path(b,c.a);b=$path(b,c.b);let f=__;toBoolean(a.color)&&(isUnDef(a.difftheme)&&isDef(getEnv("OAFP_DIFFTHEME"))&&(a.difftheme=getEnv("OAFP_DIFFTHEME")),f=y(_$(a.difftheme,"difftheme").or().isString().isMap().default("")),f=merge({added:"GREEN",removed:"RED",common:"FAINT",linenum:"ITALIC",linediv:"FAINT",linesep:"|"},f));let g=(e,h)=>{if(toBoolean(a.color)){isUnDef(h)&&(h="");var k=new Set;if(isArray(e)){let q=1,t=toBoolean(a.diffnlines), -v=0;t&&(e.forEach(u=>{v+=u.value.split("\n").length}),v=String(v).length+1);let r=u=>{let m;m=t&&h!=""?ansiColor(f.linenum,u>0?$ft("% "+v+"d",q):" ".repeat(v))+ansiColor(f.linediv,`${f.linesep}`):"";q+=u;return m};e.forEach((u,m)=>{m=u.value;isString(m)&&(h!=""?(m=m.split(h),m[m.length-1]==""&&m.pop()):m=[m]);k.add(u.added?m.map(p=>r(1)+ansiColor(f.added,(h!=""?"+":"")+p)).join(ansiColor("RESET",h)):u.removed?m.map(p=>r(0)+ansiColor(f.removed,(h!=""?"-":"")+p)).join(ansiColor("RESET",h)):m.map(p=> -r(1)+ansiColor(f.common,(h!=""?" ":"")+p)).join(ansiColor("RESET",h)))})}return Array.from(k).join(ansiColor("RESET",h))}return $from(e).select({count:__,added:!1,removed:!1,value:[]})};return isString(d)&&isString(b)?toBoolean(a.diffwords)?g(JsDiff.diffWords(d,b,c.options)):toBoolean(a.diffwordswithspace)?g(JsDiff.diffWordsWithSpace(d,b,c.options)):toBoolean(a.difflines)?g(JsDiff.diffLines(d,b,c.options),"\n"):toBoolean(a.diffsentences)?g(JsDiff.diffSentences(d,b,c.options),"\n"):g(JsDiff.diffChars(d, -b,c.options)):isArray(d)&&isArray(b)&&!toBoolean(a.color)?g(JsDiff.diffArrays(d,b,c.options)):g(JsDiff.diffJson(d,b,c.options),"\n")}},jsonschemagen:b=>{if(toBoolean(a.jsonschemagen))return ow.loadObj(),ow.obj.schemaGenerator(b)},jsonschemacmd:b=>H.jsonschema(b),jsonschema:b=>{isMap(b)||l(-1,"jsonschema is only supported with a map.");isUnDef(a.jsonschema)&&isUnDef(a.jsonschemacmd)&&l(-1,"You need to provide a jsonschema=someFile.json or jsonschemacmd=someCommand");ow.loadObj();var c;if(isDef(a.jsonschemacmd)){var d= -$sh(a.jsonschemacmd).getJson(0);d.exitcode==0?c=d.stdout:l(-1,"Error executing the command '"+a.jsonschemacmd+"': "+d.stderr)}else c=io.readFileJSON(a.jsonschema);isMap(c)||l(-1,"The schema provided is not a valid JSON schema.");ow.obj.schemaInit({allErrors:!0});c=ow.obj.schemaCompile(c);return{valid:c(b),errors:c.errors}},sortmapkeys:b=>{if(toBoolean(a.sortmapkeys)&&isObject(b)){let c=(d,f)=>{let g=Object.keys(d).sort(),e={};for(let h=0;h -typeof t==="object"&&t!==null&&t!==void 0?sortMapKeys(t,f):t):e[k]=f&&typeof q==="object"&&q!==null&&q!==void 0?c(q,f):q}return e};return c(b,!0)}return b},searchkeys:b=>isObject(b)?searchKeys(b,a.searchkeys):b,searchvalues:b=>isObject(b)?searchValues(b,a.searchvalues):b,maptoarray:b=>toBoolean(a.maptoarray)&&isMap(b)?$m4a(b,a.maptoarraykey):b,arraytomap:b=>toBoolean(a.arraytomap)&&isArray(b)?$a4m(b,a.arraytomapkey,toBoolean(a.arraytomapkeepkey)):b,flatmap:b=>toBoolean(a.flatmap)&&isObject(b)?ow.loadObj().flatMap(b, -a.flatmapsep):b,merge:b=>{if(toBoolean(a.merge)&&isArray(b)&&b.length>1){for(var c,d=0;d{toBoolean(a.correcttypes)&&isObject(b)&&traverse(b,(c,d,f,g)=>{switch(descType(d)){case "number":isString(d)&&(g[c]=Number(d));break;case "string":if(d.trim().toLowerCase()=="true"||d.trim().toLowerCase()=="false")g[c]=toBoolean(d);else{if(isDef(ow.format.fromISODate)){if(d.trim().match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\d+Z$/)){g[c]= -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 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, +h.gcCause="Allocation Failure"));return h}}}catch(f){printErr(f),l(-2,"Error parsing Java GC log: "+f)}})(b);isMap(b)&&(q(b,c,!0),global.__javagc_buffer="")},ndjson:(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);if(a.ndjsonjoin)return!0;isUnDef(global.__ndjsonbuf)&&b.length!=0&&b.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(b.length!=0&&!b.trim().endsWith("}")){global.__ndjsonbuf+=b.trim();return}global.__ndjsonbuf.length> +0&&(b=global.__ndjsonbuf+b,global.__ndjsonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="{"?(q(jsonParse(global.__ndjsonbuf,__,__,!0),c,!0),N=!0,global.__ndjsonbuf=__):(q(jsonParse(b,__,__,!0),c,!0),N=!0)},ndslon:(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);if(a.ndslonjoin)return!0;isUnDef(global.__ndslonbuf)&&b.length!=0&&b.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(b.length!=0&&!b.trim().endsWith(")")){global.__ndslonbuf+= +b.trim();return}global.__ndslonbuf.length>0&&(b=global.__ndslonbuf+b,global.__ndslonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="("?(q(af.fromSLON(global.__ndslonbuf),c,!0),N=!0,global.__ndslonbuf=__):(q(af.fromSLON(String(b)),c,!0),N=!0)},dsv:(b,c)=>{isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&& +(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim=!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&&(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(g=>g.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);T===null&&a.indsvescape&&(T=new RegExp(a.indsvescape+a.indsvquote,"g"));Z===null&&a.indsvsepre&&(Z=new RegExp(a.indsvsepre));var d=g=>{var e={};a.indsvfields.forEach((h,k)=>{e[h]=g[k]});return e},f=g=>{if(isUnDef(g)|| +g.length==0)return __;if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields=g.trim().split(a.indsvsep):a.indsvfields=g.trim().split(Z),a.indsvfields=a.indsvfields.map(h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(T,a.indsvquote));return h}),__;var e={};if(isString(g))return e=isUnDef(a.indsvsepre)?pForEach(g.split(a.indsvsep),h=>{a.indsvtrim&&(h=h.trim()); +a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(T,a.indsvquote));return h}):pForEach(g.split(Z),h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(T,a.indsvquote));return h}),d(e)};if(a.indsvjoin)return!0;b=String(b);if(b.length>0&&b.trim().substring(0,1)!=a.indsvcomment)return b=f(b),isDef(b)&&q(b,c,!0),!0}};if(typeof O=== +"undefined")var O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b};var H={transforms:b=>{if(toBoolean(a.transforms))return Object.keys(H).filter(c=>c!="transforms").sort()},cmlt:b=>{if(toBoolean(a.cmlt)){b=isArray(b)?b:[b];a.cmltch=_$(a.cmltch,"cmltch").or().isString().isMap().default("(type: simple)");var c=y(a.cmltch);if(isMap(c))return isUnDef(c.type)&&l(-1,"cmltch.type is not defined."),isDef(c.lib)&&loadLib(c.lib),$ch().list().indexOf("oafp::cmltdata")< +0&&(c.type=="remote"?$ch("oafp::cmltdata").createRemote(c.url):$ch("oafp::cmltdata").create(c.type,c.options),c=Number(_$(a.cmltsize,"cmltsize").isNumber().default(100))-1,c>0&&$ch("oafp::cmltdata").subscribe(ow.ch.utils.getHousekeepSubscriber("oafp::cmltdata",c))),b.forEach(d=>$ch("oafp::cmltdata").set({t:nowNano()},d)),$ch("oafp::cmltdata").getAll();l(-1,"Invalid cmltch parameter")}},diff:b=>{var c=y(a.diff);if(isMap(c)){isDef(c.a)&&isDef(c.b)||l(-1,"diff.a path and diff.b path are required."); +loadDiff();let d=$path(b,c.a);b=$path(b,c.b);let f=__;toBoolean(a.color)&&(isUnDef(a.difftheme)&&isDef(getEnv("OAFP_DIFFTHEME"))&&(a.difftheme=getEnv("OAFP_DIFFTHEME")),f=y(_$(a.difftheme,"difftheme").or().isString().isMap().default("")),f=merge({added:"GREEN",removed:"RED",common:"FAINT",linenum:"ITALIC",linediv:"FAINT",linesep:"|"},f));let g=(e,h)=>{if(toBoolean(a.color)){isUnDef(h)&&(h="");var k=new Set;if(isArray(e)){let p=1,n=toBoolean(a.diffnlines),v=0;n&&(e.forEach(u=>{v+=u.value.split("\n").length}), +v=String(v).length+1);let t=u=>{let m;m=n&&h!=""?ansiColor(f.linenum,u>0?$ft("% "+v+"d",p):" ".repeat(v))+ansiColor(f.linediv,`${f.linesep}`):"";p+=u;return m};e.forEach((u,m)=>{m=u.value;isString(m)&&(h!=""?(m=m.split(h),m[m.length-1]==""&&m.pop()):m=[m]);k.add(u.added?m.map(r=>t(1)+ansiColor(f.added,(h!=""?"+":"")+r)).join(ansiColor("RESET",h)):u.removed?m.map(r=>t(0)+ansiColor(f.removed,(h!=""?"-":"")+r)).join(ansiColor("RESET",h)):m.map(r=>t(1)+ansiColor(f.common,(h!=""?" ":"")+r)).join(ansiColor("RESET", +h)))})}return Array.from(k).join(ansiColor("RESET",h))}return $from(e).select({count:__,added:!1,removed:!1,value:[]})};return isString(d)&&isString(b)?toBoolean(a.diffwords)?g(JsDiff.diffWords(d,b,c.options)):toBoolean(a.diffwordswithspace)?g(JsDiff.diffWordsWithSpace(d,b,c.options)):toBoolean(a.difflines)?g(JsDiff.diffLines(d,b,c.options),"\n"):toBoolean(a.diffsentences)?g(JsDiff.diffSentences(d,b,c.options),"\n"):g(JsDiff.diffChars(d,b,c.options)):isArray(d)&&isArray(b)&&!toBoolean(a.color)?g(JsDiff.diffArrays(d, +b,c.options)):g(JsDiff.diffJson(d,b,c.options),"\n")}},jsonschemagen:b=>{if(toBoolean(a.jsonschemagen))return ow.loadObj(),ow.obj.schemaGenerator(b)},jsonschemacmd:b=>H.jsonschema(b),jsonschema:b=>{isMap(b)||l(-1,"jsonschema is only supported with a map.");isUnDef(a.jsonschema)&&isUnDef(a.jsonschemacmd)&&l(-1,"You need to provide a jsonschema=someFile.json or jsonschemacmd=someCommand");ow.loadObj();var c;if(isDef(a.jsonschemacmd)){var d=$sh(a.jsonschemacmd).getJson(0);d.exitcode==0?c=d.stdout:l(-1, +"Error executing the command '"+a.jsonschemacmd+"': "+d.stderr)}else c=io.readFileJSON(a.jsonschema);isMap(c)||l(-1,"The schema provided is not a valid JSON schema.");ow.obj.schemaInit({allErrors:!0});c=ow.obj.schemaCompile(c);return{valid:c(b),errors:c.errors}},sortmapkeys:b=>{if(toBoolean(a.sortmapkeys)&&isObject(b)){let c=(d,f)=>{let g=Object.keys(d).sort(),e={};for(let h=0;htypeof n==="object"&&n!==null&&n!==void 0?sortMapKeys(n, +f):n):e[k]=f&&typeof p==="object"&&p!==null&&p!==void 0?c(p,f):p}return e};return c(b,!0)}return b},searchkeys:b=>isObject(b)?searchKeys(b,a.searchkeys):b,searchvalues:b=>isObject(b)?searchValues(b,a.searchvalues):b,maptoarray:b=>toBoolean(a.maptoarray)&&isMap(b)?$m4a(b,a.maptoarraykey):b,arraytomap:b=>toBoolean(a.arraytomap)&&isArray(b)?$a4m(b,a.arraytomapkey,toBoolean(a.arraytomapkeepkey)):b,flatmap:b=>toBoolean(a.flatmap)&&isObject(b)?ow.loadObj().flatMap(b,a.flatmapsep):b,merge:b=>{if(toBoolean(a.merge)&& +isArray(b)&&b.length>1){for(var c,d=0;d{toBoolean(a.correcttypes)&&isObject(b)&&traverse(b,(c,d,f,g)=>{switch(descType(d)){case "number":isString(d)&&(g[c]=Number(d));break;case "string":if(d.trim().toLowerCase()=="true"||d.trim().toLowerCase()=="false")g[c]=toBoolean(d);else{if(isDef(ow.format.fromISODate)){if(d.trim().match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\d+Z$/)){g[c]=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(aa(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 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, +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 p=new Set(c(d)),n=new Set(c(b));return d.filter(m=>!n.has(f(m))).concat(b.filter(m=>!p.has(f(m)))); +case "diff":let v=new Set(c(d)),t=new Set(c(b));return d.map(m=>Object.assign({"*":t.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))}); @@ -71,99 +71,99 @@ return b},field2byte:b=>{let c=a.field2byte.split(",").map(d=>d.trim());traverse !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)&& -a.rawasciiend>0&&a.rawasciiend{if(r=="")return u==d.length-1?__:"\u001b[31m\u240a\u001b[m";r=r.replace(e,p=>["\u001b[4m\u001b[38;5;4m","\\u"+p.charCodeAt(0).toString(16).padStart(2,"0").toUpperCase(),"\u001b[m"].join(""));r=r.replace(h,p=>["\u001b[4m\u001b[33m", -"\\u"+p.charCodeAt(0).toString(16).padStart(4,"0").toUpperCase(),"\u001b[m"].join(""));u{p=g-(E+m)%g;m+=p-1;return["\u001b[38;5;8m",p>2?"\u2508".repeat(p-1):"","\u2192\u001b[m"].join("")}).replace(v,"\u001b[38;5;8m\u00b7\u001b[m")}).filter(r=>typeof r!=="undefined");if(toBoolean(a.rawasciinolinenum))w(b.map(r=>r).join("\n"));else{const r="%"+String(b.length).length+ -".0f";w(b.map((u,m)=>["\u001b[38;5;8m",$f(r,Number(m+1)+f),"\u001b[m\u001b[38;5;8m\u2502\u001b[m",u].join("")).join("\n"))}}],["raw",(b,c)=>{isString(b)?w(b):w(stringify(b,__,""))}],["lines",(b,c)=>{isArray(b)?b.forEach(d=>w(d)):w(b)}],["ini",(b,c)=>{isString(b)||(ow.loadJava(),c=new ow.java.ini,w(c.put(b).save()))}],["toml",(b,c)=>{isUnDef(af.toTOML)&&l(-1,"TOML support not found.");if(isMap(b))w(af.toTOML(b));else if(isArray(b))w(af.toTOML({list:b}));else return __}],["mdyaml",(b,c)=>{isArray(b)? +"").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 p="";isDef(k)&&(k.toLowerCase().indexOf("err")>=0&&(p=f),k.toLowerCase().indexOf("warn")>=0&&(p=g));isDef(h)&&h.length>24&&(h=h.substring(0,23)+"Z");(isDef(e)||isDef(h))&&w([d,h,isDef(k)?"\u001b[m | "+p+k: +"","\u001b[m | ",p,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)&& +a.rawasciiend>0&&a.rawasciiend{if(t=="")return u==d.length-1?__:"\u001b[31m\u240a\u001b[m";t=t.replace(e,r=>["\u001b[4m\u001b[38;5;4m","\\u"+r.charCodeAt(0).toString(16).padStart(2,"0").toUpperCase(),"\u001b[m"].join(""));t=t.replace(h,r=>["\u001b[4m\u001b[33m", +"\\u"+r.charCodeAt(0).toString(16).padStart(4,"0").toUpperCase(),"\u001b[m"].join(""));u{r=g-(E+m)%g;m+=r-1;return["\u001b[38;5;8m",r>2?"\u2508".repeat(r-1):"","\u2192\u001b[m"].join("")}).replace(v,"\u001b[38;5;8m\u00b7\u001b[m")}).filter(t=>typeof t!=="undefined");if(toBoolean(a.rawasciinolinenum))w(b.map(t=>t).join("\n"));else{const t="%"+String(b.length).length+ +".0f";w(b.map((u,m)=>["\u001b[38;5;8m",$f(t,Number(m+1)+f),"\u001b[m\u001b[38;5;8m\u2502\u001b[m",u].join("")).join("\n"))}}],["raw",(b,c)=>{isString(b)?w(b):w(stringify(b,__,""))}],["lines",(b,c)=>{isArray(b)?b.forEach(d=>w(d)):w(b)}],["ini",(b,c)=>{isString(b)||(ow.loadJava(),c=new ow.java.ini,w(c.put(b).save()))}],["toml",(b,c)=>{isUnDef(af.toTOML)&&l(-1,"TOML support not found.");if(isMap(b))w(af.toTOML(b));else if(isArray(b))w(af.toTOML({list:b}));else return __}],["mdyaml",(b,c)=>{isArray(b)? b.forEach((d,f)=>{z(d,merge(c,{__format:"yaml"}));f{isArray(b)&&(ow.loadTemplate(),w(ow.template.md.table(b)))}],["template",(b,c)=>{isString(b)||(ow.loadTemplate(),ow.template.addConditionalHelpers(),ow.template.addOpenAFHelpers(),ow.template.addFormatHelpers(),isUnDef(a.template)&&isUnDef(a.templatepath)&&l(-1,"For out=template you need to provide a template=someFile.hbs or templatepath=..."),a.templatedata=_$(a.templatedata, "templatedata").isString().default("@"),c=isDef(a.template)?toBoolean(a.templatetmpl)?a.template:io.readFileString(a.template):$path(a.__origr,a.templatepath),w($t(c,$path(b,a.templatedata))))}],["openmetrics",(b,c)=>{isString(b)?l(-1,"For out=openmetrics input needs to be an array or map."):(ow.loadMetrics(),b=ow.metrics.fromObj2OpenMetrics(b,a.metricsprefix,a.metricstimestamp),b=b.split("\n").map(d=>{d.indexOf('{_id="')>=0&&(d=d.replace(/{_id="\d+",/,"{"));d.indexOf(',_id="')>=0&&(d=d.replace(/,_id="\d+"}/, "}"));d.indexOf('_id="')>=0&&(d=d.replace(/,_id="\d+",/,","));return d}).filter(d=>d.length>0).join("\n"),w(b))}],["pjson",(b,c)=>{c.__format="prettyjson";z(b,c)}],["ndjson",(b,c)=>{isArray(b)?b.forEach(d=>w(stringify(d,__,""))):isMap(b)?w(stringify(b,__,"")):z(b,c)}],["ndslon",(b,c)=>{isArray(b)?b.forEach(d=>w(af.toSLON(d))):isMap(b)?w(af.toSLON(b)):z(b,c)}],["ndcslon",(b,c)=>{isArray(b)?b.forEach(d=>w(af.toCSLON(d))):isMap(b)?w(af.toCSLON(b)):z(b,c)}],["base64",(b,c)=>{b=isString(b)?b:stringify(b); toBoolean(a.base64gzip)?w(af.fromBytes2String(af.toBase64Bytes(io.gzip(af.fromString2Bytes(b))))):w(af.fromBytes2String(af.toBase64Bytes(b)))}],["gb64json",(b,c)=>{b=isString(b)?b:stringify(b);w(af.fromBytes2String(af.toBase64Bytes(io.gzip(af.fromString2Bytes(b)))))}],["jwt",(b,c)=>{isMap(b)?(isUnDef(a.jwtsecret)&&isUnDef(a.jwtprivkey)&&l(-1,"For out=jwt you need to provide a jwtsecret or a jwtprivkey"),ow.loadServer(),isDef(a.jwtprivkey)?(ow.loadJava(),c=new ow.java.cipher,w(ow.server.jwt.sign(c.readKey4File(a.jwtprivkey, !0,a.jwtalg),b))):w(ow.server.jwt.sign(a.jwtsecret,b))):l(-1,"For out=jwt input needs to be a map.")}],["grid",(b,c)=>{isUnDef(a.grid)&&l(-1,"For out=grid you need to provide a grid=...");c=y(_$(a.grid,"grid").or().isString().isMap().isArray().$_());isArray(c)&&c.length>0&&isArray(c[0])?(c.forEach((d,f)=>{d.forEach((g,e)=>{if(isUnDef(g.type)||g.type!="empty"){if(isDef(g.cmd)){var h=$sh(g.cmd).getJson(0);h=isDef(h)&&isDef(h.stdout)?h.stdout:""}else h=b;if(g.type=="chart"||g.type=="bar")e="_chrt"+(f+ -1)+"."+(e+1),g.obj=(g.type=="chart"?e+" ":"")+V(h,g.obj,e),isUnDef(g.title)&&(g.title="Chart "+e);isDef(g.path)?(g.obj=$path(h,g.path),isUnDef(g.title)&&(g.title=g.path)):isString(h)?g.obj=h:isObject(h)&&g.type!="chart"&&(g.obj=$path(h,"@"))}else g.obj=""})}),c=ow.format.string.grid(c,__,__," ",!0),w(c)):l(-1,"Invalid grid parameter: '"+stringify(a.grid,__,"")+"'")}],["envs",(b,c)=>{b=isArray(b)?b.map(g=>isObject(g)?ow.loadObj().flatMap(g,"_"):g):ow.loadObj().flatMap(b,"_");c=g=>String(g).indexOf(" ")>= +1)+"."+(e+1),g.obj=(g.type=="chart"?e+" ":"")+X(h,g.obj,e),isUnDef(g.title)&&(g.title="Chart "+e);isDef(g.path)?(g.obj=$path(h,g.path),isUnDef(g.title)&&(g.title=g.path)):isString(h)?g.obj=h:isObject(h)&&g.type!="chart"&&(g.obj=$path(h,"@"))}else g.obj=""})}),c=ow.format.string.grid(c,__,__," ",!0),w(c)):l(-1,"Invalid grid parameter: '"+stringify(a.grid,__,"")+"'")}],["envs",(b,c)=>{b=isArray(b)?b.map(g=>isObject(g)?ow.loadObj().flatMap(g,"_"):g):ow.loadObj().flatMap(b,"_");c=g=>String(g).indexOf(" ")>= 0?'"'+g+'"':g;isUnDef(a.envscmd)&&(a.envscmd=ow.format.isWindows()?"set":"export");a.envscmd=String(a.envscmd);isUnDef(a.envsprefix)&&(a.envsprefix="_OAFP_");a.envsprefix=String(a.envsprefix);toBoolean(a.envsnoprefix)&&(a.envsprefix="");var d=new Set,f;for(f in b)d.add(a.envscmd+(a.envscmd.length>0?" ":"")+(a.envsprefix+f.replace(/[^a-zA-Z0-9_]/g,"_"))+"="+c(b[f]));w(Array.from(d).join("\n"))}],["cmd",(b,c)=>{isString(a.outcmd)||l(-1,'For out=cmd you need to provide a outcmd="..."');toBoolean(a.outcmdtmpl)&& (ow.loadTemplate(),ow.template.addConditionalHelpers(),ow.template.addOpenAFHelpers(),ow.template.addFormatHelpers());let d=f=>{var g=isString(f)?f:stringify(f,__,"");if(toBoolean(a.outcmdparam))try{var e=$sh(a.outcmd.replace(/([^\\]?){}/g,"$1"+g)).get(0)}catch(h){sprintErr(h)}else e=toBoolean(a.outcmdtmpl)?$sh($t(a.outcmd,f)).get(0):$sh(a.outcmd,g).get(0);toBoolean(a.outcmdnl)?(e.stdout.length>0&&print(e.stdout),e.stderr.length>0&&printErr(e.stderr)):(e.stdout.length>0&&printnl(e.stdout),e.stderr.length> -0&&printErrnl(e.stderr))};isArray(b)?toBoolean(a.outcmdjoin)?d(b):toBoolean(a.outcmdseq)?b.forEach(d):isDef(pForEach)?pForEach(b,f=>{d(f)}):parallel4Array(b,f=>{d(f)}):(isString(b),d(b))}],["chart",(b,c)=>{isUnDef(a.chart)&&l(-1,'For out=chart you need to provide a chart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"output=chart is not supported in this version of OpenAF");b=V(b,a.chart);b.length>0&&(b=printChart("oafp "+b),toBoolean(a.chartcls)&&cls(),w(b))}],["schart", -(b,c)=>{isUnDef(a.schart)&&l(-1,'For out=schart you need to provide a schart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"Output=schart is not supported in this version of OpenAF");b=V(b,a.schart,"_oafp_sfn_","soafp");b.length>0&&w(printChart("soafp "+b))}],["ch",(b,c)=>{isUnDef(a.ch)&&l(-1,'For out=ch you need to provide a ch="(type: ...)"');isUnDef(a.chkey)&&l(-1,'For out=ch you need to provide a chkey="key1, key2"');b=isMap(b)?[b]:b;a.ch=y(a.ch);isMap(a.ch)?(isUnDef(a.ch.type)&& +0&&printErrnl(e.stderr))};isArray(b)?toBoolean(a.outcmdjoin)?d(b):toBoolean(a.outcmdseq)?b.forEach(d):isDef(pForEach)?pForEach(b,f=>{d(f)}):parallel4Array(b,f=>{d(f)}):(isString(b),d(b))}],["chart",(b,c)=>{isUnDef(a.chart)&&l(-1,'For out=chart you need to provide a chart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"output=chart is not supported in this version of OpenAF");b=X(b,a.chart);b.length>0&&(b=printChart("oafp "+b),toBoolean(a.chartcls)&&cls(),w(b))}],["schart", +(b,c)=>{isUnDef(a.schart)&&l(-1,'For out=schart you need to provide a schart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"Output=schart is not supported in this version of OpenAF");b=X(b,a.schart,"_oafp_sfn_","soafp");b.length>0&&w(printChart("soafp "+b))}],["ch",(b,c)=>{isUnDef(a.ch)&&l(-1,'For out=ch you need to provide a ch="(type: ...)"');isUnDef(a.chkey)&&l(-1,'For out=ch you need to provide a chkey="key1, key2"');b=isMap(b)?[b]:b;a.ch=y(a.ch);isMap(a.ch)?(isUnDef(a.ch.type)&& l(-1,"ch.type is not defined."),isDef(a.ch.lib)&&loadLib(a.ch.lib),a.ch.type=="remote"?$ch("oafp::outdata").createRemote(a.ch.url):$ch("oafp::outdata").create(a.ch.type,isDef($sec().procMap)?$sec().procMap(a.ch.options):a.ch.options),toBoolean(a.chunset)?$ch("oafp::outdata").unsetAll(a.chkey.split(",").map(d=>d.trim()),b):$ch("oafp::outdata").setAll(a.chkey.split(",").map(d=>d.trim()),b),$ch("oafp::outdata").destroy()):l(-1,"Invalid ch parameter")}],["db",(b,c)=>{(!isArray(b)||b.length<1)&&l(-1,"db is only supported for filled arrays/lists"); a.dbtable=_$(a.dbtable,"outdbtable").isString().default("data");a.dbnocreate=_$(toBoolean(a.dbnocreate),"outdbnocreate").isBoolean().default(!1);a.dbicase=_$(toBoolean(a.dbicase),"outdbicase").isBoolean().default(!1);a.dbbatchsize=_$(a.dbbatchsize,"dbbatchsize").isNumber().default(__);ow.loadObj();try{isString(a.dbjdbc)||l(-1,"dbjdbc URL is not defined.");isDef(a.dblib)&&loadLib("jdbc-"+a.dblib+".js");var d=new DB(a.dbjdbc,a.dbuser,a.dbpass,a.dbtimeout);if(!a.dbnocreate)try{var f=ow.obj.fromObj2DBTableCreate(a.dbtable, -b,__,!a.dbicase);d.u(f);d.commit()}catch(q){d.rollback(),l(-1,"Error creating table: "+q)}var g=Object.keys(ow.obj.flatMap(b[0]));var e=a.dbicase?g.join(",").toUpperCase():'"'+g.join('", "')+'"';let k="";var h=b.map(q=>{var t=ow.obj.flatMap(q);q=[];for(var v in g)q.push(t[g[v]]);v=g.map(r=>String(t[r]));q="INSERT INTO "+(a.dbicase?a.dbtable:'"'+a.dbtable+'"')+" ("+e+") VALUES ("+v.map(r=>"?").join(", ")+")";q.length>k.length&&(k=String(q));return v});d.usArray(k,h,a.dbbatchsize)}catch(k){isDef(d)&& +b,__,!a.dbicase);d.u(f);d.commit()}catch(p){d.rollback(),l(-1,"Error creating table: "+p)}var g=Object.keys(ow.obj.flatMap(b[0]));var e=a.dbicase?g.join(",").toUpperCase():'"'+g.join('", "')+'"';let k="";var h=b.map(p=>{var n=ow.obj.flatMap(p);p=[];for(var v in g)p.push(n[g[v]]);v=g.map(t=>String(n[t]));p="INSERT INTO "+(a.dbicase?a.dbtable:'"'+a.dbtable+'"')+" ("+e+") VALUES ("+v.map(t=>"?").join(", ")+")";p.length>k.length&&(k=String(p));return v});d.usArray(k,h,a.dbbatchsize)}catch(k){isDef(d)&& d.rollback(),l(-1,"Error connecting to the database: "+k)}finally{try{isDef(d)&&(d.commit(),d.close())}catch(k){l(-1,"Error closing the database connection: "+k)}}}],["sql",(b,c)=>{(!isArray(b)||b.length<1)&&l(-1,"sql is only supported for filled arrays/lists");a.sqltable=_$(a.sqltable,"sqltable").isString().default("data");a.sqlicase=_$(toBoolean(a.sqlicase),"sqlicase").isBoolean().default(!1);a.sqlnocreate=_$(toBoolean(a.sqlnocreate),"sqlnocreate").isBoolean().default(!1);ow.loadObj();a.sqlnocreate|| w(ow.obj.fromObj2DBTableCreate(a.sqltable,b,__,!a.sqlicase)+";\n");var d=Object.keys(ow.obj.flatMap(b[0]));var f=a.sqlicase?d.join(",").toUpperCase():'"'+d.join('", "')+'"';w(b.map(g=>{var e=ow.obj.flatMap(g);g=[];for(var h in d)g.push(e[d[h]]);h=d.map(k=>{k=e[k];isString(k)&&(k="'"+k.replace(/'/g,"''")+"'");isNull(k)&&(k="null");return k});return"INSERT INTO "+(a.sqlicase?a.sqltable:'"'+a.sqltable+'"')+" ("+f+") VALUES ("+h.join(",")+");"}).join("\n"))}],["xml",(b,c)=>{w(af.fromObj2XML(b,!0,a.outxmlprefix))}], -["pxml",(b,c)=>{b=af.fromObj2XML(b,!0,a.pxmlprefix);w('\n'+new XMLList(b))}],["xls",(b,c)=>{if(!isString(b)){try{includeOPack("plugin-XLS")}catch(e){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");if(isMap(b)){ow.loadObj();var d=ow.obj.flatMap(b);var f=Object.keys(d).map(e=>({key:e,value:d[e]}))}isArray(b)&&(f=b);traverse(f,(e,h,k,q)=>{isString(h)&&h.startsWith("=")&&(q[e]="'"+ +["pxml",(b,c)=>{b=af.fromObj2XML(b,!0,a.pxmlprefix);w('\n'+new XMLList(b))}],["xls",(b,c)=>{if(!isString(b)){try{includeOPack("plugin-XLS")}catch(e){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");if(isMap(b)){ow.loadObj();var d=ow.obj.flatMap(b);var f=Object.keys(d).map(e=>({key:e,value:d[e]}))}isArray(b)&&(f=b);traverse(f,(e,h,k,p)=>{isString(h)&&h.startsWith("=")&&(p[e]="'"+ h)});b=!1;c=a.xlsfile;isUnDef(a.xlsfile)&&(b=!0,a.xlsfile=io.createTempFile("oafp",".xlsx"));c=new XLS(isDef(c)&&io.fileExists(c)?c:__);var g=c.getSheet(_$(a.xlssheet,"xlssheet").isString().default("data"));a.xlsformat=_$(a.xlsformat,"xlsformat").or().isString().isMap().default('(bold: true, borderBottom: "medium", borderBottomColor: "red")');a.xlsformat=y(a.xlsformat);ow.format.xls.setTable(c,g,"A",1,f,__,a.xlsformat);c.writeFile(a.xlsfile);c.close();a.xlsopenwait=_$(a.xlsopenwait,"xlsopenwait").isNumber().default(5E3); a.xlsopen=_$(toBoolean(a.xlsopen),"xlsopen").isBoolean().default(!0);a.xlsopen&&(ow.format.isWindows()?($sh("start "+a.xlsfile).exec(),b&&sleep(a.xlsopenwait,!0)):ow.format.getOS().startsWith("Mac")&&($sh("open "+a.xlsfile).exec(),b&&sleep(a.xlsopenwait,!0)))}}],["oaf",(b,c)=>{isUnDef(a.outoaf)&&l(-1,"For out=oaf you need to provide a outoaf=...");isString(a.outoaf)&&(c=io.fileExists(a.outoaf)?io.readFileString(a.outoaf):a.outoaf,isString(c)&&(new Function("data",c))(b))}],["dsv",(b,c)=>{isUnDef(a.dsvsep)&& (a.dsvsep=",");isUnDef(a.dsvquote)&&(a.dsvquote='\\"');isUnDef(a.dsvfields)&&(a.dsvfields=__);isUnDef(a.dsvuseslon)&&(a.dsvuseslon=!1);isUnDef(a.dsvnl)&&(a.dsvnl="\n");isUnDef(a.dsvheader)&&(a.dsvheader=!0);isDef(a.dsvfields)&&(a.dsvfields=String(a.dsvfields).split(","));isMap(b)&&(b=[b]);if(isArray(b)){var d=[];toBoolean(a.dsvheader)&&isArray(b)&&b.length>0&&(isDef(a.dsvfields)&&isArray(a.dsvfields)?d.push(a.dsvfields.map(f=>{isString(f)?(f=f.replace(/"/g,'""'),f=`"${f}"`):isNull(f)&&(f="");return f})): d.push(Object.keys(b[0]).map(f=>{isString(f)?(f=f.replace(/"/g,'""'),f=`"${f}"`):isNull(f)&&(f="");return f})),a.dsvnl.length>0&&d.push(a.dsvnl));isArray(a.dsvfields)||(a.dsvfields=__);b.forEach((f,g)=>{g>0&&d.push(a.dsvnl);g=pForEach(isDef(a.dsvfields)?a.dsvfields:Object.keys(f),e=>{e=f[e];if(isString(e))e=e.replace(/"/g,'""'),e=`"${e}"`;else if(isNull(e))e="";else if(isArray(e)||isMap(e))e=a.dsvuseslon?af.toSLON(e):stringify(e,__,""),e=e.replace(/"/g,a.dsvquote),e=`"${e}"`;return e});d.push(g.join(a.dsvsep))}); -a.dsvnl.length>0&&d.length>0&&d[d.length-1]!=a.dsvnl&&b.length>1&&d.push(a.dsvnl)}else l(-1,"For out=dsv, input needs to be an array or map.");w(d.join(""))}]]);typeof O==="undefined"&&(O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b});var K=new Map([["?",(b,c)=>{b=Array.from(K.keys()).filter(d=>d!="?").sort();n(b,c)}],["pm",(b,c)=>{x();isDef(__pm._map)&&(b=__pm._map);isDef(__pm._list)&&(b=__pm._list);n(b,c)}],["key",(b,c)=>{x();isString(b)|| -l(-1,"key is only supported with a string.");n($get(b),c)}],["jsonschema",(b,c)=>{x();b=jsonParse(b,__,__,!0);isMap(b)||l(-1,"jsonschema is only supported with a map.");ow.loadObj();b=ow.obj.schemaSampleGenerator(b);n(b,c)}],["yaml",(b,c)=>{x();b=af.fromYAML(b);n(b,c)}],["xml",(b,c)=>{x();a.xmlignored=_$(a.xmlignored,"xmlignored").isString().default(__);a.xmlprefix=_$(a.xmlprefix,"xmlprefix").isString().default(__);a.xmlfiltertag=_$(toBoolean(a.xmlfiltertag),"xmlfiltertag").isBoolean().default(__); -b=af.fromXML2Obj(b,a.xmlignored,a.xmlprefix,!a.xmlfiltertag);n(b,c)}],["lines",(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);x();let d=__,f=[];a.linesvisualheadsep=_$(toBoolean(a.linesvisualheadsep),"linesvisualheadsep").isBoolean().default(!1);let g=!1,e=!1;isUnDef(a.linesvisualsepre)&&(a.linesvisualsepre=a.linesvisualheadsep?"\\s+":" \\s+");let h=t=>{t=t.split("\n").map(r=>{let u="",m=0;for(let p=0;p{v[d[u]]=t.substring(r,u+1{if(u.trim().length!=0){g||d.push(u);if(!a.linesvisualheadsep&&!g||g&&a.linesvisualheadsep&&!e)u=t.substring(r).match(new RegExp(ow.format.escapeRE(u)+"("+a.linesvisualsepre+"|$)")),!isNull(u)&&isDef(u.index)?(f.push(r+u.index),r+=u[0].length):l(-1,"Problem with linesvisual to find header positioning."); -return r}},0);g?a.linesvisualheadsep&&!e&&(e=!0):(g=!0,a.linesvisualheadsep||(e=!0));return __};if(a.linesjoin)if(isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),b=b.split(/\r?\n/),toBoolean(a.linesvisual)){var k=[];b.forEach(t=>{t.length!=0&&(t=h(t),isDef(t)&&k.push(t))});n(k,c)}else n(b,c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var q=P();ioStreamReadLines(b, -t=>{S(q,()=>{if(toBoolean(a.linesvisual)){var v=h(t);isDef(v)&&n(v,clone(c),!0)}else n(t,clone(c),!0)});q=Q(q)});R(q);b.close()}}],["ndjson",(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);x();global.__ndjsonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndjsonbuf)&&e.length!=0&&e.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(e.length!=0&&!e.trim().endsWith("}")){global.__ndjsonbuf+=e.trim();return}global.__ndjsonbuf.length> -0&&(e=global.__ndjsonbuf+e,global.__ndjsonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="{"?(noOut=!1,h(e),global.__ndjsonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,q=>h.push(jsonParse(q,__,__,toBoolean(a.ndjsonfilter)))));return h};if(a.ndjsonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),n(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)? -af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>n(jsonParse(h,__,__,!0),clone(c),!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["ndslon",(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);x();global.__ndslonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndslonbuf)&&e.length!=0&&e.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(e.length!=0&&!e.trim().endsWith(")")){global.__ndslonbuf+= -e.trim();return}global.__ndslonbuf.length>0&&(e=global.__ndslonbuf+e,global.__ndslonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="("?(noOut=!1,h(e),global.__ndslonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,q=>h.push(af.fromSLON(q))));return h};if(a.ndslonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),n(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file): -isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>n(af.fromSLON(h),clone(c),!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["dsv",(b,c)=>{x();isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&&(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim= -!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&&(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(e=>e.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);var d=e=>{var h={};a.indsvfields.forEach((k,q)=>{h[k]=e[q]});return h},f=e=>{if(isUnDef(e)||e.length==0)return{};if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields=e.trim().split(a.indsvsep):a.indsvfields=e.trim().split(new RegExp(a.indsvsepre)), -a.indsvfields=a.indsvfields.map(k=>{a.indsvtrim&&(k=k.trim());a.indsvquote&&k.startsWith(a.indsvquote)&&k.endsWith(a.indsvquote)&&(k=k.substring(1,k.length-1));a.indsvescape&&(k=k.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return k}),__;var h={};if(isString(e))return h=isUnDef(a.indsvsepre)?pForEach(e.split(a.indsvsep),k=>{a.indsvtrim&&(k=k.trim());a.indsvquote&&k.startsWith(a.indsvquote)&&k.endsWith(a.indsvquote)&&(k=k.substring(1,k.length-1));a.indsvescape&&(k=k.replace(new RegExp(a.indsvescape+ -a.indsvquote,"g"),a.indsvquote));return k}):pForEach(e.split(new RegExp(a.indsvsepre)),k=>{a.indsvtrim&&(k=k.trim());a.indsvquote&&k.startsWith(a.indsvquote)&&k.endsWith(a.indsvquote)&&(k=k.substring(1,k.length-1));a.indsvescape&&(k=k.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return k}),d(h)};if(a.indsvjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),n(b.split(/\r?\n/).map(e=>isUnDef(e)||e.length==0||e.trim().startsWith(a.indsvcomment)? -__:f(e)).filter(e=>isDef(e)),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{if(!isUnDef(e)&&e.length!=0&&!e.trim().startsWith(a.indsvcomment))return S(g,()=>{if(isString(e)){var h=f(e);isDef(h)&&n(h,clone(c),!0)}return!0}),g=Q(g),!1});R(g);b.close()}L()}],["md",(b,c)=>{x();__conConsole=__ansiColorFlag=!0;isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="md",c.__format= -"md");n(b,c)}],["mdtable",(b,c)=>{x();ow.loadTemplate();if(toBoolean(a.inmdtablejoin)){var d=new Set,f=new Set,g=()=>{f.size>0&&(d.add(ow.template.md.fromTable(Array.from(f).join("\n"))),f.clear())};b.split("\n").forEach(e=>{/^\|.+\|$/.test(e.trim())?f.add(e.trim()):g()});g();n(Array.from(d),c)}else f=ow.template.md.fromTable(b),n(f,c)}],["mdcode",(b,c)=>{x();var d=[];b=b.split("\n");var f=!1,g={language:"",code:[],startLine:-1,endLine:-1};b.forEach((e,h)=>{var k=e.trim().match(/^```+[^`]+```+$/), -q=e.trim().match(/^```+(.+)?$/),t=f&&(e.trim().match(/^```+$/)||e.trim().match(/[^`]```+$/));k?(f=!1,g={language:__,code:e.replace(/^```+/,"").replace(/```+$/,"").trim(),startLine:h+1,endLine:h+1},d.push(g)):q&&!f?(f=!0,g={language:q[1],code:[],startLine:h+1,endLine:-1}):t&&f?(f=!1,g.endLine=h+1,g.code=g.code.join("\n"),d.push(g),g={language:"",code:[],startLine:-1,endLine:-1}):f&&g.code.push(e)});f&&(g.endLine=b.length,g.code=g.code.join("\n"),d.push(g));n(d,c)}],["ask",(b,c)=>{var d=[];b=y(b);isDef(askStruct)&& -isArray(b)&&(__conConsole=!0,__con.getTerminal().settings.set("-icanon min 1 -echo"),d=askStruct(b),__con.getTerminal().settings.set("icanon echo"),print(""));n(d,c)}],["raw",(b,c)=>{x();n(b,c)}],["ini",(b,c)=>{x();ow.loadJava();var d=new ow.java.ini;b=isDef(a.file)?d.loadFile(a.file).get():d.load(b).get();n(b,c)}],["jwt",(b,c)=>{ow.loadServer();if(toBoolean(a.injwtverify)){isUnDef(a.injwtsecret)&&isUnDef(a.injwtpubkey)&&l(-1,"injwtsecret or injwtpubkey is not defined.");try{if(isDef(a.injwtpubkey)){ow.loadJava(); -var d=new ow.java.cipher;ow.server.jwt.verify(d.readKey4File(a.injwtpubkey,!1,a.injwtalg),b.trim())}else ow.server.jwt.verify(a.injwtsecret,b.trim());var f=!0}catch(g){isDef(g.javaException)&&printErr(g.javaException.getMessage()),f=!1}}b=ow.server.jwt.decode(b);isDef(f)&&(b.__verified=f);!toBoolean(a.injwtraw)&&isDef(b)&&isMap(b.claims)&&(isDef(b.claims.exp)&&(b.claims.exp=new Date(b.claims.exp*1E3)),isDef(b.claims.iat)&&(b.claims.iat=new Date(b.claims.iat*1E3)),isDef(b.claims.nbf)&&(b.claims.nbf= -new Date(b.claims.nbf*1E3)));n(b,c)}],["sql",(b,c)=>{isString(b)?toBoolean(a.sqlparse)?(isUnDef(ow.format.sqlFormat)&&l(-1,"SQL parse not available."),n(ow.format.sqlFormat(b,isDef(a.sqloptions)?y(a.sqloptions):__),c)):n(af.fromSQL(b).ast,c):n(b,c)}],["openmetrics",(b,c)=>{isString(b)?(ow.loadMetrics(),n(ow.metrics.fromOpenMetrics2Array(b),c)):n(b,c)}],["ch",(b,c)=>{x();isUnDef(a.inch)&&l(-1,"inch is not defined.");a.inch=y(a.inch);if(isMap(a.inch)){isUnDef(a.inch.type)&&l(-1,"inch.type is not defined."); -isDef(a.inch.lib)&&loadLib(a.inch.lib);a.inch.type=="remote"?$ch("oafp::indata").createRemote(a.inch.url):$ch("oafp::indata").create(a.inch.type,isDef($sec().procMap)?$sec().procMap(a.inch.options):a.inch.options);var d=y(b,!0);toBoolean(a.inchall)||b.trim().length==0?n($ch("oafp::indata").getAll(isMap(d)?d:__),c):n($ch("oafp::indata").get(isMap(d)?d:__),c);$ch("oafp::indata").destroy()}else l(-1,"inch is not a valid map.")}],["db",(b,c)=>{if(isString(b)){x();isString(a.indbjdbc)||l(-1,"indbjdbc URL is not defined."); -try{isDef(a.indblib)&&loadLib("jdbc-"+a.indblib+".js");var d=new DB(a.indbjdbc,a.indbuser,a.indbpass,a.indbtimeout);d.convertDates(!0);toBoolean(a.indbautocommit)&&d.setAutoCommit(!0);if(toBoolean(a.indbexec)){var f=d.u(b);n({affectedRows:f},c);d.commit()}else if(toBoolean(a.indbstream)){var g=d.qsRS(b);try{for(;g.next();){f={};for(var e=1;e<=g.getMetaData().getColumnCount();e++){var h=g.getObject(e);switch(g.getMetaData().getColumnType(e)){case java.sql.Types.BIGINT:case java.sql.Types.INTEGER:case java.sql.Types.TINYINT:case java.sql.Types.SMALLINT:case java.sql.Types.NUMERIC:h= -Number(h);break;case java.sql.Types.DOUBLE:case java.sql.Types.FLOAT:case java.sql.Types.REAL:case java.sql.Types.DECIMAL:h=Number(h);break;case java.sql.Types.BOOLEAN:h=!!h;break;case java.sql.Types.TIME:case java.sql.Types.DATE:case java.sql.Types.TIMESTAMP:h=new Date(h.getTime());break;case java.sql.Types.NULL:h=null;break;default:h=String(h)}f[g.getMetaData().getColumnName(e)]=h}n(f,c)}}catch(k){l(-1,"Error streaming SQL: "+k.message)}finally{d.closeStatement(b),g.close()}}else if(toBoolean(a.indbdesc)){f= +a.dsvnl.length>0&&d.length>0&&d[d.length-1]!=a.dsvnl&&b.length>1&&d.push(a.dsvnl)}else l(-1,"For out=dsv, input needs to be an array or map.");w(d.join(""))}]]);typeof O==="undefined"&&(O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b});var K=new Map([["?",(b,c)=>{b=Array.from(K.keys()).filter(d=>d!="?").sort();q(b,c)}],["pm",(b,c)=>{x();isDef(__pm._map)&&(b=__pm._map);isDef(__pm._list)&&(b=__pm._list);q(b,c)}],["key",(b,c)=>{x();isString(b)|| +l(-1,"key is only supported with a string.");q($get(b),c)}],["jsonschema",(b,c)=>{x();b=jsonParse(b,__,__,!0);isMap(b)||l(-1,"jsonschema is only supported with a map.");ow.loadObj();b=ow.obj.schemaSampleGenerator(b);q(b,c)}],["yaml",(b,c)=>{x();b=af.fromYAML(b);q(b,c)}],["xml",(b,c)=>{x();a.xmlignored=_$(a.xmlignored,"xmlignored").isString().default(__);a.xmlprefix=_$(a.xmlprefix,"xmlprefix").isString().default(__);a.xmlfiltertag=_$(toBoolean(a.xmlfiltertag),"xmlfiltertag").isBoolean().default(__); +b=af.fromXML2Obj(b,a.xmlignored,a.xmlprefix,!a.xmlfiltertag);q(b,c)}],["lines",(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);x();let d=__,f=[];a.linesvisualheadsep=_$(toBoolean(a.linesvisualheadsep),"linesvisualheadsep").isBoolean().default(!1);let g=!1,e=!1;isUnDef(a.linesvisualsepre)&&(a.linesvisualsepre=a.linesvisualheadsep?"\\s+":" \\s+");let h=n=>{n=n.split("\n").map(t=>{let u="",m=0;for(let r=0;r{v[d[u]]=n.substring(t,u+1{if(u.trim().length!=0){g||d.push(u);if(!a.linesvisualheadsep&&!g||g&&a.linesvisualheadsep&&!e)u=n.substring(t).match(new RegExp(ow.format.escapeRE(u)+"("+a.linesvisualsepre+"|$)")),!isNull(u)&&isDef(u.index)?(f.push(t+u.index),t+=u[0].length):l(-1,"Problem with linesvisual to find header positioning."); +return t}},0);g?a.linesvisualheadsep&&!e&&(e=!0):(g=!0,a.linesvisualheadsep||(e=!0));return __};if(a.linesjoin)if(isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),b=b.split(/\r?\n/),toBoolean(a.linesvisual)){var k=[];b.forEach(n=>{n.length!=0&&(n=h(n),isDef(n)&&k.push(n))});q(k,c)}else q(b,c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var p=P();ioStreamReadLines(b, +n=>{S(p,()=>{if(toBoolean(a.linesvisual)){var v=h(n);isDef(v)&&q(v,c,!0)}else q(n,c,!0)});p=Q(p)});R(p);b.close()}}],["ndjson",(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);x();global.__ndjsonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndjsonbuf)&&e.length!=0&&e.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(e.length!=0&&!e.trim().endsWith("}")){global.__ndjsonbuf+=e.trim();return}global.__ndjsonbuf.length>0&&(e=global.__ndjsonbuf+ +e,global.__ndjsonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="{"?(noOut=!1,h(e),global.__ndjsonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,p=>h.push(jsonParse(p,__,__,toBoolean(a.ndjsonfilter)))));return h};if(a.ndjsonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),q(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)): +af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>q(jsonParse(h,__,__,!0),c,!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["ndslon",(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);x();global.__ndslonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndslonbuf)&&e.length!=0&&e.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(e.length!=0&&!e.trim().endsWith(")")){global.__ndslonbuf+=e.trim();return}global.__ndslonbuf.length> +0&&(e=global.__ndslonbuf+e,global.__ndslonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="("?(noOut=!1,h(e),global.__ndslonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,p=>h.push(af.fromSLON(p))));return h};if(a.ndslonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),q(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)): +af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>q(af.fromSLON(h),c,!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["dsv",(b,c)=>{x();isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&&(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim=!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&& +(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(k=>k.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);var d=a.indsvescape?new RegExp(a.indsvescape+a.indsvquote,"g"):null,f=a.indsvsepre?new RegExp(a.indsvsepre):null,g=k=>{var p={};a.indsvfields.forEach((n,v)=>{p[n]=k[v]});return p},e=k=>{if(isUnDef(k)||k.length==0)return{};if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields=k.trim().split(a.indsvsep): +a.indsvfields=k.trim().split(f),a.indsvfields=a.indsvfields.map(n=>{a.indsvtrim&&(n=n.trim());a.indsvquote&&n.startsWith(a.indsvquote)&&n.endsWith(a.indsvquote)&&(n=n.substring(1,n.length-1));a.indsvescape&&(n=n.replace(d,a.indsvquote));return n}),__;var p={};if(isString(k))return p=isUnDef(a.indsvsepre)?pForEach(k.split(a.indsvsep),n=>{a.indsvtrim&&(n=n.trim());a.indsvquote&&n.startsWith(a.indsvquote)&&n.endsWith(a.indsvquote)&&(n=n.substring(1,n.length-1));a.indsvescape&&(n=n.replace(d,a.indsvquote)); +return n}):pForEach(k.split(f),n=>{a.indsvtrim&&(n=n.trim());a.indsvquote&&n.startsWith(a.indsvquote)&&n.endsWith(a.indsvquote)&&(n=n.substring(1,n.length-1));a.indsvescape&&(n=n.replace(d,a.indsvquote));return n}),g(p)};if(a.indsvjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),q(b.split(/\r?\n/).map(k=>isUnDef(k)||k.length==0||k.trim().startsWith(a.indsvcomment)?__:e(k)).filter(k=>isDef(k)),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file): +isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var h=P();ioStreamReadLines(b,k=>{if(!isUnDef(k)&&k.length!=0&&!k.trim().startsWith(a.indsvcomment))return S(h,()=>{if(isString(k)){var p=e(k);isDef(p)&&q(p,c,!0)}return!0}),h=Q(h),!1});R(h);b.close()}L()}],["md",(b,c)=>{x();__conConsole=__ansiColorFlag=!0;isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="md",c.__format="md");q(b,c)}],["mdtable",(b,c)=>{x();ow.loadTemplate();if(toBoolean(a.inmdtablejoin)){var d=new Set, +f=new Set,g=()=>{f.size>0&&(d.add(ow.template.md.fromTable(Array.from(f).join("\n"))),f.clear())};b.split("\n").forEach(e=>{/^\|.+\|$/.test(e.trim())?f.add(e.trim()):g()});g();q(Array.from(d),c)}else f=ow.template.md.fromTable(b),q(f,c)}],["mdcode",(b,c)=>{x();var d=[];b=b.split("\n");var f=!1,g={language:"",code:[],startLine:-1,endLine:-1};b.forEach((e,h)=>{var k=e.trim().match(/^```+[^`]+```+$/),p=e.trim().match(/^```+(.+)?$/),n=f&&(e.trim().match(/^```+$/)||e.trim().match(/[^`]```+$/));k?(f=!1, +g={language:__,code:e.replace(/^```+/,"").replace(/```+$/,"").trim(),startLine:h+1,endLine:h+1},d.push(g)):p&&!f?(f=!0,g={language:p[1],code:[],startLine:h+1,endLine:-1}):n&&f?(f=!1,g.endLine=h+1,g.code=g.code.join("\n"),d.push(g),g={language:"",code:[],startLine:-1,endLine:-1}):f&&g.code.push(e)});f&&(g.endLine=b.length,g.code=g.code.join("\n"),d.push(g));q(d,c)}],["ask",(b,c)=>{var d=[];b=y(b);isDef(askStruct)&&isArray(b)&&(__conConsole=!0,__con.getTerminal().settings.set("-icanon min 1 -echo"), +d=askStruct(b),__con.getTerminal().settings.set("icanon echo"),print(""));q(d,c)}],["raw",(b,c)=>{x();q(b,c)}],["ini",(b,c)=>{x();ow.loadJava();var d=new ow.java.ini;b=isDef(a.file)?d.loadFile(a.file).get():d.load(b).get();q(b,c)}],["jwt",(b,c)=>{ow.loadServer();if(toBoolean(a.injwtverify)){isUnDef(a.injwtsecret)&&isUnDef(a.injwtpubkey)&&l(-1,"injwtsecret or injwtpubkey is not defined.");try{if(isDef(a.injwtpubkey)){ow.loadJava();var d=new ow.java.cipher;ow.server.jwt.verify(d.readKey4File(a.injwtpubkey, +!1,a.injwtalg),b.trim())}else ow.server.jwt.verify(a.injwtsecret,b.trim());var f=!0}catch(g){isDef(g.javaException)&&printErr(g.javaException.getMessage()),f=!1}}b=ow.server.jwt.decode(b);isDef(f)&&(b.__verified=f);!toBoolean(a.injwtraw)&&isDef(b)&&isMap(b.claims)&&(isDef(b.claims.exp)&&(b.claims.exp=new Date(b.claims.exp*1E3)),isDef(b.claims.iat)&&(b.claims.iat=new Date(b.claims.iat*1E3)),isDef(b.claims.nbf)&&(b.claims.nbf=new Date(b.claims.nbf*1E3)));q(b,c)}],["sql",(b,c)=>{isString(b)?toBoolean(a.sqlparse)? +(isUnDef(ow.format.sqlFormat)&&l(-1,"SQL parse not available."),q(ow.format.sqlFormat(b,isDef(a.sqloptions)?y(a.sqloptions):__),c)):q(af.fromSQL(b).ast,c):q(b,c)}],["openmetrics",(b,c)=>{isString(b)?(ow.loadMetrics(),q(ow.metrics.fromOpenMetrics2Array(b),c)):q(b,c)}],["ch",(b,c)=>{x();isUnDef(a.inch)&&l(-1,"inch is not defined.");a.inch=y(a.inch);if(isMap(a.inch)){isUnDef(a.inch.type)&&l(-1,"inch.type is not defined.");isDef(a.inch.lib)&&loadLib(a.inch.lib);a.inch.type=="remote"?$ch("oafp::indata").createRemote(a.inch.url): +$ch("oafp::indata").create(a.inch.type,isDef($sec().procMap)?$sec().procMap(a.inch.options):a.inch.options);var d=y(b,!0);toBoolean(a.inchall)||b.trim().length==0?q($ch("oafp::indata").getAll(isMap(d)?d:__),c):q($ch("oafp::indata").get(isMap(d)?d:__),c);$ch("oafp::indata").destroy()}else l(-1,"inch is not a valid map.")}],["db",(b,c)=>{if(isString(b)){x();isString(a.indbjdbc)||l(-1,"indbjdbc URL is not defined.");try{isDef(a.indblib)&&loadLib("jdbc-"+a.indblib+".js");var d=new DB(a.indbjdbc,a.indbuser, +a.indbpass,a.indbtimeout);d.convertDates(!0);toBoolean(a.indbautocommit)&&d.setAutoCommit(!0);if(toBoolean(a.indbexec)){var f=d.u(b);q({affectedRows:f},c);d.commit()}else if(toBoolean(a.indbstream)){var g=d.qsRS(b);try{for(;g.next();){f={};for(var e=1;e<=g.getMetaData().getColumnCount();e++){var h=g.getObject(e);switch(g.getMetaData().getColumnType(e)){case java.sql.Types.BIGINT:case java.sql.Types.INTEGER:case java.sql.Types.TINYINT:case java.sql.Types.SMALLINT:case java.sql.Types.NUMERIC:h=Number(h); +break;case java.sql.Types.DOUBLE:case java.sql.Types.FLOAT:case java.sql.Types.REAL:case java.sql.Types.DECIMAL:h=Number(h);break;case java.sql.Types.BOOLEAN:h=!!h;break;case java.sql.Types.TIME:case java.sql.Types.DATE:case java.sql.Types.TIMESTAMP:h=new Date(h.getTime());break;case java.sql.Types.NULL:h=null;break;default:h=String(h)}f[g.getMetaData().getColumnName(e)]=h}q(f,c)}}catch(k){l(-1,"Error streaming SQL: "+k.message)}finally{d.closeStatement(b),g.close()}}else if(toBoolean(a.indbdesc)){f= d.qsRS(b);g=[];try{for(e=1;e<=f.getMetaData().getColumnCount();e++)g.push({name:f.getMetaData().getColumnName(e),type:f.getMetaData().getColumnTypeName(e),size:f.getMetaData().getColumnDisplaySize(e),nullable:f.getMetaData().isNullable(e)==1,autoIncrement:f.getMetaData().isAutoIncrement(e),precision:f.getMetaData().getPrecision(e),scale:f.getMetaData().getScale(e),table:f.getMetaData().getTableName(e),schema:f.getMetaData().getSchemaName(e),catalog:f.getMetaData().getCatalogName(e),columnType:f.getMetaData().getColumnType(e)}); -n(g,c)}catch(k){l(-1,"Error getting SQL description: "+k.message)}finally{d.closeStatement(b),f.close()}}else f=d.q(b),isMap(f)&&isArray(f.results)?n(f.results,c):l(-1,"Invalid DB result: "+stringify(f))}catch(k){printErr(k.message),isDef(d)&&d.rollback(),l(-1,"Error executing SQL: "+k.message)}finally{isDef(d)&&(d.rollback(),d.close())}}else l(-1,"db is only supported with a SQL string.")}],["minia",(b,c)=>{a.minianolog=toBoolean(_$(a.minianolog,"minianolog").isString().default(!1));a.minianolog&& -x();try{includeOPack("mini-a")}catch(e){l(-1,"mini-a not found. You need to install it to use the mini-a output (opack install mini-a)")}loadLib("mini-a.js");b=y(b,!0);isMap(b)||isArray(b)||l(-1,"mini-a is only supported with a map or array input.");var d=new MiniA,f=!0;isUnDef(b.format)&&(b.format="json",f=!1);isDef(b.goal)&&b.format=="json"&&(b.goal+="; answer in json",f=!1);b.shellbatch=!0;d.setInteractionFn((e,h)=>{d.defaultInteractionFn(e,h,(k,q,t)=>{a.minianolog||printErr(k+" "+ansiColor("FAINT,ITALIC", -q));isDef(a.minialogfile)&&io.writeFileString(a.minialogfile,`${ow.format.fromDate(new Date,"yyyy-MM-dd HH:mm:ss.SSS")} | INFO | ${t} | ${k} | ${q}\n`,__,!0)})});d.init(b);b=d.start(b);var g=f?b:y(b,!0);isDef(a.miniametrics)&&io.writeFileJSON($t(a.miniametrics,{id:d.getId()}),d.getMetrics(),"");n(isObject(g)&&f?g:b,c)}],["xls",(b,c)=>{x();try{includeOPack("plugin-XLS")}catch(k){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");var d= +q(g,c)}catch(k){l(-1,"Error getting SQL description: "+k.message)}finally{d.closeStatement(b),f.close()}}else f=d.q(b),isMap(f)&&isArray(f.results)?q(f.results,c):l(-1,"Invalid DB result: "+stringify(f))}catch(k){printErr(k.message),isDef(d)&&d.rollback(),l(-1,"Error executing SQL: "+k.message)}finally{isDef(d)&&(d.rollback(),d.close())}}else l(-1,"db is only supported with a SQL string.")}],["minia",(b,c)=>{a.minianolog=toBoolean(_$(a.minianolog,"minianolog").isString().default(!1));a.minianolog&& +x();try{includeOPack("mini-a")}catch(e){l(-1,"mini-a not found. You need to install it to use the mini-a output (opack install mini-a)")}loadLib("mini-a.js");b=y(b,!0);isMap(b)||isArray(b)||l(-1,"mini-a is only supported with a map or array input.");var d=new MiniA,f=!0;isUnDef(b.format)&&(b.format="json",f=!1);isDef(b.goal)&&b.format=="json"&&(b.goal+="; answer in json",f=!1);b.shellbatch=!0;d.setInteractionFn((e,h)=>{d.defaultInteractionFn(e,h,(k,p,n)=>{a.minianolog||printErr(k+" "+ansiColor("FAINT,ITALIC", +p));isDef(a.minialogfile)&&io.writeFileString(a.minialogfile,`${ow.format.fromDate(new Date,"yyyy-MM-dd HH:mm:ss.SSS")} | INFO | ${n} | ${k} | ${p}\n`,__,!0)})});d.init(b);b=d.start(b);var g=f?b:y(b,!0);isDef(a.miniametrics)&&io.writeFileJSON($t(a.miniametrics,{id:d.getId()}),d.getMetrics(),"");q(isObject(g)&&f?g:b,c)}],["xls",(b,c)=>{x();try{includeOPack("plugin-XLS")}catch(k){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");var d= b=!1;a.inxlsdesc=toBoolean(_$(a.inxlsdesc,"inxlsdesc").isString().default(!1));a.inxlsdesc&&(isUnDef(a.inxlssheet)?d=!0:b=!0);a.inxlssheet=_$(a.inxlssheet||a.xlssheet,"xlssheet").isString().default(0);a.inxlsevalformulas=_$(toBoolean(a.inxlsevalformulas||a.xlsevalformulas),"xlsevalformulas").isBoolean().default(!0);a.inxlscol=_$(a.inxlscol||a.xlscol,"xlscol").isString().default("A");a.inxlsrow=_$(a.inxlsrow||a.xlsrow,"xlsrow").isString().default(1);if(isDef(a.file)||isDef(a.cmd)){var f=new XLS(isDef(a.cmd)? -C(a.cmd):a.file);if(d)h=f.getSheetNames();else if(d=f.getSheet(a.inxlssheet),b){var g=f.getCellValues(d,!1),e=[];Object.keys(g).forEach(k=>{k=Object.keys(g[k]);k.length>e.length&&(e=k)});h=[];Object.keys(g).map(k=>{var q={" ":k};e.forEach(t=>q[t]=isNull(g[k][t])||g[k][t].type=="BLANK"?"___":"###");h.push(q)});isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="ctable",c.__format="ctable")}else{var h=f.getTable(d,a.inxlsevalformulas,a.inxlscol,a.inxlsrow);isDef(h)&&isMap(h)&&(h=h.table)}f.close();n(h, -c)}else l(-1,"XLS is only support with 'file' or 'cmd' defined. Please provide a file=... or a cmd=...")}],["csv",(b,c)=>{x();isUnDef(a.inputcsv)&&isDef(a.incsv)&&(a.inputcsv=a.incsv);if(isDef(a.file)||isDef(a.cmd)){var d=isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):io.readFileStream(a.file);b=$csv(a.inputcsv).fromInStream(d).toOutArray();d.close()}else b=$csv(a.inputcsv).fromInString(b).toOutArray();n(b,c)}],["javathread",(b,c)=>{x();if(isDef(a.javathreadpid)){ow.loadJava();try{var d=ow.java.jcmd(a.javathreadpid, -"Thread.print");d=d.split("\n").filter(e=>e.startsWith('"'))}catch(e){l(-1,"Error getting Java thread dump: "+e.message)}}else isString(b)?d=b.split("\n"):l(-1,"javathreads is only supported with a raw input or javathreadpid=.");var f=(e,h)=>{if(e===null||e===void 0)return"";if(isBoolean(e))return!!e;if(isNumber(e))return Number(e);if(h){var k=String(e);_$(k,"aStr").isString().$_();e=k.trim().match(/[\d\.]+[a-zA-Z]+/g);h=0;if(isArray(e)&&e.length!==0){for(v in e){var q=e[v].match(/(\d+(?:\.\d+)?)\s*([a-zA-Z]+)/); -if(isArray(q)&&q.length>0){k=Number(q[1]);q=String(q[2]);var t={ms:1,s:1E3,m:6E4,h:36E5,d:864E5,w:6048E5,M:2592E6,y:31536E6};h=isDef(t[q])?h+k*t[q]:h+k}}var v=h}else v=parseFloat(k);return v}return String(e)},g=[];d.forEach(e=>{if(e.startsWith('"')){var h=java.util.regex.Pattern.compile('^\\"(?[^"]+)\\"(?:\\s+#(?\\d+))?(?:\\s+\\[(?\\d+)\\])?(?:\\s+(?daemon))?(?:\\s+prio=(?\\d+))?\\s+os_prio=(?\\d+)(?:\\s+cpu=(?[0-9.]+ms))?(?:\\s+elapsed=(?[0-9.]+s))?(?:\\s+tid=(?0x[a-fA-F0-9]+))?(?:\\s+nid=(?0x[a-fA-F0-9]+|\\d+|\\S+))?(?:\\s+(?.*?))?(?:\\s+\\[(?
[^\\]]+)\\])?\\s*$').matcher(e); -h.find()?(e={threadGroup:f(h.group("threadName")).replace(/[^a-zA-z]?\d+$/,""),threadName:f(h.group("threadName")),threadId:f(h.group("threadId")),threadIndex:f(h.group("threadIndex")),daemon:f(h.group("daemon")),prio:f(h.group("prio")),osPrio:f(h.group("osPrio")),cpu_ms:f(h.group("cpu"),!0),elapsed_ms:f(h.group("elapsed"),!0),tid:f(h.group("tid")),nid:f(h.group("nid")),state:f(h.group("state")),address:f(h.group("address"))},g.push(e)):g.push({error:"Could not parse line: "+e})}});n(g,c)}],["javagc", +C(a.cmd):a.file);if(d)h=f.getSheetNames();else if(d=f.getSheet(a.inxlssheet),b){var g=f.getCellValues(d,!1),e=[];Object.keys(g).forEach(k=>{k=Object.keys(g[k]);k.length>e.length&&(e=k)});h=[];Object.keys(g).map(k=>{var p={" ":k};e.forEach(n=>p[n]=isNull(g[k][n])||g[k][n].type=="BLANK"?"___":"###");h.push(p)});isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="ctable",c.__format="ctable")}else{var h=f.getTable(d,a.inxlsevalformulas,a.inxlscol,a.inxlsrow);isDef(h)&&isMap(h)&&(h=h.table)}f.close();q(h, +c)}else l(-1,"XLS is only support with 'file' or 'cmd' defined. Please provide a file=... or a cmd=...")}],["csv",(b,c)=>{x();isUnDef(a.inputcsv)&&isDef(a.incsv)&&(a.inputcsv=a.incsv);if(isDef(a.file)||isDef(a.cmd)){var d=isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):io.readFileStream(a.file);b=$csv(a.inputcsv).fromInStream(d).toOutArray();d.close()}else b=$csv(a.inputcsv).fromInString(b).toOutArray();q(b,c)}],["javathread",(b,c)=>{x();if(isDef(a.javathreadpid)){ow.loadJava();try{var d=ow.java.jcmd(a.javathreadpid, +"Thread.print");d=d.split("\n").filter(e=>e.startsWith('"'))}catch(e){l(-1,"Error getting Java thread dump: "+e.message)}}else isString(b)?d=b.split("\n"):l(-1,"javathreads is only supported with a raw input or javathreadpid=.");var f=(e,h)=>{if(e===null||e===void 0)return"";if(isBoolean(e))return!!e;if(isNumber(e))return Number(e);if(h){var k=String(e);_$(k,"aStr").isString().$_();e=k.trim().match(/[\d\.]+[a-zA-Z]+/g);h=0;if(isArray(e)&&e.length!==0){for(v in e){var p=e[v].match(/(\d+(?:\.\d+)?)\s*([a-zA-Z]+)/); +if(isArray(p)&&p.length>0){k=Number(p[1]);p=String(p[2]);var n={ms:1,s:1E3,m:6E4,h:36E5,d:864E5,w:6048E5,M:2592E6,y:31536E6};h=isDef(n[p])?h+k*n[p]:h+k}}var v=h}else v=parseFloat(k);return v}return String(e)},g=[];d.forEach(e=>{if(e.startsWith('"')){var h=java.util.regex.Pattern.compile('^\\"(?[^"]+)\\"(?:\\s+#(?\\d+))?(?:\\s+\\[(?\\d+)\\])?(?:\\s+(?daemon))?(?:\\s+prio=(?\\d+))?\\s+os_prio=(?\\d+)(?:\\s+cpu=(?[0-9.]+ms))?(?:\\s+elapsed=(?[0-9.]+s))?(?:\\s+tid=(?0x[a-fA-F0-9]+))?(?:\\s+nid=(?0x[a-fA-F0-9]+|\\d+|\\S+))?(?:\\s+(?.*?))?(?:\\s+\\[(?
[^\\]]+)\\])?\\s*$').matcher(e); +h.find()?(e={threadGroup:f(h.group("threadName")).replace(/[^a-zA-z]?\d+$/,""),threadName:f(h.group("threadName")),threadId:f(h.group("threadId")),threadIndex:f(h.group("threadIndex")),daemon:f(h.group("daemon")),prio:f(h.group("prio")),osPrio:f(h.group("osPrio")),cpu_ms:f(h.group("cpu"),!0),elapsed_ms:f(h.group("elapsed"),!0),tid:f(h.group("tid")),nid:f(h.group("nid")),state:f(h.group("state")),address:f(h.group("address"))},g.push(e)):g.push({error:"Could not parse line: "+e})}});q(g,c)}],["javagc", (b,c)=>{a.javagcjoin=_$(toBoolean(a.javagcjoin),"javagcjoin").isBoolean().default(!1);const d=[/([^ ]+) (\d+\.\d+): \[(GC) \((.*?)\)(.+?)\[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/s,/([^ ]+) (\d+\.\d+): \[(GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), (\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[(Full GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] \[ParOldGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), \[Metaspace: (\d+K)->(\d+K)\((.*?)\)\], (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/, /([^ ]+) (\d+\.\d+): \[(Full GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] \[ParOldGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), \[Metaspace: (\d+K)->(\d+K)\((.*?)\)\], (\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[(GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/,/(\d+\.\d+): \[(GC|Full GC) \((.*?)\)\s+(\d+K)->(\d+K)\((\d+K)\), (\d+\.\d+) secs\]/,/^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*(\d+[GMK])->(\d+[GMK])\((\d+[GMK])\)\s*(\d+\.\d+)ms/, -/^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*Metaspace:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*NonClass:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*Class:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)/,/^\[(.+)\]\s+GC\((\d+)\)\s*(Allocation Failure)\s*(.*?)\s+(\d+[KMGT])->(\d+[KMGT])\((\d+[KMGT])\)\s+(\d+\.\d+)ms/],f=/^\d+\.\d+s$/,g=/\d{4}-\d{2}-\d{2}T/,e=v=>isDef(v)?ow.format.fromBytesAbbreviation(v+"B"):__;var h=v=>{try{for(let u=0;u5&&(u==6?(p.metaUsedBeforeGC=e(m[4]),p.metaTotalBeforeGC=e(m[5]),p.metaUsedAfterGC=e(m[6]),p.metaTotalAfterGC=e(m[7]),p.nonClassUsedBeforeGC= -e(m[8]),p.nonClassTotalBeforeGC=e(m[9]),p.nonClassUsedAfterGC=e(m[10]),p.nonClassTotalAfterGC=e(m[11]),p.classUsedBeforeGC=e(m[12]),p.classTotalBeforeGC=e(m[13]),p.classUsedAfterGC=e(m[14]),p.classTotalAfterGC=e(m[15])):(p.heapBeforeGC=e(m[4]),p.heapAfterGC=e(m[5]),p.heapTotal=e(m[6])))}else if(u==5)p.sinceStart=parseFloat(m[1]),p.gcType=m[2]+" "+m[3],p.heapBeforeGC=e(m[4]),p.heapAfterGC=e(m[5]),p.heapTotal=e(m[6]),p.durationSecs=parseFloat(m[7]);else if(p.timestamp=ow.format.toDate(m[1],"yyyy-MM-dd'T'HH:mm:ss.SSSZ"), -p.sinceStart=parseFloat(m[2]),p.gcType=m[3]+" "+m[4],u<=4){r=5;p.PSYoungGenBeforeGC=e(m[r++]);p.PSYoungGenAfterGC=e(m[r++]);p.PSYoungGenTotal=e(m[r++]);if(u==2||u==3)p.ParOldGenBeforeGC=e(m[r++]),p.ParOldGenAfterGC=e(m[r++]),p.ParOldGenTotal=e(m[r++]);p.heapBeforeGC=e(m[r++]);p.heapAfterGC=e(m[r++]);p.heapTotal=e(m[r++]);if(u==2||u==3)p.metaBeforeGC=e(m[r++]),p.metaAfterGC=e(m[r++]),p.metaTotal=e(m[r++]);p.durationSecs=parseFloat(m[r++]);if(u==0||u==2||u==4)p.userTime=parseFloat(m[r++]),p.sysTime= -parseFloat(m[r++]),p.realTime=parseFloat(m[r++])}return p}}}catch(u){printErr(u),l(-2,"Error parsing Java GC log: "+u)}};x();if(isString(b)){var k=b.split("\n"),q=/^(\[?\d+|\d{4}-\d{2}-\d{2}T)/;b=[];var t="";let v=!1;for(let r=0;r(\d+[GMK])\((\d+[GMK])\)\s*NonClass:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*Class:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)/,/^\[(.+)\]\s+GC\((\d+)\)\s*(Allocation Failure)\s*(.*?)\s+(\d+[KMGT])->(\d+[KMGT])\((\d+[KMGT])\)\s+(\d+\.\d+)ms/],f=/^\d+\.\d+s$/,g=/\d{4}-\d{2}-\d{2}T/,e=v=>isDef(v)?ow.format.fromBytesAbbreviation(v+"B"):__;var h=v=>{try{for(let u=0;u5&&(u==6?(r.metaUsedBeforeGC=e(m[4]),r.metaTotalBeforeGC=e(m[5]),r.metaUsedAfterGC=e(m[6]),r.metaTotalAfterGC=e(m[7]),r.nonClassUsedBeforeGC= +e(m[8]),r.nonClassTotalBeforeGC=e(m[9]),r.nonClassUsedAfterGC=e(m[10]),r.nonClassTotalAfterGC=e(m[11]),r.classUsedBeforeGC=e(m[12]),r.classTotalBeforeGC=e(m[13]),r.classUsedAfterGC=e(m[14]),r.classTotalAfterGC=e(m[15])):(r.heapBeforeGC=e(m[4]),r.heapAfterGC=e(m[5]),r.heapTotal=e(m[6])))}else if(u==5)r.sinceStart=parseFloat(m[1]),r.gcType=m[2]+" "+m[3],r.heapBeforeGC=e(m[4]),r.heapAfterGC=e(m[5]),r.heapTotal=e(m[6]),r.durationSecs=parseFloat(m[7]);else if(r.timestamp=ow.format.toDate(m[1],"yyyy-MM-dd'T'HH:mm:ss.SSSZ"), +r.sinceStart=parseFloat(m[2]),r.gcType=m[3]+" "+m[4],u<=4){t=5;r.PSYoungGenBeforeGC=e(m[t++]);r.PSYoungGenAfterGC=e(m[t++]);r.PSYoungGenTotal=e(m[t++]);if(u==2||u==3)r.ParOldGenBeforeGC=e(m[t++]),r.ParOldGenAfterGC=e(m[t++]),r.ParOldGenTotal=e(m[t++]);r.heapBeforeGC=e(m[t++]);r.heapAfterGC=e(m[t++]);r.heapTotal=e(m[t++]);if(u==2||u==3)r.metaBeforeGC=e(m[t++]),r.metaAfterGC=e(m[t++]),r.metaTotal=e(m[t++]);r.durationSecs=parseFloat(m[t++]);if(u==0||u==2||u==4)r.userTime=parseFloat(m[t++]),r.sysTime= +parseFloat(m[t++]),r.realTime=parseFloat(m[t++])}return r}}}catch(u){printErr(u),l(-2,"Error parsing Java GC log: "+u)}};x();if(isString(b)){var k=b.split("\n"),p=/^(\[?\d+|\d{4}-\d{2}-\d{2}T)/;b=[];var n="";let v=!1;for(let t=0;t{if(isDef(a.file)||isDef(a.cmd)){x();ow.loadJava();var d=isDef(a.cmd)?ow.java.parseHSPerf(C(a.cmd)):ow.java.parseHSPerf(a.file);d.__ts=new Date;var f=0,g=0;d.sun.gc.generation.forEach(e=>{e.space.forEach(h=>{g+=Number(h.used);f=isNumber(h.capacity)?f+Number(h.capacity):f;d.sun.gc["__percUsed_"+h.name]=100*h.used/h.capacity})});d.sun.gc.__percUsed_meta=100*d.sun.gc.metaspace.used/d.sun.gc.metaspace.capacity;d.sun.gc.__percUsed_ccs=100*d.sun.gc.compressedclassspace.used/d.sun.gc.compressedclassspace.capacity; b=$from(d.sun.gc.collector).equals("name","PSScavenge").at(0);d.sun.gc.__ygc=isDef(b)?Number(b.invocations):0;d.sun.gc.__ygct=isDef(b)?Number(b.time/1E9):0;b=$from(d.sun.gc.collector).equals("name","PSParallelCompact").orEquals("name","").at(0);d.sun.gc.__fgc=isDef(b)?Number(b.invocations):0;d.sun.gc.__fgct=isDef(b)?Number(b.time/1E9):0;d.sun.gc.__gct=$from(d.sun.gc.collector).sum("time")/1E9;d.java.__mem={total:f,used:g,free:f-g,metaMax:d.sun.gc.metaspace.maxCapacity,metaTotal:d.sun.gc.metaspace.capacity, -metaUsed:d.sun.gc.metaspace.used,metaFree:d.sun.gc.metaspace.capacity-d.sun.gc.metaspace.used};n(d,c)}else l(-1,"hsperf is only supported with either 'file' or 'cmd' defined.")}],["jfr",(b,c)=>{ow.loadJava();isUnDef(ow.java.parseJFR)&&l(-1,"jfr not available.");isBoolean(a.jfrjoin)||(a.jfrjoin=_$(toBoolean(a.jfrjoin),"jfrjoin").isBoolean().default(!1));isBoolean(a.jfrdesc)||(a.jfrdesc=_$(toBoolean(a.jfrdesc),"jfrdesc").isBoolean().default(!1));x();isDef(a.file)&&isUnDef(a.cmd)&&(b=a.file);if(isDef(a.cmd)){b= -C(a.cmd,!0);var d=io.createTempFile("jfr",".jfr");io.writeFileBytes(d,b);b=d}a.jfrjoin?n(ow.java.parseJFR(b,__,a.jfrdesc),c):ow.java.parseJFR(b,f=>n(f,c),a.jfrdesc)}],["rawhex",(b,c)=>{a.inrawhexline=_$(a.inrawhexline,"inrawhexline").isNumber().default(__);x();b=isDef(a.file)||isDef(a.cmd)?isDef(a.cmd)?C(a.cmd):io.readFileBytes(a.file):af.fromString2Bytes(b);b=ow.format.string.toHexArray(b,a.inrawhexline);b.forEach(d=>{d.characters=d.characters.replace(/[\x00-\x1F\x80-\xFF]/g,".")});n(b,c)}],["base64", -(b,c)=>{x();b=toBoolean(a.base64gzip)?af.fromBytes2String(io.gunzip(af.fromBase64(b,!0))):af.fromBytes2String(af.fromBase64(b));n(b,c)}],["gb64json",(b,c)=>{x();b=af.fromBytes2String(io.gunzip(af.fromBase64(b,!0)));n(b,c)}],["oaf",(b,c)=>{isString(b)||l(-1,"oaf is only supported with a string.");x();var d;isString(b)&&(b=io.fileExists(b)?io.readFileString(b):b,isString(b)&&(d=(new Function("var data;"+b+";return data"))()));n(d,c)}],["oafp",(b,c)=>{b=y(b,!0);var d="_oafp_key_"+genUUID();isMap(b)? -(b.out="key",b.__key=d,b.__inception=!0,oafp(b),b=$get(d),$unset(d),n(b,c)):isArray(b)?($set(d,!0),b=pForEach(b,(f,g)=>{g=d+"_"+String(g);var e=!1;isUnDef(f.out)&&(f.out="key",f.__key=g,e=f.__inception=!0);try{if(oafp(f),e){var h=$get(g);$unset(g)}}catch(k){sprintErr(k)}finally{return h}},__,isDef(a.inoafpseq)?toBoolean(a.inoafpseq):__),n(b,c)):l(-1,"oafp input data needs to be a map or an array.")}],["ojob",(b,c)=>{var d=y(b,!0);isString(d)&&(d={ojob:d,args:{}});_$(d.ojob,"ojob").isString().$_(); -d.args=_$(d.args,"args").isMap().default({});x();b=genUUID();d.args.__format="key";d.args.__key=b;oJobRunFile(d.ojob,d.args);d=$get(b);delete d.__format;delete d.__key;n($get(b),c)}],["sh",(b,c)=>{x();b=y(b,!0);if(isString(b))b=$sh(b).get(0);else{isMap(b)||l(-1,"For in=sh the input data needs to a string or a map");var d=$sh();isUnDef(b.cmd)&&l(-1,"For in=sh the input data needs to a string or a map with the a 'cmd'");d=d.sh(b.cmd);isDef(b.envs)&&(d=d.envs(b.envs,b.envsall));isDef(b.prefix)&&(d=d.prefix(b.prefix)); -isDef(b.pwd)&&(d=d.pwd(b.pwd));switch(a.inshformat){case "raw":b=d.get(0);break;case "yaml":b=d.getYaml(0);break;default:b=d.getJson(0)}}n(b,c)}],["llm",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();var d=$llm(X(isDef(a.llmoptions)?y(a.llmoptions):$sec("system", +metaUsed:d.sun.gc.metaspace.used,metaFree:d.sun.gc.metaspace.capacity-d.sun.gc.metaspace.used};q(d,c)}else l(-1,"hsperf is only supported with either 'file' or 'cmd' defined.")}],["jfr",(b,c)=>{ow.loadJava();isUnDef(ow.java.parseJFR)&&l(-1,"jfr not available.");isBoolean(a.jfrjoin)||(a.jfrjoin=_$(toBoolean(a.jfrjoin),"jfrjoin").isBoolean().default(!1));isBoolean(a.jfrdesc)||(a.jfrdesc=_$(toBoolean(a.jfrdesc),"jfrdesc").isBoolean().default(!1));x();isDef(a.file)&&isUnDef(a.cmd)&&(b=a.file);if(isDef(a.cmd)){b= +C(a.cmd,!0);var d=io.createTempFile("jfr",".jfr");io.writeFileBytes(d,b);b=d}a.jfrjoin?q(ow.java.parseJFR(b,__,a.jfrdesc),c):ow.java.parseJFR(b,f=>q(f,c),a.jfrdesc)}],["rawhex",(b,c)=>{a.inrawhexline=_$(a.inrawhexline,"inrawhexline").isNumber().default(__);x();b=isDef(a.file)||isDef(a.cmd)?isDef(a.cmd)?C(a.cmd):io.readFileBytes(a.file):af.fromString2Bytes(b);b=ow.format.string.toHexArray(b,a.inrawhexline);b.forEach(d=>{d.characters=d.characters.replace(/[\x00-\x1F\x80-\xFF]/g,".")});q(b,c)}],["base64", +(b,c)=>{x();b=toBoolean(a.base64gzip)?af.fromBytes2String(io.gunzip(af.fromBase64(b,!0))):af.fromBytes2String(af.fromBase64(b));q(b,c)}],["gb64json",(b,c)=>{x();b=af.fromBytes2String(io.gunzip(af.fromBase64(b,!0)));q(b,c)}],["oaf",(b,c)=>{isString(b)||l(-1,"oaf is only supported with a string.");x();var d;isString(b)&&(b=io.fileExists(b)?io.readFileString(b):b,isString(b)&&(d=(new Function("var data;"+b+";return data"))()));q(d,c)}],["oafp",(b,c)=>{b=y(b,!0);var d="_oafp_key_"+genUUID();isMap(b)? +(b.out="key",b.__key=d,b.__inception=!0,oafp(b),b=$get(d),$unset(d),q(b,c)):isArray(b)?($set(d,!0),b=pForEach(b,(f,g)=>{g=d+"_"+String(g);var e=!1;isUnDef(f.out)&&(f.out="key",f.__key=g,e=f.__inception=!0);try{if(oafp(f),e){var h=$get(g);$unset(g)}}catch(k){sprintErr(k)}finally{return h}},__,isDef(a.inoafpseq)?toBoolean(a.inoafpseq):__),q(b,c)):l(-1,"oafp input data needs to be a map or an array.")}],["ojob",(b,c)=>{var d=y(b,!0);isString(d)&&(d={ojob:d,args:{}});_$(d.ojob,"ojob").isString().$_(); +d.args=_$(d.args,"args").isMap().default({});x();b=genUUID();d.args.__format="key";d.args.__key=b;oJobRunFile(d.ojob,d.args);d=$get(b);delete d.__format;delete d.__key;q($get(b),c)}],["sh",(b,c)=>{x();b=y(b,!0);if(isString(b))b=$sh(b).get(0);else{isMap(b)||l(-1,"For in=sh the input data needs to a string or a map");var d=$sh();isUnDef(b.cmd)&&l(-1,"For in=sh the input data needs to a string or a map with the a 'cmd'");d=d.sh(b.cmd);isDef(b.envs)&&(d=d.envs(b.envs,b.envsall));isDef(b.prefix)&&(d=d.prefix(b.prefix)); +isDef(b.pwd)&&(d=d.pwd(b.pwd));switch(a.inshformat){case "raw":b=d.get(0);break;case "yaml":b=d.getYaml(0);break;default:b=d.getJson(0)}}q(b,c)}],["llm",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();var d=$llm(aa(isDef(a.llmoptions)?y(a.llmoptions):$sec("system", "envs").get(a.llmenv)));isDef(a.llmconversation)&&io.fileExists(a.llmconversation)&&d.getGPT().setConversation(io.readFileJSON(a.llmconversation));let f;isString(a.llmimage)&&(a.llmimage.toLowerCase().match(/^https?:\/\//)?f=af.fromBytes2String(af.toBase64Bytes(af.fromInputStream2Bytes($rest().get2Stream(a.llmimage)))):io.fileExists(a.llmimage)&&(f=af.fromBytes2String(af.toBase64Bytes(io.readFileBytes(a.llmimage)))));b=a.out=="md"||a.out=="mdtable"||a.out=="raw"?isDef(f)?d.promptImage(b,f):d.prompt(b): -isDef(f)?d.promptImage(b,f,__,__,__,__,!0):d.promptJSON(b);isDef(a.llmconversation)&&(d=d.getGPT().getConversation(),io.writeFileJSON(a.llmconversation,d,""));n(jsonParse(b,__,__,isString(b)),c)}],["llmmodels",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();b=$llm(X(isDef(a.llmoptions)? -y(a.llmoptions):$sec("system","envs").get(a.llmenv)));isUnDef(b.getModels)&&l(-1,"OpenAF support for llm model listing API not found.");n(b.getModels(),c)}],["javas",(b,c)=>{a.javasinception=toBoolean(a.javasinception);x();plugin("JMX");b=(new JMX).getLocals().Locals;a.javasinception||(b=b.filter(d=>d.id!=getPid()));n(b,c)}],["jmx",(b,c)=>{a.jmxop=_$(a.jmxop,"jmxop").oneOf(["all","get","query","domains"]).default("all");isUnDef(a.jmxurl)&&isUnDef(a.jmxpid)&&l(-1,"jmxurl or jmxpid is not defined."); +isDef(f)?d.promptImage(b,f,__,__,__,__,!0):d.promptJSON(b);isDef(a.llmconversation)&&(d=d.getGPT().getConversation(),io.writeFileJSON(a.llmconversation,d,""));q(jsonParse(b,__,__,isString(b)),c)}],["llmmodels",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();b=$llm(aa(isDef(a.llmoptions)? +y(a.llmoptions):$sec("system","envs").get(a.llmenv)));isUnDef(b.getModels)&&l(-1,"OpenAF support for llm model listing API not found.");q(b.getModels(),c)}],["javas",(b,c)=>{a.javasinception=toBoolean(a.javasinception);x();plugin("JMX");b=(new JMX).getLocals().Locals;a.javasinception||(b=b.filter(d=>d.id!=getPid()));q(b,c)}],["jmx",(b,c)=>{a.jmxop=_$(a.jmxop,"jmxop").oneOf(["all","get","query","domains"]).default("all");isUnDef(a.jmxurl)&&isUnDef(a.jmxpid)&&l(-1,"jmxurl or jmxpid is not defined."); x();plugin("JMX");ow.loadJava();let d;isUnDef(a.jmxurl)?(ow.loadServer(),d=new ow.java.JMX((new JMX).attach2Local(a.jmxpid).URL)):d=new ow.java.JMX(a.jmxurl,a.jmxuser,a.jmxpass,a.jmxprovider);let f;switch(a.jmxop){case "domains":f=d.getDomains();break;case "query":isString(b)?f=d.queryNames(b):l(-1,"Input needs to be a JMX query string (e.g. java.lang:*)");break;case "get":isString(b)?f=d.getObject(b):l(-1,"Input needs to be a JMX object name (e.g. java.lang:type=Memory)");break;default:case "all":f= -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)}],["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]= +d.getAll()}q(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,p,n)=>{isString(k)&&e.push({o:n,k:h,v:k})});pForEach(e,h=>h.o[h.k]=g(h.v))}else f=pForEach(f,e=>g(e))}q(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;q(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();q(d,c)}],["toml",(b,c)=>{x();isUnDef(af.fromTOML)&&l(-1,"TOML support not found.");q(af.fromTOML(b),c)}],["toon",(b,c)=>{x();isUnDef(af.fromTOON)&& +l(-1,"TOON support not found.");q(af.fromTOON(b),c)}],["slon",(b,c)=>{x();q(af.fromSLON(b),c)}],["json",(b,c)=>{x();q(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),q,z,{_runCmd2Bytes:C,_fromJSSLON:y,_msg:"(processing data...)",_showTmpMsg:x,_clearTmpMsg:L,_chartPathParse:X,_exit:l,_print:w,_o$o:z});isMap(g)&&(isArray(g.fileExtensions)&&g.fileExtensions.forEach(e=> +{var h=e.ext;e=e.type;Y.has(h)?a.debug&&printErr("WARN: Extension '"+h+"' already exists."):Y.set(h,e)}),isArray(g.fileExtensionsNoMem)&&g.fileExtensionsNoMem.forEach(e=>{e=e.ext;ca.has(e)?a.debug&&printErr("WARN: Extension '"+e+"' already exists."):ca.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])?da[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")); +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 ha=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= +__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 ia=!1;if(a["-v"]==""||toBoolean(a.version))ia=!0,fa();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)&& +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(ia)A=fa();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+ +"'"),!ca.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,ha),toBoolean(a._shebang)&&(A=A.replace(/^#!.*\n/,""));else A=io.readFileString(a.file,ha),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: "+ +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(da[a.type])?da[a.type](V(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(".")),Y.has(c)&&(a.type=Y.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); From 39d0762d909ba9cefe944e4724ae7eb0f3586acc Mon Sep 17 00:00:00 2001 From: Nuno Miguel Aguiar Date: Sat, 7 Mar 2026 04:03:23 +0000 Subject: [PATCH 5/9] refactor(jsonrpc): improve code readability and consistency --- js/openaf.js | 134 +++++++++++++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/js/openaf.js b/js/openaf.js index f31032888..5079c9e2a 100644 --- a/js/openaf.js +++ b/js/openaf.js @@ -8507,20 +8507,20 @@ const $jsonrpc = function (aOptions) { const _defaultCmdDir = (isDef(__flags) && isDef(__flags.JSONRPC) && isDef(__flags.JSONRPC.cmd) && isDef(__flags.JSONRPC.cmd.defaultDir)) ? __flags.JSONRPC.cmd.defaultDir : __ - const _r = { - _ids: $atomic(1, "long"), - _p: __, - _s: false, - _cmd: false, - _sy: $sync(), - _q: {}, - _r: {}, - _info: __, - _pwd: _defaultCmdDir, - _copies: $atomic(0, "long"), - type: type => { - aOptions.type = type - return _r + const _r = { + _ids: $atomic(1, "long"), + _p: __, + _s: false, + _cmd: false, + _sy: $sync(), + _q: {}, + _r: {}, + _info: __, + _pwd: _defaultCmdDir, + _copies: $atomic(0, "long"), + type: type => { + aOptions.type = type + return _r }, url: url => { aOptions.url = url @@ -8559,7 +8559,7 @@ const $jsonrpc = function (aOptions) { $doWait($doAll( [ // in stream - $do(() => { + $doV(() => { $await("__jsonrpc_" + _main_id).notifyAll() do { var _id = _r._ids.get() @@ -8586,7 +8586,7 @@ const $jsonrpc = function (aOptions) { } while (!_r._s) }), // out stream - $do(() => { + $doV(() => { do { var _id = _r._ids.get() $await("__jsonrpc_r-" + _id + "-" + _main_id).wait() @@ -8629,13 +8629,13 @@ const $jsonrpc = function (aOptions) { if (isMap(aOptions.options.fns)) { if (isFunction(aOptions.options.fns[aMethod])) { var _res = aOptions.options.fns[aMethod](aParams) - _debug("jsonrpc dummy <- " + stringify({ result: _res }, __, "")) - if (aMethod == "initialize" && !aNotification) _r._info = _res - return _res - } else { - _debug("jsonrpc dummy <- " + stringify({ error: "Method not found" }, __, "")) - throw new Error("Method not found") - } + _debug("jsonrpc dummy <- " + stringify({ result: _res }, __, "")) + if (aMethod == "initialize" && !aNotification) _r._info = _res + return _res + } else { + _debug("jsonrpc dummy <- " + stringify({ error: "Method not found" }, __, "")) + throw new Error("Method not found") + } } return __ case "stdio": @@ -8665,12 +8665,12 @@ const $jsonrpc = function (aOptions) { } $await("__jsonrpc_a-" + _id + "-" + _main_id).wait(aOptions.timeout) }) - if (isMap(_r._r[_id])) { - _res = _r._r[_id] - delete _r._r[_id] - } - if (aMethod == "initialize" && !aNotification) _r._info = isDef(_res) && isDef(_res.result) ? _res.result : _res - return isDef(_res) && isDef(_res.result) ? _res.result : _res + if (isMap(_r._r[_id])) { + _res = _r._r[_id] + delete _r._r[_id] + } + if (aMethod == "initialize" && !aNotification) _r._info = isDef(_res) && isDef(_res.result) ? _res.result : _res + return isDef(_res) && isDef(_res.result) ? _res.result : _res case "remote": default: _$(aOptions.url, "aOptions.url").isString().$_() @@ -8693,23 +8693,23 @@ const $jsonrpc = function (aOptions) { } _debug("jsonrpc -> " + stringify(_req, __, "")) var res = $rest(_restOptions).post(aOptions.url, _req) - // Notifications do not expect a reply - if (!!aNotification) return - _debug("jsonrpc <- " + stringify(res, __, "")) - if (isDef(res)) { - if (isDef(res.error) && (isDef(res.error.response))) return res.error.response - if (aMethod == "initialize" && !aNotification) _r._info = res.result - if (isDef(res.result)) return res.result - } - return __ - } - }, - getInfo: () => _r._info, - destroy: () => { - if (_r._copies.get() > 0) { - _r._copies.dec() - return - } + // Notifications do not expect a reply + if (!!aNotification) return + _debug("jsonrpc <- " + stringify(res, __, "")) + if (isDef(res)) { + if (isDef(res.error) && (isDef(res.error.response))) return res.error.response + if (aMethod == "initialize" && !aNotification) _r._info = res.result + if (isDef(res.result)) return res.result + } + return __ + } + }, + getInfo: () => _r._info, + destroy: () => { + if (_r._copies.get() > 0) { + _r._copies.dec() + return + } _r._s = true if (isDef(_r._p)) { $doWait(_r._p) @@ -9021,26 +9021,26 @@ const $mcp = function(aOptions) { return _r }, initialize: (clientInfo) => { - clientInfo = _$(clientInfo, "clientInfo").isMap().default({}) - clientInfo = merge(aOptions.clientInfo, clientInfo) + clientInfo = _$(clientInfo, "clientInfo").isMap().default({}) + clientInfo = merge(aOptions.clientInfo, clientInfo) - var initResult = _jsonrpc.exec("initialize", { - protocolVersion: aOptions.protocolVersion, + var initResult = _jsonrpc.exec("initialize", { + protocolVersion: aOptions.protocolVersion, capabilities: { sampling: {} }, clientInfo: clientInfo }) - if (isDef(initResult) && isUnDef(initResult.error)) { - _r._initialized = true - _r._capabilities = initResult.capabilities || {} - _r._initResult = initResult + if (isDef(initResult) && isUnDef(initResult.error)) { + _r._initialized = true + _r._capabilities = initResult.capabilities || {} + _r._initResult = initResult - // Send initialized notification - if (aOptions.strict) { - try { - // send as a notification (no response expected) + // Send initialized notification + if (aOptions.strict) { + try { + // send as a notification (no response expected) _jsonrpc.exec("notifications/initialized", {}, true) } catch(e) { // Notifications might not return responses, ignore errors @@ -9049,15 +9049,15 @@ const $mcp = function(aOptions) { return _r } else { - throw new Error("MCP initialization failed: " + (isDef(initResult) ? initResult.error : __ || "Unknown error")) - } - }, - getInfo: () => _r._initResult, - listTools: () => { - if (!_r._initialized) { - throw new Error("MCP client not initialized. Call initialize() first.") - } - return _jsonrpc.exec("tools/list", {}) + throw new Error("MCP initialization failed: " + (isDef(initResult) ? initResult.error : __ || "Unknown error")) + } + }, + getInfo: () => _r._initResult, + listTools: () => { + if (!_r._initialized) { + throw new Error("MCP client not initialized. Call initialize() first.") + } + return _jsonrpc.exec("tools/list", {}) }, callTool: (toolName, toolArguments, toolOptions) => { if (!_r._initialized) { From 850ef91c5ccc46853fc955091c72a75e33c83b3a Mon Sep 17 00:00:00 2001 From: nmaguiar Date: Mon, 9 Mar 2026 03:15:59 +0000 Subject: [PATCH 6/9] chore(deps): bump jetty-io and jetty-util to 12.1.7 - Updated jetty-io and jetty-util libraries to the latest 12.1.7 release.\n- No functional changes, just dependency updates. --- ...etty-io-12.1.6.jar => jetty-io-12.1.7.jar} | Bin 382701 -> 383093 bytes ...-util-12.1.6.jar => jetty-util-12.1.7.jar} | Bin 726119 -> 726126 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename lib/{jetty-io-12.1.6.jar => jetty-io-12.1.7.jar} (81%) rename lib/{jetty-util-12.1.6.jar => jetty-util-12.1.7.jar} (90%) diff --git a/lib/jetty-io-12.1.6.jar b/lib/jetty-io-12.1.7.jar similarity index 81% rename from lib/jetty-io-12.1.6.jar rename to lib/jetty-io-12.1.7.jar index 0908a606d5e2ee80ed9f331861069cc95be4153e..78ab8e781a0e25d4a8d9a56b098186cb7291926e 100644 GIT binary patch delta 44054 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 delta 43238 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 diff --git a/lib/jetty-util-12.1.6.jar b/lib/jetty-util-12.1.7.jar similarity index 90% rename from lib/jetty-util-12.1.6.jar rename to lib/jetty-util-12.1.7.jar index 2e6a559fa337a06b2d9551b85c66b8faab436caf..3e849be357009f12f5cb53cf198229ddc6ef58b4 100644 GIT binary patch delta 24524 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 F_#eo)04o3h From ff233bcf5fa8157f3ac32c661968a3ae8d362866 Mon Sep 17 00:00:00 2001 From: Nuno Aguiar Date: Mon, 9 Mar 2026 10:22:19 +0000 Subject: [PATCH 7/9] Update src/com/nwu2/httpd/responses/FileResponse.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../nwu2/httpd/responses/FileResponse.java | 265 +++++++++--------- 1 file changed, 139 insertions(+), 126 deletions(-) diff --git a/src/com/nwu2/httpd/responses/FileResponse.java b/src/com/nwu2/httpd/responses/FileResponse.java index a04dff34c..fe3c909e1 100644 --- a/src/com/nwu2/httpd/responses/FileResponse.java +++ b/src/com/nwu2/httpd/responses/FileResponse.java @@ -22,10 +22,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; import com.nwu2.httpd.Codes; import com.nwu2.httpd.HTTPd; @@ -79,98 +79,98 @@ public FileResponse(IHTTPd httpd, String rUri, Map props) { * Serves file from homeDir and its' subdirectories (only). Uses only URI, * ignores all headers and HTTP parameters. */ - public com.nwu2.httpd.responses.Response serveFile(String uri, - Map header, File homeDir, boolean allowDirectoryListing) { - String relativeUri = uri; - if (relativeUri == null) relativeUri = ""; - if (this.rURI != null && relativeUri.startsWith(this.rURI)) { - relativeUri = relativeUri.substring(this.rURI.length()); - } - - // Make sure we won't die of an exception later - if (!homeDir.isDirectory()) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, - "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); - - // Remove URL arguments - relativeUri = relativeUri.trim().replace('\\', '/'); - if (relativeUri.indexOf('?') >= 0) - relativeUri = relativeUri.substring(0, relativeUri.indexOf('?')); - while (relativeUri.startsWith("/")) relativeUri = relativeUri.substring(1); - if (relativeUri.indexOf('\0') >= 0) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Invalid path."); - } - - // Prohibit getting out of current directory - if (relativeUri.startsWith("..") || relativeUri.endsWith("..") - || relativeUri.indexOf("../") >= 0) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Won't serve ../ for security reasons."); - - File f; - File baseDir; - try { - baseDir = homeDir.getCanonicalFile(); - f = relativeUri.isEmpty() ? baseDir : new File(baseDir, relativeUri).getCanonicalFile(); - String basePath = baseDir.getPath(); - String filePath = f.getPath(); - if (!filePath.equals(basePath) && !filePath.startsWith(basePath + File.separator)) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Invalid path."); - } - } catch (IOException ioe) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Invalid path."); - } - - String uriForLinks = relativeUri; - if (!f.exists()) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, - "Error 404, file not found."); + public com.nwu2.httpd.responses.Response serveFile(String uri, + Map header, File homeDir, boolean allowDirectoryListing) { + String relativeUri = uri; + if (relativeUri == null) relativeUri = ""; + if (this.rURI != null && relativeUri.startsWith(this.rURI)) { + relativeUri = relativeUri.substring(this.rURI.length()); + } + + // Make sure we won't die of an exception later + if (!homeDir.isDirectory()) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, + "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); + + // Remove URL arguments + relativeUri = relativeUri.trim().replace('\\', '/'); + if (relativeUri.indexOf('?') >= 0) + relativeUri = relativeUri.substring(0, relativeUri.indexOf('?')); + while (relativeUri.startsWith("/")) relativeUri = relativeUri.substring(1); + if (relativeUri.indexOf('\0') >= 0) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + // Prohibit getting out of current directory + if (relativeUri.startsWith("..") || relativeUri.endsWith("..") + || relativeUri.indexOf("../") >= 0) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Won't serve ../ for security reasons."); + + File f; + File baseDir; + try { + baseDir = homeDir.getCanonicalFile(); + f = relativeUri.isEmpty() ? baseDir : new File(baseDir, relativeUri).getCanonicalFile(); + String basePath = baseDir.getPath(); + String filePath = f.getPath(); + if (!filePath.equals(basePath) && !filePath.startsWith(basePath + File.separator)) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + } catch (IOException ioe) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + String uriForLinks = relativeUri; + if (!f.exists()) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, + "Error 404, file not found."); + + // List the directory, if necessary + if (f.isDirectory()) { + // Browsers get confused without '/' after the + // directory, send a redirect. + if (!uriForLinks.endsWith("/")) { + uriForLinks += "/"; +// com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( +// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, +// ""+HTML_STYLE+"Redirected: " +// + this.rURI + uri + ""); +// r.addHeader("Location", this.rURI + uri); +// return r; + } + + this.rURI = this.rURI.replaceAll("/+", "/"); + uriForLinks = uriForLinks.replaceAll("/+", "/"); + + // First try index.html and index.htm + if (new File(f, "index.html").exists()) + f = new File(f, "index.html"); + else if (new File(f, "index.htm").exists()) + f = new File(f, "index.htm"); + // No index file, list the directory + else if (allowDirectoryListing) { + String[] files = f.list(); + String msg = ""+HTML_STYLE+"

Directory /" + uriForLinks + "


"; + + if (uriForLinks.length() > 1) { + String u = uriForLinks.substring(0, uriForLinks.length() - 1); + int slash = u.lastIndexOf('/'); + if (slash >= 0 && slash < u.length()) + msg += "..
"; + } - // List the directory, if necessary - if (f.isDirectory()) { - // Browsers get confused without '/' after the - // directory, send a redirect. - if (!uriForLinks.endsWith("/")) { - uriForLinks += "/"; -// com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( -// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, -// ""+HTML_STYLE+"Redirected: " -// + this.rURI + uri + ""); -// r.addHeader("Location", this.rURI + uri); -// return r; - } - - this.rURI = this.rURI.replaceAll("/+", "/"); - uriForLinks = uriForLinks.replaceAll("/+", "/"); - - // First try index.html and index.htm - if (new File(f, "index.html").exists()) - f = new File(f, "index.html"); - else if (new File(f, "index.htm").exists()) - f = new File(f, "index.htm"); - // No index file, list the directory - else if (allowDirectoryListing) { - String[] files = f.list(); - String msg = ""+HTML_STYLE+"

Directory /" + uriForLinks + "


"; - - if (uriForLinks.length() > 1) { - String u = uriForLinks.substring(0, uriForLinks.length() - 1); - int slash = u.lastIndexOf('/'); - if (slash >= 0 && slash < u.length()) - msg += "..
"; - } - - for (int i = 0; i < files.length; ++i) { + for (int i = 0; i < files.length; ++i) { File curFile = new File(f, files[i]); boolean dir = curFile.isDirectory(); if (dir) { @@ -178,8 +178,8 @@ else if (allowDirectoryListing) { files[i] += "/"; } - msg += "" - + files[i] + ""; + msg += "" + + files[i] + ""; // Show file size if (curFile.isFile()) { @@ -224,35 +224,48 @@ else if (len < 1024 * 1024) // Support (simple) skipping: long startFrom = 0; String range = header.get("range"); - if (range != null) { - if (range.startsWith("bytes=")) { - range = range.substring("bytes=".length()); - int minus = range.indexOf('-'); - if (minus > 0) - range = range.substring(0, minus); - try { - startFrom = Long.parseLong(range); - } catch (NumberFormatException nfe) { - } - } - } - if (startFrom < 0 || startFrom >= f.length()) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - com.nwu2.httpd.NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, Codes.MIME_PLAINTEXT, - "Requested Range Not Satisfiable"); - } - - FileInputStream fis = new FileInputStream(f); - fis.skip(startFrom); - com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( - httpd, Codes.HTTP_OK, mime, fis); - r.addHeader("Content-length", "" + (f.length() - startFrom)); - r.addHeader("Content-range", "" + startFrom + "-" - + (f.length() - 1) + "/" + f.length()); - return r; - } catch (IOException ioe) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + if (range != null) { + if (range.startsWith("bytes=")) { + range = range.substring("bytes=".length()); + int minus = range.indexOf('-'); + if (minus > 0) + range = range.substring(0, minus); + try { + startFrom = Long.parseLong(range); + } catch (NumberFormatException nfe) { + } + } + } + if (startFrom < 0 || startFrom >= f.length()) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + com.nwu2.httpd.NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, Codes.MIME_PLAINTEXT, + "Requested Range Not Satisfiable"); + } + + FileInputStream fis = null; + boolean success = false; + try { + fis = new FileInputStream(f); + fis.skip(startFrom); + com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( + httpd, Codes.HTTP_OK, mime, fis); + r.addHeader("Content-length", "" + (f.length() - startFrom)); + r.addHeader("Content-range", "" + startFrom + "-" + + (f.length() - 1) + "/" + f.length()); + success = true; + return r; + } finally { + if (!success && fis != null) { + try { + fis.close(); + } catch (IOException e) { + // Ignored: best-effort to close stream on failure + } + } + } + } catch (IOException ioe) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed."); } } From 8aac36884cf365ad67b54529ccc92d634e37d845 Mon Sep 17 00:00:00 2001 From: nmaguiar Date: Mon, 9 Mar 2026 10:52:00 +0000 Subject: [PATCH 8/9] refactor(FileResponse): enhance security checks in serveFile method --- .../nwu2/httpd/responses/FileResponse.java | 253 +++++++++--------- 1 file changed, 127 insertions(+), 126 deletions(-) diff --git a/src/com/nwu2/httpd/responses/FileResponse.java b/src/com/nwu2/httpd/responses/FileResponse.java index a04dff34c..609fe4168 100644 --- a/src/com/nwu2/httpd/responses/FileResponse.java +++ b/src/com/nwu2/httpd/responses/FileResponse.java @@ -22,10 +22,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; import com.nwu2.httpd.Codes; import com.nwu2.httpd.HTTPd; @@ -79,98 +79,99 @@ public FileResponse(IHTTPd httpd, String rUri, Map props) { * Serves file from homeDir and its' subdirectories (only). Uses only URI, * ignores all headers and HTTP parameters. */ - public com.nwu2.httpd.responses.Response serveFile(String uri, - Map header, File homeDir, boolean allowDirectoryListing) { - String relativeUri = uri; - if (relativeUri == null) relativeUri = ""; - if (this.rURI != null && relativeUri.startsWith(this.rURI)) { - relativeUri = relativeUri.substring(this.rURI.length()); - } - - // Make sure we won't die of an exception later - if (!homeDir.isDirectory()) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, - "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); - - // Remove URL arguments - relativeUri = relativeUri.trim().replace('\\', '/'); - if (relativeUri.indexOf('?') >= 0) - relativeUri = relativeUri.substring(0, relativeUri.indexOf('?')); - while (relativeUri.startsWith("/")) relativeUri = relativeUri.substring(1); - if (relativeUri.indexOf('\0') >= 0) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Invalid path."); - } - - // Prohibit getting out of current directory - if (relativeUri.startsWith("..") || relativeUri.endsWith("..") - || relativeUri.indexOf("../") >= 0) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Won't serve ../ for security reasons."); - - File f; - File baseDir; - try { - baseDir = homeDir.getCanonicalFile(); - f = relativeUri.isEmpty() ? baseDir : new File(baseDir, relativeUri).getCanonicalFile(); - String basePath = baseDir.getPath(); - String filePath = f.getPath(); - if (!filePath.equals(basePath) && !filePath.startsWith(basePath + File.separator)) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Invalid path."); - } - } catch (IOException ioe) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, - "FORBIDDEN: Invalid path."); - } - - String uriForLinks = relativeUri; - if (!f.exists()) - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, - "Error 404, file not found."); + public com.nwu2.httpd.responses.Response serveFile(String uri, + Map header, File homeDir, boolean allowDirectoryListing) { + String relativeUri = uri; + if (relativeUri == null) relativeUri = ""; + if (this.rURI != null && relativeUri.startsWith(this.rURI)) { + relativeUri = relativeUri.substring(this.rURI.length()); + } + + // Make sure we won't die of an exception later + if (!homeDir.isDirectory()) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_INTERNALERROR, Codes.MIME_PLAINTEXT, + "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); + + // Remove URL arguments + relativeUri = relativeUri.trim().replace('\\', '/'); + if (relativeUri.indexOf('?') >= 0) + relativeUri = relativeUri.substring(0, relativeUri.indexOf('?')); + while (relativeUri.startsWith("/")) relativeUri = relativeUri.substring(1); + if (relativeUri.indexOf('\0') >= 0) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + // Prohibit getting out of current directory + if (relativeUri.startsWith("..") || relativeUri.endsWith("..") + || relativeUri.indexOf("../") >= 0 + || relativeUri.indexOf(".." + File.separator) >= 0) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Won't serve ../ for security reasons."); + + File f; + File baseDir; + try { + baseDir = homeDir.getCanonicalFile(); + f = relativeUri.isEmpty() ? baseDir : new File(baseDir, relativeUri).getCanonicalFile(); + String basePath = baseDir.getPath(); + String filePath = f.getPath(); + if (!filePath.equals(basePath) && !filePath.startsWith(basePath + File.separator)) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + } catch (IOException ioe) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + "FORBIDDEN: Invalid path."); + } + + String uriForLinks = relativeUri; + if (!f.exists()) + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_NOTFOUND, Codes.MIME_PLAINTEXT, + "Error 404, file not found."); - // List the directory, if necessary - if (f.isDirectory()) { - // Browsers get confused without '/' after the - // directory, send a redirect. - if (!uriForLinks.endsWith("/")) { - uriForLinks += "/"; -// com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( -// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, -// ""+HTML_STYLE+"Redirected: " -// + this.rURI + uri + ""); -// r.addHeader("Location", this.rURI + uri); -// return r; - } - - this.rURI = this.rURI.replaceAll("/+", "/"); - uriForLinks = uriForLinks.replaceAll("/+", "/"); - - // First try index.html and index.htm - if (new File(f, "index.html").exists()) - f = new File(f, "index.html"); - else if (new File(f, "index.htm").exists()) - f = new File(f, "index.htm"); - // No index file, list the directory - else if (allowDirectoryListing) { - String[] files = f.list(); - String msg = ""+HTML_STYLE+"

Directory /" + uriForLinks + "


"; - - if (uriForLinks.length() > 1) { - String u = uriForLinks.substring(0, uriForLinks.length() - 1); - int slash = u.lastIndexOf('/'); - if (slash >= 0 && slash < u.length()) - msg += "..
"; - } - - for (int i = 0; i < files.length; ++i) { + // List the directory, if necessary + if (f.isDirectory()) { + // Browsers get confused without '/' after the + // directory, send a redirect. + if (!uriForLinks.endsWith("/")) { + uriForLinks += "/"; +// com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( +// httpd, Codes.HTTP_REDIRECT, Codes.MIME_HTML, +// ""+HTML_STYLE+"Redirected: " +// + this.rURI + uri + ""); +// r.addHeader("Location", this.rURI + uri); +// return r; + } + + this.rURI = this.rURI.replaceAll("/+", "/"); + uriForLinks = uriForLinks.replaceAll("/+", "/"); + + // First try index.html and index.htm + if (new File(f, "index.html").exists()) + f = new File(f, "index.html"); + else if (new File(f, "index.htm").exists()) + f = new File(f, "index.htm"); + // No index file, list the directory + else if (allowDirectoryListing) { + String[] files = f.list(); + String msg = ""+HTML_STYLE+"

Directory /" + uriForLinks + "


"; + + if (uriForLinks.length() > 1) { + String u = uriForLinks.substring(0, uriForLinks.length() - 1); + int slash = u.lastIndexOf('/'); + if (slash >= 0 && slash < u.length()) + msg += "..
"; + } + + for (int i = 0; i < files.length; ++i) { File curFile = new File(f, files[i]); boolean dir = curFile.isDirectory(); if (dir) { @@ -178,8 +179,8 @@ else if (allowDirectoryListing) { files[i] += "/"; } - msg += "" - + files[i] + ""; + msg += "" + + files[i] + ""; // Show file size if (curFile.isFile()) { @@ -224,35 +225,35 @@ else if (len < 1024 * 1024) // Support (simple) skipping: long startFrom = 0; String range = header.get("range"); - if (range != null) { - if (range.startsWith("bytes=")) { - range = range.substring("bytes=".length()); - int minus = range.indexOf('-'); - if (minus > 0) - range = range.substring(0, minus); - try { - startFrom = Long.parseLong(range); - } catch (NumberFormatException nfe) { - } - } - } - if (startFrom < 0 || startFrom >= f.length()) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - com.nwu2.httpd.NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, Codes.MIME_PLAINTEXT, - "Requested Range Not Satisfiable"); - } - - FileInputStream fis = new FileInputStream(f); - fis.skip(startFrom); - com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( - httpd, Codes.HTTP_OK, mime, fis); - r.addHeader("Content-length", "" + (f.length() - startFrom)); - r.addHeader("Content-range", "" + startFrom + "-" - + (f.length() - 1) + "/" + f.length()); - return r; - } catch (IOException ioe) { - return new com.nwu2.httpd.responses.SimpleResponse(httpd, - Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, + if (range != null) { + if (range.startsWith("bytes=")) { + range = range.substring("bytes=".length()); + int minus = range.indexOf('-'); + if (minus > 0) + range = range.substring(0, minus); + try { + startFrom = Long.parseLong(range); + } catch (NumberFormatException nfe) { + } + } + } + if (startFrom < 0 || startFrom >= f.length()) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + com.nwu2.httpd.NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, Codes.MIME_PLAINTEXT, + "Requested Range Not Satisfiable"); + } + + FileInputStream fis = new FileInputStream(f); + fis.skip(startFrom); + com.nwu2.httpd.responses.Response r = new com.nwu2.httpd.responses.SimpleResponse( + httpd, Codes.HTTP_OK, mime, fis); + r.addHeader("Content-length", "" + (f.length() - startFrom)); + r.addHeader("Content-range", "" + startFrom + "-" + + (f.length() - 1) + "/" + f.length()); + return r; + } catch (IOException ioe) { + return new com.nwu2.httpd.responses.SimpleResponse(httpd, + Codes.HTTP_FORBIDDEN, Codes.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed."); } } From 032087474c2255f263ca914bba2eea7ad8229e79 Mon Sep 17 00:00:00 2001 From: nmaguiar Date: Mon, 9 Mar 2026 10:54:26 +0000 Subject: [PATCH 9/9] sync openaf/oafp --- js/oafp.js | 216 ++++++++++++++++++++++++++--------------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/js/oafp.js b/js/oafp.js index b39cea8cf..03f675ce3 100755 --- a/js/oafp.js +++ b/js/oafp.js @@ -1,33 +1,33 @@ var params=processExpr(" "); -// (author: Nuno Aguiar, version: 20260306, license: Apache 2.0, url: https://github.com/openaf/oafp) +// (author: Nuno Aguiar, version: 20260309, 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/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 U=null,V=b=>{U===null&&(U=Object.keys(H).filter(d=>isDef(a[d])));for(var c=0;c{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=$sql();d=y(a.isqlfiltertables);isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in isqlfiltertables");g.path=_$(g.path,"isqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&&(f=f.table(g.table,e))}),b=f.closeQuery(c.__isql.trim()))}else b=$sql(b,c.__isql.trim(),d);delete c.__isql}c.__path&&(b=$path(b,c.__path.trim()),delete c.__path);if(isString(b))return V(b);b=V(b);c.__from&&(b=$from(isArray(b)? -b:[b]).query(af.fromNLinq(c.__from.trim())),delete c.__from);if(c.__sql){d=__;if(isString(a.sqlfilter))switch(a.sqlfilter.toLowerCase()){case "simple":d="nlinq";break;case "advanced":d="h2";break;default:d=__}isArray(b)&&b.length>0&&(isString(a.sqlfiltertables)?(f=$sql(),d=y(a.sqlfiltertables),isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in sqlfiltertables");g.path=_$(g.path,"sqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&& -(f=f.table(g.table,e))}),b=f.closeQuery(c.__sql.trim()))):b=$sql(b,c.__sql.trim(),d));delete c.__sql}c.__opath&&(b=$path(b,c.__opath.trim()),delete c.__opath);return b},q=(b,c,d)=>{b==null||"undefined"==typeof b?L():(c=clone(c),toBoolean(a.color)?__conConsole=!0:isDef(a.color)&&(__conAnsi=!1),isString(b)?isDef(a.in)&&a.in!="raw"||isUnDef(a.in)?(d=b.trim(),b=d.startsWith("{")&&d.endsWith("}")||d.startsWith("[")&&d.endsWith("]")&&/^\[\s*\{/.test(d)?W(jsonParse(b,__,__,!0),c):W(b,c)):b=V(b):b=d?W([b], -c)[0]:W(b,c),isDef(a.outputkey)&&(b=$$({}).set(a.outputkey,b)),isDef(a.outkey)&&(b=$$({}).set(a.outkey,b)),L(),isUnDef(c.__format)&&(c.__format=getEnvsDef("OAFP_OUTPUT",c.__format,"ctree")),M.has(c.__format)?M.get(c.__format)(b,c):z(b,c,__))},C=(b,c)=>{var d=af.fromString2Bytes(""),f=af.newOutputStream();$sh(b).cb((g,e,h)=>{ioStreamCopy(f,g);g=f.toByteArray();g.length>0&&(d=g)}).get();return c?af.fromBytes2String(d):d},y=(b,c)=>{if("[object Object]"==Object.prototype.toString.call(b)||Array.isArray(b))return b; -if(!isString(b)||b==""||isNull(b))return"";b=b.trim();var d;isDef(af.fromJSSLON)&&(d=af.fromJSSLON(b));isUnDef(d)?d=b.startsWith("{")?jsonParse(b,__,__,!0):af.fromSLON(b):isString(d)&&c&&(d=af.fromYAML(d));return d},X=(b,c,d,f)=>{d=_$(d).isString().default("_oafp_fn_");c=splitBySepWithEnc(c," ",[['"','"'],["'","'"]]);let g=[];$ch("__oaf::chart").create();if(c.length>1){for(let e=0;e{if(p==0){if(k.startsWith("-"))return k; -global[d+e]=()=>{if(isString(f)){var n=$ch("__oaf::chart").get({name:f});n=isUnDef(n)?[]:n.data;var v=$path(b,k);if(isArray(v))return v.forEach((t,u)=>{isArray(n[u])?n[u].push(t):n[u]=[t]}),v=n.pop(),$ch("__oaf::chart").set({name:f},{name:f,data:n}),v[0]}else return $path(b,k)};return d+e}return k}).join(":");g.push(h)}return g.join(" ")}return""},w=b=>{if("undefined"!==typeof b)if("undefined"===typeof a.outfile)if(toBoolean(a.loopcls)&&cls(),isDef(a.pipe)){var c=isMap(a.pipe)?a.pipe:y(a.pipe,!0); -isMap(c)&&(c.data=b,oafp(c))}else print(b);else"undefined"===typeof global.__oafp_streams&&(global.__oafp_streams={}),"undefined"!==typeof global.__oafp_streams[a.outfile]?(c=toBoolean(a.outfileappend))?ioStreamWrite(global.__oafp_streams[a.outfile].s,b+(c?"\n":"")):io.writeFileBytes(a.outfile,isString(b)?af.fromString2Bytes(b):b):io.writeFileBytes(a.outfile,isString(b)||b instanceof java.lang.String?af.fromString2Bytes(b):b)},z=(b,c,d)=>{"undefined"!==typeof b&&(b=$o(b,c,d,!0),isDef(b)&&w(b))},P= -()=>({_resC:$atomic(),_nc:getNumberOfCores(),times:$atomic(),execs:$atomic(0,"long"),_opar:isDef(a.parallel)&&toBoolean(a.parallel)||String(getEnv("OAFP_PARALLEL")).toLowerCase()=="true",_par:!1,_ts:[]}),Q=b=>{b._opar&&b._nc>=3&&(b.times.get()/b.execs.get()/1E6<__flags.PFOREACH.seq_thrs_ms||__getThreadPools().active/getNumberOfCores()>__flags.PFOREACH.seq_ratio?b._par=!0:b._par=!1);return b},R=b=>{var c=0;do $doWait($doAll(b._ts)),b._resC.get()>0&&sleep(__getThreadPools().queued*__flags.PFOREACH.waitms, -!0),c++;while(b._resC.get()>0&&c<100)},S=(b,c)=>{var d=nowNano(),f;if(b._par){if(b._ts.push($do(()=>{b._resC.inc();return c(b.execs.inc())}).then(()=>b._resC.dec()).catch(g=>{f=g})),isDef(f))throw f;}else c(b.execs.inc());b.times.getAdd(nowNano()-d);d=__getThreadPools();d.queued>d.poolSize/__flags.PFOREACH.threads_thrs&&$doWait(b._ts.pop())},aa=(b,c)=>{b=_$(b).isMap().default({});return isDef(b.secKey)?(aMap=clone(b),aMap.secRepo=_$(aMap.secRepo).default(getEnv("OAFP_SECREPO")),aMap.secBucket=_$(aMap.secBucket).default(getEnv("OAFP_SECBUCKET")), +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= +$sql();d=y(a.isqlfiltertables);isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in isqlfiltertables");g.path=_$(g.path,"isqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&&(f=f.table(g.table,e))}),b=f.closeQuery(c.__isql.trim()))}else b=$sql(b,c.__isql.trim(),d);delete c.__isql}c.__path&&(b=$path(b,c.__path.trim()),delete c.__path);if(isString(b))return T(b);b=T(b);c.__from&&(b=$from(isArray(b)?b:[b]).query(af.fromNLinq(c.__from.trim())), +delete c.__from);if(c.__sql){d=__;if(isString(a.sqlfilter))switch(a.sqlfilter.toLowerCase()){case "simple":d="nlinq";break;case "advanced":d="h2";break;default:d=__}isArray(b)&&b.length>0&&(isString(a.sqlfiltertables)?(f=$sql(),d=y(a.sqlfiltertables),isArray(d)&&(d.forEach(g=>{isUnDef(g.table)&&l(-1,"One 'table' not defined in sqlfiltertables");g.path=_$(g.path,"sqlfiltertables table "+g.table+" path").isString().default("@");var e=$path(b,g.path);isArray(e)&&(f=f.table(g.table,e))}),b=f.closeQuery(c.__sql.trim()))): +b=$sql(b,c.__sql.trim(),d));delete c.__sql}c.__opath&&(b=$path(b,c.__opath.trim()),delete c.__opath);return b},n=(b,c,d)=>{b==null||"undefined"==typeof b?L():(c=clone(c),toBoolean(a.color)?__conConsole=!0:isDef(a.color)&&(__conAnsi=!1),isString(b)?isDef(a.in)&&a.in!="raw"||isUnDef(a.in)?(d=b.trim(),b=d.startsWith("{")&&d.endsWith("}")||d.startsWith("[")&&d.endsWith("]")&&/^\[\s*\{/.test(d)?U(jsonParse(b,__,__,!0),c):U(b,c)):b=T(b):b=d?U([b],c)[0]:U(b,c),isDef(a.outputkey)&&(b=$$({}).set(a.outputkey, +b)),isDef(a.outkey)&&(b=$$({}).set(a.outkey,b)),L(),isUnDef(c.__format)&&(c.__format=getEnvsDef("OAFP_OUTPUT",c.__format,"ctree")),M.has(c.__format)?M.get(c.__format)(b,c):z(b,c,__))},C=(b,c)=>{var d=af.fromString2Bytes(""),f=af.newOutputStream();$sh(b).cb((g,e,h)=>{ioStreamCopy(f,g);g=f.toByteArray();g.length>0&&(d=g)}).get();return c?af.fromBytes2String(d):d},y=(b,c)=>{if("[object Object]"==Object.prototype.toString.call(b)||Array.isArray(b))return b;if(!isString(b)||b==""||isNull(b))return"";b= +b.trim();var d;isDef(af.fromJSSLON)&&(d=af.fromJSSLON(b));isUnDef(d)?d=b.startsWith("{")?jsonParse(b,__,__,!0):af.fromSLON(b):isString(d)&&c&&(d=af.fromYAML(d));return d},V=(b,c,d,f)=>{d=_$(d).isString().default("_oafp_fn_");c=splitBySepWithEnc(c," ",[['"','"'],["'","'"]]);let g=[];$ch("__oaf::chart").create();if(c.length>1){for(let e=0;e{if(q==0){if(k.startsWith("-"))return k;global[d+e]=()=> +{if(isString(f)){var t=$ch("__oaf::chart").get({name:f});t=isUnDef(t)?[]:t.data;var v=$path(b,k);if(isArray(v))return v.forEach((r,u)=>{isArray(t[u])?t[u].push(r):t[u]=[r]}),v=t.pop(),$ch("__oaf::chart").set({name:f},{name:f,data:t}),v[0]}else return $path(b,k)};return d+e}return k}).join(":");g.push(h)}return g.join(" ")}return""},w=b=>{if("undefined"!==typeof b)if("undefined"===typeof a.outfile)if(toBoolean(a.loopcls)&&cls(),isDef(a.pipe)){var c=isMap(a.pipe)?a.pipe:y(a.pipe,!0);isMap(c)&&(c.data= +b,oafp(c))}else print(b);else"undefined"===typeof global.__oafp_streams&&(global.__oafp_streams={}),"undefined"!==typeof global.__oafp_streams[a.outfile]?(c=toBoolean(a.outfileappend))?ioStreamWrite(global.__oafp_streams[a.outfile].s,b+(c?"\n":"")):io.writeFileBytes(a.outfile,isString(b)?af.fromString2Bytes(b):b):io.writeFileBytes(a.outfile,isString(b)||b instanceof java.lang.String?af.fromString2Bytes(b):b)},z=(b,c,d)=>{"undefined"!==typeof b&&(b=$o(b,c,d,!0),isDef(b)&&w(b))},P=()=>({_resC:$atomic(), +_nc:getNumberOfCores(),times:$atomic(),execs:$atomic(0,"long"),_opar:isDef(a.parallel)&&toBoolean(a.parallel)||String(getEnv("OAFP_PARALLEL")).toLowerCase()=="true",_par:!1,_ts:[]}),Q=b=>{b._opar&&b._nc>=3&&(b.times.get()/b.execs.get()/1E6<__flags.PFOREACH.seq_thrs_ms||__getThreadPools().active/getNumberOfCores()>__flags.PFOREACH.seq_ratio?b._par=!0:b._par=!1);return b},R=b=>{var c=0;do $doWait($doAll(b._ts)),b._resC.get()>0&&sleep(__getThreadPools().queued*__flags.PFOREACH.waitms,!0),c++;while(b._resC.get()> +0&&c<100)},S=(b,c)=>{var d=nowNano(),f;if(b._par){if(b._ts.push($do(()=>{b._resC.inc();return c(b.execs.inc())}).then(()=>b._resC.dec()).catch(g=>{f=g})),isDef(f))throw f;}else c(b.execs.inc());b.times.getAdd(nowNano()-d);d=__getThreadPools();d.queued>d.poolSize/__flags.PFOREACH.threads_thrs&&$doWait(b._ts.pop())},X=(b,c)=>{b=_$(b).isMap().default({});return isDef(b.secKey)?(aMap=clone(b),aMap.secRepo=_$(aMap.secRepo).default(getEnv("OAFP_SECREPO")),aMap.secBucket=_$(aMap.secBucket).default(getEnv("OAFP_SECBUCKET")), aMap.secPass=_$(aMap.secPass).default(getEnv("OAFP_SECPASS")),aMap.secMainPass=_$(aMap.secMainPass).default(getEnv("OAFP_SECMAINPASS")),aMap.secFile=_$(aMap.secFile).default(getEnv("OAFP_SECFILE")),b=$sec(aMap.secRepo,aMap.secBucket,aMap.secPass,aMap.secMainPass,aMap.secFile).get(aMap.secKey),delete aMap.secRepo,delete aMap.secBucket,delete aMap.secPass,delete aMap.secMainPass,delete aMap.secFile,delete aMap.secKey,isDef(c)?$$(aMap).set(c,merge($$(aMap).get(c),b)):merge(aMap,b)):b},x=b=>{a.out=="grid"|| a.__inception||toBoolean(a.loopcls)||toBoolean(a.chartcls)||printErrnl(_$(b).default("(processing data...)"))},L=b=>{a.out=="grid"||a.__inception||toBoolean(a.loopcls)||toBoolean(a.chartcls)||printErrnl("\r"+" ".repeat(_$(b).default("(processing data...)").length)+"\r")};ow.loadFormat();var I=()=>{a.format=a.output||a.format||a.out;a.type=a.input||a.type||a.in;a.out=a.format;a.output=a.format;a.in=a.type;a.input=a.type;isUnDef(a._id)&&(a._id=nowNano())};I();var J;isDef(a.loop)&&(isDef(J)?a=clone(J): -J=clone(a));if(Object.keys(a).indexOf("-f")>=0){let b=Object.keys(a).length;var F=Object.keys(a).indexOf("-f");b>F+1&&Object.keys(a)[F+1].length>0&&(a.paramsfile=Object.keys(a)[F+1],delete a[a.paramsfile]);delete a["-f"]}if(isDef(a.paramsfile)){if(a.paramsfile=="-"){var ea=[];io.pipeLn(b=>{ea.push(b);return!1});var ba=ea.join("\n")}else io.fileExists(a.paramsfile)&&(ba=io.readFileString(a.paramsfile));isString(ba)&&(_margs=y(ba,!0),isMap(_margs)&&Object.keys(_margs).forEach(b=>{isUnDef(a[b])&&(a[b]= -_margs[b])}))}I();Object.keys(a).forEach(b=>{if(typeof a[b]=="string"&&a[b].length>0){var c=b.toLowerCase();b!=c&&isUnDef(a[c])&&(a[c]=a[b],delete a[b])}});var l=(b,c)=>{isUnDef(c)&&(c="exit: "+b);if(isUnDef(ow.oJob)&&!toBoolean(a.noexit))b!=0&&printErr(c),exit(b);else throw c;};I=()=>{__initializeCon();a.help=_$(a.help,"help").isString().default("");switch(a.help.toLowerCase()){case "filters":var b="docs/FILTERS.md";break;case "template":b="docs/TEMPLATE.md";break;case "examples":b="docs/EXAMPLES.md"; -break;case "readme":case "usage":b="docs/USAGE.md";break;default:b=a.help.toLowerCase(),b=isDef(G[b])?"docs/"+b+".md":"docs/USAGE.md"}var c=(getOPackPath("oafproc")||".")+"/"+b;let d="";if(b=="docs/USAGE.md"&&Object.keys(G).length>0){d="\n---\n\n## \ud83d\udcda Libs help documents\n\n| Lib | Help |\n| --- | --- |\n";for(let f in G)d+="| "+f+" | help="+f+" |\n"}isDef(c)&&io.fileExists(c)?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)?ow.format.string.pauseString(ow.format.withMD(io.readFileString(c)+ +J=clone(a));if(Object.keys(a).indexOf("-f")>=0){let b=Object.keys(a).length;var F=Object.keys(a).indexOf("-f");b>F+1&&Object.keys(a)[F+1].length>0&&(a.paramsfile=Object.keys(a)[F+1],delete a[a.paramsfile]);delete a["-f"]}if(isDef(a.paramsfile)){if(a.paramsfile=="-"){var ba=[];io.pipeLn(b=>{ba.push(b);return!1});var Y=ba.join("\n")}else io.fileExists(a.paramsfile)&&(Y=io.readFileString(a.paramsfile));isString(Y)&&(_margs=y(Y,!0),isMap(_margs)&&Object.keys(_margs).forEach(b=>{isUnDef(a[b])&&(a[b]=_margs[b])}))}I(); +Object.keys(a).forEach(b=>{if(typeof a[b]=="string"&&a[b].length>0){var c=b.toLowerCase();b!=c&&isUnDef(a[c])&&(a[c]=a[b],delete a[b])}});var l=(b,c)=>{isUnDef(c)&&(c="exit: "+b);if(isUnDef(ow.oJob)&&!toBoolean(a.noexit))b!=0&&printErr(c),exit(b);else throw c;};I=()=>{__initializeCon();a.help=_$(a.help,"help").isString().default("");switch(a.help.toLowerCase()){case "filters":var b="docs/FILTERS.md";break;case "template":b="docs/TEMPLATE.md";break;case "examples":b="docs/EXAMPLES.md";break;case "readme":case "usage":b= +"docs/USAGE.md";break;default:b=a.help.toLowerCase(),b=isDef(G[b])?"docs/"+b+".md":"docs/USAGE.md"}var c=(getOPackPath("oafproc")||".")+"/"+b;let d="";if(b=="docs/USAGE.md"&&Object.keys(G).length>0){d="\n---\n\n## \ud83d\udcda Libs help documents\n\n| Lib | Help |\n| --- | --- |\n";for(let f in G)d+="| "+f+" | help="+f+" |\n"}isDef(c)&&io.fileExists(c)?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)?ow.format.string.pauseString(ow.format.withMD(io.readFileString(c)+ d)):w(isDef(a.out)&&a.out=="raw"?io.readFileString(c)+d:ow.format.withMD(io.readFileString(c)+d))):isDef(global._oafphelp)&&isDef(global._oafphelp[b])?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)?ow.format.string.pauseString(ow.format.withMD(global._oafphelp[b]+d)):w(isDef(a.out)&&a.out=="raw"?global._oafphelp[b]+d:ow.format.withMD(global._oafphelp[b]+d))):isString(G[a.help])?(__conConsole=__ansiColorFlag=!0,isDef(ow.format.string.pauseString)&&toBoolean(a.pause)? -ow.format.string.pauseString(ow.format.withMD(G[a.help])):w(isDef(a.out)&&a.out=="raw"?G[a.help]:ow.format.withMD(G[a.help]))):w("Check https://github.com/OpenAF/oafp/blob/master/src/"+b);l(0)};var fa=()=>{var b=(getOPackPath("oafproc")||".")+"/.package.yaml";b={oafp:{version:io.fileExists(b)?io.readFileYAML(b).version:"(not available/embedded)",inputs:Array.from(K.keys()).filter(c=>c!="?").sort(),transforms:Object.keys(H).filter(c=>c!="transforms").sort(),outputs:Array.from(M.keys()).filter(c=>c!= +ow.format.string.pauseString(ow.format.withMD(G[a.help])):w(isDef(a.out)&&a.out=="raw"?G[a.help]:ow.format.withMD(G[a.help]))):w("Check https://github.com/OpenAF/oafp/blob/master/src/"+b);l(0)};var ca=()=>{var b=(getOPackPath("oafproc")||".")+"/.package.yaml";b={oafp:{version:io.fileExists(b)?io.readFileYAML(b).version:"(not available/embedded)",inputs:Array.from(K.keys()).filter(c=>c!="?").sort(),transforms:Object.keys(H).filter(c=>c!="transforms").sort(),outputs:Array.from(M.keys()).filter(c=>c!= "?").sort(),flags:__flags.OAFP},openaf:{version:getVersion(),distribution:getDistribution(),home:getOpenAFPath(),opacks:$from($m4a(getOPackLocalDB())).notEquals("name","OpenAF").sort("name").select({name:"",version:""})},java:{version:ow.format.getJavaVersion(),home:ow.format.getJavaHome(),vendor:String(java.lang.System.getProperty("java.vendor")),params:af.fromJavaArray(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments())},os:{name:String(java.lang.System.getProperty("os.name")), version:String(java.lang.System.getProperty("os.version")),arch:ow.format.getOSArch(),cpuCores:getNumberOfCores(!0),mem:{max:Number(java.lang.Runtime.getRuntime().maxMemory()),total:Number(java.lang.Runtime.getRuntime().totalMemory())},store:{tmpDirPath:String(java.lang.System.getProperty("java.io.tmpdir")),freeTmpDirBytes:Number(java.nio.file.Files.getFileStore(java.nio.file.Paths.get(java.lang.System.getProperty("java.io.tmpdir"))).getUsableSpace())}}};return stringify(b,__,"")};if("undefined"== -typeof a.file&&"undefined"==typeof a.cmd&&"undefined"==typeof a.data&&"undefined"==typeof a.url){F=__;for(var B in a)if("undefined"==typeof F&&a[B]===""&&B!="-debug"&&B!="-v"&&B!="-examples"){F=B;break}a.file=F;isDef(J)&&(J.file=F)}typeof a.debug!=="undefined"&&(a.debug=toBoolean(a.debug));isDef(a["-debug"])&&(a.debug=!0);if("[object Object]"==Object.prototype.toString.call(a.data)||Array.isArray(a.data))a.data=stringify(a.data,__,"");var Y=new Map([[".json","json"],[".ndjson","ndjson"],[".ndslon", -"ndslon"],[".slon","slon"],[".yaml","yaml"],[".xml","xml"],[".csv","csv"],[".ini","ini"],[".md","md"],[".xls","xls"],[".xlsx","xls"],[".sql","sql"],[".toml","toml"],[".jwt","jwt"],[".jfr","jfr"]]),ca=new Set(["csv","ndjson","ndslon","lines","dsv"]),T=null,Z=null,da={lines:(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);if(!a.linesjoin&&isBoolean(b))b.trim().length!=0&&(b.trim().length>0&&(b=b.trim().split(/\r?\n/)),q(b,c,!0)),N=!0;else return!0},javagc:(b,c)=>{a.javagcjoin= -_$(toBoolean(a.javagcjoin),"javagcjoin").isBoolean().default(!1);if(a.javagcjoin)return!0;if(isUnDef(global.__javagc_buffer)||global.__javagc_buffer.length>1048576)global.__javagc_buffer="";global.__javagc_buffer+=b;b=(d=>{try{let f=[/([^ ]+) (\d+\.\d+): \[GC \((.*?)\)(.+?)\[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/s,/([^ ]+) (\d+\.\d+): \[GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\]/, +typeof a.file&&"undefined"==typeof a.cmd&&"undefined"==typeof a.data&&"undefined"==typeof a.url){F=__;for(var B in a)if("undefined"==typeof F&&a[B]===""&&B!="-debug"&&B!="-v"&&B!="-examples"){F=B;break}a.file=F;isDef(J)&&(J.file=F)}typeof a.debug!=="undefined"&&(a.debug=toBoolean(a.debug));isDef(a["-debug"])&&(a.debug=!0);if("[object Object]"==Object.prototype.toString.call(a.data)||Array.isArray(a.data))a.data=stringify(a.data,__,"");var W=new Map([[".json","json"],[".ndjson","ndjson"],[".ndslon", +"ndslon"],[".slon","slon"],[".yaml","yaml"],[".xml","xml"],[".csv","csv"],[".ini","ini"],[".md","md"],[".xls","xls"],[".xlsx","xls"],[".sql","sql"],[".toml","toml"],[".jwt","jwt"],[".jfr","jfr"]]),Z=new Set(["csv","ndjson","ndslon","lines","dsv"]),aa={lines:(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);if(!a.linesjoin&&isBoolean(b))b.trim().length!=0&&(b.trim().length>0&&(b=b.trim().split(/\r?\n/)),n(b,c,!0)),N=!0;else return!0},javagc:(b,c)=>{a.javagcjoin=_$(toBoolean(a.javagcjoin), +"javagcjoin").isBoolean().default(!1);if(a.javagcjoin)return!0;if(isUnDef(global.__javagc_buffer)||global.__javagc_buffer.length>1048576)global.__javagc_buffer="";global.__javagc_buffer+=b;b=(d=>{try{let f=[/([^ ]+) (\d+\.\d+): \[GC \((.*?)\)(.+?)\[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/s,/([^ ]+) (\d+\.\d+): \[GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\]/, /([^ ]+) (\d+\.\d+): \[Full GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] \[ParOldGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), \[Metaspace: (\d+K)->(\d+K)\(.*?\)\], (\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[Full GC \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\(.*?\)\] \[ParOldGen: (\d+K)->(\d+K)\(.*?\)\] (\d+K)->(\d+K)\(.*?\), \[Metaspace: (\d+K)->(\d+K)\(.*?\)\], (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/, /^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*(\d+[GMK])->(\d+[GMK])\((\d+[GMK])\)\s*(\d+\.\d+)ms/,/^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*Metaspace:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*NonClass:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*Class:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)/,/^\[(.+)\]\s+GC\((\d+)\)\s*(Allocation Failure)\s*(.*?)\s+(\d+[KMGT])->(\d+[KMGT])\((\d+[KMGT])\)\s+(\d+\.\d+)ms/];for(let g=0;g{k.match(/^\d+\.\d+s$/)?h.sinceStart=parseFloat(k.replace(/s$/,"")):k.match(/\d{4}-\d{2}-\d{2}T/)&&(h.timestamp=ow.format.toDate(k,"yyyy-MM-dd'T'HH:mm:ss.SSSZ"))}),h.gcId=parseInt(e[2]),h.gcType=e[3].trim(),h.gcType==""&&(h.gcType="none"),h.durationSecs=parseFloat(e[e.length-1])/1E3,g===5?(h.heapBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.heapAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.heapTotal=ow.format.fromBytesAbbreviation(e[6]+"B")):g>5&&(g==6?(h.metaUsedBeforeGC= @@ -36,32 +36,32 @@ ow.format.fromBytesAbbreviation(e[12]+"B"),h.classTotalBeforeGC=ow.format.fromBy e[3],h.durationSecs=parseFloat(e[e.length-1]),g===0||g===6?(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[6]+"B"),h.afterGC=ow.format.fromBytesAbbreviation(e[7]+"B"),g===6&&d.includes("Allocation Failure")&&(h.gcCause="Allocation Failure")):g===1||g===3?(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"), h.ParOldGenBeforeGC=ow.format.fromBytesAbbreviation(e[6]+"B"),h.ParOldGenAfterGC=ow.format.fromBytesAbbreviation(e[7]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[8]+"B"),h.afterGC=ow.format.fromBytesAbbreviation(e[9]+"B"),h.metaspaceBeforeGC=ow.format.fromBytesAbbreviation(e[10]+"B"),h.metaspaceAfterGC=ow.format.fromBytesAbbreviation(e[11]+"B")):g===2?(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[4]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[6]+ "B"),h.afterGC=ow.format.fromBytesAbbreviation(e[7]+"B"),h.userTime=parseFloat(e[8]),h.sysTime=parseFloat(e[9]),h.realTime=parseFloat(e[10])):g===6&&(h.PSYoungGenBeforeGC=ow.format.fromBytesAbbreviation(e[5]+"B"),h.PSYoungGenAfterGC=ow.format.fromBytesAbbreviation(e[6]+"B"),h.beforeGC=ow.format.fromBytesAbbreviation(e[7]+"B"),h.afterGC=ow.format.fromBytesAbbreviation(e[8]+"B"),h.durationSecs=parseFloat(e[9]),e[10]&&(h.userTime=parseFloat(e[10]),h.sysTime=parseFloat(e[11]),h.realTime=parseFloat(e[12])), -h.gcCause="Allocation Failure"));return h}}}catch(f){printErr(f),l(-2,"Error parsing Java GC log: "+f)}})(b);isMap(b)&&(q(b,c,!0),global.__javagc_buffer="")},ndjson:(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);if(a.ndjsonjoin)return!0;isUnDef(global.__ndjsonbuf)&&b.length!=0&&b.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(b.length!=0&&!b.trim().endsWith("}")){global.__ndjsonbuf+=b.trim();return}global.__ndjsonbuf.length> -0&&(b=global.__ndjsonbuf+b,global.__ndjsonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="{"?(q(jsonParse(global.__ndjsonbuf,__,__,!0),c,!0),N=!0,global.__ndjsonbuf=__):(q(jsonParse(b,__,__,!0),c,!0),N=!0)},ndslon:(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);if(a.ndslonjoin)return!0;isUnDef(global.__ndslonbuf)&&b.length!=0&&b.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(b.length!=0&&!b.trim().endsWith(")")){global.__ndslonbuf+= -b.trim();return}global.__ndslonbuf.length>0&&(b=global.__ndslonbuf+b,global.__ndslonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="("?(q(af.fromSLON(global.__ndslonbuf),c,!0),N=!0,global.__ndslonbuf=__):(q(af.fromSLON(String(b)),c,!0),N=!0)},dsv:(b,c)=>{isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&& -(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim=!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&&(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(g=>g.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);T===null&&a.indsvescape&&(T=new RegExp(a.indsvescape+a.indsvquote,"g"));Z===null&&a.indsvsepre&&(Z=new RegExp(a.indsvsepre));var d=g=>{var e={};a.indsvfields.forEach((h,k)=>{e[h]=g[k]});return e},f=g=>{if(isUnDef(g)|| -g.length==0)return __;if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields=g.trim().split(a.indsvsep):a.indsvfields=g.trim().split(Z),a.indsvfields=a.indsvfields.map(h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(T,a.indsvquote));return h}),__;var e={};if(isString(g))return e=isUnDef(a.indsvsepre)?pForEach(g.split(a.indsvsep),h=>{a.indsvtrim&&(h=h.trim()); -a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(T,a.indsvquote));return h}):pForEach(g.split(Z),h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(T,a.indsvquote));return h}),d(e)};if(a.indsvjoin)return!0;b=String(b);if(b.length>0&&b.trim().substring(0,1)!=a.indsvcomment)return b=f(b),isDef(b)&&q(b,c,!0),!0}};if(typeof O=== -"undefined")var O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b};var H={transforms:b=>{if(toBoolean(a.transforms))return Object.keys(H).filter(c=>c!="transforms").sort()},cmlt:b=>{if(toBoolean(a.cmlt)){b=isArray(b)?b:[b];a.cmltch=_$(a.cmltch,"cmltch").or().isString().isMap().default("(type: simple)");var c=y(a.cmltch);if(isMap(c))return isUnDef(c.type)&&l(-1,"cmltch.type is not defined."),isDef(c.lib)&&loadLib(c.lib),$ch().list().indexOf("oafp::cmltdata")< -0&&(c.type=="remote"?$ch("oafp::cmltdata").createRemote(c.url):$ch("oafp::cmltdata").create(c.type,c.options),c=Number(_$(a.cmltsize,"cmltsize").isNumber().default(100))-1,c>0&&$ch("oafp::cmltdata").subscribe(ow.ch.utils.getHousekeepSubscriber("oafp::cmltdata",c))),b.forEach(d=>$ch("oafp::cmltdata").set({t:nowNano()},d)),$ch("oafp::cmltdata").getAll();l(-1,"Invalid cmltch parameter")}},diff:b=>{var c=y(a.diff);if(isMap(c)){isDef(c.a)&&isDef(c.b)||l(-1,"diff.a path and diff.b path are required."); -loadDiff();let d=$path(b,c.a);b=$path(b,c.b);let f=__;toBoolean(a.color)&&(isUnDef(a.difftheme)&&isDef(getEnv("OAFP_DIFFTHEME"))&&(a.difftheme=getEnv("OAFP_DIFFTHEME")),f=y(_$(a.difftheme,"difftheme").or().isString().isMap().default("")),f=merge({added:"GREEN",removed:"RED",common:"FAINT",linenum:"ITALIC",linediv:"FAINT",linesep:"|"},f));let g=(e,h)=>{if(toBoolean(a.color)){isUnDef(h)&&(h="");var k=new Set;if(isArray(e)){let p=1,n=toBoolean(a.diffnlines),v=0;n&&(e.forEach(u=>{v+=u.value.split("\n").length}), -v=String(v).length+1);let t=u=>{let m;m=n&&h!=""?ansiColor(f.linenum,u>0?$ft("% "+v+"d",p):" ".repeat(v))+ansiColor(f.linediv,`${f.linesep}`):"";p+=u;return m};e.forEach((u,m)=>{m=u.value;isString(m)&&(h!=""?(m=m.split(h),m[m.length-1]==""&&m.pop()):m=[m]);k.add(u.added?m.map(r=>t(1)+ansiColor(f.added,(h!=""?"+":"")+r)).join(ansiColor("RESET",h)):u.removed?m.map(r=>t(0)+ansiColor(f.removed,(h!=""?"-":"")+r)).join(ansiColor("RESET",h)):m.map(r=>t(1)+ansiColor(f.common,(h!=""?" ":"")+r)).join(ansiColor("RESET", -h)))})}return Array.from(k).join(ansiColor("RESET",h))}return $from(e).select({count:__,added:!1,removed:!1,value:[]})};return isString(d)&&isString(b)?toBoolean(a.diffwords)?g(JsDiff.diffWords(d,b,c.options)):toBoolean(a.diffwordswithspace)?g(JsDiff.diffWordsWithSpace(d,b,c.options)):toBoolean(a.difflines)?g(JsDiff.diffLines(d,b,c.options),"\n"):toBoolean(a.diffsentences)?g(JsDiff.diffSentences(d,b,c.options),"\n"):g(JsDiff.diffChars(d,b,c.options)):isArray(d)&&isArray(b)&&!toBoolean(a.color)?g(JsDiff.diffArrays(d, -b,c.options)):g(JsDiff.diffJson(d,b,c.options),"\n")}},jsonschemagen:b=>{if(toBoolean(a.jsonschemagen))return ow.loadObj(),ow.obj.schemaGenerator(b)},jsonschemacmd:b=>H.jsonschema(b),jsonschema:b=>{isMap(b)||l(-1,"jsonschema is only supported with a map.");isUnDef(a.jsonschema)&&isUnDef(a.jsonschemacmd)&&l(-1,"You need to provide a jsonschema=someFile.json or jsonschemacmd=someCommand");ow.loadObj();var c;if(isDef(a.jsonschemacmd)){var d=$sh(a.jsonschemacmd).getJson(0);d.exitcode==0?c=d.stdout:l(-1, -"Error executing the command '"+a.jsonschemacmd+"': "+d.stderr)}else c=io.readFileJSON(a.jsonschema);isMap(c)||l(-1,"The schema provided is not a valid JSON schema.");ow.obj.schemaInit({allErrors:!0});c=ow.obj.schemaCompile(c);return{valid:c(b),errors:c.errors}},sortmapkeys:b=>{if(toBoolean(a.sortmapkeys)&&isObject(b)){let c=(d,f)=>{let g=Object.keys(d).sort(),e={};for(let h=0;htypeof n==="object"&&n!==null&&n!==void 0?sortMapKeys(n, -f):n):e[k]=f&&typeof p==="object"&&p!==null&&p!==void 0?c(p,f):p}return e};return c(b,!0)}return b},searchkeys:b=>isObject(b)?searchKeys(b,a.searchkeys):b,searchvalues:b=>isObject(b)?searchValues(b,a.searchvalues):b,maptoarray:b=>toBoolean(a.maptoarray)&&isMap(b)?$m4a(b,a.maptoarraykey):b,arraytomap:b=>toBoolean(a.arraytomap)&&isArray(b)?$a4m(b,a.arraytomapkey,toBoolean(a.arraytomapkeepkey)):b,flatmap:b=>toBoolean(a.flatmap)&&isObject(b)?ow.loadObj().flatMap(b,a.flatmapsep):b,merge:b=>{if(toBoolean(a.merge)&& -isArray(b)&&b.length>1){for(var c,d=0;d{toBoolean(a.correcttypes)&&isObject(b)&&traverse(b,(c,d,f,g)=>{switch(descType(d)){case "number":isString(d)&&(g[c]=Number(d));break;case "string":if(d.trim().toLowerCase()=="true"||d.trim().toLowerCase()=="false")g[c]=toBoolean(d);else{if(isDef(ow.format.fromISODate)){if(d.trim().match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\d+Z$/)){g[c]=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(aa(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 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, +h.gcCause="Allocation Failure"));return h}}}catch(f){printErr(f),l(-2,"Error parsing Java GC log: "+f)}})(b);isMap(b)&&(n(b,c,!0),global.__javagc_buffer="")},ndjson:(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);if(a.ndjsonjoin)return!0;isUnDef(global.__ndjsonbuf)&&b.length!=0&&b.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(b.length!=0&&!b.trim().endsWith("}")){global.__ndjsonbuf+=b.trim();return}global.__ndjsonbuf.length> +0&&(b=global.__ndjsonbuf+b,global.__ndjsonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="{"?(n(jsonParse(global.__ndjsonbuf,__,__,!0),c,!0),N=!0,global.__ndjsonbuf=__):(n(jsonParse(b,__,__,!0),c,!0),N=!0)},ndslon:(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);if(a.ndslonjoin)return!0;isUnDef(global.__ndslonbuf)&&b.length!=0&&b.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(b.length!=0&&!b.trim().endsWith(")")){global.__ndslonbuf+= +b.trim();return}global.__ndslonbuf.length>0&&(b=global.__ndslonbuf+b,global.__ndslonbuf=__)}b.length==0||b.length>0&&b.trim().substring(0,1)!="("?(n(af.fromSLON(global.__ndslonbuf),c,!0),N=!0,global.__ndslonbuf=__):(n(af.fromSLON(String(b)),c,!0),N=!0)},dsv:(b,c)=>{isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&& +(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim=!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&&(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(g=>g.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);var d=g=>{var e={};a.indsvfields.forEach((h,k)=>{e[h]=g[k]});return e},f=g=>{if(isUnDef(g)||g.length==0)return __;if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields= +g.trim().split(a.indsvsep):a.indsvfields=g.trim().split(new RegExp(a.indsvsepre)),a.indsvfields=a.indsvfields.map(h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return h}),__;var e={};if(isString(g))return e=isUnDef(a.indsvsepre)?pForEach(g.split(a.indsvsep),h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&& +(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return h}):pForEach(g.split(new RegExp(a.indsvsepre)),h=>{a.indsvtrim&&(h=h.trim());a.indsvquote&&h.startsWith(a.indsvquote)&&h.endsWith(a.indsvquote)&&(h=h.substring(1,h.length-1));a.indsvescape&&(h=h.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return h}),d(e)};if(a.indsvjoin)return!0;b=String(b);if(b.length>0&&b.trim().substring(0,1)!=a.indsvcomment)return b= +f(b),isDef(b)&&n(b,c,!0),!0}};if(typeof O==="undefined")var O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b};var H={transforms:b=>{if(toBoolean(a.transforms))return Object.keys(H).filter(c=>c!="transforms").sort()},cmlt:b=>{if(toBoolean(a.cmlt)){b=isArray(b)?b:[b];a.cmltch=_$(a.cmltch,"cmltch").or().isString().isMap().default("(type: simple)");var c=y(a.cmltch);if(isMap(c))return isUnDef(c.type)&&l(-1,"cmltch.type is not defined."), +isDef(c.lib)&&loadLib(c.lib),$ch().list().indexOf("oafp::cmltdata")<0&&(c.type=="remote"?$ch("oafp::cmltdata").createRemote(c.url):$ch("oafp::cmltdata").create(c.type,c.options),c=Number(_$(a.cmltsize,"cmltsize").isNumber().default(100))-1,c>0&&$ch("oafp::cmltdata").subscribe(ow.ch.utils.getHousekeepSubscriber("oafp::cmltdata",c))),b.forEach(d=>$ch("oafp::cmltdata").set({t:nowNano()},d)),$ch("oafp::cmltdata").getAll();l(-1,"Invalid cmltch parameter")}},diff:b=>{var c=y(a.diff);if(isMap(c)){isDef(c.a)&& +isDef(c.b)||l(-1,"diff.a path and diff.b path are required.");loadDiff();let d=$path(b,c.a);b=$path(b,c.b);let f=__;toBoolean(a.color)&&(isUnDef(a.difftheme)&&isDef(getEnv("OAFP_DIFFTHEME"))&&(a.difftheme=getEnv("OAFP_DIFFTHEME")),f=y(_$(a.difftheme,"difftheme").or().isString().isMap().default("")),f=merge({added:"GREEN",removed:"RED",common:"FAINT",linenum:"ITALIC",linediv:"FAINT",linesep:"|"},f));let g=(e,h)=>{if(toBoolean(a.color)){isUnDef(h)&&(h="");var k=new Set;if(isArray(e)){let q=1,t=toBoolean(a.diffnlines), +v=0;t&&(e.forEach(u=>{v+=u.value.split("\n").length}),v=String(v).length+1);let r=u=>{let m;m=t&&h!=""?ansiColor(f.linenum,u>0?$ft("% "+v+"d",q):" ".repeat(v))+ansiColor(f.linediv,`${f.linesep}`):"";q+=u;return m};e.forEach((u,m)=>{m=u.value;isString(m)&&(h!=""?(m=m.split(h),m[m.length-1]==""&&m.pop()):m=[m]);k.add(u.added?m.map(p=>r(1)+ansiColor(f.added,(h!=""?"+":"")+p)).join(ansiColor("RESET",h)):u.removed?m.map(p=>r(0)+ansiColor(f.removed,(h!=""?"-":"")+p)).join(ansiColor("RESET",h)):m.map(p=> +r(1)+ansiColor(f.common,(h!=""?" ":"")+p)).join(ansiColor("RESET",h)))})}return Array.from(k).join(ansiColor("RESET",h))}return $from(e).select({count:__,added:!1,removed:!1,value:[]})};return isString(d)&&isString(b)?toBoolean(a.diffwords)?g(JsDiff.diffWords(d,b,c.options)):toBoolean(a.diffwordswithspace)?g(JsDiff.diffWordsWithSpace(d,b,c.options)):toBoolean(a.difflines)?g(JsDiff.diffLines(d,b,c.options),"\n"):toBoolean(a.diffsentences)?g(JsDiff.diffSentences(d,b,c.options),"\n"):g(JsDiff.diffChars(d, +b,c.options)):isArray(d)&&isArray(b)&&!toBoolean(a.color)?g(JsDiff.diffArrays(d,b,c.options)):g(JsDiff.diffJson(d,b,c.options),"\n")}},jsonschemagen:b=>{if(toBoolean(a.jsonschemagen))return ow.loadObj(),ow.obj.schemaGenerator(b)},jsonschemacmd:b=>H.jsonschema(b),jsonschema:b=>{isMap(b)||l(-1,"jsonschema is only supported with a map.");isUnDef(a.jsonschema)&&isUnDef(a.jsonschemacmd)&&l(-1,"You need to provide a jsonschema=someFile.json or jsonschemacmd=someCommand");ow.loadObj();var c;if(isDef(a.jsonschemacmd)){var d= +$sh(a.jsonschemacmd).getJson(0);d.exitcode==0?c=d.stdout:l(-1,"Error executing the command '"+a.jsonschemacmd+"': "+d.stderr)}else c=io.readFileJSON(a.jsonschema);isMap(c)||l(-1,"The schema provided is not a valid JSON schema.");ow.obj.schemaInit({allErrors:!0});c=ow.obj.schemaCompile(c);return{valid:c(b),errors:c.errors}},sortmapkeys:b=>{if(toBoolean(a.sortmapkeys)&&isObject(b)){let c=(d,f)=>{let g=Object.keys(d).sort(),e={};for(let h=0;h +typeof t==="object"&&t!==null&&t!==void 0?sortMapKeys(t,f):t):e[k]=f&&typeof q==="object"&&q!==null&&q!==void 0?c(q,f):q}return e};return c(b,!0)}return b},searchkeys:b=>isObject(b)?searchKeys(b,a.searchkeys):b,searchvalues:b=>isObject(b)?searchValues(b,a.searchvalues):b,maptoarray:b=>toBoolean(a.maptoarray)&&isMap(b)?$m4a(b,a.maptoarraykey):b,arraytomap:b=>toBoolean(a.arraytomap)&&isArray(b)?$a4m(b,a.arraytomapkey,toBoolean(a.arraytomapkeepkey)):b,flatmap:b=>toBoolean(a.flatmap)&&isObject(b)?ow.loadObj().flatMap(b, +a.flatmapsep):b,merge:b=>{if(toBoolean(a.merge)&&isArray(b)&&b.length>1){for(var c,d=0;d{toBoolean(a.correcttypes)&&isObject(b)&&traverse(b,(c,d,f,g)=>{switch(descType(d)){case "number":isString(d)&&(g[c]=Number(d));break;case "string":if(d.trim().toLowerCase()=="true"||d.trim().toLowerCase()=="false")g[c]=toBoolean(d);else{if(isDef(ow.format.fromISODate)){if(d.trim().match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\d+Z$/)){g[c]= +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 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 p=new Set(c(d)),n=new Set(c(b));return d.filter(m=>!n.has(f(m))).concat(b.filter(m=>!p.has(f(m)))); -case "diff":let v=new Set(c(d)),t=new Set(c(b));return d.map(m=>Object.assign({"*":t.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, +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))}); @@ -71,99 +71,99 @@ return b},field2byte:b=>{let c=a.field2byte.split(",").map(d=>d.trim());traverse !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 p="";isDef(k)&&(k.toLowerCase().indexOf("err")>=0&&(p=f),k.toLowerCase().indexOf("warn")>=0&&(p=g));isDef(h)&&h.length>24&&(h=h.substring(0,23)+"Z");(isDef(e)||isDef(h))&&w([d,h,isDef(k)?"\u001b[m | "+p+k: -"","\u001b[m | ",p,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)&& -a.rawasciiend>0&&a.rawasciiend{if(t=="")return u==d.length-1?__:"\u001b[31m\u240a\u001b[m";t=t.replace(e,r=>["\u001b[4m\u001b[38;5;4m","\\u"+r.charCodeAt(0).toString(16).padStart(2,"0").toUpperCase(),"\u001b[m"].join(""));t=t.replace(h,r=>["\u001b[4m\u001b[33m", -"\\u"+r.charCodeAt(0).toString(16).padStart(4,"0").toUpperCase(),"\u001b[m"].join(""));u{r=g-(E+m)%g;m+=r-1;return["\u001b[38;5;8m",r>2?"\u2508".repeat(r-1):"","\u2192\u001b[m"].join("")}).replace(v,"\u001b[38;5;8m\u00b7\u001b[m")}).filter(t=>typeof t!=="undefined");if(toBoolean(a.rawasciinolinenum))w(b.map(t=>t).join("\n"));else{const t="%"+String(b.length).length+ -".0f";w(b.map((u,m)=>["\u001b[38;5;8m",$f(t,Number(m+1)+f),"\u001b[m\u001b[38;5;8m\u2502\u001b[m",u].join("")).join("\n"))}}],["raw",(b,c)=>{isString(b)?w(b):w(stringify(b,__,""))}],["lines",(b,c)=>{isArray(b)?b.forEach(d=>w(d)):w(b)}],["ini",(b,c)=>{isString(b)||(ow.loadJava(),c=new ow.java.ini,w(c.put(b).save()))}],["toml",(b,c)=>{isUnDef(af.toTOML)&&l(-1,"TOML support not found.");if(isMap(b))w(af.toTOML(b));else if(isArray(b))w(af.toTOML({list:b}));else return __}],["mdyaml",(b,c)=>{isArray(b)? +"").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)&& +a.rawasciiend>0&&a.rawasciiend{if(r=="")return u==d.length-1?__:"\u001b[31m\u240a\u001b[m";r=r.replace(e,p=>["\u001b[4m\u001b[38;5;4m","\\u"+p.charCodeAt(0).toString(16).padStart(2,"0").toUpperCase(),"\u001b[m"].join(""));r=r.replace(h,p=>["\u001b[4m\u001b[33m", +"\\u"+p.charCodeAt(0).toString(16).padStart(4,"0").toUpperCase(),"\u001b[m"].join(""));u{p=g-(E+m)%g;m+=p-1;return["\u001b[38;5;8m",p>2?"\u2508".repeat(p-1):"","\u2192\u001b[m"].join("")}).replace(v,"\u001b[38;5;8m\u00b7\u001b[m")}).filter(r=>typeof r!=="undefined");if(toBoolean(a.rawasciinolinenum))w(b.map(r=>r).join("\n"));else{const r="%"+String(b.length).length+ +".0f";w(b.map((u,m)=>["\u001b[38;5;8m",$f(r,Number(m+1)+f),"\u001b[m\u001b[38;5;8m\u2502\u001b[m",u].join("")).join("\n"))}}],["raw",(b,c)=>{isString(b)?w(b):w(stringify(b,__,""))}],["lines",(b,c)=>{isArray(b)?b.forEach(d=>w(d)):w(b)}],["ini",(b,c)=>{isString(b)||(ow.loadJava(),c=new ow.java.ini,w(c.put(b).save()))}],["toml",(b,c)=>{isUnDef(af.toTOML)&&l(-1,"TOML support not found.");if(isMap(b))w(af.toTOML(b));else if(isArray(b))w(af.toTOML({list:b}));else return __}],["mdyaml",(b,c)=>{isArray(b)? b.forEach((d,f)=>{z(d,merge(c,{__format:"yaml"}));f{isArray(b)&&(ow.loadTemplate(),w(ow.template.md.table(b)))}],["template",(b,c)=>{isString(b)||(ow.loadTemplate(),ow.template.addConditionalHelpers(),ow.template.addOpenAFHelpers(),ow.template.addFormatHelpers(),isUnDef(a.template)&&isUnDef(a.templatepath)&&l(-1,"For out=template you need to provide a template=someFile.hbs or templatepath=..."),a.templatedata=_$(a.templatedata, "templatedata").isString().default("@"),c=isDef(a.template)?toBoolean(a.templatetmpl)?a.template:io.readFileString(a.template):$path(a.__origr,a.templatepath),w($t(c,$path(b,a.templatedata))))}],["openmetrics",(b,c)=>{isString(b)?l(-1,"For out=openmetrics input needs to be an array or map."):(ow.loadMetrics(),b=ow.metrics.fromObj2OpenMetrics(b,a.metricsprefix,a.metricstimestamp),b=b.split("\n").map(d=>{d.indexOf('{_id="')>=0&&(d=d.replace(/{_id="\d+",/,"{"));d.indexOf(',_id="')>=0&&(d=d.replace(/,_id="\d+"}/, "}"));d.indexOf('_id="')>=0&&(d=d.replace(/,_id="\d+",/,","));return d}).filter(d=>d.length>0).join("\n"),w(b))}],["pjson",(b,c)=>{c.__format="prettyjson";z(b,c)}],["ndjson",(b,c)=>{isArray(b)?b.forEach(d=>w(stringify(d,__,""))):isMap(b)?w(stringify(b,__,"")):z(b,c)}],["ndslon",(b,c)=>{isArray(b)?b.forEach(d=>w(af.toSLON(d))):isMap(b)?w(af.toSLON(b)):z(b,c)}],["ndcslon",(b,c)=>{isArray(b)?b.forEach(d=>w(af.toCSLON(d))):isMap(b)?w(af.toCSLON(b)):z(b,c)}],["base64",(b,c)=>{b=isString(b)?b:stringify(b); toBoolean(a.base64gzip)?w(af.fromBytes2String(af.toBase64Bytes(io.gzip(af.fromString2Bytes(b))))):w(af.fromBytes2String(af.toBase64Bytes(b)))}],["gb64json",(b,c)=>{b=isString(b)?b:stringify(b);w(af.fromBytes2String(af.toBase64Bytes(io.gzip(af.fromString2Bytes(b)))))}],["jwt",(b,c)=>{isMap(b)?(isUnDef(a.jwtsecret)&&isUnDef(a.jwtprivkey)&&l(-1,"For out=jwt you need to provide a jwtsecret or a jwtprivkey"),ow.loadServer(),isDef(a.jwtprivkey)?(ow.loadJava(),c=new ow.java.cipher,w(ow.server.jwt.sign(c.readKey4File(a.jwtprivkey, !0,a.jwtalg),b))):w(ow.server.jwt.sign(a.jwtsecret,b))):l(-1,"For out=jwt input needs to be a map.")}],["grid",(b,c)=>{isUnDef(a.grid)&&l(-1,"For out=grid you need to provide a grid=...");c=y(_$(a.grid,"grid").or().isString().isMap().isArray().$_());isArray(c)&&c.length>0&&isArray(c[0])?(c.forEach((d,f)=>{d.forEach((g,e)=>{if(isUnDef(g.type)||g.type!="empty"){if(isDef(g.cmd)){var h=$sh(g.cmd).getJson(0);h=isDef(h)&&isDef(h.stdout)?h.stdout:""}else h=b;if(g.type=="chart"||g.type=="bar")e="_chrt"+(f+ -1)+"."+(e+1),g.obj=(g.type=="chart"?e+" ":"")+X(h,g.obj,e),isUnDef(g.title)&&(g.title="Chart "+e);isDef(g.path)?(g.obj=$path(h,g.path),isUnDef(g.title)&&(g.title=g.path)):isString(h)?g.obj=h:isObject(h)&&g.type!="chart"&&(g.obj=$path(h,"@"))}else g.obj=""})}),c=ow.format.string.grid(c,__,__," ",!0),w(c)):l(-1,"Invalid grid parameter: '"+stringify(a.grid,__,"")+"'")}],["envs",(b,c)=>{b=isArray(b)?b.map(g=>isObject(g)?ow.loadObj().flatMap(g,"_"):g):ow.loadObj().flatMap(b,"_");c=g=>String(g).indexOf(" ")>= +1)+"."+(e+1),g.obj=(g.type=="chart"?e+" ":"")+V(h,g.obj,e),isUnDef(g.title)&&(g.title="Chart "+e);isDef(g.path)?(g.obj=$path(h,g.path),isUnDef(g.title)&&(g.title=g.path)):isString(h)?g.obj=h:isObject(h)&&g.type!="chart"&&(g.obj=$path(h,"@"))}else g.obj=""})}),c=ow.format.string.grid(c,__,__," ",!0),w(c)):l(-1,"Invalid grid parameter: '"+stringify(a.grid,__,"")+"'")}],["envs",(b,c)=>{b=isArray(b)?b.map(g=>isObject(g)?ow.loadObj().flatMap(g,"_"):g):ow.loadObj().flatMap(b,"_");c=g=>String(g).indexOf(" ")>= 0?'"'+g+'"':g;isUnDef(a.envscmd)&&(a.envscmd=ow.format.isWindows()?"set":"export");a.envscmd=String(a.envscmd);isUnDef(a.envsprefix)&&(a.envsprefix="_OAFP_");a.envsprefix=String(a.envsprefix);toBoolean(a.envsnoprefix)&&(a.envsprefix="");var d=new Set,f;for(f in b)d.add(a.envscmd+(a.envscmd.length>0?" ":"")+(a.envsprefix+f.replace(/[^a-zA-Z0-9_]/g,"_"))+"="+c(b[f]));w(Array.from(d).join("\n"))}],["cmd",(b,c)=>{isString(a.outcmd)||l(-1,'For out=cmd you need to provide a outcmd="..."');toBoolean(a.outcmdtmpl)&& (ow.loadTemplate(),ow.template.addConditionalHelpers(),ow.template.addOpenAFHelpers(),ow.template.addFormatHelpers());let d=f=>{var g=isString(f)?f:stringify(f,__,"");if(toBoolean(a.outcmdparam))try{var e=$sh(a.outcmd.replace(/([^\\]?){}/g,"$1"+g)).get(0)}catch(h){sprintErr(h)}else e=toBoolean(a.outcmdtmpl)?$sh($t(a.outcmd,f)).get(0):$sh(a.outcmd,g).get(0);toBoolean(a.outcmdnl)?(e.stdout.length>0&&print(e.stdout),e.stderr.length>0&&printErr(e.stderr)):(e.stdout.length>0&&printnl(e.stdout),e.stderr.length> -0&&printErrnl(e.stderr))};isArray(b)?toBoolean(a.outcmdjoin)?d(b):toBoolean(a.outcmdseq)?b.forEach(d):isDef(pForEach)?pForEach(b,f=>{d(f)}):parallel4Array(b,f=>{d(f)}):(isString(b),d(b))}],["chart",(b,c)=>{isUnDef(a.chart)&&l(-1,'For out=chart you need to provide a chart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"output=chart is not supported in this version of OpenAF");b=X(b,a.chart);b.length>0&&(b=printChart("oafp "+b),toBoolean(a.chartcls)&&cls(),w(b))}],["schart", -(b,c)=>{isUnDef(a.schart)&&l(-1,'For out=schart you need to provide a schart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"Output=schart is not supported in this version of OpenAF");b=X(b,a.schart,"_oafp_sfn_","soafp");b.length>0&&w(printChart("soafp "+b))}],["ch",(b,c)=>{isUnDef(a.ch)&&l(-1,'For out=ch you need to provide a ch="(type: ...)"');isUnDef(a.chkey)&&l(-1,'For out=ch you need to provide a chkey="key1, key2"');b=isMap(b)?[b]:b;a.ch=y(a.ch);isMap(a.ch)?(isUnDef(a.ch.type)&& +0&&printErrnl(e.stderr))};isArray(b)?toBoolean(a.outcmdjoin)?d(b):toBoolean(a.outcmdseq)?b.forEach(d):isDef(pForEach)?pForEach(b,f=>{d(f)}):parallel4Array(b,f=>{d(f)}):(isString(b),d(b))}],["chart",(b,c)=>{isUnDef(a.chart)&&l(-1,'For out=chart you need to provide a chart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"output=chart is not supported in this version of OpenAF");b=V(b,a.chart);b.length>0&&(b=printChart("oafp "+b),toBoolean(a.chartcls)&&cls(),w(b))}],["schart", +(b,c)=>{isUnDef(a.schart)&&l(-1,'For out=schart you need to provide a schart=" [...]"');isUnDef(splitBySepWithEnc)&&l(-1,"Output=schart is not supported in this version of OpenAF");b=V(b,a.schart,"_oafp_sfn_","soafp");b.length>0&&w(printChart("soafp "+b))}],["ch",(b,c)=>{isUnDef(a.ch)&&l(-1,'For out=ch you need to provide a ch="(type: ...)"');isUnDef(a.chkey)&&l(-1,'For out=ch you need to provide a chkey="key1, key2"');b=isMap(b)?[b]:b;a.ch=y(a.ch);isMap(a.ch)?(isUnDef(a.ch.type)&& l(-1,"ch.type is not defined."),isDef(a.ch.lib)&&loadLib(a.ch.lib),a.ch.type=="remote"?$ch("oafp::outdata").createRemote(a.ch.url):$ch("oafp::outdata").create(a.ch.type,isDef($sec().procMap)?$sec().procMap(a.ch.options):a.ch.options),toBoolean(a.chunset)?$ch("oafp::outdata").unsetAll(a.chkey.split(",").map(d=>d.trim()),b):$ch("oafp::outdata").setAll(a.chkey.split(",").map(d=>d.trim()),b),$ch("oafp::outdata").destroy()):l(-1,"Invalid ch parameter")}],["db",(b,c)=>{(!isArray(b)||b.length<1)&&l(-1,"db is only supported for filled arrays/lists"); a.dbtable=_$(a.dbtable,"outdbtable").isString().default("data");a.dbnocreate=_$(toBoolean(a.dbnocreate),"outdbnocreate").isBoolean().default(!1);a.dbicase=_$(toBoolean(a.dbicase),"outdbicase").isBoolean().default(!1);a.dbbatchsize=_$(a.dbbatchsize,"dbbatchsize").isNumber().default(__);ow.loadObj();try{isString(a.dbjdbc)||l(-1,"dbjdbc URL is not defined.");isDef(a.dblib)&&loadLib("jdbc-"+a.dblib+".js");var d=new DB(a.dbjdbc,a.dbuser,a.dbpass,a.dbtimeout);if(!a.dbnocreate)try{var f=ow.obj.fromObj2DBTableCreate(a.dbtable, -b,__,!a.dbicase);d.u(f);d.commit()}catch(p){d.rollback(),l(-1,"Error creating table: "+p)}var g=Object.keys(ow.obj.flatMap(b[0]));var e=a.dbicase?g.join(",").toUpperCase():'"'+g.join('", "')+'"';let k="";var h=b.map(p=>{var n=ow.obj.flatMap(p);p=[];for(var v in g)p.push(n[g[v]]);v=g.map(t=>String(n[t]));p="INSERT INTO "+(a.dbicase?a.dbtable:'"'+a.dbtable+'"')+" ("+e+") VALUES ("+v.map(t=>"?").join(", ")+")";p.length>k.length&&(k=String(p));return v});d.usArray(k,h,a.dbbatchsize)}catch(k){isDef(d)&& +b,__,!a.dbicase);d.u(f);d.commit()}catch(q){d.rollback(),l(-1,"Error creating table: "+q)}var g=Object.keys(ow.obj.flatMap(b[0]));var e=a.dbicase?g.join(",").toUpperCase():'"'+g.join('", "')+'"';let k="";var h=b.map(q=>{var t=ow.obj.flatMap(q);q=[];for(var v in g)q.push(t[g[v]]);v=g.map(r=>String(t[r]));q="INSERT INTO "+(a.dbicase?a.dbtable:'"'+a.dbtable+'"')+" ("+e+") VALUES ("+v.map(r=>"?").join(", ")+")";q.length>k.length&&(k=String(q));return v});d.usArray(k,h,a.dbbatchsize)}catch(k){isDef(d)&& d.rollback(),l(-1,"Error connecting to the database: "+k)}finally{try{isDef(d)&&(d.commit(),d.close())}catch(k){l(-1,"Error closing the database connection: "+k)}}}],["sql",(b,c)=>{(!isArray(b)||b.length<1)&&l(-1,"sql is only supported for filled arrays/lists");a.sqltable=_$(a.sqltable,"sqltable").isString().default("data");a.sqlicase=_$(toBoolean(a.sqlicase),"sqlicase").isBoolean().default(!1);a.sqlnocreate=_$(toBoolean(a.sqlnocreate),"sqlnocreate").isBoolean().default(!1);ow.loadObj();a.sqlnocreate|| w(ow.obj.fromObj2DBTableCreate(a.sqltable,b,__,!a.sqlicase)+";\n");var d=Object.keys(ow.obj.flatMap(b[0]));var f=a.sqlicase?d.join(",").toUpperCase():'"'+d.join('", "')+'"';w(b.map(g=>{var e=ow.obj.flatMap(g);g=[];for(var h in d)g.push(e[d[h]]);h=d.map(k=>{k=e[k];isString(k)&&(k="'"+k.replace(/'/g,"''")+"'");isNull(k)&&(k="null");return k});return"INSERT INTO "+(a.sqlicase?a.sqltable:'"'+a.sqltable+'"')+" ("+f+") VALUES ("+h.join(",")+");"}).join("\n"))}],["xml",(b,c)=>{w(af.fromObj2XML(b,!0,a.outxmlprefix))}], -["pxml",(b,c)=>{b=af.fromObj2XML(b,!0,a.pxmlprefix);w('\n'+new XMLList(b))}],["xls",(b,c)=>{if(!isString(b)){try{includeOPack("plugin-XLS")}catch(e){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");if(isMap(b)){ow.loadObj();var d=ow.obj.flatMap(b);var f=Object.keys(d).map(e=>({key:e,value:d[e]}))}isArray(b)&&(f=b);traverse(f,(e,h,k,p)=>{isString(h)&&h.startsWith("=")&&(p[e]="'"+ +["pxml",(b,c)=>{b=af.fromObj2XML(b,!0,a.pxmlprefix);w('\n'+new XMLList(b))}],["xls",(b,c)=>{if(!isString(b)){try{includeOPack("plugin-XLS")}catch(e){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");if(isMap(b)){ow.loadObj();var d=ow.obj.flatMap(b);var f=Object.keys(d).map(e=>({key:e,value:d[e]}))}isArray(b)&&(f=b);traverse(f,(e,h,k,q)=>{isString(h)&&h.startsWith("=")&&(q[e]="'"+ h)});b=!1;c=a.xlsfile;isUnDef(a.xlsfile)&&(b=!0,a.xlsfile=io.createTempFile("oafp",".xlsx"));c=new XLS(isDef(c)&&io.fileExists(c)?c:__);var g=c.getSheet(_$(a.xlssheet,"xlssheet").isString().default("data"));a.xlsformat=_$(a.xlsformat,"xlsformat").or().isString().isMap().default('(bold: true, borderBottom: "medium", borderBottomColor: "red")');a.xlsformat=y(a.xlsformat);ow.format.xls.setTable(c,g,"A",1,f,__,a.xlsformat);c.writeFile(a.xlsfile);c.close();a.xlsopenwait=_$(a.xlsopenwait,"xlsopenwait").isNumber().default(5E3); a.xlsopen=_$(toBoolean(a.xlsopen),"xlsopen").isBoolean().default(!0);a.xlsopen&&(ow.format.isWindows()?($sh("start "+a.xlsfile).exec(),b&&sleep(a.xlsopenwait,!0)):ow.format.getOS().startsWith("Mac")&&($sh("open "+a.xlsfile).exec(),b&&sleep(a.xlsopenwait,!0)))}}],["oaf",(b,c)=>{isUnDef(a.outoaf)&&l(-1,"For out=oaf you need to provide a outoaf=...");isString(a.outoaf)&&(c=io.fileExists(a.outoaf)?io.readFileString(a.outoaf):a.outoaf,isString(c)&&(new Function("data",c))(b))}],["dsv",(b,c)=>{isUnDef(a.dsvsep)&& (a.dsvsep=",");isUnDef(a.dsvquote)&&(a.dsvquote='\\"');isUnDef(a.dsvfields)&&(a.dsvfields=__);isUnDef(a.dsvuseslon)&&(a.dsvuseslon=!1);isUnDef(a.dsvnl)&&(a.dsvnl="\n");isUnDef(a.dsvheader)&&(a.dsvheader=!0);isDef(a.dsvfields)&&(a.dsvfields=String(a.dsvfields).split(","));isMap(b)&&(b=[b]);if(isArray(b)){var d=[];toBoolean(a.dsvheader)&&isArray(b)&&b.length>0&&(isDef(a.dsvfields)&&isArray(a.dsvfields)?d.push(a.dsvfields.map(f=>{isString(f)?(f=f.replace(/"/g,'""'),f=`"${f}"`):isNull(f)&&(f="");return f})): d.push(Object.keys(b[0]).map(f=>{isString(f)?(f=f.replace(/"/g,'""'),f=`"${f}"`):isNull(f)&&(f="");return f})),a.dsvnl.length>0&&d.push(a.dsvnl));isArray(a.dsvfields)||(a.dsvfields=__);b.forEach((f,g)=>{g>0&&d.push(a.dsvnl);g=pForEach(isDef(a.dsvfields)?a.dsvfields:Object.keys(f),e=>{e=f[e];if(isString(e))e=e.replace(/"/g,'""'),e=`"${e}"`;else if(isNull(e))e="";else if(isArray(e)||isMap(e))e=a.dsvuseslon?af.toSLON(e):stringify(e,__,""),e=e.replace(/"/g,a.dsvquote),e=`"${e}"`;return e});d.push(g.join(a.dsvsep))}); -a.dsvnl.length>0&&d.length>0&&d[d.length-1]!=a.dsvnl&&b.length>1&&d.push(a.dsvnl)}else l(-1,"For out=dsv, input needs to be an array or map.");w(d.join(""))}]]);typeof O==="undefined"&&(O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b});var K=new Map([["?",(b,c)=>{b=Array.from(K.keys()).filter(d=>d!="?").sort();q(b,c)}],["pm",(b,c)=>{x();isDef(__pm._map)&&(b=__pm._map);isDef(__pm._list)&&(b=__pm._list);q(b,c)}],["key",(b,c)=>{x();isString(b)|| -l(-1,"key is only supported with a string.");q($get(b),c)}],["jsonschema",(b,c)=>{x();b=jsonParse(b,__,__,!0);isMap(b)||l(-1,"jsonschema is only supported with a map.");ow.loadObj();b=ow.obj.schemaSampleGenerator(b);q(b,c)}],["yaml",(b,c)=>{x();b=af.fromYAML(b);q(b,c)}],["xml",(b,c)=>{x();a.xmlignored=_$(a.xmlignored,"xmlignored").isString().default(__);a.xmlprefix=_$(a.xmlprefix,"xmlprefix").isString().default(__);a.xmlfiltertag=_$(toBoolean(a.xmlfiltertag),"xmlfiltertag").isBoolean().default(__); -b=af.fromXML2Obj(b,a.xmlignored,a.xmlprefix,!a.xmlfiltertag);q(b,c)}],["lines",(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);x();let d=__,f=[];a.linesvisualheadsep=_$(toBoolean(a.linesvisualheadsep),"linesvisualheadsep").isBoolean().default(!1);let g=!1,e=!1;isUnDef(a.linesvisualsepre)&&(a.linesvisualsepre=a.linesvisualheadsep?"\\s+":" \\s+");let h=n=>{n=n.split("\n").map(t=>{let u="",m=0;for(let r=0;r{v[d[u]]=n.substring(t,u+1{if(u.trim().length!=0){g||d.push(u);if(!a.linesvisualheadsep&&!g||g&&a.linesvisualheadsep&&!e)u=n.substring(t).match(new RegExp(ow.format.escapeRE(u)+"("+a.linesvisualsepre+"|$)")),!isNull(u)&&isDef(u.index)?(f.push(t+u.index),t+=u[0].length):l(-1,"Problem with linesvisual to find header positioning."); -return t}},0);g?a.linesvisualheadsep&&!e&&(e=!0):(g=!0,a.linesvisualheadsep||(e=!0));return __};if(a.linesjoin)if(isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),b=b.split(/\r?\n/),toBoolean(a.linesvisual)){var k=[];b.forEach(n=>{n.length!=0&&(n=h(n),isDef(n)&&k.push(n))});q(k,c)}else q(b,c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var p=P();ioStreamReadLines(b, -n=>{S(p,()=>{if(toBoolean(a.linesvisual)){var v=h(n);isDef(v)&&q(v,c,!0)}else q(n,c,!0)});p=Q(p)});R(p);b.close()}}],["ndjson",(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);x();global.__ndjsonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndjsonbuf)&&e.length!=0&&e.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(e.length!=0&&!e.trim().endsWith("}")){global.__ndjsonbuf+=e.trim();return}global.__ndjsonbuf.length>0&&(e=global.__ndjsonbuf+ -e,global.__ndjsonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="{"?(noOut=!1,h(e),global.__ndjsonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,p=>h.push(jsonParse(p,__,__,toBoolean(a.ndjsonfilter)))));return h};if(a.ndjsonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),q(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)): -af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>q(jsonParse(h,__,__,!0),c,!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["ndslon",(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);x();global.__ndslonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndslonbuf)&&e.length!=0&&e.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(e.length!=0&&!e.trim().endsWith(")")){global.__ndslonbuf+=e.trim();return}global.__ndslonbuf.length> -0&&(e=global.__ndslonbuf+e,global.__ndslonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="("?(noOut=!1,h(e),global.__ndslonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,p=>h.push(af.fromSLON(p))));return h};if(a.ndslonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),q(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)): -af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>q(af.fromSLON(h),c,!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["dsv",(b,c)=>{x();isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&&(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim=!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&& -(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(k=>k.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);var d=a.indsvescape?new RegExp(a.indsvescape+a.indsvquote,"g"):null,f=a.indsvsepre?new RegExp(a.indsvsepre):null,g=k=>{var p={};a.indsvfields.forEach((n,v)=>{p[n]=k[v]});return p},e=k=>{if(isUnDef(k)||k.length==0)return{};if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields=k.trim().split(a.indsvsep): -a.indsvfields=k.trim().split(f),a.indsvfields=a.indsvfields.map(n=>{a.indsvtrim&&(n=n.trim());a.indsvquote&&n.startsWith(a.indsvquote)&&n.endsWith(a.indsvquote)&&(n=n.substring(1,n.length-1));a.indsvescape&&(n=n.replace(d,a.indsvquote));return n}),__;var p={};if(isString(k))return p=isUnDef(a.indsvsepre)?pForEach(k.split(a.indsvsep),n=>{a.indsvtrim&&(n=n.trim());a.indsvquote&&n.startsWith(a.indsvquote)&&n.endsWith(a.indsvquote)&&(n=n.substring(1,n.length-1));a.indsvescape&&(n=n.replace(d,a.indsvquote)); -return n}):pForEach(k.split(f),n=>{a.indsvtrim&&(n=n.trim());a.indsvquote&&n.startsWith(a.indsvquote)&&n.endsWith(a.indsvquote)&&(n=n.substring(1,n.length-1));a.indsvescape&&(n=n.replace(d,a.indsvquote));return n}),g(p)};if(a.indsvjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),q(b.split(/\r?\n/).map(k=>isUnDef(k)||k.length==0||k.trim().startsWith(a.indsvcomment)?__:e(k)).filter(k=>isDef(k)),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file): -isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var h=P();ioStreamReadLines(b,k=>{if(!isUnDef(k)&&k.length!=0&&!k.trim().startsWith(a.indsvcomment))return S(h,()=>{if(isString(k)){var p=e(k);isDef(p)&&q(p,c,!0)}return!0}),h=Q(h),!1});R(h);b.close()}L()}],["md",(b,c)=>{x();__conConsole=__ansiColorFlag=!0;isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="md",c.__format="md");q(b,c)}],["mdtable",(b,c)=>{x();ow.loadTemplate();if(toBoolean(a.inmdtablejoin)){var d=new Set, -f=new Set,g=()=>{f.size>0&&(d.add(ow.template.md.fromTable(Array.from(f).join("\n"))),f.clear())};b.split("\n").forEach(e=>{/^\|.+\|$/.test(e.trim())?f.add(e.trim()):g()});g();q(Array.from(d),c)}else f=ow.template.md.fromTable(b),q(f,c)}],["mdcode",(b,c)=>{x();var d=[];b=b.split("\n");var f=!1,g={language:"",code:[],startLine:-1,endLine:-1};b.forEach((e,h)=>{var k=e.trim().match(/^```+[^`]+```+$/),p=e.trim().match(/^```+(.+)?$/),n=f&&(e.trim().match(/^```+$/)||e.trim().match(/[^`]```+$/));k?(f=!1, -g={language:__,code:e.replace(/^```+/,"").replace(/```+$/,"").trim(),startLine:h+1,endLine:h+1},d.push(g)):p&&!f?(f=!0,g={language:p[1],code:[],startLine:h+1,endLine:-1}):n&&f?(f=!1,g.endLine=h+1,g.code=g.code.join("\n"),d.push(g),g={language:"",code:[],startLine:-1,endLine:-1}):f&&g.code.push(e)});f&&(g.endLine=b.length,g.code=g.code.join("\n"),d.push(g));q(d,c)}],["ask",(b,c)=>{var d=[];b=y(b);isDef(askStruct)&&isArray(b)&&(__conConsole=!0,__con.getTerminal().settings.set("-icanon min 1 -echo"), -d=askStruct(b),__con.getTerminal().settings.set("icanon echo"),print(""));q(d,c)}],["raw",(b,c)=>{x();q(b,c)}],["ini",(b,c)=>{x();ow.loadJava();var d=new ow.java.ini;b=isDef(a.file)?d.loadFile(a.file).get():d.load(b).get();q(b,c)}],["jwt",(b,c)=>{ow.loadServer();if(toBoolean(a.injwtverify)){isUnDef(a.injwtsecret)&&isUnDef(a.injwtpubkey)&&l(-1,"injwtsecret or injwtpubkey is not defined.");try{if(isDef(a.injwtpubkey)){ow.loadJava();var d=new ow.java.cipher;ow.server.jwt.verify(d.readKey4File(a.injwtpubkey, -!1,a.injwtalg),b.trim())}else ow.server.jwt.verify(a.injwtsecret,b.trim());var f=!0}catch(g){isDef(g.javaException)&&printErr(g.javaException.getMessage()),f=!1}}b=ow.server.jwt.decode(b);isDef(f)&&(b.__verified=f);!toBoolean(a.injwtraw)&&isDef(b)&&isMap(b.claims)&&(isDef(b.claims.exp)&&(b.claims.exp=new Date(b.claims.exp*1E3)),isDef(b.claims.iat)&&(b.claims.iat=new Date(b.claims.iat*1E3)),isDef(b.claims.nbf)&&(b.claims.nbf=new Date(b.claims.nbf*1E3)));q(b,c)}],["sql",(b,c)=>{isString(b)?toBoolean(a.sqlparse)? -(isUnDef(ow.format.sqlFormat)&&l(-1,"SQL parse not available."),q(ow.format.sqlFormat(b,isDef(a.sqloptions)?y(a.sqloptions):__),c)):q(af.fromSQL(b).ast,c):q(b,c)}],["openmetrics",(b,c)=>{isString(b)?(ow.loadMetrics(),q(ow.metrics.fromOpenMetrics2Array(b),c)):q(b,c)}],["ch",(b,c)=>{x();isUnDef(a.inch)&&l(-1,"inch is not defined.");a.inch=y(a.inch);if(isMap(a.inch)){isUnDef(a.inch.type)&&l(-1,"inch.type is not defined.");isDef(a.inch.lib)&&loadLib(a.inch.lib);a.inch.type=="remote"?$ch("oafp::indata").createRemote(a.inch.url): -$ch("oafp::indata").create(a.inch.type,isDef($sec().procMap)?$sec().procMap(a.inch.options):a.inch.options);var d=y(b,!0);toBoolean(a.inchall)||b.trim().length==0?q($ch("oafp::indata").getAll(isMap(d)?d:__),c):q($ch("oafp::indata").get(isMap(d)?d:__),c);$ch("oafp::indata").destroy()}else l(-1,"inch is not a valid map.")}],["db",(b,c)=>{if(isString(b)){x();isString(a.indbjdbc)||l(-1,"indbjdbc URL is not defined.");try{isDef(a.indblib)&&loadLib("jdbc-"+a.indblib+".js");var d=new DB(a.indbjdbc,a.indbuser, -a.indbpass,a.indbtimeout);d.convertDates(!0);toBoolean(a.indbautocommit)&&d.setAutoCommit(!0);if(toBoolean(a.indbexec)){var f=d.u(b);q({affectedRows:f},c);d.commit()}else if(toBoolean(a.indbstream)){var g=d.qsRS(b);try{for(;g.next();){f={};for(var e=1;e<=g.getMetaData().getColumnCount();e++){var h=g.getObject(e);switch(g.getMetaData().getColumnType(e)){case java.sql.Types.BIGINT:case java.sql.Types.INTEGER:case java.sql.Types.TINYINT:case java.sql.Types.SMALLINT:case java.sql.Types.NUMERIC:h=Number(h); -break;case java.sql.Types.DOUBLE:case java.sql.Types.FLOAT:case java.sql.Types.REAL:case java.sql.Types.DECIMAL:h=Number(h);break;case java.sql.Types.BOOLEAN:h=!!h;break;case java.sql.Types.TIME:case java.sql.Types.DATE:case java.sql.Types.TIMESTAMP:h=new Date(h.getTime());break;case java.sql.Types.NULL:h=null;break;default:h=String(h)}f[g.getMetaData().getColumnName(e)]=h}q(f,c)}}catch(k){l(-1,"Error streaming SQL: "+k.message)}finally{d.closeStatement(b),g.close()}}else if(toBoolean(a.indbdesc)){f= +a.dsvnl.length>0&&d.length>0&&d[d.length-1]!=a.dsvnl&&b.length>1&&d.push(a.dsvnl)}else l(-1,"For out=dsv, input needs to be an array or map.");w(d.join(""))}]]);typeof O==="undefined"&&(O=function(b){b=="OAFP_MODEL"&&isUnDef(getEnv("OAFP_MODEL"))&&isDef(getEnv("OAF_MODEL"))&&(b="OAF_MODEL");return b});var K=new Map([["?",(b,c)=>{b=Array.from(K.keys()).filter(d=>d!="?").sort();n(b,c)}],["pm",(b,c)=>{x();isDef(__pm._map)&&(b=__pm._map);isDef(__pm._list)&&(b=__pm._list);n(b,c)}],["key",(b,c)=>{x();isString(b)|| +l(-1,"key is only supported with a string.");n($get(b),c)}],["jsonschema",(b,c)=>{x();b=jsonParse(b,__,__,!0);isMap(b)||l(-1,"jsonschema is only supported with a map.");ow.loadObj();b=ow.obj.schemaSampleGenerator(b);n(b,c)}],["yaml",(b,c)=>{x();b=af.fromYAML(b);n(b,c)}],["xml",(b,c)=>{x();a.xmlignored=_$(a.xmlignored,"xmlignored").isString().default(__);a.xmlprefix=_$(a.xmlprefix,"xmlprefix").isString().default(__);a.xmlfiltertag=_$(toBoolean(a.xmlfiltertag),"xmlfiltertag").isBoolean().default(__); +b=af.fromXML2Obj(b,a.xmlignored,a.xmlprefix,!a.xmlfiltertag);n(b,c)}],["lines",(b,c)=>{a.linesjoin=_$(toBoolean(a.linesjoin),"linesjoin").isBoolean().default(!1);x();let d=__,f=[];a.linesvisualheadsep=_$(toBoolean(a.linesvisualheadsep),"linesvisualheadsep").isBoolean().default(!1);let g=!1,e=!1;isUnDef(a.linesvisualsepre)&&(a.linesvisualsepre=a.linesvisualheadsep?"\\s+":" \\s+");let h=t=>{t=t.split("\n").map(r=>{let u="",m=0;for(let p=0;p{v[d[u]]=t.substring(r,u+1{if(u.trim().length!=0){g||d.push(u);if(!a.linesvisualheadsep&&!g||g&&a.linesvisualheadsep&&!e)u=t.substring(r).match(new RegExp(ow.format.escapeRE(u)+"("+a.linesvisualsepre+"|$)")),!isNull(u)&&isDef(u.index)?(f.push(r+u.index),r+=u[0].length):l(-1,"Problem with linesvisual to find header positioning."); +return r}},0);g?a.linesvisualheadsep&&!e&&(e=!0):(g=!0,a.linesvisualheadsep||(e=!0));return __};if(a.linesjoin)if(isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),b=b.split(/\r?\n/),toBoolean(a.linesvisual)){var k=[];b.forEach(t=>{t.length!=0&&(t=h(t),isDef(t)&&k.push(t))});n(k,c)}else n(b,c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var q=P();ioStreamReadLines(b, +t=>{S(q,()=>{if(toBoolean(a.linesvisual)){var v=h(t);isDef(v)&&n(v,clone(c),!0)}else n(t,clone(c),!0)});q=Q(q)});R(q);b.close()}}],["ndjson",(b,c)=>{a.ndjsonjoin=_$(toBoolean(a.ndjsonjoin),"ndjsonjoin").isBoolean().default(!1);x();global.__ndjsonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndjsonbuf)&&e.length!=0&&e.trim().startsWith("{")&&(global.__ndjsonbuf="");if(isDef(global.__ndjsonbuf)){if(e.length!=0&&!e.trim().endsWith("}")){global.__ndjsonbuf+=e.trim();return}global.__ndjsonbuf.length> +0&&(e=global.__ndjsonbuf+e,global.__ndjsonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="{"?(noOut=!1,h(e),global.__ndjsonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,q=>h.push(jsonParse(q,__,__,toBoolean(a.ndjsonfilter)))));return h};if(a.ndjsonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),n(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)? +af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>n(jsonParse(h,__,__,!0),clone(c),!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["ndslon",(b,c)=>{a.ndslonjoin=_$(toBoolean(a.ndslonjoin),"ndslonjoin").isBoolean().default(!1);x();global.__ndslonbuf=__;noOut=!0;var d=(e,h)=>{isUnDef(global.__ndslonbuf)&&e.length!=0&&e.trim().startsWith("(")&&(global.__ndslonbuf="");if(isDef(global.__ndslonbuf)){if(e.length!=0&&!e.trim().endsWith(")")){global.__ndslonbuf+= +e.trim();return}global.__ndslonbuf.length>0&&(e=global.__ndslonbuf+e,global.__ndslonbuf=__)}e.length==0||e.length>0&&e.trim().substring(0,1)!="("?(noOut=!1,h(e),global.__ndslonbuf=__):e.trim().length>0&&(noOut=!1,h(e))},f=e=>{var h=[];e.split("\n").filter(k=>k.length>0).forEach(k=>d(k,q=>h.push(af.fromSLON(q))));return h};if(a.ndslonjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),n(f(b),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file): +isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{S(g,()=>d(e,h=>n(af.fromSLON(h),clone(c),!0)));g=Q(g)});R(g);b.close()}noOut&&L()}],["dsv",(b,c)=>{x();isUnDef(a.indsvsep)&&(a.indsvsep=",");isUnDef(a.indsvsepre)&&(a.indsvsepre=__);isUnDef(a.indsvquote)&&(a.indsvquote='"');isUnDef(a.indsvescape)&&(a.indsvescape="\\");isUnDef(a.indsvcomment)&&(a.indsvcomment="#");isUnDef(a.indsvheader)&&(a.indsvheader=!0);isUnDef(a.indsvtrim)&&(a.indsvtrim= +!0);isUnDef(a.indsvjoin)&&(a.indsvjoin=!1);isUnDef(a.indsvfields)&&(a.indsvfields=__);isString(a.indsvfields)&&(a.indsvfields=a.indsvfields.trim().split(",").map(e=>e.trim()));isDef(a.indsvfields)&&!isArray(a.indsvfields)&&(a.indsvfields=__);var d=e=>{var h={};a.indsvfields.forEach((k,q)=>{h[k]=e[q]});return h},f=e=>{if(isUnDef(e)||e.length==0)return{};if(toBoolean(a.indsvheader)&&isUnDef(a.indsvfields))return isUnDef(a.indsvsepre)?a.indsvfields=e.trim().split(a.indsvsep):a.indsvfields=e.trim().split(new RegExp(a.indsvsepre)), +a.indsvfields=a.indsvfields.map(k=>{a.indsvtrim&&(k=k.trim());a.indsvquote&&k.startsWith(a.indsvquote)&&k.endsWith(a.indsvquote)&&(k=k.substring(1,k.length-1));a.indsvescape&&(k=k.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return k}),__;var h={};if(isString(e))return h=isUnDef(a.indsvsepre)?pForEach(e.split(a.indsvsep),k=>{a.indsvtrim&&(k=k.trim());a.indsvquote&&k.startsWith(a.indsvquote)&&k.endsWith(a.indsvquote)&&(k=k.substring(1,k.length-1));a.indsvescape&&(k=k.replace(new RegExp(a.indsvescape+ +a.indsvquote,"g"),a.indsvquote));return k}):pForEach(e.split(new RegExp(a.indsvsepre)),k=>{a.indsvtrim&&(k=k.trim());a.indsvquote&&k.startsWith(a.indsvquote)&&k.endsWith(a.indsvquote)&&(k=k.substring(1,k.length-1));a.indsvescape&&(k=k.replace(new RegExp(a.indsvescape+a.indsvquote,"g"),a.indsvquote));return k}),d(h)};if(a.indsvjoin)isDef(a.file)&&isUnDef(a.cmd)&&(b=io.readFileString(a.file)),isDef(a.cmd)&&(b=C(a.cmd,!0)),n(b.split(/\r?\n/).map(e=>isUnDef(e)||e.length==0||e.trim().startsWith(a.indsvcomment)? +__:f(e)).filter(e=>isDef(e)),c);else{b=isDef(a.file)&&isUnDef(a.cmd)?io.readFileStream(a.file):isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):af.fromString2InputStream(b);var g=P();ioStreamReadLines(b,e=>{if(!isUnDef(e)&&e.length!=0&&!e.trim().startsWith(a.indsvcomment))return S(g,()=>{if(isString(e)){var h=f(e);isDef(h)&&n(h,clone(c),!0)}return!0}),g=Q(g),!1});R(g);b.close()}L()}],["md",(b,c)=>{x();__conConsole=__ansiColorFlag=!0;isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="md",c.__format= +"md");n(b,c)}],["mdtable",(b,c)=>{x();ow.loadTemplate();if(toBoolean(a.inmdtablejoin)){var d=new Set,f=new Set,g=()=>{f.size>0&&(d.add(ow.template.md.fromTable(Array.from(f).join("\n"))),f.clear())};b.split("\n").forEach(e=>{/^\|.+\|$/.test(e.trim())?f.add(e.trim()):g()});g();n(Array.from(d),c)}else f=ow.template.md.fromTable(b),n(f,c)}],["mdcode",(b,c)=>{x();var d=[];b=b.split("\n");var f=!1,g={language:"",code:[],startLine:-1,endLine:-1};b.forEach((e,h)=>{var k=e.trim().match(/^```+[^`]+```+$/), +q=e.trim().match(/^```+(.+)?$/),t=f&&(e.trim().match(/^```+$/)||e.trim().match(/[^`]```+$/));k?(f=!1,g={language:__,code:e.replace(/^```+/,"").replace(/```+$/,"").trim(),startLine:h+1,endLine:h+1},d.push(g)):q&&!f?(f=!0,g={language:q[1],code:[],startLine:h+1,endLine:-1}):t&&f?(f=!1,g.endLine=h+1,g.code=g.code.join("\n"),d.push(g),g={language:"",code:[],startLine:-1,endLine:-1}):f&&g.code.push(e)});f&&(g.endLine=b.length,g.code=g.code.join("\n"),d.push(g));n(d,c)}],["ask",(b,c)=>{var d=[];b=y(b);isDef(askStruct)&& +isArray(b)&&(__conConsole=!0,__con.getTerminal().settings.set("-icanon min 1 -echo"),d=askStruct(b),__con.getTerminal().settings.set("icanon echo"),print(""));n(d,c)}],["raw",(b,c)=>{x();n(b,c)}],["ini",(b,c)=>{x();ow.loadJava();var d=new ow.java.ini;b=isDef(a.file)?d.loadFile(a.file).get():d.load(b).get();n(b,c)}],["jwt",(b,c)=>{ow.loadServer();if(toBoolean(a.injwtverify)){isUnDef(a.injwtsecret)&&isUnDef(a.injwtpubkey)&&l(-1,"injwtsecret or injwtpubkey is not defined.");try{if(isDef(a.injwtpubkey)){ow.loadJava(); +var d=new ow.java.cipher;ow.server.jwt.verify(d.readKey4File(a.injwtpubkey,!1,a.injwtalg),b.trim())}else ow.server.jwt.verify(a.injwtsecret,b.trim());var f=!0}catch(g){isDef(g.javaException)&&printErr(g.javaException.getMessage()),f=!1}}b=ow.server.jwt.decode(b);isDef(f)&&(b.__verified=f);!toBoolean(a.injwtraw)&&isDef(b)&&isMap(b.claims)&&(isDef(b.claims.exp)&&(b.claims.exp=new Date(b.claims.exp*1E3)),isDef(b.claims.iat)&&(b.claims.iat=new Date(b.claims.iat*1E3)),isDef(b.claims.nbf)&&(b.claims.nbf= +new Date(b.claims.nbf*1E3)));n(b,c)}],["sql",(b,c)=>{isString(b)?toBoolean(a.sqlparse)?(isUnDef(ow.format.sqlFormat)&&l(-1,"SQL parse not available."),n(ow.format.sqlFormat(b,isDef(a.sqloptions)?y(a.sqloptions):__),c)):n(af.fromSQL(b).ast,c):n(b,c)}],["openmetrics",(b,c)=>{isString(b)?(ow.loadMetrics(),n(ow.metrics.fromOpenMetrics2Array(b),c)):n(b,c)}],["ch",(b,c)=>{x();isUnDef(a.inch)&&l(-1,"inch is not defined.");a.inch=y(a.inch);if(isMap(a.inch)){isUnDef(a.inch.type)&&l(-1,"inch.type is not defined."); +isDef(a.inch.lib)&&loadLib(a.inch.lib);a.inch.type=="remote"?$ch("oafp::indata").createRemote(a.inch.url):$ch("oafp::indata").create(a.inch.type,isDef($sec().procMap)?$sec().procMap(a.inch.options):a.inch.options);var d=y(b,!0);toBoolean(a.inchall)||b.trim().length==0?n($ch("oafp::indata").getAll(isMap(d)?d:__),c):n($ch("oafp::indata").get(isMap(d)?d:__),c);$ch("oafp::indata").destroy()}else l(-1,"inch is not a valid map.")}],["db",(b,c)=>{if(isString(b)){x();isString(a.indbjdbc)||l(-1,"indbjdbc URL is not defined."); +try{isDef(a.indblib)&&loadLib("jdbc-"+a.indblib+".js");var d=new DB(a.indbjdbc,a.indbuser,a.indbpass,a.indbtimeout);d.convertDates(!0);toBoolean(a.indbautocommit)&&d.setAutoCommit(!0);if(toBoolean(a.indbexec)){var f=d.u(b);n({affectedRows:f},c);d.commit()}else if(toBoolean(a.indbstream)){var g=d.qsRS(b);try{for(;g.next();){f={};for(var e=1;e<=g.getMetaData().getColumnCount();e++){var h=g.getObject(e);switch(g.getMetaData().getColumnType(e)){case java.sql.Types.BIGINT:case java.sql.Types.INTEGER:case java.sql.Types.TINYINT:case java.sql.Types.SMALLINT:case java.sql.Types.NUMERIC:h= +Number(h);break;case java.sql.Types.DOUBLE:case java.sql.Types.FLOAT:case java.sql.Types.REAL:case java.sql.Types.DECIMAL:h=Number(h);break;case java.sql.Types.BOOLEAN:h=!!h;break;case java.sql.Types.TIME:case java.sql.Types.DATE:case java.sql.Types.TIMESTAMP:h=new Date(h.getTime());break;case java.sql.Types.NULL:h=null;break;default:h=String(h)}f[g.getMetaData().getColumnName(e)]=h}n(f,c)}}catch(k){l(-1,"Error streaming SQL: "+k.message)}finally{d.closeStatement(b),g.close()}}else if(toBoolean(a.indbdesc)){f= d.qsRS(b);g=[];try{for(e=1;e<=f.getMetaData().getColumnCount();e++)g.push({name:f.getMetaData().getColumnName(e),type:f.getMetaData().getColumnTypeName(e),size:f.getMetaData().getColumnDisplaySize(e),nullable:f.getMetaData().isNullable(e)==1,autoIncrement:f.getMetaData().isAutoIncrement(e),precision:f.getMetaData().getPrecision(e),scale:f.getMetaData().getScale(e),table:f.getMetaData().getTableName(e),schema:f.getMetaData().getSchemaName(e),catalog:f.getMetaData().getCatalogName(e),columnType:f.getMetaData().getColumnType(e)}); -q(g,c)}catch(k){l(-1,"Error getting SQL description: "+k.message)}finally{d.closeStatement(b),f.close()}}else f=d.q(b),isMap(f)&&isArray(f.results)?q(f.results,c):l(-1,"Invalid DB result: "+stringify(f))}catch(k){printErr(k.message),isDef(d)&&d.rollback(),l(-1,"Error executing SQL: "+k.message)}finally{isDef(d)&&(d.rollback(),d.close())}}else l(-1,"db is only supported with a SQL string.")}],["minia",(b,c)=>{a.minianolog=toBoolean(_$(a.minianolog,"minianolog").isString().default(!1));a.minianolog&& -x();try{includeOPack("mini-a")}catch(e){l(-1,"mini-a not found. You need to install it to use the mini-a output (opack install mini-a)")}loadLib("mini-a.js");b=y(b,!0);isMap(b)||isArray(b)||l(-1,"mini-a is only supported with a map or array input.");var d=new MiniA,f=!0;isUnDef(b.format)&&(b.format="json",f=!1);isDef(b.goal)&&b.format=="json"&&(b.goal+="; answer in json",f=!1);b.shellbatch=!0;d.setInteractionFn((e,h)=>{d.defaultInteractionFn(e,h,(k,p,n)=>{a.minianolog||printErr(k+" "+ansiColor("FAINT,ITALIC", -p));isDef(a.minialogfile)&&io.writeFileString(a.minialogfile,`${ow.format.fromDate(new Date,"yyyy-MM-dd HH:mm:ss.SSS")} | INFO | ${n} | ${k} | ${p}\n`,__,!0)})});d.init(b);b=d.start(b);var g=f?b:y(b,!0);isDef(a.miniametrics)&&io.writeFileJSON($t(a.miniametrics,{id:d.getId()}),d.getMetrics(),"");q(isObject(g)&&f?g:b,c)}],["xls",(b,c)=>{x();try{includeOPack("plugin-XLS")}catch(k){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");var d= +n(g,c)}catch(k){l(-1,"Error getting SQL description: "+k.message)}finally{d.closeStatement(b),f.close()}}else f=d.q(b),isMap(f)&&isArray(f.results)?n(f.results,c):l(-1,"Invalid DB result: "+stringify(f))}catch(k){printErr(k.message),isDef(d)&&d.rollback(),l(-1,"Error executing SQL: "+k.message)}finally{isDef(d)&&(d.rollback(),d.close())}}else l(-1,"db is only supported with a SQL string.")}],["minia",(b,c)=>{a.minianolog=toBoolean(_$(a.minianolog,"minianolog").isString().default(!1));a.minianolog&& +x();try{includeOPack("mini-a")}catch(e){l(-1,"mini-a not found. You need to install it to use the mini-a output (opack install mini-a)")}loadLib("mini-a.js");b=y(b,!0);isMap(b)||isArray(b)||l(-1,"mini-a is only supported with a map or array input.");var d=new MiniA,f=!0;isUnDef(b.format)&&(b.format="json",f=!1);isDef(b.goal)&&b.format=="json"&&(b.goal+="; answer in json",f=!1);b.shellbatch=!0;d.setInteractionFn((e,h)=>{d.defaultInteractionFn(e,h,(k,q,t)=>{a.minianolog||printErr(k+" "+ansiColor("FAINT,ITALIC", +q));isDef(a.minialogfile)&&io.writeFileString(a.minialogfile,`${ow.format.fromDate(new Date,"yyyy-MM-dd HH:mm:ss.SSS")} | INFO | ${t} | ${k} | ${q}\n`,__,!0)})});d.init(b);b=d.start(b);var g=f?b:y(b,!0);isDef(a.miniametrics)&&io.writeFileJSON($t(a.miniametrics,{id:d.getId()}),d.getMetrics(),"");n(isObject(g)&&f?g:b,c)}],["xls",(b,c)=>{x();try{includeOPack("plugin-XLS")}catch(k){l(-1,"plugin-XLS not found. You need to install it to use the XLS output (opack install plugin-XLS)")}plugin("XLS");var d= b=!1;a.inxlsdesc=toBoolean(_$(a.inxlsdesc,"inxlsdesc").isString().default(!1));a.inxlsdesc&&(isUnDef(a.inxlssheet)?d=!0:b=!0);a.inxlssheet=_$(a.inxlssheet||a.xlssheet,"xlssheet").isString().default(0);a.inxlsevalformulas=_$(toBoolean(a.inxlsevalformulas||a.xlsevalformulas),"xlsevalformulas").isBoolean().default(!0);a.inxlscol=_$(a.inxlscol||a.xlscol,"xlscol").isString().default("A");a.inxlsrow=_$(a.inxlsrow||a.xlsrow,"xlsrow").isString().default(1);if(isDef(a.file)||isDef(a.cmd)){var f=new XLS(isDef(a.cmd)? -C(a.cmd):a.file);if(d)h=f.getSheetNames();else if(d=f.getSheet(a.inxlssheet),b){var g=f.getCellValues(d,!1),e=[];Object.keys(g).forEach(k=>{k=Object.keys(g[k]);k.length>e.length&&(e=k)});h=[];Object.keys(g).map(k=>{var p={" ":k};e.forEach(n=>p[n]=isNull(g[k][n])||g[k][n].type=="BLANK"?"___":"###");h.push(p)});isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="ctable",c.__format="ctable")}else{var h=f.getTable(d,a.inxlsevalformulas,a.inxlscol,a.inxlsrow);isDef(h)&&isMap(h)&&(h=h.table)}f.close();q(h, -c)}else l(-1,"XLS is only support with 'file' or 'cmd' defined. Please provide a file=... or a cmd=...")}],["csv",(b,c)=>{x();isUnDef(a.inputcsv)&&isDef(a.incsv)&&(a.inputcsv=a.incsv);if(isDef(a.file)||isDef(a.cmd)){var d=isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):io.readFileStream(a.file);b=$csv(a.inputcsv).fromInStream(d).toOutArray();d.close()}else b=$csv(a.inputcsv).fromInString(b).toOutArray();q(b,c)}],["javathread",(b,c)=>{x();if(isDef(a.javathreadpid)){ow.loadJava();try{var d=ow.java.jcmd(a.javathreadpid, -"Thread.print");d=d.split("\n").filter(e=>e.startsWith('"'))}catch(e){l(-1,"Error getting Java thread dump: "+e.message)}}else isString(b)?d=b.split("\n"):l(-1,"javathreads is only supported with a raw input or javathreadpid=.");var f=(e,h)=>{if(e===null||e===void 0)return"";if(isBoolean(e))return!!e;if(isNumber(e))return Number(e);if(h){var k=String(e);_$(k,"aStr").isString().$_();e=k.trim().match(/[\d\.]+[a-zA-Z]+/g);h=0;if(isArray(e)&&e.length!==0){for(v in e){var p=e[v].match(/(\d+(?:\.\d+)?)\s*([a-zA-Z]+)/); -if(isArray(p)&&p.length>0){k=Number(p[1]);p=String(p[2]);var n={ms:1,s:1E3,m:6E4,h:36E5,d:864E5,w:6048E5,M:2592E6,y:31536E6};h=isDef(n[p])?h+k*n[p]:h+k}}var v=h}else v=parseFloat(k);return v}return String(e)},g=[];d.forEach(e=>{if(e.startsWith('"')){var h=java.util.regex.Pattern.compile('^\\"(?[^"]+)\\"(?:\\s+#(?\\d+))?(?:\\s+\\[(?\\d+)\\])?(?:\\s+(?daemon))?(?:\\s+prio=(?\\d+))?\\s+os_prio=(?\\d+)(?:\\s+cpu=(?[0-9.]+ms))?(?:\\s+elapsed=(?[0-9.]+s))?(?:\\s+tid=(?0x[a-fA-F0-9]+))?(?:\\s+nid=(?0x[a-fA-F0-9]+|\\d+|\\S+))?(?:\\s+(?.*?))?(?:\\s+\\[(?
[^\\]]+)\\])?\\s*$').matcher(e); -h.find()?(e={threadGroup:f(h.group("threadName")).replace(/[^a-zA-z]?\d+$/,""),threadName:f(h.group("threadName")),threadId:f(h.group("threadId")),threadIndex:f(h.group("threadIndex")),daemon:f(h.group("daemon")),prio:f(h.group("prio")),osPrio:f(h.group("osPrio")),cpu_ms:f(h.group("cpu"),!0),elapsed_ms:f(h.group("elapsed"),!0),tid:f(h.group("tid")),nid:f(h.group("nid")),state:f(h.group("state")),address:f(h.group("address"))},g.push(e)):g.push({error:"Could not parse line: "+e})}});q(g,c)}],["javagc", +C(a.cmd):a.file);if(d)h=f.getSheetNames();else if(d=f.getSheet(a.inxlssheet),b){var g=f.getCellValues(d,!1),e=[];Object.keys(g).forEach(k=>{k=Object.keys(g[k]);k.length>e.length&&(e=k)});h=[];Object.keys(g).map(k=>{var q={" ":k};e.forEach(t=>q[t]=isNull(g[k][t])||g[k][t].type=="BLANK"?"___":"###");h.push(q)});isUnDef(a.format)&&isUnDef(c.__format)&&(a.format="ctable",c.__format="ctable")}else{var h=f.getTable(d,a.inxlsevalformulas,a.inxlscol,a.inxlsrow);isDef(h)&&isMap(h)&&(h=h.table)}f.close();n(h, +c)}else l(-1,"XLS is only support with 'file' or 'cmd' defined. Please provide a file=... or a cmd=...")}],["csv",(b,c)=>{x();isUnDef(a.inputcsv)&&isDef(a.incsv)&&(a.inputcsv=a.incsv);if(isDef(a.file)||isDef(a.cmd)){var d=isDef(a.cmd)?af.fromBytes2InputStream(C(a.cmd)):io.readFileStream(a.file);b=$csv(a.inputcsv).fromInStream(d).toOutArray();d.close()}else b=$csv(a.inputcsv).fromInString(b).toOutArray();n(b,c)}],["javathread",(b,c)=>{x();if(isDef(a.javathreadpid)){ow.loadJava();try{var d=ow.java.jcmd(a.javathreadpid, +"Thread.print");d=d.split("\n").filter(e=>e.startsWith('"'))}catch(e){l(-1,"Error getting Java thread dump: "+e.message)}}else isString(b)?d=b.split("\n"):l(-1,"javathreads is only supported with a raw input or javathreadpid=.");var f=(e,h)=>{if(e===null||e===void 0)return"";if(isBoolean(e))return!!e;if(isNumber(e))return Number(e);if(h){var k=String(e);_$(k,"aStr").isString().$_();e=k.trim().match(/[\d\.]+[a-zA-Z]+/g);h=0;if(isArray(e)&&e.length!==0){for(v in e){var q=e[v].match(/(\d+(?:\.\d+)?)\s*([a-zA-Z]+)/); +if(isArray(q)&&q.length>0){k=Number(q[1]);q=String(q[2]);var t={ms:1,s:1E3,m:6E4,h:36E5,d:864E5,w:6048E5,M:2592E6,y:31536E6};h=isDef(t[q])?h+k*t[q]:h+k}}var v=h}else v=parseFloat(k);return v}return String(e)},g=[];d.forEach(e=>{if(e.startsWith('"')){var h=java.util.regex.Pattern.compile('^\\"(?[^"]+)\\"(?:\\s+#(?\\d+))?(?:\\s+\\[(?\\d+)\\])?(?:\\s+(?daemon))?(?:\\s+prio=(?\\d+))?\\s+os_prio=(?\\d+)(?:\\s+cpu=(?[0-9.]+ms))?(?:\\s+elapsed=(?[0-9.]+s))?(?:\\s+tid=(?0x[a-fA-F0-9]+))?(?:\\s+nid=(?0x[a-fA-F0-9]+|\\d+|\\S+))?(?:\\s+(?.*?))?(?:\\s+\\[(?
[^\\]]+)\\])?\\s*$').matcher(e); +h.find()?(e={threadGroup:f(h.group("threadName")).replace(/[^a-zA-z]?\d+$/,""),threadName:f(h.group("threadName")),threadId:f(h.group("threadId")),threadIndex:f(h.group("threadIndex")),daemon:f(h.group("daemon")),prio:f(h.group("prio")),osPrio:f(h.group("osPrio")),cpu_ms:f(h.group("cpu"),!0),elapsed_ms:f(h.group("elapsed"),!0),tid:f(h.group("tid")),nid:f(h.group("nid")),state:f(h.group("state")),address:f(h.group("address"))},g.push(e)):g.push({error:"Could not parse line: "+e})}});n(g,c)}],["javagc", (b,c)=>{a.javagcjoin=_$(toBoolean(a.javagcjoin),"javagcjoin").isBoolean().default(!1);const d=[/([^ ]+) (\d+\.\d+): \[(GC) \((.*?)\)(.+?)\[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/s,/([^ ]+) (\d+\.\d+): \[(GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), (\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[(Full GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] \[ParOldGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), \[Metaspace: (\d+K)->(\d+K)\((.*?)\)\], (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/, /([^ ]+) (\d+\.\d+): \[(Full GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] \[ParOldGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), \[Metaspace: (\d+K)->(\d+K)\((.*?)\)\], (\d+\.\d+) secs\]/,/([^ ]+) (\d+\.\d+): \[(GC) \((.*?)\) \[PSYoungGen: (\d+K)->(\d+K)\((.*?)\)\] (\d+K)->(\d+K)\((.*?)\), (\d+\.\d+) secs\] \[Times: user=(\d+\.\d+) sys=(\d+\.\d+), real=(\d+\.\d+) secs\]/,/(\d+\.\d+): \[(GC|Full GC) \((.*?)\)\s+(\d+K)->(\d+K)\((\d+K)\), (\d+\.\d+) secs\]/,/^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*(\d+[GMK])->(\d+[GMK])\((\d+[GMK])\)\s*(\d+\.\d+)ms/, -/^\[(.+)\]\s+GC\((\d+)\)\s*(.*?)\s*Metaspace:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*NonClass:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*Class:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)/,/^\[(.+)\]\s+GC\((\d+)\)\s*(Allocation Failure)\s*(.*?)\s+(\d+[KMGT])->(\d+[KMGT])\((\d+[KMGT])\)\s+(\d+\.\d+)ms/],f=/^\d+\.\d+s$/,g=/\d{4}-\d{2}-\d{2}T/,e=v=>isDef(v)?ow.format.fromBytesAbbreviation(v+"B"):__;var h=v=>{try{for(let u=0;u5&&(u==6?(r.metaUsedBeforeGC=e(m[4]),r.metaTotalBeforeGC=e(m[5]),r.metaUsedAfterGC=e(m[6]),r.metaTotalAfterGC=e(m[7]),r.nonClassUsedBeforeGC= -e(m[8]),r.nonClassTotalBeforeGC=e(m[9]),r.nonClassUsedAfterGC=e(m[10]),r.nonClassTotalAfterGC=e(m[11]),r.classUsedBeforeGC=e(m[12]),r.classTotalBeforeGC=e(m[13]),r.classUsedAfterGC=e(m[14]),r.classTotalAfterGC=e(m[15])):(r.heapBeforeGC=e(m[4]),r.heapAfterGC=e(m[5]),r.heapTotal=e(m[6])))}else if(u==5)r.sinceStart=parseFloat(m[1]),r.gcType=m[2]+" "+m[3],r.heapBeforeGC=e(m[4]),r.heapAfterGC=e(m[5]),r.heapTotal=e(m[6]),r.durationSecs=parseFloat(m[7]);else if(r.timestamp=ow.format.toDate(m[1],"yyyy-MM-dd'T'HH:mm:ss.SSSZ"), -r.sinceStart=parseFloat(m[2]),r.gcType=m[3]+" "+m[4],u<=4){t=5;r.PSYoungGenBeforeGC=e(m[t++]);r.PSYoungGenAfterGC=e(m[t++]);r.PSYoungGenTotal=e(m[t++]);if(u==2||u==3)r.ParOldGenBeforeGC=e(m[t++]),r.ParOldGenAfterGC=e(m[t++]),r.ParOldGenTotal=e(m[t++]);r.heapBeforeGC=e(m[t++]);r.heapAfterGC=e(m[t++]);r.heapTotal=e(m[t++]);if(u==2||u==3)r.metaBeforeGC=e(m[t++]),r.metaAfterGC=e(m[t++]),r.metaTotal=e(m[t++]);r.durationSecs=parseFloat(m[t++]);if(u==0||u==2||u==4)r.userTime=parseFloat(m[t++]),r.sysTime= -parseFloat(m[t++]),r.realTime=parseFloat(m[t++])}return r}}}catch(u){printErr(u),l(-2,"Error parsing Java GC log: "+u)}};x();if(isString(b)){var k=b.split("\n"),p=/^(\[?\d+|\d{4}-\d{2}-\d{2}T)/;b=[];var n="";let v=!1;for(let t=0;t(\d+[GMK])\((\d+[GMK])\)\s*NonClass:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)\s*Class:\s*(\d+[GMK])\((\d+[GMK])\)->(\d+[GMK])\((\d+[GMK])\)/,/^\[(.+)\]\s+GC\((\d+)\)\s*(Allocation Failure)\s*(.*?)\s+(\d+[KMGT])->(\d+[KMGT])\((\d+[KMGT])\)\s+(\d+\.\d+)ms/],f=/^\d+\.\d+s$/,g=/\d{4}-\d{2}-\d{2}T/,e=v=>isDef(v)?ow.format.fromBytesAbbreviation(v+"B"):__;var h=v=>{try{for(let u=0;u5&&(u==6?(p.metaUsedBeforeGC=e(m[4]),p.metaTotalBeforeGC=e(m[5]),p.metaUsedAfterGC=e(m[6]),p.metaTotalAfterGC=e(m[7]),p.nonClassUsedBeforeGC= +e(m[8]),p.nonClassTotalBeforeGC=e(m[9]),p.nonClassUsedAfterGC=e(m[10]),p.nonClassTotalAfterGC=e(m[11]),p.classUsedBeforeGC=e(m[12]),p.classTotalBeforeGC=e(m[13]),p.classUsedAfterGC=e(m[14]),p.classTotalAfterGC=e(m[15])):(p.heapBeforeGC=e(m[4]),p.heapAfterGC=e(m[5]),p.heapTotal=e(m[6])))}else if(u==5)p.sinceStart=parseFloat(m[1]),p.gcType=m[2]+" "+m[3],p.heapBeforeGC=e(m[4]),p.heapAfterGC=e(m[5]),p.heapTotal=e(m[6]),p.durationSecs=parseFloat(m[7]);else if(p.timestamp=ow.format.toDate(m[1],"yyyy-MM-dd'T'HH:mm:ss.SSSZ"), +p.sinceStart=parseFloat(m[2]),p.gcType=m[3]+" "+m[4],u<=4){r=5;p.PSYoungGenBeforeGC=e(m[r++]);p.PSYoungGenAfterGC=e(m[r++]);p.PSYoungGenTotal=e(m[r++]);if(u==2||u==3)p.ParOldGenBeforeGC=e(m[r++]),p.ParOldGenAfterGC=e(m[r++]),p.ParOldGenTotal=e(m[r++]);p.heapBeforeGC=e(m[r++]);p.heapAfterGC=e(m[r++]);p.heapTotal=e(m[r++]);if(u==2||u==3)p.metaBeforeGC=e(m[r++]),p.metaAfterGC=e(m[r++]),p.metaTotal=e(m[r++]);p.durationSecs=parseFloat(m[r++]);if(u==0||u==2||u==4)p.userTime=parseFloat(m[r++]),p.sysTime= +parseFloat(m[r++]),p.realTime=parseFloat(m[r++])}return p}}}catch(u){printErr(u),l(-2,"Error parsing Java GC log: "+u)}};x();if(isString(b)){var k=b.split("\n"),q=/^(\[?\d+|\d{4}-\d{2}-\d{2}T)/;b=[];var t="";let v=!1;for(let r=0;r{if(isDef(a.file)||isDef(a.cmd)){x();ow.loadJava();var d=isDef(a.cmd)?ow.java.parseHSPerf(C(a.cmd)):ow.java.parseHSPerf(a.file);d.__ts=new Date;var f=0,g=0;d.sun.gc.generation.forEach(e=>{e.space.forEach(h=>{g+=Number(h.used);f=isNumber(h.capacity)?f+Number(h.capacity):f;d.sun.gc["__percUsed_"+h.name]=100*h.used/h.capacity})});d.sun.gc.__percUsed_meta=100*d.sun.gc.metaspace.used/d.sun.gc.metaspace.capacity;d.sun.gc.__percUsed_ccs=100*d.sun.gc.compressedclassspace.used/d.sun.gc.compressedclassspace.capacity; b=$from(d.sun.gc.collector).equals("name","PSScavenge").at(0);d.sun.gc.__ygc=isDef(b)?Number(b.invocations):0;d.sun.gc.__ygct=isDef(b)?Number(b.time/1E9):0;b=$from(d.sun.gc.collector).equals("name","PSParallelCompact").orEquals("name","").at(0);d.sun.gc.__fgc=isDef(b)?Number(b.invocations):0;d.sun.gc.__fgct=isDef(b)?Number(b.time/1E9):0;d.sun.gc.__gct=$from(d.sun.gc.collector).sum("time")/1E9;d.java.__mem={total:f,used:g,free:f-g,metaMax:d.sun.gc.metaspace.maxCapacity,metaTotal:d.sun.gc.metaspace.capacity, -metaUsed:d.sun.gc.metaspace.used,metaFree:d.sun.gc.metaspace.capacity-d.sun.gc.metaspace.used};q(d,c)}else l(-1,"hsperf is only supported with either 'file' or 'cmd' defined.")}],["jfr",(b,c)=>{ow.loadJava();isUnDef(ow.java.parseJFR)&&l(-1,"jfr not available.");isBoolean(a.jfrjoin)||(a.jfrjoin=_$(toBoolean(a.jfrjoin),"jfrjoin").isBoolean().default(!1));isBoolean(a.jfrdesc)||(a.jfrdesc=_$(toBoolean(a.jfrdesc),"jfrdesc").isBoolean().default(!1));x();isDef(a.file)&&isUnDef(a.cmd)&&(b=a.file);if(isDef(a.cmd)){b= -C(a.cmd,!0);var d=io.createTempFile("jfr",".jfr");io.writeFileBytes(d,b);b=d}a.jfrjoin?q(ow.java.parseJFR(b,__,a.jfrdesc),c):ow.java.parseJFR(b,f=>q(f,c),a.jfrdesc)}],["rawhex",(b,c)=>{a.inrawhexline=_$(a.inrawhexline,"inrawhexline").isNumber().default(__);x();b=isDef(a.file)||isDef(a.cmd)?isDef(a.cmd)?C(a.cmd):io.readFileBytes(a.file):af.fromString2Bytes(b);b=ow.format.string.toHexArray(b,a.inrawhexline);b.forEach(d=>{d.characters=d.characters.replace(/[\x00-\x1F\x80-\xFF]/g,".")});q(b,c)}],["base64", -(b,c)=>{x();b=toBoolean(a.base64gzip)?af.fromBytes2String(io.gunzip(af.fromBase64(b,!0))):af.fromBytes2String(af.fromBase64(b));q(b,c)}],["gb64json",(b,c)=>{x();b=af.fromBytes2String(io.gunzip(af.fromBase64(b,!0)));q(b,c)}],["oaf",(b,c)=>{isString(b)||l(-1,"oaf is only supported with a string.");x();var d;isString(b)&&(b=io.fileExists(b)?io.readFileString(b):b,isString(b)&&(d=(new Function("var data;"+b+";return data"))()));q(d,c)}],["oafp",(b,c)=>{b=y(b,!0);var d="_oafp_key_"+genUUID();isMap(b)? -(b.out="key",b.__key=d,b.__inception=!0,oafp(b),b=$get(d),$unset(d),q(b,c)):isArray(b)?($set(d,!0),b=pForEach(b,(f,g)=>{g=d+"_"+String(g);var e=!1;isUnDef(f.out)&&(f.out="key",f.__key=g,e=f.__inception=!0);try{if(oafp(f),e){var h=$get(g);$unset(g)}}catch(k){sprintErr(k)}finally{return h}},__,isDef(a.inoafpseq)?toBoolean(a.inoafpseq):__),q(b,c)):l(-1,"oafp input data needs to be a map or an array.")}],["ojob",(b,c)=>{var d=y(b,!0);isString(d)&&(d={ojob:d,args:{}});_$(d.ojob,"ojob").isString().$_(); -d.args=_$(d.args,"args").isMap().default({});x();b=genUUID();d.args.__format="key";d.args.__key=b;oJobRunFile(d.ojob,d.args);d=$get(b);delete d.__format;delete d.__key;q($get(b),c)}],["sh",(b,c)=>{x();b=y(b,!0);if(isString(b))b=$sh(b).get(0);else{isMap(b)||l(-1,"For in=sh the input data needs to a string or a map");var d=$sh();isUnDef(b.cmd)&&l(-1,"For in=sh the input data needs to a string or a map with the a 'cmd'");d=d.sh(b.cmd);isDef(b.envs)&&(d=d.envs(b.envs,b.envsall));isDef(b.prefix)&&(d=d.prefix(b.prefix)); -isDef(b.pwd)&&(d=d.pwd(b.pwd));switch(a.inshformat){case "raw":b=d.get(0);break;case "yaml":b=d.getYaml(0);break;default:b=d.getJson(0)}}q(b,c)}],["llm",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();var d=$llm(aa(isDef(a.llmoptions)?y(a.llmoptions):$sec("system", +metaUsed:d.sun.gc.metaspace.used,metaFree:d.sun.gc.metaspace.capacity-d.sun.gc.metaspace.used};n(d,c)}else l(-1,"hsperf is only supported with either 'file' or 'cmd' defined.")}],["jfr",(b,c)=>{ow.loadJava();isUnDef(ow.java.parseJFR)&&l(-1,"jfr not available.");isBoolean(a.jfrjoin)||(a.jfrjoin=_$(toBoolean(a.jfrjoin),"jfrjoin").isBoolean().default(!1));isBoolean(a.jfrdesc)||(a.jfrdesc=_$(toBoolean(a.jfrdesc),"jfrdesc").isBoolean().default(!1));x();isDef(a.file)&&isUnDef(a.cmd)&&(b=a.file);if(isDef(a.cmd)){b= +C(a.cmd,!0);var d=io.createTempFile("jfr",".jfr");io.writeFileBytes(d,b);b=d}a.jfrjoin?n(ow.java.parseJFR(b,__,a.jfrdesc),c):ow.java.parseJFR(b,f=>n(f,c),a.jfrdesc)}],["rawhex",(b,c)=>{a.inrawhexline=_$(a.inrawhexline,"inrawhexline").isNumber().default(__);x();b=isDef(a.file)||isDef(a.cmd)?isDef(a.cmd)?C(a.cmd):io.readFileBytes(a.file):af.fromString2Bytes(b);b=ow.format.string.toHexArray(b,a.inrawhexline);b.forEach(d=>{d.characters=d.characters.replace(/[\x00-\x1F\x80-\xFF]/g,".")});n(b,c)}],["base64", +(b,c)=>{x();b=toBoolean(a.base64gzip)?af.fromBytes2String(io.gunzip(af.fromBase64(b,!0))):af.fromBytes2String(af.fromBase64(b));n(b,c)}],["gb64json",(b,c)=>{x();b=af.fromBytes2String(io.gunzip(af.fromBase64(b,!0)));n(b,c)}],["oaf",(b,c)=>{isString(b)||l(-1,"oaf is only supported with a string.");x();var d;isString(b)&&(b=io.fileExists(b)?io.readFileString(b):b,isString(b)&&(d=(new Function("var data;"+b+";return data"))()));n(d,c)}],["oafp",(b,c)=>{b=y(b,!0);var d="_oafp_key_"+genUUID();isMap(b)? +(b.out="key",b.__key=d,b.__inception=!0,oafp(b),b=$get(d),$unset(d),n(b,c)):isArray(b)?($set(d,!0),b=pForEach(b,(f,g)=>{g=d+"_"+String(g);var e=!1;isUnDef(f.out)&&(f.out="key",f.__key=g,e=f.__inception=!0);try{if(oafp(f),e){var h=$get(g);$unset(g)}}catch(k){sprintErr(k)}finally{return h}},__,isDef(a.inoafpseq)?toBoolean(a.inoafpseq):__),n(b,c)):l(-1,"oafp input data needs to be a map or an array.")}],["ojob",(b,c)=>{var d=y(b,!0);isString(d)&&(d={ojob:d,args:{}});_$(d.ojob,"ojob").isString().$_(); +d.args=_$(d.args,"args").isMap().default({});x();b=genUUID();d.args.__format="key";d.args.__key=b;oJobRunFile(d.ojob,d.args);d=$get(b);delete d.__format;delete d.__key;n($get(b),c)}],["sh",(b,c)=>{x();b=y(b,!0);if(isString(b))b=$sh(b).get(0);else{isMap(b)||l(-1,"For in=sh the input data needs to a string or a map");var d=$sh();isUnDef(b.cmd)&&l(-1,"For in=sh the input data needs to a string or a map with the a 'cmd'");d=d.sh(b.cmd);isDef(b.envs)&&(d=d.envs(b.envs,b.envsall));isDef(b.prefix)&&(d=d.prefix(b.prefix)); +isDef(b.pwd)&&(d=d.pwd(b.pwd));switch(a.inshformat){case "raw":b=d.get(0);break;case "yaml":b=d.getYaml(0);break;default:b=d.getJson(0)}}n(b,c)}],["llm",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();var d=$llm(X(isDef(a.llmoptions)?y(a.llmoptions):$sec("system", "envs").get(a.llmenv)));isDef(a.llmconversation)&&io.fileExists(a.llmconversation)&&d.getGPT().setConversation(io.readFileJSON(a.llmconversation));let f;isString(a.llmimage)&&(a.llmimage.toLowerCase().match(/^https?:\/\//)?f=af.fromBytes2String(af.toBase64Bytes(af.fromInputStream2Bytes($rest().get2Stream(a.llmimage)))):io.fileExists(a.llmimage)&&(f=af.fromBytes2String(af.toBase64Bytes(io.readFileBytes(a.llmimage)))));b=a.out=="md"||a.out=="mdtable"||a.out=="raw"?isDef(f)?d.promptImage(b,f):d.prompt(b): -isDef(f)?d.promptImage(b,f,__,__,__,__,!0):d.promptJSON(b);isDef(a.llmconversation)&&(d=d.getGPT().getConversation(),io.writeFileJSON(a.llmconversation,d,""));q(jsonParse(b,__,__,isString(b)),c)}],["llmmodels",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();b=$llm(aa(isDef(a.llmoptions)? -y(a.llmoptions):$sec("system","envs").get(a.llmenv)));isUnDef(b.getModels)&&l(-1,"OpenAF support for llm model listing API not found.");q(b.getModels(),c)}],["javas",(b,c)=>{a.javasinception=toBoolean(a.javasinception);x();plugin("JMX");b=(new JMX).getLocals().Locals;a.javasinception||(b=b.filter(d=>d.id!=getPid()));q(b,c)}],["jmx",(b,c)=>{a.jmxop=_$(a.jmxop,"jmxop").oneOf(["all","get","query","domains"]).default("all");isUnDef(a.jmxurl)&&isUnDef(a.jmxpid)&&l(-1,"jmxurl or jmxpid is not defined."); +isDef(f)?d.promptImage(b,f,__,__,__,__,!0):d.promptJSON(b);isDef(a.llmconversation)&&(d=d.getGPT().getConversation(),io.writeFileJSON(a.llmconversation,d,""));n(jsonParse(b,__,__,isString(b)),c)}],["llmmodels",(b,c)=>{a.llmenv=_$(a.llmenv,"llmenv").isString().default("OAFP_MODEL");a.llmenv=O(a.llmenv);a.llmoptions=_$(a.llmoptions,"llmoptions").or().isString().isMap().default(__);isUnDef(a.llmoptions)&&!isString(getEnv(a.llmenv))&&l(-1,"llmoptions not defined and "+a.llmenv+" not found.");x();b=$llm(X(isDef(a.llmoptions)? +y(a.llmoptions):$sec("system","envs").get(a.llmenv)));isUnDef(b.getModels)&&l(-1,"OpenAF support for llm model listing API not found.");n(b.getModels(),c)}],["javas",(b,c)=>{a.javasinception=toBoolean(a.javasinception);x();plugin("JMX");b=(new JMX).getLocals().Locals;a.javasinception||(b=b.filter(d=>d.id!=getPid()));n(b,c)}],["jmx",(b,c)=>{a.jmxop=_$(a.jmxop,"jmxop").oneOf(["all","get","query","domains"]).default("all");isUnDef(a.jmxurl)&&isUnDef(a.jmxpid)&&l(-1,"jmxurl or jmxpid is not defined."); x();plugin("JMX");ow.loadJava();let d;isUnDef(a.jmxurl)?(ow.loadServer(),d=new ow.java.JMX((new JMX).attach2Local(a.jmxpid).URL)):d=new ow.java.JMX(a.jmxurl,a.jmxuser,a.jmxpass,a.jmxprovider);let f;switch(a.jmxop){case "domains":f=d.getDomains();break;case "query":isString(b)?f=d.queryNames(b):l(-1,"Input needs to be a JMX query string (e.g. java.lang:*)");break;case "get":isString(b)?f=d.getObject(b):l(-1,"Input needs to be a JMX object name (e.g. java.lang:type=Memory)");break;default:case "all":f= -d.getAll()}q(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,p,n)=>{isString(k)&&e.push({o:n,k:h,v:k})});pForEach(e,h=>h.o[h.k]=g(h.v))}else f=pForEach(f,e=>g(e))}q(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;q(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();q(d,c)}],["toml",(b,c)=>{x();isUnDef(af.fromTOML)&&l(-1,"TOML support not found.");q(af.fromTOML(b),c)}],["toon",(b,c)=>{x();isUnDef(af.fromTOON)&& -l(-1,"TOON support not found.");q(af.fromTOON(b),c)}],["slon",(b,c)=>{x();q(af.fromSLON(b),c)}],["json",(b,c)=>{x();q(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),q,z,{_runCmd2Bytes:C,_fromJSSLON:y,_msg:"(processing data...)",_showTmpMsg:x,_clearTmpMsg:L,_chartPathParse:X,_exit:l,_print:w,_o$o:z});isMap(g)&&(isArray(g.fileExtensions)&&g.fileExtensions.forEach(e=> -{var h=e.ext;e=e.type;Y.has(h)?a.debug&&printErr("WARN: Extension '"+h+"' already exists."):Y.set(h,e)}),isArray(g.fileExtensionsNoMem)&&g.fileExtensionsNoMem.forEach(e=>{e=e.ext;ca.has(e)?a.debug&&printErr("WARN: Extension '"+e+"' already exists."):ca.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])?da[h]= +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)?af.fromJavaArray(listFilesRecursive(b,d)):af.fromJavaMap(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)}],["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 ha=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")); +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 ia=!1;if(a["-v"]==""||toBoolean(a.version))ia=!0,fa();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= +__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(ia)A=fa();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+ -"'"),!ca.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,ha),toBoolean(a._shebang)&&(A=A.replace(/^#!.*\n/,""));else A=io.readFileString(a.file,ha),toBoolean(a._shebang)&& +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(da[a.type])?da[a.type](V(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(".")),Y.has(c)&&(a.type=Y.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: "+ +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);