{"version":3,"file":"sedeh-wizard-query.mjs","sources":["../../../projects/wizard-query/src/lib/wizard-query.service.ts","../../../projects/wizard-query/src/lib/wizard-query.directive.ts","../../../projects/wizard-query/src/lib/wizard-query.component.ts","../../../projects/wizard-query/src/lib/wizard-query.html","../../../projects/wizard-query/src/lib/wizard-query.module.ts","../../../projects/wizard-query/src/public-api.ts","../../../projects/wizard-query/src/sedeh-wizard-query.ts"],"sourcesContent":["/*\n* Query service provides a way to query a remote JSON or XML file. It can be used in following ways.\n*\n* 1) With select() method, a single path or a list of paths can be given. each path will be a json qualifying\n* path to an end node (i.e., 'books.book.title'). If multiple paths are supplied, query result will be a json\n* object where each attribute will be a given query path and its value will be query result for that path.\n* For example:\n* select(['books.book.title', 'books.book.author'], '/example1.xml', false)\n* will result in {'books.book.title': [], 'books.book.author': []}.\n* Each result will not co-related with other result in order or in any other form. if a clause argument is\n* supplied, it will be invoked to further assist in filtering the query result. for example if certain category\n* of books are required, the clause function can look for a book category attribute and return the query result\n* if acceptable or undefined if result should be filtered out of the result.\n*\n* 2) With arraySelect() method, an array of {path: '', in:'', deepXml: true} can be supplied, each entry will be evaluated\n* as if select() method is invoked. But first, requests with similar paths will be merged into one call.  This\n* method is useful when paths are dynamicly given and it is not clear in advance if there are requests with\n* similar paths. deepXml attribute is optional.\n*\n* 3) With chainSelect() method, a chained set of {path: '', in: '', deepXml: true} is given in a json object. When result of\n* a query becomes available, the request json will be examined to see if a request for the key is available. If\n* so, then the 'in' for the path will be prepended to the resulting value of the previous query. , deepXml attribute is \n* optional. This method is useful when result of a query is a json or an xml file and additional query is needed \n* further down in the preceeding files. For example the assumption in the following call is that each books.book \n* result will be a file name and the file path for each result is '/samples/books/'.\n* chainSelect({\n*   path: 'books.book',\n*   in: 'sample1.xml',\n*   deepXml: true,\n*   'books.book': {\n*       in: '/samples/books/',\n*       path: ['publication.title', 'publication.author'],\n*       handler: this.bublicationHandler\n*   })\n* if a handler is supplied, it will be used to filter out any result that is not acceptable.\n*\n*/\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\n\nimport {map} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\nimport { DOMParser } from 'xmldom';\n\n/*\n* @param node The parent node. it can be used to evaluate based on other attributes in the node.\n* @param path attribute to be examined.\n* @param value the value of the path. it could be undefined, a literal, or a list.\n* @returns returns the value or filtered version of the value or undefined otherwise.\n*/\nexport type clauseEvaluator = (node: any, path: string, value: any) => any;\n\n@Injectable()\nexport class WizardQueryService {\n\n    public SERVICE_PATH = '';\n    public logEnabled = false;\n\n    constructor(\n      private http: HttpClient\n    ) {\n\n    }\n\n    private _globalFunctions() {\n        return `\n        function reverse(a) {\n            var result = a;\n            if (a instanceof Array) {\n                result = a.reverse();\n            } else if (typeof a === 'string') {\n                result = a.split('').reverse().join('');\n            }\n            return result;\n        }\n        function sum(a,b) {\n            var total = 0;\n            if (a instanceof Array) { \n                a.map(function(k) {\n                    total += sum(k, b);\n                });\n            } else if (typeof a === 'object') {\n                if (b.indexOf('.')>0) {\n                    var t = a;\n                    b.split('.').map(function(k){\n                        total+=sum( t[k], b.substring(k.length+1) );\n                    });\n                } else if(a[b]) {\n                    var t = a[b];\n                    total += (typeof t === 'number') ? t : parseFloat(t);\n                } \n            } else if (typeof a === 'number') {\n                total = a;\n            } \n            return total;\n        }\n        function count(a,b) {\n            var total = 0;\n            if (a instanceof Array) { \n                a.map(function(k) {\n                    total += count(k, b);\n                });\n            } else if (typeof a === 'object') {\n                Object.keys(a).map(function(k){\n                    total += count(a[k],b);\n                });\n            } else if (typeof a === 'string') {\n                total = a.split(b).length - 1;\n            } else if (a === b) {\n                total++;\n            }\n            return total;\n        }\n        function like(a, b) {\n            var result = undefined;\n            if (a instanceof Array) {\n                result = [];\n                a.map(function(k) {\n                    result.push(like(k, b));\n                });\n            } else if (typeof a === 'object') {\n                result = [];\n                Object.keys(a).map(function(k){\n                    result.push(like(a[k], b));\n                });\n            } else if (typeof a === 'string') {\n                if (a.indexOf(b) > -1) {\n                    result = a;\n                }\n            } else if (a === b) {\n                result = a;\n            }\n            return result;\n        }\n        function as(a, b) {\n            if (asList[b] === undefined) {\n                asList[b] = [a];\n            } else {\n                asList[b].push(a);\n            }\n            return a;\n        }\n        function is_in(a, b, list) {\n            var result = undefined;\n            if (b instanceof Array) { \n                result = [];\n                b.map(function(k) {\n                    result.push(is_in(k, list));\n                });\n            } else if (typeof b === 'object') {\n                result = [];\n                Object.keys(b).map(function(k) {\n                    result.push(is_in(b[k], list));\n                });\n            } else if (asList[list]){\n                asList[list].map(function(t) {\n                    if (typeof t ==='string') {\n                        if (t.indexOf(b) > -1) {\n                            result = a;\n                        }\n                    }\n                });\n            }\n            return result;\n        }\n        `;\n    }\n\n    /*\n    * Will normalize the given xml out of additional #text or #cdata-section nodes.\n    * @param value the xml to be normailzed.\n    * @param deepXml if cdata-section should be parsed.\n    * @return normalized xml.\n    */\n    private _normalize(value: any, deepXml: boolean) {\n        if (value instanceof Array) {\n            const result: any[] = [];\n            value.map( (item) => {\n                result.push(this._normalize(item, deepXml));\n            });\n            value = result;\n        } else if (typeof value === 'object') {\n            let items: any = Object.keys(value);\n\n            if (items.length === 1 && !(value[items[0]] instanceof Array)) {\n                if (value['#text']) {\n                    value = value['#text'];\n                } else if (value['#cdata-section']) {\n                    value = value['#cdata-section'];\n                    if (deepXml) {\n                        try {\n                            const xml = new DOMParser().parseFromString(value);\n                            value = (xml.documentElement && xml.documentElement != null) ?\n                                        this._xml2json(xml.documentElement) :\n                                        value;\n                        }catch(e){\n                        }\n                    }\n                }\n            } else {\n                const result: any = {};\n                items.map( (item: any) => {\n                    result[item] = this._normalize(value[item], deepXml);\n                });\n                value = result;\n            }\n        }\n        return value;\n    }\n\n    /*\n    * @param path JSON path to evaluate. A path could be fully qualified for depth of json (i.e., 'a.b.c')\n    * @param data the data source.\n    * @param deepXml if cdata-section should be parsed.\n    * @param clause A method by which value(s) for the key(s) could be evaluated. the caller would evaluate the value for a given attribute.\n    * @returns returns evluated value for the key in data source.\n    */\n    private _valueOfJsonPath(\n        path: any,\n        data: any,\n        as: any,\n        deepXml: boolean,\n        clause?: clauseEvaluator): any {\n\n        let result: any;\n        let x = this._normalize(data, deepXml);\n        path.map( (subkey: any) => {\n            let node = x;\n            if (node && node instanceof Array) {\n                const t: any[] = [];\n                if (subkey.sort) {\n                    node = subkey.sort(node);\n                }\n                node.map (\n                    (item: any) => {\n                        if (typeof item === 'object') {\n                            if (subkey.key.length) {\n                                x = subkey.key.length ? item[subkey.key] : item;\n                                if (x && subkey.validated) {\n                                    let r = true;\n                                    subkey.validated.map((v: any) => {\n                                        const z = v(x, as);\n                                        if (typeof z === 'boolean') {\n                                            if(z  == false) {\n                                                r = false;\n                                            }\n                                        } else {\n                                            x = z;\n                                        }\n                                    });\n                                    if (r && x) {\n                                        t.push(x);\n                                    } else {\n                                        x = undefined;\n                                    }\n                                }\n                            } else {\n                                if (subkey.validated) {\n                                    let r = true;\n                                    subkey.validated.map((v: any) => {\n                                        const z = v(item, as);\n                                        if (typeof z === 'boolean') {\n                                            if(z  == false) {\n                                                r = false;\n                                            }\n                                        } else {\n                                            item = z;\n                                        }\n                                    });\n                                    if (r && item) {\n                                        t.push(item);\n                                    } else {\n                                        x = undefined;\n                                    }\n                                } else {\n                                    t.push(item);\n                                }\n                            }\n                        } else if (subkey.key.length && (typeof item === 'string')) {\n                            item.split('.').map(\n                                (str) => {\n                                    if (str.indexOf(subkey.key) >= 0) {\n                                        t.push(str);\n                                    }\n                                }\n                            )\n                        }\n                    }\n                );\n                x = t;\n                result = x;\n            } else if (node && (typeof node === 'object')) {\n                x = (x && clause) ? clause(node, subkey.key, subkey.key.length ? x[subkey.key]:  x) : undefined;\n                if (x && x instanceof Array) {\n                    const t: any[] = [];\n                    if (subkey.sort) {\n                        x = subkey.sort(x);\n                    }\n                    x.map(\n                        (item: any) => {\n                            if (subkey.validated) {\n                                let r = true;\n                                subkey.validated.map((v: any) => {\n                                    const z = v(item, as);\n                                    if (typeof z === 'boolean') {\n                                        if(z  == false) {\n                                            r = false;\n                                        }\n                                    } else {\n                                        item = z;\n                                    }\n                                });\n                                if (r && item) {\n                                    t.push(item);\n                                } else {\n                                    x = undefined;\n                                }\n                            }\n                        }\n                    );\n                    x = t;\n                    result = x;\n                } else if (x) {\n                    if (subkey.validated) {\n                        let r = true;\n                        subkey.validated.map((v: any) => {\n                            const z = v(x, as);\n                            if (typeof z === 'boolean') {\n                                if(z  == false) {\n                                    r = false;\n                                }\n                            } else {\n                                x = z;\n                            }\n                        });\n                        if (r && x) {\n                            result = x;\n                        } else {\n                            x = undefined;\n                        }\n                    } else {\n                        result = x;\n                    }\n                }\n            } else if (node && (typeof node === 'string') && subkey.key.length) {\n                result = [];\n                node.split('.').map(\n                    (item) => {\n                        if (item.indexOf(subkey.key) >= 0) {\n                            result.push(item);\n                        }\n                    }\n                )\n            } else {\n                result = node;\n            }\n        });\n        return result;\n    }\n\n    private _get(path: string) {\n        const url = this.SERVICE_PATH + path;\n        const dot = path.lastIndexOf('.');\n        const ext = dot < 0 ? undefined : path.toLowerCase().substr(dot);\n        const headers = new HttpHeaders();\n        let result: any;\n\n        headers.set('Access-Control-Allow-Origin', '*');\n\n        if (ext === '.xml') {\n            headers.set('Content-Type', 'text; charset=utf-8').set('Accept', 'text');\n            result = this.http.get(url, { headers, responseType: 'text' })\n                .pipe(map((res) => {\n                    const xml = new DOMParser().parseFromString(res);\n                    const json = this._xml2json(xml.documentElement);\n                    return json;\n                })\n            );\n        } else if (ext === '.txt') {\n            headers.set('Content-Type', 'text; charset=utf-8').set('Accept', 'text');\n            result = this.http.get(url, { headers, responseType: 'text' }).pipe(map((res) => res));\n        } else if (ext === '.json'){\n            headers.set('Content-Type', 'json; charset=utf-8').set('Accept', 'json');\n            result = this.http.get(url, {headers}).pipe(map((res) => res));\n        } else {\n            headers.set('Content-Type', 'text; charset=utf-8').set('Accept', 'text');\n            result = this.http.get(url, { headers, responseType: 'text' })\n                .pipe(map((res) => {\n                    let parsed: any;\n                    try {\n                        parsed = JSON.parse(res);\n                    }catch (e) {\n                        try {\n                            const xml = new DOMParser().parseFromString(res);\n                            parsed = this._xml2json(xml.documentElement);\n                        } catch (e2) {\n                            parsed = res;\n                        }\n                    };\n                    return parsed ? parsed : res;\n                })\n            );\n        }\n        return result;\n    }\n\n    private _stringValueOfKey(key: any) {\n        let result: any = [];\n\n        if (key instanceof Array) {\n            key.map( \n                (item: any) => {\n                    if (item instanceof Array) {\n                        let x: any[] = [];\n                        item.map(\n                            (subitem) => {\n                                if (subitem.key.length) {\n                                    x.push(subitem.key);\n                                }\n                            }\n                        )\n                        result.push(x.join('.'));\n                    } else if (typeof item === 'string') {\n                        const i = item.indexOf('[');\n                        const j = item.indexOf(']');\n                        const k = item.length > (j + 1) ? 2 : 1;\n                        result.push(i > 0 ? item.substring(0,i) : j > 0 ? item.substring(j + k) : item);\n                    } else if (item.key.length) {\n                        result.push(item.key);\n                    }\n                }\n            );\n            result = result.join(',');\n            result = result.indexOf('.') < 0 ? result.replace(/\\,/g, '.') : result;\n        } else {\n            result = key.key;\n        }\n        return result;\n    }\n\n    private _addToResult(value: any, key: string, operation: any, action: any) {\n        const path = this._stringValueOfKey(action.path);\n        const key2 = this._stringValueOfKey(key);\n        let op = operation.result[path];\n        let complete = false;\n    \n        if (!op) {\n            operation.result[path] = {};\n        }\n        if (op) {\n            let opk = op[key2];\n            if (operation['temp'] &&\n                operation['temp'][key2]) {\n                op[key2] = [op[key2]];\n                delete operation['temp'];\n            }else if (opk && (opk instanceof Array) === false) {\n                operation.result[path][key2] = [opk]\n                op = operation.result[path];\n            }\n            value = this._normalize(value, action.deepXml);\n            if (op[key2]) {\n                if (typeof value === 'object') {\n                    if (JSON.stringify(value) !== JSON.stringify(op[key2][0])) {\n                        op[key2].push( value[key2] ? value[key2] : value );\n                    }\n                } else {\n                    op[key2].push( value[key2] ? value[key2] : value );\n                }\n            } else {\n                if ((op instanceof Array) === false) {\n                    operation.result[path] = [op];\n                    operation.result[path].push( value[key2] ? value[key2] : value );\n                } else {\n                    if (typeof value === 'object') {\n                        if (JSON.stringify(value) !== JSON.stringify(op[0])) {\n                            op.push( value[key2] ? value[key2] : value );\n                        }\n                    } else {\n                        op.push( value[key2] ? value[key2] : value );\n                    }\n                }\n            }\n        } else {\n            if (value instanceof Array) {\n                // if already an array remember it.\n                if (!operation['temp']) {\n                    operation['temp'] = {};\n                }\n                if (!operation['temp'][key2]) {\n                    operation['temp'][key2] = true;\n                }\n            }\n            operation.result[path][key2] = this._normalize(value, action.deepXml);\n            complete = true;\n        }\n        return complete;\n    }\n\n    private _pack(result: any) {\n        if (result instanceof Array) {\n            const list: any[] = [];\n            result.map(\n                (item) => {\n                    list.push(this._pack(item));\n                }\n            );\n            result = list;\n        } else if (typeof result === 'object') {\n            const keys = Object.keys(result);\n            keys.map (\n                (key) => {\n                    const item = result[key];\n                    if (item instanceof Array) {\n\n                    } else if (item[key]) {\n                        result[key] = item[key];\n                    }\n                }\n            )\n        }\n        return result;\n    }\n\n    private _triggerResult(promise: any, as: any, result: any) {\n        const x = this._pack(result);\n        let saveAs: any;\n        if (as) {\n            if (typeof as === 'string') {\n                saveAs = {};\n                saveAs[as] = x;\n            } else if (typeof as === 'object') {\n                saveAs = as;\n            }\n        }\n        promise.next(x);\n        return saveAs;\n    }\n\n    private _subquery(\n        promise: any,\n        path: any,\n        operation: any,\n        action: any) {\n\n        if (operation.cachedFiles[path] === undefined) {\n            // one of the keys at this level could be referencing the same file which\n            // is not yet fetched. need to wait till it is available.\n            operation.cachedFiles[path] = new BehaviorSubject<any>(null);\n            this._queryIteration(\n                operation.cachedFiles[path],\n                operation,\n                {\n                    path: action.path,\n                    in: action.in,\n                    deepXml: action.deepXml,\n                    join: action.join,\n                    handler: action.handler,\n                    queryItems: (action.path instanceof Array) ? action.path.length : 1\n                },\n                path\n            );\n        }\n\n        // wait for result raised above.\n        operation.cachedFiles[path].subscribe(\n            (source: any) => {\n                if (source) {\n                    const opkeyi = action.join ? action.join[action.path] : undefined;\n                    if (opkeyi) {\n                        if (source instanceof Array) {\n                            source.map(\n                                (item) => {\n                                    this._subquery(\n                                        promise,\n                                        item,\n                                        operation,\n                                        {\n                                            path: opkeyi.path,\n                                            in: opkeyi.in == undefined ? action.in : (opkeyi.in + item),\n                                            deepXml: opkeyi.deepXml,\n                                            join: opkeyi.join,\n                                            handler: opkeyi.handler,\n                                            queryItems: (opkeyi.path instanceof Array) ? opkeyi.path.length : 1\n                                        }\n                                    );\n                                }\n                            )\n                        } else {\n                            this._subquery(\n                                promise,\n                                source,\n                                operation,\n                                {\n                                    path: action.join[opkeyi.path],\n                                    in: opkeyi.in == undefined ? action.in : (opkeyi.in + source),\n                                    deepXml: action.deepXml,\n                                    join: opkeyi.join,\n                                    handler: opkeyi.handler,\n                                    queryItems: (opkeyi.path instanceof Array) ? opkeyi.path.length : 1\n                                }\n                            );\n                        }\n                    } else if (this._addToResult(source, action.path, operation, action)) {\n                        action.queryItems--;\n                        if (action.queryItems === 0) {\n                            operation.as = this._triggerResult(promise, operation.as, operation.result);\n                        }\n                    }else {\n                        action.queryItems--;\n                        operation.as = this._triggerResult(promise, operation.as, operation.result);\n                    }\n                }\n            },\n            (error: any) => {\n                if (this.logEnabled) {\n                    console.log(error);\n                }\n                action.queryItems--;\n                operation.as = this._triggerResult(promise, operation.as, operation.result);\n           }\n        );\n    }\n    /*\n    * Iterates through a chain query.\n    * @param promise The promise which original caller is waiting for.\n    * @param operation data for keeping track of the iteration.\n    * @param action contains: {path: current keys to query for, in: current query path, handler: resolver method}.\n    * @param cacheNamed The cached name from previous iteration if any.\n    * @returns returns none.\n    */\n    private _queryIteration(\n        promise: BehaviorSubject<any>,\n        operation: any,\n        action: any,\n        cacheNamed?: string) {\n\n        if (!action.handler) {\n            action.handler = (node: any, path: string, value: any) => value;\n        }\n        this._select(action.path, action.in, action.deepXml, operation.as, action.handler).subscribe(\n            (data) => {\n                if (data) {\n                    if (cacheNamed) {\n                        // result of n-th level call to be placed on previous level cache reference.\n                        operation.cachedFiles[cacheNamed].next(data);\n                    } else {\n                        if (data instanceof Array) {\n                            const operationalKey = action.join ? action.join[action.path] : undefined;\n                            if (operationalKey) {\n                                // assumption is the resulting list is a list of file paths.\n                                data.map( (content) => {\n                                    const path = content['#text'] ? content['#text'] : content;\n                                    let size = (operationalKey.path instanceof Array) ? operationalKey.path.length : 1;\n\n                                    if (operationalKey.in == undefined) {\n                                        operation.cachedFiles[path] = this._select(\n                                            operationalKey.path,\n                                            action.in,\n                                            operationalKey.deepXml,\n                                            operation.as,\n                                            operationalKey.handler\n                                        );\n                                        size --;\n                                    }\n                                    this._subquery(promise, path, operation, {\n                                        path: operationalKey.path,\n                                        in: operationalKey.in == undefined ? action.in : (operationalKey.in + content),\n                                        deepXml: operationalKey.deepXml,\n                                        join: operationalKey.join,\n                                        handler: operationalKey.handler,\n                                        queryItems: size\n                                    });\n                                });\n                            } else {\n                                // no more query in the chain.\n                                action.queryItems--;\n                                if (action.queryItems === 0) {\n                                    const result =operation.result ? operation.result : {};\n                                    operation.as = this._triggerResult(promise, operation.as, Object.keys(operation.result).length ? operation.result : data);\n                                }\n                            }\n                        } else if (typeof data === 'object') {\n                            Object.keys(data).map( (key) => {\n                                const content = data[key];\n                                const operationalKey = action.join ? action.join[key]: undefined;\n    \n                                if (content && content.length && operationalKey) {\n                                    let size = (operationalKey.path instanceof Array) ? operationalKey.path.length : 1;\n                                    if (operationalKey.in == undefined) {\n                                        operation.cachedFiles[content] = this._select(\n                                            operationalKey.path,\n                                            action.in,\n                                            operationalKey.deepXml,\n                                            operation.as,\n                                            operationalKey.handler\n                                        );\n                                        size --;\n                                    }\n                                    this._subquery(\n                                        promise,\n                                        content,\n                                        operation,\n                                        {\n                                            path: operationalKey.path,\n                                            in: operationalKey.in == undefined ? action.in : (operationalKey.in + content),\n                                            deepXml: operationalKey.deepXml,\n                                            handler: operationalKey.handler,\n                                            queryItems: size\n                                        }\n                                    );\n                                } else {\n                                    action.queryItems--;\n                                    if (content) {\n                                        if (!operation.result) {\n                                            operation.result = {};\n                                        }\n                                        if (operation.result instanceof Array) {\n                                            operation.result.push(content);\n                                        } else {\n                                            operation.result[key] = content;\n                                        }\n                                    }\n                                    if (action.queryItems === 0) {\n                                        operation.as = this._triggerResult(promise, operation.as, Object.keys(operation.result).length ? operation.result : data);\n                                    }\n                                }\n                            });\n                        } else {\n                            action.queryItems--;\n                            if (action.queryItems === 0) {\n                                if (Object.keys(operation.result).length === 0 && data !== undefined) {\n                                    operation.result = data;\n                                }\n                            }\n                            operation.as = this._triggerResult(promise, operation.as, operation.result);\n                        }\n                    }\n                }\n            },\n            (error: any) => {\n                promise.error({\n                    message: 'failed to query ' + action.path,\n                    reason: error.message ? error.message : error\n                });\n                action.queryItems--;\n                if (action.queryItems === 0) {\n                    operation.as = this._triggerResult(promise, operation.as, operation.result);\n                }\n            }\n        );\n    }\n\n    private _makeArguments(key: string) {\n        const list = key.split('.');\n        const result: any[] = [];\n        list.map( (item) => {\n            const b = item.indexOf('[');\n            if (b < 0) {\n                result.push({\n                    key: item,\n                    validated: [(data: any, as: any) => true]\n                });\n            } else {\n                let str = item.substring(b + 1, item.length - 1);\n                const vList = str.split('][');\n                const object: any = {\n                    key: item.substring(0,b),\n                    validated: [(data: any, as: any) => true]\n                };\n                vList.map( \n                    (filter) => {\n                        filter = filter.replace(/\\`/g, '.');\n                        filter = filter.replace(/\\@/g, 'data');\n                        if (filter.indexOf('order-by:') > -1) {\n                            const arg: any = filter.substring(filter.indexOf('order-by:') + 10).trim();\n                            const arglist = arg.split('~');\n                            const key = arglist[0].trim();\n                            const order= arglist[1] ? arglist[1].trim().toLowerCase(): 'asc';\n                            object['sort'] = function (array: any) {\n                                const _valueOf = (key: string, p: any) => {\n                                    key.split('.').map( (x) => {p = p[x]});\n                                    return p;\n                                }\n                                return array.sort(\n                                    function(a: any,b: any){\n                                        const flag =_valueOf(key, a) > _valueOf(key, b);\n                                        return flag ? (order === 'asc' ? 1: -1) : (order === 'asc' ? -1: 1);\n                                    }\n                                );\n                            }\n                        }else {\n                            const t = filter.indexOf('&&') > 0 || filter.indexOf('||') > 0;\n                            let f = 'return function (data, asList) { \\n';\n                            f += this._globalFunctions();\n                            f += 'var x = false;\\n try{\\n x = ';\n                            f += (t ? '(' + filter + ')' : filter) + '; \\n}catch(e){}\\n return x;\\n}';\n                            object['validated'].push( new Function(f)() );\n                        }\n                    }\n                );\n                result.push(object);\n            }\n        });\n        return result;\n    }\n\n    private _handleSpecialCharacters(path: string) {\n        let result: any[] = [];\n        path.split(']').map(\n            (item) => {\n                const bindex = item.indexOf('[');\n                if (bindex >= 0) {\n                    let x = '';\n                    if ( bindex > 0) {\n                        x += item.substring(0, bindex);\n                    }\n                    x += item.substring(bindex).replace(/\\./g,'`');\n                    result.push(x);\n                } else {\n                    result.push(item);\n                }\n            }\n        );\n        return result.join(']');\n    }\n    private _prepareJsonPath(path: any) {\n        let result: any;\n        if (path instanceof Array) {\n            result = [];\n            path.map(\n                (i) => {\n                    const x = this._handleSpecialCharacters(i);\n                    result.push(this._makeArguments(x));\n                }\n            );\n        } else {\n            const x = this._handleSpecialCharacters(path);\n            result = this._makeArguments(x);\n        }\n        return result;\n    }\n    \n    private _select(\n        path: any,\n        from: string,\n        deepXml: boolean,\n        as: any,\n        clause?: clauseEvaluator): BehaviorSubject<any> {\n\n        const dataStore = new BehaviorSubject<any>(null);\n\n        this._get(from).subscribe(\n            (data: any) => {\n                let result: any;\n                const jpath = this._prepareJsonPath(path);\n\n                if (!clause) {\n                    clause = (node: any, path: string, value: any) => value;\n                }\n                if (path instanceof Array) {\n                    result = {};\n                    jpath.map((pathItem: any) => {\n                        const y = this._valueOfJsonPath(pathItem, data, as, deepXml, clause);\n                        if (y) {\n                            let key = this._stringValueOfKey(pathItem);\n                            result[key] = y;\n                        }\n                    });\n                    if (Object.keys(result).length === 0) {\n                        result = undefined;\n                    }\n                } else if (typeof path === 'string') {\n                    result = this._valueOfJsonPath(jpath, data, as, deepXml, clause);\n                }\n                if (result) {\n                    dataStore.next(result);\n\n                } else {\n                    dataStore.error('Result not found for ' + path);\n                }\n            },\n            (error: any) => {\n                dataStore.error(error);\n            }\n        );\n        return dataStore;\n    }\n\n    /*\n    * Will convert the xml into a json.\n    * @param xml XML to be converted.\n    * @returns returns converted JSON.\n    */\n    private _xml2json(xml: any) {\n        try {\n            let obj: any = {};\n            if (xml.attributes) {\n                const c = xml.attributes;\n                for (let i = 0; i < c.length; i++) {\n                const attr = c[i];\n                obj[attr.name] = attr.value;\n                }\n            }\n            if (xml.childNodes && xml.childNodes.length) {\n                for (let i = 0; i < xml.childNodes.length; i++) {\n                    const item = xml.childNodes[i];\n                    const nodeName = item.nodeName;\n\n                    if (obj[nodeName] === undefined) {\n                        const fragment = this._xml2json(item);\n                        if (fragment) {\n                        obj[nodeName] = fragment;\n                        }\n                    } else {\n                        if (obj[nodeName].push === undefined) {\n                            const old = obj[nodeName];\n\n                            obj[nodeName] = [];\n                            obj[nodeName].push(old);\n                        }\n                        const fragment = this._xml2json(item);\n                        if (fragment) {\n                            obj[nodeName].push(fragment);\n                        }\n                    }\n                }\n            } else {\n                const text = xml.textContent.trim().replace(/(?:\\r\\n|\\r|\\n|\\t)/g, '');\n                obj = text.length ? text : undefined;\n            }\n            return obj;\n        } catch (e: any) {\n            if (this.logEnabled) {\n                console.log(e.message);\n            }\n        }\n    }\n\n    /*\n    * Will do a chain query on specified paths from remote location.\n    * @param chainQuery A Json structure with paths. Each path will contain a chain of instructions.\n    * Each instruction will have a 'in' to a file and a path to search on it (see. select()). once the\n    * result is in, the next instruction in the path chain will be trigged. After the path through all\n    * chained paths is completed, resulting value will be put in a json where its path is the original\n    * json path and its value will be the resulting value.\n    *\n    * this is not fully tested. caller should pass something like\n    * {path: [path1,path2], in: 'something or blank', deepXml: true, join: {k1: {path: path3, in: 'something or plank', clause: function}}}\n    * if path1 or path2 or path3 are found at the root object, a chain reaction to fetch deep will follow. An\n    * optional clause will help resolve complex situations.\n    *\n    * @returns returns an observable. the caller should subscribe to this in order to receive the result.\n    */\n    chainSelect(chainQuery: any): BehaviorSubject<any> {\n        const size = (chainQuery.path instanceof Array) ?  chainQuery.path.length : 1;\n        const operation: any = {cachedFiles: {}, as: {}, result: {}};\n        const dataStore = new BehaviorSubject<any>(null);\n\n        operation.cachedFiles[chainQuery.path] = dataStore;\n        this._queryIteration(\n            dataStore,\n            operation,\n            {\n                path: chainQuery.path,\n                in: chainQuery.in,\n                deepXml: chainQuery.deepXml,\n                join: chainQuery.join,\n                handler: chainQuery.handler,\n                queryItems: size\n            }\n        );\n        return dataStore;\n    }\n\n    /*\n    * Will group file paths if they are similar to avoid multiple calls.\n    * @param list A list of Json {paths, in, deepXml} structures. deepXml is optional.\n    * @param clause A method by which value(s) for the path(s) could be evaluated. the caller would evaluate the value for a given attribute.\n    * @returns returns an observable. the caller should subscribe to this in order to receive the result.\n    */\n    arraySelect(\n        list: any,\n        clause?: clauseEvaluator): BehaviorSubject<any>  {\n        const groupedList: any = {};\n        list.map( (item: any) => {\n            if (groupedList[item.in] === undefined) {\n                groupedList[item.in] = [];\n            }\n            groupedList[item.in].push({path: item.path, deepXml: item.deepXml});\n        });\n        const dataStore = new BehaviorSubject<any>(null);\n\n        Object.keys(groupedList).map ( (url) => {\n            this._select(groupedList[url].path, url, groupedList[url].deepXml, undefined, clause).subscribe(\n                (data: any) => {\n                    if (data) {\n                        dataStore.next(data);\n                    }\n                },\n                (error: any) => {\n                    dataStore.error(error);\n                }\n            );\n        });\n        return dataStore;\n    }\n\n    /*\n    * Will query path from a remote location qualified through an optional clause function that\n    * evaluates, filters, or sorts the resul of the query.\n    * @param path A a single JSON path or list of paths to select (i.e., 'a.b.c')\n    * @param from A reference URL to a remote source.\n    * @param deepXml if cdata-section should be parsed.\n    * @param clause A method by which value(s) for the path(s) could be evaluated. the caller would evaluate the value for a given attribute.\n    * @returns returns an observable. the caller should subscribe to this in order to receive the result.\n    */\n    select(\n        path: any,\n        from: string,\n        deepXml: boolean,\n        clause?: clauseEvaluator): BehaviorSubject<any> {\n\n        return this._select(path, from, deepXml, undefined, clause);\n    }\n}\n","import {\r\n    Directive,\r\n    Input,\r\n    Output,\r\n    EventEmitter\r\n} from '@angular/core';\r\n\r\nimport { WizardQueryService } from './wizard-query.service';\r\n\r\n@Directive({\r\n    selector: '[wizardQuery]'\r\n})\r\nexport class WizardQueryDirective {\r\n    query: any;\r\n\r\n            \r\n    @Output()\r\n    onQueryResult: EventEmitter<any> = new EventEmitter();\r\n\r\n    @Output()\r\n    onQueryError: EventEmitter<any> = new EventEmitter();\r\n\r\n    @Input()\r\n    set wizardQuery(info: any) {\r\n        this.query = info;\r\n        if (this.query) {\r\n            if (this.query instanceof Array) {\r\n                this.queryService.arraySelect(this.query).subscribe(\r\n                    (success) => {\r\n                        if(success) {\r\n                            this.onQueryResult.emit(success);\r\n                        }\r\n                    },\r\n                    (error) => {\r\n                        this.onQueryResult.emit({alert: error});\r\n                    }\r\n                );\r\n            } else {\r\n                this.queryService.chainSelect(this.query).subscribe(\r\n                    (success) => {\r\n                        if(success) {\r\n                            this.onQueryResult.emit(success);\r\n                        }\r\n                    },\r\n                    (error) => {\r\n                        this.onQueryResult.emit({alert: error});\r\n                    }\r\n                );\r\n            }\r\n        } else {\r\n            this.onQueryResult.emit(undefined);\r\n        }\r\n    }\r\n\r\n    constructor(private queryService: WizardQueryService) {}\r\n\r\n}","import { Component, Input } from '@angular/core';\n\nimport { WizardQueryService } from './wizard-query.service';\n\n@Component({\n  selector: 'wizard-query',\n  templateUrl: './wizard-query.html',\n  styleUrls: ['./wizard-query.scss']\n})\nexport class WizardQueryComponent {\n  selectedDocumentName!: string;\n\n  data: any;\n  source: any;\n  query: any;\n  \n  @Input()\n  set queryInfo(data: any) {\n    this.query = data;\n    if (this.query) {\n      this.selectedDocumentName = this.query.in.substring(this.query.in.lastIndexOf('/'));\n      this.queryService.chainSelect({\n        in: this.query.in,\n        path: ''\n      }).subscribe(\n        (success) => {\n          if(success) {\n            this.source = success;\n            this.data = undefined;\n          }\n        },\n        (error) => {\n          this.source = error;\n          this.data = undefined;\n        }\n      );\n    } else {\n      this.data = undefined;\n      this.source = undefined;\n    }\n  }\n\n  constructor(private queryService: WizardQueryService) {\n  }\n\n  private parseFunctions(content: any) {\n    if (content instanceof Array) {\n      content.map(\n        (item) => {\n          this.parseFunctions(item);\n        }\n      )\n    } else if (typeof content === 'object') {\n      Object.keys(content).map(\n        (key) => {\n          if (key === 'handler') {\n            content[key] = new Function('return function' + content[key])();\n          } else {\n            this.parseFunctions(content[key]);\n          }\n        }\n      );\n    }\n  }\n\n  executeQuery(text: any) {\n    try {\n      const content = JSON.parse(text.value);\n      this.parseFunctions(content)\n      if (content instanceof Array) {\n        this.queryService.arraySelect(content).subscribe(\n          (success) => {\n            if(success) {\n              this.data = success;\n            }\n          },\n          (error) => {\n            this.data = {alert: error};\n          }\n        );\n      } else {\n        this.queryService.chainSelect(content).subscribe(\n          (success) => {\n            if(success) {\n              this.data = success;\n            }\n          },\n          (error) => {\n            this.data = {alert: error};\n          }\n        );\n      }\n    }catch (err: any) {\n      this.data = {alert: err.message};\n    }\n  }\n}\n","\n<div class=\"entry\" *ngIf=\"source\">\n  <div class=\"entry-label\">Source: {{selectedDocumentName}}</div>\n  <div class=\"entry-label\">Type or modify query</div>\n  <div class=\"entry-json\">{{ source | json }}</div>\n  <textarea #text [value]=\"query | json\" (input)=\"data = undefined\"></textarea>\n  <div class=\"submit\"><button (click)=\"executeQuery(text)\">Execute query</button></div>\n</div>\n<div class=\"entry\" *ngIf=\"!source\">\n  <div class=\"entry-label\">Source: </div>\n  <div class=\"entry-label\">Type or modify query</div>\n  <div class=\"entry-json\"></div>\n  <textarea #text></textarea>\n  <div class=\"submit\"><button>Execute query</button></div>\n</div>\n\n<div *ngIf=\"data\" class=\"result-json\">{{ data | json }}</div>\n<div *ngIf=\"!data\" class=\"result-json\"></div>\n","import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { WizardQueryComponent } from './wizard-query.component';\nimport { WizardQueryService } from './wizard-query.service';\nimport { WizardQueryDirective } from './wizard-query.directive';\n\n\n@NgModule({\n  declarations: [\n    WizardQueryComponent,\n    WizardQueryDirective\n  ],\n  exports: [\n    WizardQueryComponent,\n    WizardQueryDirective\n  ],\n  imports: [\n    CommonModule,\n    HttpClientModule\n  ],\n  providers: [\n    WizardQueryService\n  ],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class WizardQueryModule {}\n","/*\n * Public API Surface of wizard-query\n */\n\nexport * from './lib/wizard-query.service';\nexport * from './lib/wizard-query.directive';\nexport * from './lib/wizard-query.component';\nexport * from './lib/wizard-query.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WizardQueryService"],"mappings":"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"}