{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-data/src/adaptors.js","webpack:///./node_modules/@syncfusion/ej2-data/src/query.js","webpack:///./node_modules/@syncfusion/ej2-data/src/manager.js","webpack:///./node_modules/@syncfusion/ej2-data/src/util.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","consts","GroupGuid","Adaptor","ds","options","from","requestType","sortBy","select","skip","group","take","search","count","where","aggregates","expand","type","dataSource","pvt","processResponse","data","query","xhr","JsonAdaptor","_super","apply","arguments","processQuery","dataManager","ret","key","page","result","json","slice","length","countFlg","lazyLoad","keyCount","i","value","agg","queries","fn","call","e","field","undefined","push","args","lazyLoadData","lazyLoadGroup","isCountRequired","getAggregate","onDemandGroupInfo","fieldName","comparer","onPage","formGroupResult","req","onWhere","level","uid","childLevel","records","aggQuery","filterQueries","tmp","getValue","batchRequest","dm","changes","deletedRecordsLen","deletedRecords","addedRecords","insert","changedRecords","update","remove","filter","obj","validate","onAggregates","onSearch","fieldNames","getFieldList","j","getObject","searchKey","ignoreCase","ignoreAccent","onSortBy","fnCompare","sort","endsWith","fnSort","replace","onGroup","size","pageSize","start","pageIndex","end","onRange","onTake","nos","onSkip","onSelect","tableName","position","splice","keyField","Date","UrlAdaptor","hierarchyFilters","temp","getQueryRequest","singles","filterQueryLists","params","url","request","sorts","groups","filters","searches","callAdaptorFunction","name","direction","getFiltersFrom","toJson","res","getModuleName","keys_3","keys","_i","keys_1","prop","isNull","fields","operator","getRequestQuery","reqParams","_a","keys_2","JSON","stringify","parse","jsonDateReplacer","pvtData","contentType","convertToQueryString","indexOf","request1","param","fromTable","distincts","selects","expands","getResponseHeader","handleTimeZone","timeZoneHandling","parseJson","requests","groupDs","action","isExpand","isArray","val","formRemoteGroupedData","getAggregateResult","items","childLvl","lvl","getGroupedRecords","hasRecords","childGroupedRecords","concat","original","batchUrl","crudUrl","removeUrl","dataType","changed","added","deleted","table","getAddParams","beforeSend","insertUrl","keyColumn","updateUrl","fKey","pKey","predicats","or","pData","aggregateData","aggregate","isServerGrouping","groupQuery","addParams","Error","ODataAdaptor","props","_this","accept","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","predicate","requiresCast","guid","returnValue","getField","replacer","toLowerCase","encodeURIComponent","isGuid","odBiOperator","odUniOperator","odv4UniOperator","charAt","lastIndexOf","substring","splittedStringValue","split","splittedValue","join","onComplexPredicate","predicates","onEachWhere","condition","isComplex","onEachSearch","throwError","onEachSort","reverse","onCount","settings","setRequestHeader","overrideMimeType","metaCheck","rootUrl","dataUrls","resourceTableName","dataCopy","results","metaData","emptyAndBatch","processBatchResponse","versionCheck","version","parseInt","oDataCount","format","requiresFormat","keys_4","localTimeReplacer","convertObj","dateParse","toLocalTime","localTime","compareAndRemove","initialGuid","getGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","arr","stat","dateTime","toJSON","generateBodyContent","org","forEach","change","o","date","method","cIdx","jsonObj","exVal","exec","changeGuid","test","isPlainObject","final","valueOf","ODataV4Adaptor","isDate","onExpand","selected","expanded","exArr","item","splits","sel","exp","close_1","combineVal","expandQueryIndex","idx","ex","onDistinct","distinctFields","map","metaName","metaV4Name","dataUrl","dataCount","dataV4Count","RemoteSaveAdaptor","WebApiAdaptor","_loop_1","x","location","host","_loop_2","_loop_3","state","datTime","Count","Items","WebMethodAdaptor","getData","updateKey","newData","urlParams","CustomDataAdaptor","Function","addRecord","updateRecord","deleteRecord","batchUpdate","CacheAdaptor","GraphQLAdaptor","opt","schema","response","getVariables","getQuery","datamanager","urlQuery","str","vars","variables","resData","inserted","generateCrudData","bData","crudData","parsed","getMutation","adaptor","timeStamp","isCrudAction","isInsertAction","cacheAdaptor","guidId","window","localStorage","setItem","setInterval","getItem","forDel","currentTime","requestTime","removeItem","generateKey","currentFilter","newQuery","clone","cachedItems","index","crossDomain","Query","subQuery","isChild","lookups","sortedColumns","groupedColumns","setKey","using","execute","done","fail","always","executeQuery","executeLocal","cloned","subQuerySelector","distinct","tables","matchCase","Predicate","fnOperators","isFromGroup","sortByForeignKey","order","sortByDesc","range","hierarchy","selectorFn","foreignKey","requiresCount","q","filtered","processOperator","and","combinePredicates","combine","ornot","andnot","fromJson","len","fromJSONData","pred","record","isAnd","preds","DataManager","offline","headers","timeTillExpiration","cachingPageSize","enableCaching","jsonp","isCors","defaultQuery","isDataAvailable","ready","then","setDefaultQuery","lookup","buildHierarchy","makeRequest","deffered","Deferred","isCustomDataAdaptor","getDeferedArgs","resolve","nextTick","promise","setImmediate","setTimeout","extendRequest","fnSuccess","fnFail","cache","processData","onSuccess","onFailure","isSelector","error","reject","process","actual","virtualSelectRecords","toString","fnQueryChild","selector","subDeffer","childArgs","parent","subUrl","childReq","subData","isGraphQLAdaptor","ajaxReqOption","httpRequest","virtualRecords","ajax_1","send","catch","Promise","all","pResult","cResult","saveChanges","doAjaxRequest","deff_1","ajax_2","successFunc","failureFunc","ajaxDeffered","ajaxFunc","bind","ajax_3","DataUtil","inst","input","substr","notEndsWith","startsWith","notStartsWith","wildCard","pattern","asteriskSplit","optionalSplit","regexPattern","RegExp","like","fnAscending","fnDescending","y","localeCompare","extractFields","newObj","setValue","jsonArray","isLazyLoad","jsonData","this_1","indx","childLevels","grouped","groupedArray","this_2","getVal","tempObj","aggs","source","grp","fKeyData","prefix","copyObj","nameSpace","lowerCaseNameSpace","upperCaseNameSpace","toUpperCase","casing","fromObj","middle","left","right","merge","ignoreDiacritics","newValue","diacritics","current","shift","array","fnName","param1","param2","adp","rand","hexs","crypto","Uint8Array","getRandomValues","Math","random","getItemFromComparer","keyVal","castRequired","requiresCompleteRecord","prepareQuery","sampledata","requiresCounts","predicateList","getPredicate","sorted","mainPred","childPred","cpre","serverTimezoneOffset","message","stack","sum","isNaN","average","min","max","truecount","falsecount","operatorSymbols","equal","expected","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","contains","doesnotcontain","isnotnull","isnull","startswith","doesnotstartwith","isempty","isnotempty","wildcard","endswith","doesnotendwith","processSymbols","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","ms","offSet","toTimeZone","isUTC","secondsMs","getUTCMilliseconds","utcFormat","hrs","mins","setHours","getHours","getMinutes","addSelfOffset","isJson","regex","match","jsonReplacer","arrayReplacer","getTimezoneOffset","toUTC","offset","utc","unix","datefn","timeZone","differenceString","localtimefn","num","norm","floor","abs","getFullYear","getMonth","getDate","getSeconds"],"mappings":"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AAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,I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","file":"js/chunk-vendors~b61af9c0.11de41b4.4.2.0.js","sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n *\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n *\n * @param {DataOptions} ds?\n * @param ds\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors\n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates',\n expand: 'expand'\n };\n /**\n * Specifies the type of adaptor.\n *\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n *\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param ds\n * @param query\n * @param xhr\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n *\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n *\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var lazyLoad = {};\n var keyCount = 0;\n var group = [];\n var page;\n for (var i = 0; i < query.lazyLoad.length; i++) {\n keyCount++;\n lazyLoad[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n if ((key.fn === 'onPage' || key.fn === 'onGroup') && query.lazyLoad.length) {\n if (key.fn === 'onGroup') {\n group.push(key.e);\n }\n if (key.fn === 'onPage') {\n page = key.e;\n }\n continue;\n }\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (keyCount) {\n var args = {\n query: query, lazyLoad: lazyLoad, result: result, group: group, page: page\n };\n var lazyLoadData = this.lazyLoadGroup(args);\n result = lazyLoadData.result;\n count = lazyLoadData.count;\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Perform lazy load grouping in JSON array based on the given query and lazy load details.\n *\n * @param {LazyLoadGroupArgs} args\n */\n JsonAdaptor.prototype.lazyLoadGroup = function (args) {\n var count = 0;\n var agg = this.getAggregate(args.query);\n var result = args.result;\n if (!isNullOrUndefined(args.lazyLoad.onDemandGroupInfo)) {\n var req = args.lazyLoad.onDemandGroupInfo;\n for (var i = req.where.length - 1; i >= 0; i--) {\n result = this.onWhere(result, req.where[i]);\n }\n if (args.group.length !== req.level) {\n var field = args.group[req.level].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n }\n count = result.length;\n var data = result;\n result = result.slice(req.skip);\n result = result.slice(0, req.take);\n if (args.group.length !== req.level) {\n this.formGroupResult(result, data);\n }\n }\n else {\n var field = args.group[0].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n count = result.length;\n var data = result;\n if (args.page) {\n result = this.onPage(result, args.page, args.query);\n }\n this.formGroupResult(result, data);\n }\n return { result: result, count: count };\n };\n JsonAdaptor.prototype.formGroupResult = function (result, data) {\n if (result.length && data.length) {\n var uid = 'GroupGuid';\n var childLevel = 'childLevels';\n var level = 'level';\n var records = 'records';\n result[uid] = data[uid];\n result[childLevel] = data[childLevel];\n result[level] = data[level];\n result[records] = data[records];\n }\n return result;\n };\n /**\n * Separate the aggregate query from the given queries\n *\n * @param {Query} query\n */\n JsonAdaptor.prototype.getAggregate = function (query) {\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return agg;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n var deletedRecordsLen = changes.deletedRecords.length;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < deletedRecordsLen; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n *\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n * @param e.validate\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n *\n * @param {Object[]} ds\n * @param e\n * @param {string} } type\n * @param e.field\n * @param e.type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n *\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n *\n * @param {Object[]} ds\n * @param e\n * @param {Object} b\n * @param e.comparer\n * @param e.fieldName\n * @param query\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n *\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var agg = this.getAggregate(query);\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n *\n * @param {Object[]} ds\n * @param e\n * @param {number} } pageIndex\n * @param e.pageSize\n * @param {Query} query\n * @param e.pageIndex\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n *\n * @param {Object[]} ds\n * @param e\n * @param {number} } end\n * @param e.start\n * @param e.end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n *\n * @param {Object[]} ds\n * @param {{nos:number}} e\n * @param e.nos\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n *\n * @param {Object[]} ds\n * @param {{nos:number}} e\n * @param e.nos\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n *\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n * @param e.fieldNames\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param tableName\n * @param query\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object' && !(value instanceof Date)) {\n value = DataUtil.getObject(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (DataUtil.getObject(keyField, ds[i]) === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key;\n if (!isNullOrUndefined(keyField)) {\n key = getValue(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (!isNullOrUndefined(keyField) && (getValue(keyField, ds[i])) === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n *\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n *\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @param hierarchyFilters\n * @returns p\n */\n // tslint:disable-next-line:max-func-body-length\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n var res = DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query);\n if ((this.getModuleName &&\n this.getModuleName() === 'ODataV4Adaptor') &&\n !isNullOrUndefined(queries.filters[i].e.key) && queries.filters.length > 1) {\n res = '(' + res + ')';\n }\n request.filters.push(res);\n var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n if (query.lazyLoad.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n req[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n }\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var prop = keys_2[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req, DataUtil.parse.jsonDateReplacer),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.apply && query.distincts.length) {\n req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n }\n if (!query.distincts.length && options.expand) {\n req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n *\n * @param {Object} req\n * @param request\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('application/json') !== -1) {\n var handleTimeZone = DataUtil.timeZoneHandling;\n if (ds && !ds.timeZoneHandling) {\n DataUtil.timeZoneHandling = false;\n }\n data = DataUtil.parse.parseJson(data);\n DataUtil.timeZoneHandling = handleTimeZone;\n }\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data ? data.groupDs : [];\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data && data.d) {\n data = data.d;\n }\n var args = {};\n if (data && 'count' in data) {\n args.count = data.count;\n }\n args.result = data && data.result ? data.result : data;\n var isExpand = false;\n if (Array.isArray(data.result) && data.result.length) {\n var key = 'key';\n var val = 'value';\n var level = 'level';\n if (!isNullOrUndefined(data.result[0][key])) {\n args.result = this.formRemoteGroupedData(args.result, 1, pvt.groups.length - 1);\n }\n if (query && query.lazyLoad.length && pvt.groups.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n if (query.lazyLoad[i][key] === 'onDemandGroupInfo') {\n var value = query.lazyLoad[i][val][level];\n if (pvt.groups.length === value) {\n isExpand = true;\n }\n }\n }\n }\n }\n if (!isExpand) {\n this.getAggregateResult(pvt, data, args, groupDs, query);\n }\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n UrlAdaptor.prototype.formRemoteGroupedData = function (data, level, childLevel) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].items.length && Object.keys(data[i].items[0]).indexOf('key') > -1) {\n this.formRemoteGroupedData(data[i].items, level + 1, childLevel - 1);\n }\n }\n var uid = 'GroupGuid';\n var childLvl = 'childLevels';\n var lvl = 'level';\n var records = 'records';\n data[uid] = consts[uid];\n data[lvl] = level;\n data[childLvl] = childLevel;\n data[records] = data[0].items.length ? this.getGroupedRecords(data, !isNullOrUndefined(data[0].items[records])) : [];\n return data;\n };\n UrlAdaptor.prototype.getGroupedRecords = function (data, hasRecords) {\n var childGroupedRecords = [];\n var records = 'records';\n for (var i = 0; i < data.length; i++) {\n if (!hasRecords) {\n for (var j = 0; j < data[i].items.length; j++) {\n childGroupedRecords.push(data[i].items[j]);\n }\n }\n else {\n childGroupedRecords = childGroupedRecords.concat(data[i].items[records]);\n }\n }\n return childGroupedRecords;\n };\n /**\n * Add the group query to the adaptor`s option.\n *\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n *\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n * @param query\n * @param original\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: DataUtil.getObject(keyField, value),\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n *\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n var key = 'key';\n var isServerGrouping = Array.isArray(data.result) && data.result.length && !isNullOrUndefined(data.result[0][key]);\n if (pvt && pvt.groups && pvt.groups.length && !isServerGrouping) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n if (options.params.length) {\n req.params = {};\n }\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n req.params[tmp.key] = req[tmp.key];\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n *\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n extend(_this.options, props || {});\n return _this;\n }\n ODataAdaptor.prototype.getModuleName = function () {\n return 'ODataAdaptor';\n };\n /**\n * Generate request string based on the filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = val.replace(/'/g, '\\'\\'');\n if (predicate.ignoreCase) {\n val = val.toLowerCase();\n }\n if (predicate.operator !== 'like') {\n val = encodeURIComponent(val);\n }\n if (predicate.operator !== 'wildcard' && predicate.operator !== 'like') {\n val = '\\'' + val + '\\'';\n }\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n if (predicate.operator === 'isempty' || predicate.operator === 'isnull' || predicate.operator === 'isnotempty' ||\n predicate.operator === 'isnotnull') {\n operator = predicate.operator.indexOf('isnot') !== -1 ? DataUtil.odBiOperator['notequal'] : DataUtil.odBiOperator['equal'];\n val = predicate.operator === 'isnull' || predicate.operator === 'isnotnull' ? null : '\\'\\'';\n }\n else {\n operator = DataUtil.odBiOperator[predicate.operator];\n }\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'like') {\n val = val;\n if (val.indexOf('%') !== -1) {\n if (val.charAt(0) === '%' && val.lastIndexOf('%') < 2) {\n val = val.substring(1, val.length);\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['startswith'] : DataUtil.odUniOperator['startswith'];\n }\n else if (val.charAt(val.length - 1) === '%' && val.indexOf('%') > val.length - 3) {\n val = val.substring(0, val.length - 1);\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['endswith'] : DataUtil.odUniOperator['endswith'];\n }\n else if (val.lastIndexOf('%') !== val.indexOf('%') && val.lastIndexOf('%') > val.indexOf('%') + 1) {\n val = val.substring(val.indexOf('%') + 1, val.lastIndexOf('%'));\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n }\n else {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n }\n }\n val = encodeURIComponent(val);\n val = '\\'' + val + '\\'';\n }\n else if (operator === 'wildcard') {\n val = val;\n if (val.indexOf('*') !== -1) {\n var splittedStringValue = val.split('*');\n var splittedValue = void 0;\n var count = 0;\n if (val.indexOf('*') !== 0 && splittedStringValue[0].indexOf('%3f') === -1 &&\n splittedStringValue[0].indexOf('?') === -1) {\n splittedValue = splittedStringValue[0];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['startswith'] : DataUtil.odUniOperator['startswith'];\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n if (val.lastIndexOf('*') !== val.length - 1 && splittedStringValue[splittedStringValue.length - 1].indexOf('%3f') === -1 &&\n splittedStringValue[splittedStringValue.length - 1].indexOf('?') === -1) {\n splittedValue = splittedStringValue[splittedStringValue.length - 1];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['endswith'] : DataUtil.odUniOperator['endswith'];\n if (count > 0) {\n returnValue += ' and ';\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n if (splittedStringValue.length > 2) {\n for (var i = 1; i < splittedStringValue.length - 1; i++) {\n if (splittedStringValue[i].indexOf('%3f') === -1 && splittedStringValue[i].indexOf('?') === -1) {\n splittedValue = splittedStringValue[i];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (count > 0) {\n returnValue += ' and ';\n }\n if (operator === 'substringof' || operator === 'not substringof') {\n var temp = splittedValue;\n splittedValue = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n }\n }\n if (count === 0) {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (val.indexOf('?') !== -1 || val.indexOf('%3f') !== -1) {\n val = val.indexOf('?') !== -1 ? val.split('?').join('') : val.split('%3f').join('');\n }\n val = '\\'' + val + '\\'';\n }\n else {\n operator = 'wildcard';\n }\n }\n else {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (val.indexOf('?') !== -1 || val.indexOf('%3f') !== -1) {\n val = val.indexOf('?') !== -1 ? val.split('?').join('') : val.split('%3f').join('');\n }\n val = '\\'' + val + '\\'';\n }\n }\n if (operator === 'substringof' || operator === 'not substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n if (operator !== 'wildcard') {\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n }\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n *\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n *\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n *\n * @param e\n * @param {string} operator\n * @param {string} key\n * @param {boolean} } ignoreCase\n * @param e.fields\n * @param e.operator\n * @param e.key\n * @param e.ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n *\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n *\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n *\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n *\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n *\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n *\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n *\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n * @param settings\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaCheck = 'odata.metadata';\n if ((request && request.type === 'GET') && !this.rootUrl && data[metaCheck]) {\n var dataUrls = data[metaCheck].split('/$metadata#');\n this.rootUrl = dataUrls[0];\n this.resourceTableName = dataUrls[1];\n }\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n *\n * @param {Object} req\n * @param request\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: (dm.dataSource.insertUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n * @param tableName\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: (dm.dataSource.removeUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @param query\n * @param original\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: (dm.dataSource.updateUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @param query\n * @param original\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = this.rootUrl ? this.rootUrl + '/' + this.options.batch :\n dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args, dm);\n req += this.generateUpdateRequest(changes.changedRecords, args, dm, original ? original.changedRecords : []);\n req += this.generateDeleteRequest(changes.deletedRecords, args, dm);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '(' + url + ')';\n }\n else if (url instanceof Date) {\n var dateTime = data[i][key];\n return '(' + dateTime.toJSON() + ')';\n }\n else {\n return \"('\" + url + \"')\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n * @param org\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) {\n if (typeof data[i][key] === 'number' || DataUtil.parse.isGuid(data[i][key])) {\n return '(' + data[i][key] + ')';\n }\n else if (data[i][key] instanceof Date) {\n var date = data[i][key];\n return '(' + date.toJSON() + ')';\n }\n else {\n return \"('\" + data[i][key] + \"')\";\n }\n },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n if (stat.method === 'POST ') {\n req += (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'PUT ' || stat.method === 'PATCH ') {\n req += (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'DELETE ') {\n req += (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n';\n if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n *\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false,\n apply: '$apply'\n });\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModuleName = function () {\n return 'ODataV4Adaptor';\n };\n /**\n * Returns the query string which requests total count from the data source.\n *\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n if (query instanceof Query) {\n var queries = this.getQueryRequest(query);\n for (var i = 0; i < queries.filters.length; i++) {\n if (queries.filters[i].e.key === predicate.value) {\n requiresCast = true;\n }\n }\n }\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n if (DataUtil.parse.isGuid(val)) {\n returnValue = returnValue.replace('guid', '').replace(/'/g, '');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n *\n * @param e\n * @param {string} operator\n * @param {string} key\n * @param {boolean} } ignoreCase\n * @param e.fields\n * @param e.operator\n * @param e.key\n * @param e.ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n *\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n *\n * @param {string} e\n * @param e.selects\n * @param e.expands\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n if (splits.length === 2) {\n if (selected[splits[0]].length && Object.keys(selected).indexOf(splits[0]) !== -1) {\n if (selected[splits[0]][0].indexOf('$expand') !== -1 && selected[splits[0]][0].indexOf(';$select=') === -1) {\n selected[splits[0]][0] = selected[splits[0]][0] + ';' + '$select=' + splits[1];\n }\n else {\n selected[splits[0]][0] = selected[splits[0]][0] + ',' + splits[1];\n }\n }\n else {\n selected[splits[0]].push('$select=' + splits[1]);\n }\n }\n else {\n var sel = '$select=' + splits[splits.length - 1];\n var exp = '';\n var close_1 = '';\n for (var i = 1; i < splits.length - 1; i++) {\n exp = exp + '$expand=' + splits[i] + '(';\n close_1 = close_1 + ')';\n }\n var combineVal = exp + sel + close_1;\n if (selected[splits[0]].length && Object.keys(selected).indexOf(splits[0]) !== -1 &&\n _this.expandQueryIndex(selected[splits[0]], true)) {\n var idx = _this.expandQueryIndex(selected[splits[0]]);\n selected[splits[0]][idx] = selected[splits[0]][idx] + combineVal.replace('$expand=', ',');\n }\n else {\n selected[splits[0]].push(combineVal);\n }\n }\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + selected[expand].join(';') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n ODataV4Adaptor.prototype.expandQueryIndex = function (query, isExpand) {\n for (var i = 0; i < query.length; i++) {\n if (query[i].indexOf('$expand') !== -1) {\n return isExpand ? true : i;\n }\n }\n return isExpand ? false : 0;\n };\n /**\n * Returns the groupby query string.\n *\n * @param {string} e\n * @param distinctFields\n */\n ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n return \"groupby((\" + fields + \"))\";\n };\n /**\n * Returns the select query string.\n *\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.setRequestHeader('Prefer', 'return=representation');\n }\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaName = '@odata.context';\n var metaV4Name = '@context';\n if ((request && request.type === 'GET') && !this.rootUrl && (data[metaName] || data[metaV4Name])) {\n var dataUrl = data[metaName] ? data[metaName].split('/$metadata#') : data[metaV4Name].split('/$metadata#');\n this.rootUrl = dataUrl[0];\n this.resourceTableName = dataUrl[1];\n }\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n var dataV4Count = '@count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n else if (dataV4Count in data) {\n count = data[dataV4Count];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n *\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WebApiAdaptor.prototype.getModuleName = function () {\n return 'WebApiAdaptor';\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n WebApiAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var _this = this;\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var req = [];\n var _loop_1 = function (i, x) {\n changes.addedRecords.forEach(function (j, d) {\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('POST ' + '/api/' + (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.addedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //insertion\n for (var i = 0, x = changes.addedRecords.length; i < x; i++) {\n _loop_1(i, x);\n }\n var _loop_2 = function (i, x) {\n changes.changedRecords.forEach(function (j, d) {\n var stat = {\n 'method': _this.options.updateType + ' ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('PUT ' + '/api/' + (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.changedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //updation\n for (var i = 0, x = changes.changedRecords.length; i < x; i++) {\n _loop_2(i, x);\n }\n var _loop_3 = function (i, x) {\n changes.deletedRecords.forEach(function (j, d) {\n var state = {\n 'mtd': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '/' + url;\n }\n else if (url instanceof Date) {\n var datTime = data[i][key];\n return '/' + datTime.toJSON();\n }\n else {\n return \"/'\" + url + \"'\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('DELETE ' + '/api/' + (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url)\n + state.url(changes.deletedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //deletion\n for (var i = 0, x = changes.deletedRecords.length; i < x; i++) {\n _loop_3(i, x);\n }\n req.push('--' + initialGuid + '--', '');\n return {\n type: 'POST',\n url: url,\n contentType: 'multipart/mixed; boundary=' + initialGuid,\n data: req.join('\\r\\n')\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n *\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n *\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @param hierarchyFilters\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n *\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n this.pvt.position = position;\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, val, tableName, query) {\n _super.prototype.remove.call(this, dm, keyField, val);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: val,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, val, tableName, query) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: val,\n action: 'update',\n keyColumn: keyField,\n key: val[keyField],\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n var newData = request ? JSON.parse(request.data) : data;\n data = newData.action === 'batch' ? DataUtil.parse.parseJson(data) : data;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data, null, null, this.pvt.position);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n this.updateType = undefined;\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @param query\n * @param original\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.addParams = function (options) {\n var urlParams = new UrlAdaptor();\n urlParams.addParams(options);\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Ajax Adaptor that is extended from URL Adaptor, is used for handle data operations with user defined functions.\n *\n * @hidden\n */\nvar CustomDataAdaptor = /** @class */ (function (_super) {\n __extends(CustomDataAdaptor, _super);\n function CustomDataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n getData: new Function(),\n addRecord: new Function(),\n updateRecord: new Function(),\n deleteRecord: new Function(),\n batchUpdate: new Function()\n });\n extend(_this.options, props || {});\n return _this;\n }\n CustomDataAdaptor.prototype.getModuleName = function () {\n return 'CustomDataAdaptor';\n };\n return CustomDataAdaptor;\n}(UrlAdaptor));\nexport { CustomDataAdaptor };\n/**\n * The GraphqlAdaptor that is extended from URL Adaptor, is used for retrieving data from the Graphql server.\n * It interacts with the Graphql server with all the DataManager Queries and performs CRUD operations.\n *\n * @hidden\n */\nvar GraphQLAdaptor = /** @class */ (function (_super) {\n __extends(GraphQLAdaptor, _super);\n function GraphQLAdaptor(options) {\n var _this = _super.call(this) || this;\n _this.opt = options;\n _this.schema = _this.opt.response;\n _this.query = _this.opt.query;\n /* eslint-disable @typescript-eslint/no-empty-function */\n // tslint:disable-next-line:no-empty\n _this.getVariables = _this.opt.getVariables ? _this.opt.getVariables : function () { };\n /* eslint-enable @typescript-eslint/no-empty-function */\n _this.getQuery = function () { return _this.query; };\n return _this;\n }\n GraphQLAdaptor.prototype.getModuleName = function () {\n return 'GraphQLAdaptor';\n };\n /**\n * Process the JSON data based on the provided queries.\n *\n * @param {DataManager} dm\n * @param {Query} query?\n * @param datamanager\n * @param query\n */\n GraphQLAdaptor.prototype.processQuery = function (datamanager, query) {\n var urlQuery = _super.prototype.processQuery.apply(this, arguments);\n var dm = JSON.parse(urlQuery.data);\n // constructing GraphQL parameters\n var keys = ['skip', 'take', 'sorted', 'table', 'select', 'where',\n 'search', 'requiresCounts', 'aggregates', 'params'];\n var temp = {};\n var str = 'searchwhereparams';\n keys.filter(function (e) {\n temp[e] = str.indexOf(e) > -1 ? JSON.stringify(dm[e]) : dm[e];\n });\n var vars = this.getVariables() || {};\n // tslint:disable-next-line:no-string-literal\n vars['datamanager'] = temp;\n var data = JSON.stringify({\n query: this.getQuery(),\n variables: vars\n });\n urlQuery.data = data;\n return urlQuery;\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n *\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param resData\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @returns DataResult\n */\n GraphQLAdaptor.prototype.processResponse = function (resData, ds, query, xhr, request) {\n var res = resData;\n var count;\n var aggregates;\n var result = getValue(this.schema.result, res.data);\n if (this.schema.count) {\n count = getValue(this.schema.count, res.data);\n }\n if (this.schema.aggregates) {\n aggregates = getValue(this.schema.aggregates, res.data);\n aggregates = !isNullOrUndefined(aggregates) ? DataUtil.parse.parseJson(aggregates) : aggregates;\n }\n var pvt = request.pvtData || {};\n var args = { result: result, aggregates: aggregates };\n var data = args;\n if (pvt && pvt.groups && pvt.groups.length) {\n this.getAggregateResult(pvt, data, args, null, query);\n }\n return !isNullOrUndefined(count) ? { result: args.result, count: count, aggregates: aggregates } : args.result;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n */\n GraphQLAdaptor.prototype.insert = function () {\n var inserted = _super.prototype.insert.apply(this, arguments);\n return this.generateCrudData(inserted, 'insert');\n };\n /**\n * Prepare and returns request body which is used to update a new record in the table.\n */\n GraphQLAdaptor.prototype.update = function () {\n var inserted = _super.prototype.update.apply(this, arguments);\n return this.generateCrudData(inserted, 'update');\n };\n /**\n * Prepare and returns request body which is used to remove a new record in the table.\n */\n GraphQLAdaptor.prototype.remove = function () {\n var inserted = _super.prototype.remove.apply(this, arguments);\n return this.generateCrudData(inserted, 'remove');\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n * @param e.key\n * @param {Query} query\n * @param {Object} original\n */\n GraphQLAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var batch = _super.prototype.batchRequest.apply(this, arguments);\n // tslint:disable-next-line:typedef\n var bData = JSON.parse(batch.data);\n bData.key = e.key;\n batch.data = JSON.stringify(bData);\n return this.generateCrudData(batch, 'batch');\n };\n GraphQLAdaptor.prototype.generateCrudData = function (crudData, action) {\n var parsed = JSON.parse(crudData.data);\n crudData.data = JSON.stringify({\n query: this.opt.getMutation(action),\n variables: parsed\n });\n return crudData;\n };\n return GraphQLAdaptor;\n}(UrlAdaptor));\nexport { GraphQLAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n *\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n *\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @param adaptor\n * @param timeStamp\n * @param pageSize\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n *\n * @param {string} url\n * @param {Query} query?\n * @param query\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n *\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n * @param query\n * @param hierarchyFilters\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n /* eslint-disable prefer-spread */\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n /* eslint-enable prefer-spread */\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n *\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n /* eslint-disable prefer-spread */\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n /* eslint-enable prefer-spread */\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n * @param settings\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (!isNullOrUndefined(this.cacheAdaptor.options.batch) && DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch)\n && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { DataUtil } from './util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n *\n * @param {string|string[]} from?\n * @param from\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n /** @hidden */\n this.distincts = [];\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n this.lazyLoad = [];\n return this;\n }\n /**\n * Sets the primary key.\n *\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n * let query: Query = new Query();\n * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n * let promise: Promise< Object > = query.execute(dataManager);\n * promise.then((e: { result: Object }) => { });\n *\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n cloned.distincts = this.distincts.slice(0);\n cloned.lazyLoad = this.lazyLoad.slice(0);\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n *\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n *\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * @param fields\n * @hidden\n */\n Query.prototype.distinct = function (fields) {\n if (typeof fields === 'string') {\n this.distincts = [].slice.call([fields], 0);\n }\n else {\n this.distincts = fields.slice(0);\n }\n return this;\n };\n /**\n * Expands the related table.\n *\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n *\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreAccent\n * @param matchCase\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent, matchCase) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent, matchCase);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n *\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreAccent\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n if (!operator || operator === 'none') {\n operator = 'contains';\n }\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n *\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param isFromGroup\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n return this.sortByForeignKey(fieldName, comparer, isFromGroup);\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n *\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param isFromGroup\n * @param {string} direction - Defines the sort direction .\n */\n Query.prototype.sortByForeignKey = function (fieldName, comparer, isFromGroup, direction) {\n var order = !isNullOrUndefined(direction) ? direction : 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n *\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n *\n * @param {string} fieldName - Defines the column field.\n * @param fn\n * @param format\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n *\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n *\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n *\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n *\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n *\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n *\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n *\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n *\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n *\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n *\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n *\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @param ignoreAccent\n * @param {boolean} matchCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.matchCase = matchCase;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n this.matchCase = field.matchCase;\n this.ignoreCase = field.ignoreCase;\n this.ignoreAccent = field.ignoreAccent;\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “and not” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.ornot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or not');\n };\n /**\n * Adds new predicate on existing predicate with “and not” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.ornot = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'ornot', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “and not” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.andnot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and not');\n };\n /**\n * Adds new predicate on existing predicate with “and not” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.andnot = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'andnot', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n *\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n *\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var ret;\n var isAnd;\n if (!this.isComplex && this.comparer) {\n if (this.condition && this.condition.indexOf('not') !== -1) {\n this.condition = this.condition.split('not')[0] === '' ? undefined : this.condition.split('not')[0];\n return !this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n else {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (this.condition && this.condition.indexOf('not') !== -1) {\n isAnd = this.condition.indexOf('and') !== -1;\n }\n else {\n isAnd = this.condition === 'and';\n }\n for (var i = 0; i < predicate.length; i++) {\n if (i > 0 && this.condition && this.condition.indexOf('not') !== -1) {\n predicate[i].condition = predicate[i].condition ? predicate[i].condition + 'not' : 'not';\n }\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates,\n matchCase: this.matchCase\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor, CustomDataAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n *\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @param dataSource\n * @param query\n * @param adaptor\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n /** @hidden */\n this.timeZoneHandling = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n if (dataSource && dataSource.timeZoneHandling === false) {\n this.timeZoneHandling = dataSource.timeZoneHandling;\n }\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor || dataSource.adaptor instanceof CustomDataAdaptor ?\n false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n *\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n *\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n *\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n var makeRequest = 'makeRequest';\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')\n || (!isNullOrUndefined(this.adaptor[makeRequest])) || this.isCustomDataAdaptor(this.adaptor)) {\n var result = this.adaptor.processQuery(this, query);\n if (!isNullOrUndefined(this.adaptor[makeRequest])) {\n this.adaptor[makeRequest](result, deffered, args, query);\n }\n else if (!isNullOrUndefined(result.url) || this.isCustomDataAdaptor(this.adaptor)) {\n this.requests = [];\n this.makeRequest(result, deffered, args, query);\n }\n else {\n args = DataManager.getDeferedArgs(query, result, args);\n deffered.resolve(args);\n }\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // tslint:disable-next-line:no-any\n (window.setImmediate || window.setTimeout)(fn, 0);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n // tslint:disable-next-line:max-func-body-length\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (_this.isGraphQLAdaptor(_this.adaptor)) {\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n return fnFail(data['errors'], request);\n }\n }\n if (_this.isCustomDataAdaptor(_this.adaptor)) {\n request = extend({}, _this.ajaxReqOption, request);\n }\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n if (!this.isCustomDataAdaptor(this.adaptor)) {\n var ajax_1 = new Ajax(req);\n ajax_1.beforeSend = function () {\n _this.beforeSend(ajax_1.httpRequest, ajax_1);\n };\n req = ajax_1.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests.\n this.requests.push(ajax_1);\n }\n else {\n this.ajaxReqOption = req;\n var request = req;\n this.adaptor.options.getData({\n data: request.data,\n onSuccess: request.onSuccess, onFailure: request.onFailure\n });\n }\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n *\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n * @param original\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query || new Query(), original);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](req);\n }\n else if (!this.isCustomDataAdaptor(this.adaptor)) {\n var deff_1 = new Deferred();\n var ajax_2 = new Ajax(req);\n ajax_2.beforeSend = function () {\n _this.beforeSend(ajax_2.httpRequest, ajax_2);\n };\n ajax_2.onSuccess = function (data, request) {\n if (_this.isGraphQLAdaptor(_this.adaptor)) {\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n ajax_2.onFailure(JSON.stringify(data['errors']));\n }\n }\n deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n };\n ajax_2.onFailure = function (e) {\n deff_1.reject([{ error: e }]);\n };\n ajax_2.send().catch(function (e) { return true; }); // to handle the failure requests.\n return deff_1.promise;\n }\n else {\n return this.doAjaxRequest(req, this.adaptor.options.batchUpdate);\n }\n };\n /**\n * Inserts new record in the given table.\n *\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n * @param position\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](req);\n }\n else {\n return this.doAjaxRequest(req, this.adaptor.options.addRecord);\n }\n };\n /**\n * Removes data from the table with the given key.\n *\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = DataUtil.getObject(keyField, value);\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](res);\n }\n else {\n var remove = this.adaptor.options.deleteRecord;\n return this.doAjaxRequest(res, remove);\n }\n };\n /**\n * Updates existing record in the given table.\n *\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n * @param original\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](res);\n }\n else {\n var update = this.adaptor.options.updateRecord;\n return this.doAjaxRequest(res, update);\n }\n };\n DataManager.prototype.isCustomDataAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'CustomDataAdaptor';\n };\n DataManager.prototype.isGraphQLAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'GraphQLAdaptor';\n };\n DataManager.prototype.successFunc = function (record, request) {\n if (this.isGraphQLAdaptor(this.adaptor)) {\n var data = JSON.parse(record);\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n this.failureFunc(JSON.stringify(data['errors']));\n }\n }\n if (this.isCustomDataAdaptor(this.adaptor)) {\n request = extend({}, this.ajaxReqOption, request);\n }\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.httpRequest, request);\n this.ajaxDeffered.resolve(record);\n };\n DataManager.prototype.failureFunc = function (e) {\n this.ajaxDeffered.reject([{ error: e }]);\n };\n DataManager.prototype.doAjaxRequest = function (res, ajaxFunc) {\n var _this = this;\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n this.ajaxDeffered = new Deferred();\n if (!this.isCustomDataAdaptor(this.adaptor)) {\n var ajax_3 = new Ajax(res);\n ajax_3.beforeSend = function () {\n _this.beforeSend(ajax_3.httpRequest, ajax_3);\n };\n ajax_3.onSuccess = this.successFunc.bind(this);\n ajax_3.onFailure = this.failureFunc.bind(this);\n ajax_3.send().catch(function (e) { return true; }); // to handle the failure requests.\n }\n else {\n this.ajaxReqOption = res;\n ajaxFunc.call(this, {\n data: res.data, onSuccess: this.successFunc.bind(this),\n onFailure: this.failureFunc.bind(this)\n });\n }\n return this.ajaxDeffered.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n *\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n *\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @param inst\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n *\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string not ends with given string.\n *\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.notEndsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) !== substr;\n };\n /**\n * Returns true if the input string starts with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param start\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * Returns true if the input string not starts with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param start\n */\n DataUtil.notStartsWith = function (input, start) {\n return input.slice(0, start.length) !== start;\n };\n /**\n * Returns true if the input string pattern(wildcard) matches with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param pattern\n */\n DataUtil.wildCard = function (input, pattern) {\n var asteriskSplit;\n var optionalSplit;\n // special character allowed search\n if (pattern.indexOf('(') !== -1) {\n pattern = pattern.split('(').join('[(]');\n }\n if (pattern.indexOf(')') !== -1) {\n pattern = pattern.split(')').join('[)]');\n }\n if (pattern.indexOf('*') !== -1) {\n if (pattern.charAt(0) !== '*') {\n pattern = '^' + pattern;\n }\n if (pattern.charAt(pattern.length - 1) !== '*') {\n pattern = pattern + '$';\n }\n asteriskSplit = pattern.split('*');\n for (var i = 0; i < asteriskSplit.length; i++) {\n if (asteriskSplit[i].indexOf('.') === -1) {\n asteriskSplit[i] = asteriskSplit[i] + '.*';\n }\n else {\n asteriskSplit[i] = asteriskSplit[i] + '*';\n }\n }\n pattern = asteriskSplit.join('');\n }\n if (pattern.indexOf('%3f') !== -1 || pattern.indexOf('?') !== -1) {\n optionalSplit = pattern.indexOf('%3f') !== -1 ? pattern.split('%3f') : pattern.split('?');\n pattern = optionalSplit.join('.');\n }\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regexPattern = new RegExp(pattern, 'g');\n return regexPattern.test(input);\n };\n /**\n * Returns true if the input string pattern(like) matches with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param pattern\n */\n DataUtil.like = function (input, pattern) {\n if (pattern.indexOf('%') !== -1) {\n if (pattern.charAt(0) === '%' && pattern.lastIndexOf('%') < 2) {\n pattern = pattern.substring(1, pattern.length);\n return DataUtil.startsWith(DataUtil.toLowerCase(input), DataUtil.toLowerCase(pattern));\n }\n else if (pattern.charAt(pattern.length - 1) === '%' && pattern.indexOf('%') > pattern.length - 3) {\n pattern = pattern.substring(0, pattern.length - 1);\n return DataUtil.endsWith(DataUtil.toLowerCase(input), DataUtil.toLowerCase(pattern));\n }\n else if (pattern.lastIndexOf('%') !== pattern.indexOf('%') && pattern.lastIndexOf('%') > pattern.indexOf('%') + 1) {\n pattern = pattern.substring(pattern.indexOf('%') + 1, pattern.lastIndexOf('%'));\n return input.indexOf(pattern) !== -1;\n }\n else {\n return input.indexOf(pattern) !== -1;\n }\n }\n else {\n return false;\n }\n };\n /**\n * To return the sorting function based on the string.\n *\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n *\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n *\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n *\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n *\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n * @param field\n * @param aggregates\n * @param level\n * @param groupDs\n * @param format\n * @param isLazyLoad\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format, isLazyLoad) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format, isLazyLoad);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format, isLazyLoad);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n if (!isLazyLoad || (isLazyLoad && aggregates.length)) {\n grouped[val].items.push(jsonData[i]);\n }\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n if (isLazyLoad && groupedArray.length && aggregates.length) {\n for (var i = 0; i < groupedArray.length; i++) {\n groupedArray[i].items = [];\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n *\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @param lookup\n * @param pKey\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n *\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @param fields\n * @param prefix\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n *\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n var lowerCaseNameSpace = nameSpace.charAt(0).toLowerCase() + nameSpace.slice(1);\n var upperCaseNameSpace = nameSpace.charAt(0).toUpperCase() + nameSpace.slice(1);\n if (!isNullOrUndefined(from[nameSpace])) {\n return from[nameSpace];\n }\n else {\n return from[lowerCaseNameSpace] || from[upperCaseNameSpace] || null;\n }\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n if (value === undefined) {\n var casing = splits[i].charAt(0).toUpperCase() + splits[i].slice(1);\n value = from[casing] || from[casing.charAt(0).toLowerCase() + casing.slice(1)];\n }\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n *\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName), left[0], right[0]) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n *\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @param param1\n * @param param2\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n DataUtil.getAddParams = function (adp, dm, query) {\n var req = {};\n DataUtil.callAdaptorFunction(adp, 'addParams', {\n dm: dm,\n query: query,\n params: query.params,\n reqParams: req\n });\n return req;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n *\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n *\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n *\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n *\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n *\n * @param {Object[]} json\n * @param {string} field\n * @param fieldName\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = typeof (json[index]) === 'object' ? DataUtil.getVal(json, index, fieldName) : json[index];\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Process the given records based on the datamanager string.\n *\n * @param {string} datamanager\n * @param dm\n * @param {Object[]} records\n */\n DataUtil.processData = function (dm, records) {\n var query = this.prepareQuery(dm);\n var sampledata = new DataManager(records);\n if (dm.requiresCounts) {\n query.requiresCount();\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // tslint:disable-next-line:no-any\n var result = sampledata.executeLocal(query);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var returnValue = {\n result: dm.requiresCounts ? result.result : result,\n count: result.count,\n aggregates: JSON.stringify(result.aggregates)\n };\n return dm.requiresCounts ? returnValue : result;\n };\n DataUtil.prepareQuery = function (dm) {\n var _this = this;\n var query = new Query();\n if (dm.select) {\n query.select(dm.select);\n }\n if (dm.where) {\n var where = DataUtil.parse.parseJson(dm.where);\n where.filter(function (pred) {\n if (isNullOrUndefined(pred.condition)) {\n query.where(pred.field, pred.operator, pred.value, pred.ignoreCase, pred.ignoreAccent);\n }\n else {\n var predicateList = [];\n if (pred.field) {\n predicateList.push(new Predicate(pred.field, pred.operator, pred.value, pred.ignoreCase, pred.ignoreAccent));\n }\n else {\n predicateList = predicateList.concat(_this.getPredicate(pred.predicates));\n }\n if (pred.condition === 'or') {\n query.where(Predicate.or(predicateList));\n }\n else if (pred.condition === 'and') {\n query.where(Predicate.and(predicateList));\n }\n }\n });\n }\n if (dm.search) {\n var search = DataUtil.parse.parseJson(dm.search);\n // tslint:disable-next-line:no-string-literal\n search.filter(function (e) { return query.search(e.key, e.fields, e['operator'], \n // tslint:disable-next-line:no-string-literal\n e['ignoreCase'], e['ignoreAccent']); });\n }\n if (dm.aggregates) {\n dm.aggregates.filter(function (e) { return query.aggregate(e.type, e.field); });\n }\n if (dm.sorted) {\n dm.sorted.filter(function (e) { return query.sortBy(e.name, e.direction); });\n }\n if (dm.skip) {\n query.skip(dm.skip);\n }\n if (dm.take) {\n query.take(dm.take);\n }\n if (dm.group) {\n dm.group.filter(function (grp) { return query.group(grp); });\n }\n return query;\n };\n DataUtil.getPredicate = function (pred) {\n var mainPred = [];\n for (var i = 0; i < pred.length; i++) {\n var e = pred[i];\n if (e.field) {\n mainPred.push(new Predicate(e.field, e.operator, e.value, e.ignoreCase, e.ignoreAccent));\n }\n else {\n var childPred = [];\n // tslint:disable-next-line:typedef\n var cpre = this.getPredicate(e.predicates);\n for (var _i = 0, _a = Object.keys(cpre); _i < _a.length; _i++) {\n var prop = _a[_i];\n childPred.push(cpre[prop]);\n }\n mainPred.push(e.condition === 'or' ? Predicate.or(childPred) : Predicate.and(childPred));\n }\n }\n return mainPred;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n *\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Species whether are not to be parsed with serverTimezoneOffset value.\n *\n * @hidden\n */\n DataUtil.timeZoneHandling = true;\n /**\n * Throw error with the given string as message.\n *\n * @param {string} er\n * @param error\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n // eslint-disable-next-line no-throw-literal\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n *\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n *\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n *\n * @param {Object[]} ds\n * @param {string} field?\n * @param field\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof',\n 'doesnotendwith': 'not endswith',\n 'doesnotstartwith': 'not startswith',\n 'doesnotcontain': 'not substringof',\n 'wildcard': 'wildcard',\n 'like': 'like'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains',\n 'doesnotendwith': 'not endswith',\n 'doesnotstartwith': 'not startswith',\n 'doesnotcontain': 'not contains',\n 'wildcard': 'wildcard',\n 'like': 'like'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n * @param ignoreCase\n * @param ignoreAccent\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n if (isNullOrUndefined(actual)) {\n actual = undefined;\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n if (isNullOrUndefined(actual)) {\n actual = undefined;\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n *\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the actual input not contains the given string.\n *\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n doesnotcontain: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) === -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) === -1;\n },\n /**\n * Returns true when the given input value is not null.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnotnull: function (actual) {\n return actual !== null && actual !== undefined;\n },\n /**\n * Returns true when the given input value is null.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null || actual === undefined;\n },\n /**\n * Returns true when the actual input starts with the given string\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input not starts with the given string\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n doesnotstartwith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.notStartsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.notStartsWith(actual, expected);\n },\n /**\n * Returns true when the actual input like with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n like: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.like(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.like(actual, expected);\n },\n /**\n * Returns true when the given input value is empty.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isempty: function (actual) {\n return actual === undefined || actual === '';\n },\n /**\n * Returns true when the given input value is not empty.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnotempty: function (actual) {\n return actual !== undefined && actual !== '';\n },\n /**\n * Returns true when the actual input pattern(wildcard) matches with the given string.\n *\n * @param {string|Date} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n wildcard: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return (actual || typeof actual === 'boolean') && expected && typeof actual !== 'object' &&\n DataUtil.wildCard(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return (actual || typeof actual === 'boolean') && expected && DataUtil.wildCard(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * Returns true when the actual input not ends with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n doesnotendwith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.notEndsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.notEndsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n *\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n *\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n *\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object' && jsonText !== null) {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n *\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object' && array[i] !== null) {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n // eslint-disable-next-line no-useless-escape\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n *\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n *\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n if (typeof value === 'string') {\n // eslint-disable-next-line security/detect-unsafe-regex\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n var offSet = DataUtil.timeZoneHandling ? DataUtil.serverTimezoneOffset : null;\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), offSet, true);\n // eslint-disable-next-line no-useless-escape, security/detect-unsafe-regex\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var isUTC = value.indexOf('Z') > -1 || value.indexOf('z') > -1;\n var arr = value.split(/[^0-9.]/);\n if (isUTC) {\n if (arr[5].indexOf('.') > -1) {\n var secondsMs = arr[5].split('.');\n arr[5] = secondsMs[0];\n arr[6] = new Date(value).getUTCMilliseconds().toString();\n }\n else {\n arr[6] = '00';\n }\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10), parseInt(arr[6], 10)), DataUtil.serverTimezoneOffset, false);\n }\n else {\n var utcFormat = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10));\n var hrs = parseInt(arr[6], 10);\n var mins = parseInt(arr[7], 10);\n if (isNaN(hrs) && isNaN(mins)) {\n return utcFormat;\n }\n if (value.indexOf('+') > -1) {\n utcFormat.setHours(utcFormat.getHours() - hrs, utcFormat.getMinutes() - mins);\n }\n else {\n utcFormat.setHours(utcFormat.getHours() + hrs, utcFormat.getMinutes() + mins);\n }\n value = DataUtil.dateParse\n .toTimeZone(utcFormat, DataUtil.serverTimezoneOffset, false);\n }\n if (DataUtil.serverTimezoneOffset == null) {\n value = DataUtil.dateParse.addSelfOffset(value);\n }\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n *\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n *\n * @param {string} value\n */\n isGuid: function (value) {\n // eslint-disable-next-line security/detect-unsafe-regex\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n *\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n *\n * @param {string} key\n * @param {Object} val\n * @param stringify\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n if (DataUtil.serverTimezoneOffset == null) {\n val[prop] = DataUtil.dateParse.toTimeZone(d, null).toJSON();\n }\n else {\n d = new Date(+d + DataUtil.serverTimezoneOffset * 3600000);\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), null).toJSON();\n }\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n *\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n },\n /**\n * It will replace the Date object with respective to UTC format value.\n *\n * @param {string} key\n * @param {any} value\n * @hidden\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n /* tslint:disable-next-line:no-any */\n jsonDateReplacer: function (key, value) {\n /* eslint-enable @typescript-eslint/no-explicit-any */\n if (key === 'value' && value) {\n if (typeof value === 'string') {\n // eslint-disable-next-line security/detect-unsafe-regex\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n value = DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), null, true);\n // eslint-disable-next-line no-useless-escape, security/detect-unsafe-regex\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = value.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), null, true);\n }\n }\n if (value instanceof Date) {\n value = DataUtil.dateParse.addSelfOffset(value);\n if (DataUtil.serverTimezoneOffset === null) {\n return DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(value), null).toJSON();\n }\n else {\n value = DataUtil.dateParse.toTimeZone(value, (((value.getTimezoneOffset() / 60) * 2)\n - DataUtil.serverTimezoneOffset), false);\n return value.toJSON();\n }\n }\n }\n return value;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n"],"sourceRoot":""}