{"version":3,"file":"odatajs-4.0.0.min.js","sources":["odatajs-4.0.0.js"],"names":["init","exports","module","require","version","major","minor","build","deferred","utils","xml","oData","store","cache","datas","appendPage","operation","page","intersection","intersectRanges","start","end","i","c","getJsonValueArraryLength","d","concatJsonValueArray","sliceJsonValueArray","x","y","result","xLast","yLast","resultIndex","resultLast","checkZeroGreater","val","name","undefined","message","isNaN","isFinite","checkUndefinedGreaterThanZero","checkUndefinedOrNumber","removeFromArray","arr","item","len","length","splice","estimateSize","object","size","type","snapToPageBoundaries","lowIndex","highIndex","pageSize","Math","floor","ceil","DataCacheOperation","stateMachine","promise","isCancelable","index","count","data","pending","stateData","cacheState","that","this","p","s","OPERATION_STATE_START","canceled","oncomplete","cancel","state","OPERATION_STATE_ERROR","OPERATION_STATE_END","OPERATION_STATE_CANCEL","transition","complete","djsassert","error","err","run","wait","OPERATION_STATE_WAIT","operationStateMachine","opTargetState","CACHE_STATE_INIT","fireCanceled","fireRejected","fireResolved","handled","DataCache","options","cacheFailure","stats","counts","netReads","prefetches","cacheReads","clearOperations","readOperations","prefetchOperations","actualCacheSize","allDataLocal","cacheSize","undefinedDefault","collectionCount","highestSavedPage","highestSavedPageSize","overflowed","prefetchSize","pendingOperations","source","cacheSource","ODataCacheSource","storeReq","createStore","mechanism","onidle","idle","createDeferred","delay","resolve","request","reject","extend","abort","clear","op","destroyStateMachine","queueAndStart","filterForward","predicate","filter","filterBack","readRange","readStateMachine","ToObservable","toObservable","inBrowser","window","Rx","Observable","obs","disposed","errorCallback","onError","successCallback","value","onNext","onCompleted","then","Dispose","dispose","cacheFailureCallback","changeState","newState","operations","concat","clearStore","CACHE_STATE_DESTROY","DjsDeferred","close","dequeueOperation","removed","CACHE_STATE_IDLE","fetchPage","read","backwards","parseInt10","max","returnData","pendingReadRange","readMore","readIndex","readCount","dataIndex","element","unshift","push","nextIndex","initialPage","initialIndex","initialCount","fireOnIdle","prefetch","CACHE_STATE_READ","prefetchStateMachine","queue","readPage","key","storeFailureCallback","contains","contained","_","savePage","pageBytes","addOrUpdate","updateSettings","saveSettings","success","settings","sourceId","identifier","pageCount","pageIndex","cancelStateMachine","DESTROY_STATE_CLEAR","CACHE_STATE_PREFETCH","READ_STATE_LOCAL","READ_STATE_DONE","min","readSaveStateMachine","CACHE_STATE_WRITE","range","isPrefetch","found","READ_STATE_SOURCE","READ_STATE_SAVE","saved","assigned","settingsVersion","indexOf","createDataCache","isArray","normalizeURI","prototype","reason","appendQueryOption","uri","queryOption","separator","appendSegment","segment","queryPortion","substr","buildODataRequest","method","requestUri","user","password","enableJsonpCallback","callbackParameterName","formatQueryString","queryForData","queryForDataInternal","currentRequest","odataRequest","newData","nextLink","substring","property","httpClient","metadata","normalizeURICase","encodeURI","decodeURI","toString","queryOptions","forwardCall","thisValue","returnValue","apply","arguments","_arguments","_done","_fail","_resolved","_rejected","jQuery","Deferred","fulfilledHandler","errorHandler","odata","dispatchHandler","handlerMethod","requestOrResponse","context","handlers","odataUtils","odataHandler","handler","odataMetadata","odataNet","net","odataJson","json","batch","throwErrorCallback","defined","MAX_DATA_SERVICE_VERSION","invokeRequest","metadataParser","prepareRequest","jsonHandler","textHandler","defaultSuccess","alert","JSON","stringify","defaultError","defaultHandler","response","body","headers","write","maxDataServiceVersion","accept","defaultMetadata","urlOrRequest","String","defaultHttpClient","recognizeDates","bIsSuccessHandlerError","parseMetadata","csdlMetadataDocument","batchHandler","partHandler","metadataHandler","hex16","random","createBoundary","prefix","currentBoundary","boundaries","batchParser","text","boundary","contentType","properties","__batchResponses","readBatch","handlerContext","batchSerializer","cType","batchMediaType","mediaType","writeBatch","delimiter","readTo","readLine","responses","partEnd","position","changeResponses","partHeaders","readHeaders","partContentType","e","readResponse","__changeResponses","pop","statusCode","parts","line","pos","responseHeaderRegex","exec","normalizeHeaders","statusText","match","responseStatusRegex","str","isBatch","batchBoundary","batchParts","__batchRequests","writeBatchPartDelimiter","writeBatchPart","contentTypeProperties","part","nested","changeSet","__changeRequests","changeSetBoundary","partContext","writeRequest","trimString","contentTypeParts","split","contentTypeParams","contentTypeToString","createReadWriteContext","dataServiceVersion","rwContext","fixRequestHeader","fixDataServiceVersionHeader","dsv","maxVersion","getRequestOrResponseHeader","getContentType","getDataServiceVersion","matches","versionRE","handlerAccepts","handlerRead","parseCallback","readContext","handlerWrite","serializeCallback","writeContext","textParse","textSerialize","oDataUtils","jsonParser","metadataContentType","model","parse","payloadFormat","getFormatKind","addMinimalMetadataToJsonPayload","addFullMetadataToJsonPayload","jsonSerializer","jsonContentType","newdata","formatJsonRequestPayload","jsonReplacer","isPrimitive","newArrayData","isJsonSerializableProperty","attribute","jsonSerializableMetadata","jsonMakePayloadInfo","kind","isObject","hasOwnProperty","isGeographyEdmType","isGeometryEdmType","convertDatesNoEdm","typeFromObject","addType","checkProperties","objectInfoType","baseURI","curType","propertyValue","lookupProperty","baseType","lookupEntityType","isCollectionType","addTypeColNoEdm","addTypeNoEdm","addMetadataToJsonMinimalPayloadComplex","convertDates","contextUrlAnnotation","payloadInfo","createPayloadInfo","detectedPayloadKind","PAYLOADTYPE_VALUE","addMetadataToJsonMinimalPayloadEntity","typeName","PAYLOADTYPE_FEED","addMetadataToJsonMinimalPayloadFeed","PAYLOADTYPE_ENTRY","PAYLOADTYPE_COLLECTION","addMetadataToJsonMinimalPayloadCollection","PAYLOADTYPE_PROPERTY","PAYLOADTYPE_SVCDOC","PAYLOADTYPE_LINKS","feedInfo","entry","entries","items","entryInfo","contentTypeOdata","objectInfo","keyType","lastIdSegment","jsonGetEntryKey","lastIndexOf","propertyType","lookupComplexType","collectionInfo","fullName","propertyName","parseDate","parseDateTimeOffset","parseDuration","parseTime","formatLiteral","formatRawLiteral","encodeURIComponent","replace","convertByteArrayToHexString","minutesToOffset","minutes","sign","hours","formatNumberWidth","parseJsonDateString","jsonDateRE","Date","mins","current","getUTCMinutes","setUTCMinutes","__edmType","__offset","valueOf","parseContextUriFragment","fragments","ret","isNullProperty","PAYLOADTYPE_ENTITY_REF_LINKS","PAYLOADTYPE_ENTITY_REF_LINK","fragmentParts","fragment","rCount","charAt","inPharenthesis","startsWith","projection","jsonIsPrimitiveType","container","lookupDefaultEntityContainer","entitySet","lookupEntitySet","entityType","singleton","lookupSingleton","endsWith","tmp12","deltaKind","DELTATYPE_FEED","DELTATYPE_DELETED_ENTRY","DELTATYPE_LINK","DELTATYPE_DELETED_LINK","metadataUri","fragmentStart","entityModel","entityInstanceKey","entityKeys","propertyRef","first","isPrimitiveEdmType","oDataHandler","odataNs","odataAnnotationPrefix","formatDuration","formatDateTimeOffset","getCanonicalTimezone","isComplex","jsonMediaType","schemaElement","attributes","elements","ns","scriptCase","firstTwo","toUpperCase","toLowerCase","getChildSchema","parentSchema","candidateName","elementName","multipleElements","isEdmNamespace","nsURI","edmNs1","parseConceptualModelElement","localName","xmlLocalName","xmlNamespaceURI","elementSchema","schema","xmlAttributes","xmlnsNS","schemaName","odataMetaXmlNs","xmlChildElements","child","childSchema","xmlInnerText","doc","xmlParse","root","xmlFirstChildElement","oDSxml","xmlNS","ado","http","adoDs","edmxNs","xmlMediaType","Action","ActionImport","Annotation","AnnotationPath","Annotations","Apply","And","Or","Not","Eq","Ne","Gt","Ge","Lt","Le","Binary","Bool","Cast","Collection","ComplexType","DateTimeOffset","Decimal","Duration","EntityContainer","EntitySet","EntityType","EnumMember","EnumType","Float","Function","FunctionImport","Guid","If","Int","IsOf","Key","LabeledElement","LabeledElementReference","Member","NavigationProperty","NavigationPropertyBinding","NavigationPropertyPath","Null","OnDelete","Path","Parameter","Property","PropertyPath","PropertyRef","PropertyValue","Record","ReferentialConstraint","ReturnType","Schema","Singleton","Term","TimeOfDay","TypeDefinition","UrlRef","Edmx","DataServices","Reference","Include","IncludeAnnotations","canUseJSONP","createIFrame","url","iframe","document","createElement","style","display","attributeEncodedUrl","html","getElementsByTagName","appendChild","writeHtmlToIFrame","createXmlHttpRequest","XMLHttpRequest","exception","ActiveXObject","isAbsoluteUrl","isLocalUrl","location","locationDomain","protocol","host","removeCallback","tick","ticks","removeIFrame","parentNode","removeChild","readResponseHeaders","xhr","responseHeaders","getAllResponseHeaders","header","frameDocument","contentWindow","contentDocument","open","done","handleTimeout","onreadystatechange","readyState","status","responseText","setRequestHeader","timeoutMS","timeout","ontimeout","send","timeoutId","tickText","succeeded","clearTimeout","Content-Type","OData-Version","setTimeout","queryStringParams","qIndex","odatautils","forEachSchema","callback","dataServices","formatMilliseconds","ms","formatDateTimeOffsetJSON","getTime","hasOffset","isDateTimeOffset","offset","timezone","parseTimezone","getUTCHours","h","m","setUTCHours","year","getUTCFullYear","month","getUTCMonth","getUTCMilliseconds","__ns","getUTCDate","getUTCSeconds","days","seconds","width","append","getCollectionType","isCollection","colData","results","collectionTypeRE","test","isDate","isDeferred","__metadata","__deferred","isEntry","isFeed","feedData","geographyEdmTypes","geographyTypes","geometryEdmTypes","geometryTypes","isNamedStream","mediaResource","__mediaresource","media_src","primitiveEdmTypes","navigationPropertyKind","propertyModel","relationship","find","lookupInMetadata","lookupInSchema","entitySets","singletons","entityContainer","lookupEntityContainer","lookupFunctionImport","functionImports","functionImport","lookupNavigationPropertyType","navigationProperty","rel","association","nameOnly","removeNamespace","namespace","associations","role","toRole","lookupNavigationPropertyEntitySet","sourceEntitySetName","associationSet","containers","associationSets","j","getEntitySetInfo","entitySetName","info","containerName","left","right","leftParts","rightParts","leftVersion","rightVersion","lowerName","normalName","normalHeaders","parseBool","parseDateTimeMaybeOffset","withOffset","nullOnError","parseDateTimeRE","direction","setUTCFullYear","parseTimeOfDay","parseTimeOfDayRE","duration","parseTimeRE","years","months","parseFloat","offsetHours","offsetMinutes","Accept","async","traverseInternal","owner","traverse","dataItemTypeName","valueTypeName","EDM","EDM_BOOLEAN","EDM_BYTE","EDM_SBYTE","EDM_INT16","EDM_INT32","EDM_INT64","EDM_SINGLE","EDM_DOUBLE","EDM_DECIMAL","EDM_STRING","EDM_BINARY","EDM_DATE","EDM_DATETIMEOFFSET","EDM_DURATION","EDM_GUID","EDM_TIMEOFDAY","GEOGRAPHY","EDM_GEOGRAPHY","EDM_GEOGRAPHY_POINT","EDM_GEOGRAPHY_LINESTRING","EDM_GEOGRAPHY_POLYGON","EDM_GEOGRAPHY_COLLECTION","EDM_GEOGRAPHY_MULTIPOLYGON","EDM_GEOGRAPHY_MULTILINESTRING","EDM_GEOGRAPHY_MULTIPOINT","GEOGRAPHY_POINT","GEOGRAPHY_LINESTRING","GEOGRAPHY_POLYGON","GEOGRAPHY_COLLECTION","GEOGRAPHY_MULTIPOLYGON","GEOGRAPHY_MULTILINESTRING","GEOGRAPHY_MULTIPOINT","GEOMETRY","EDM_GEOMETRY","EDM_GEOMETRY_POINT","EDM_GEOMETRY_LINESTRING","EDM_GEOMETRY_POLYGON","EDM_GEOMETRY_COLLECTION","EDM_GEOMETRY_MULTIPOLYGON","EDM_GEOMETRY_MULTILINESTRING","EDM_GEOMETRY_MULTIPOINT","GEOMETRY_POINT","GEOMETRY_LINESTRING","GEOMETRY_POLYGON","GEOMETRY_COLLECTION","GEOMETRY_MULTIPOLYGON","GEOMETRY_MULTILINESTRING","GEOMETRY_MULTIPOINT","GEOJSON_POINT","GEOJSON_LINESTRING","GEOJSON_POLYGON","GEOJSON_MULTIPOINT","GEOJSON_MULTILINESTRING","GEOJSON_MULTIPOLYGON","GEOJSON_GEOMETRYCOLLECTION","content-type","content-encoding","content-length","odata-version","accept-charset","if-match","if-none-match","odata-isolation","odata-maxversion","prefer","content-id","content-transfer-encoding","etag","odata-entityid","preference-applied","retry-after","defaultStoreMechanism","DomStore","isSupported","factory","mechanisms","create","IndexedDBStore","MemoryStore","indexeddb","dom","memory","domStoreDateToJSON","newValue","v","t","domStoreJSONToDate","qualifyDomStoreKey","unqualifyDomStoreKey","localStorage","add","Array","fullKey","oldDateToJSON","toJSON","storedValue","setItem","code","number","removeItem","getItem","getAllKeys","remove","update","getError","errorFunc","Object","call","errName","errObj","target","ex","openStoreDb","storeName","dbName","indexedDB","onblocked","onerror","onupgradeneeded","db","objectStoreNames","createObjectStore","onsuccess","event","versionRequest","setVersion","transaction","onversionchange","openTransaction","mode","storeDb","mozIndexedDB","webkitIndexedDB","msIndexedDB","IDBKeyRange","webkitIDBKeyRange","IDBTransaction","webkitIDBTransaction","IDBT_READ_ONLY","READ_ONLY","IDBT_READ_WRITE","READ_WRITE","keys","values","onabort","objectStore","record","put","get","openCursor","cursor","only","pair","validateKeyInput","messageString","holes","getErrorCallback","a","b","args","slice","condition","parseInt","renameProperty","obj","oldName","newName","trim","defaultValue","getURIInfo","isAbsolute","uriRegEx","uriPartNames","scheme","getURIFromInfo","uriInfo","authority","path","query","uriAuthorityRegEx","pctEncodingRegEx","base","baseInfo","normInfo","mergeUriPathWithBase","removeDotsFromPath","uriPath","basePath","atob","decodeBase64","binaryStr","charCodeAt","hexValue","hexValues","binaryString","base65IndexValue","getBase64IndexValue","binaryValue","addBase64Padding","byteArray","numberOfBytes","intValue","character","asciiCode","asciiOfA","differenceBetweenZanda","concatData","input","search","format","defaultFormatKind","formatKind","normalizedFormat","activeXObject","progId","hasLeadingOrTrailingWhitespace","re","isWhitespace","ws","isWhitespacePreserveContext","domElement","nodeType","xmlAttributeValue","isXmlNSDeclaration","domAttribute","nodeName","safeSetProperty","setProperty","msXmlDom3","msxml3","msXmlDom","msxml","msXmlParse","loadXML","parseError","errorCode","xmlThrowParserError","srcText","exceptionOrReason","errorXmlText","domParser","DOMParser","parseFromString","documentElement","namespaceURI","mozillaParserErroNS","srcTextElement","xmlNodeValue","xhtmlNS","xmlFirstDescendantElement","siblings","firstChild","nextSibling","shift","xmlQualifiedName","xmlAppendText","domNode","textNode","attr","xmlAttributeNode","xmlNewAttribute","ownerDocument","xmlAppendChild","onAttributeCallback","getNamedItemNS","getQualifiedItem","xmlBaseURI","onElementCallback","xmlTraverse","xmlFindElementByPath","xmlFindNodeByPath","lastSegmentStart","nodePath","parentPath","node","xmlFirstElementMaybeRecursive","getElementsByTagNameNS","recursive","firstElement","isExpectedNamespace","isExpectedNodeName","xmlElement","whitespacePreserveContext","whitespaceAlreadyRemoved","preserveWhiteSpace","shouldInclude","baseName","nodeValue","onChildCallback","subtrees","proceed","xmlSiblingElement","sibling","xmlDom","implementation","createDocument","xmlAppendChildren","parent","children","xmlNewText","setAttributeNodeNS","setAttributeNode","qualifiedName","createAttributeNS","createNode","xmlNewElement","createElementNS","nampespaceURI","xmlNewNSDeclaration","xmlNewFragment","tempDom","tempRoot","imported","importNode","createDocumentFragment","importedChild","createTextNode","xmlNewNodeByPath","xmlFindNode","xmlNewNode","xmlNode","childNode","xmlSerialize","xmlSerializer","XMLSerializer","serializer","serializeToString","xmlSerializeDescendants","childNodes","fragmentRoot","w3org","modules","console","log","odatajs"],"mappings":"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","sourcesContent":["/*\r\n * Licensed to the Apache Software Foundation (ASF) under one\r\n * or more contributor license agreements. See the NOTICE file\r\n * distributed with this work for additional information\r\n * regarding copyright ownership. The ASF licenses this file\r\n * to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance\r\n * with the License. You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing,\r\n * software distributed under the License is distributed on an\r\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n * KIND, either express or implied. See the License for the\r\n * specific language governing permissions and limitations\r\n * under the License.\r\n */\r\nvar init = function(exports, module, require) {\r\n \r\n\r\n// version information \r\nexports.version = { major: 4, minor: 0, build: 0 };\r\n\r\n// core stuff, always needed\r\nexports.deferred = require('./lib/deferred.js');\r\nexports.utils = require('./lib/utils.js');\r\n\r\n// only needed for xml metadata \r\nexports.xml = require('./lib/xml.js');\r\n\r\n// only need in browser case\r\nexports.oData = require('./lib/odata.js');\r\nexports.store = require('./lib/store.js');\r\nexports.cache = require('./lib/cache.js');\r\n\r\n\r\n\r\n\r\n};\r\n\r\nvar datas = {\"cache\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n /** @module cache */\r\n\r\n//var odatajs = require('./odatajs/utils.js');\r\nvar utils = require('./utils.js');\r\nvar deferred = require('./deferred.js');\r\nvar storeReq = require('./store.js');\r\nvar cacheSource = require('./cache/source.js');\r\n\r\n\r\nvar assigned = utils.assigned;\r\nvar delay = utils.delay;\r\nvar extend = utils.extend;\r\nvar djsassert = utils.djsassert;\r\nvar isArray = utils.isArray;\r\nvar normalizeURI = utils.normalizeURI;\r\nvar parseInt10 = utils.parseInt10;\r\nvar undefinedDefault = utils.undefinedDefault;\r\n\r\nvar createDeferred = deferred.createDeferred;\r\nvar DjsDeferred = deferred.DjsDeferred;\r\n\r\n\r\nvar getJsonValueArraryLength = utils.getJsonValueArraryLength;\r\nvar sliceJsonValueArray = utils.sliceJsonValueArray;\r\nvar concatJsonValueArray = utils.concatJsonValueArray;\r\n\r\n\r\n\r\n/** Appends a page's data to the operation data.\r\n * @param {Object} operation - Operation with (i)ndex, (c)ount and (d)ata.\r\n * @param {Object} page - Page with (i)ndex, (c)ount and (d)ata.\r\n */\r\nfunction appendPage(operation, page) {\r\n\r\n var intersection = intersectRanges(operation, page);\r\n var start = 0;\r\n var end = 0;\r\n if (intersection) {\r\n start = intersection.i - page.i;\r\n end = start + (operation.c - getJsonValueArraryLength(operation.d));\r\n }\r\n\r\n operation.d = concatJsonValueArray(operation.d, sliceJsonValueArray(page.d, start, end));\r\n}\r\n\r\n/** Returns the {(i)ndex, (c)ount} range for the intersection of x and y.\r\n * @param {Object} x - Range with (i)ndex and (c)ount members.\r\n * @param {Object} y - Range with (i)ndex and (c)ount members.\r\n * @returns {Object} The intersection (i)ndex and (c)ount; undefined if there is no intersection.\r\n */\r\nfunction intersectRanges(x, y) {\r\n\r\n var xLast = x.i + x.c;\r\n var yLast = y.i + y.c;\r\n var resultIndex = (x.i > y.i) ? x.i : y.i;\r\n var resultLast = (xLast < yLast) ? xLast : yLast;\r\n var result;\r\n if (resultLast >= resultIndex) {\r\n result = { i: resultIndex, c: resultLast - resultIndex };\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** Checks whether val is a defined number with value zero or greater.\r\n * @param {Number} val - Value to check.\r\n * @param {String} name - Parameter name to use in exception.\r\n * @throws Throws an exception if the check fails\r\n */\r\nfunction checkZeroGreater(val, name) {\r\n\r\n if (val === undefined || typeof val !== \"number\") {\r\n throw { message: \"'\" + name + \"' must be a number.\" };\r\n }\r\n\r\n if (isNaN(val) || val < 0 || !isFinite(val)) {\r\n throw { message: \"'\" + name + \"' must be greater than or equal to zero.\" };\r\n }\r\n}\r\n\r\n/** Checks whether val is undefined or a number with value greater than zero.\r\n * @param {Number} val - Value to check.\r\n * @param {String} name - Parameter name to use in exception.\r\n * @throws Throws an exception if the check fails\r\n */\r\nfunction checkUndefinedGreaterThanZero(val, name) {\r\n\r\n if (val !== undefined) {\r\n if (typeof val !== \"number\") {\r\n throw { message: \"'\" + name + \"' must be a number.\" };\r\n }\r\n\r\n if (isNaN(val) || val <= 0 || !isFinite(val)) {\r\n throw { message: \"'\" + name + \"' must be greater than zero.\" };\r\n }\r\n }\r\n}\r\n\r\n/** Checks whether val is undefined or a number\r\n * @param {Number} val - Value to check.\r\n * @param {String} name - Parameter name to use in exception.\r\n * @throws Throws an exception if the check fails\r\n */\r\nfunction checkUndefinedOrNumber(val, name) {\r\n if (val !== undefined && (typeof val !== \"number\" || isNaN(val) || !isFinite(val))) {\r\n throw { message: \"'\" + name + \"' must be a number.\" };\r\n }\r\n}\r\n\r\n/** Performs a linear search on the specified array and removes the first instance of 'item'.\r\n * @param {Array} arr - Array to search.\r\n * @param {*} item - Item being sought.\r\n * @returns {Boolean} true if the item was removed otherwise false\r\n */\r\nfunction removeFromArray(arr, item) {\r\n\r\n var i, len;\r\n for (i = 0, len = arr.length; i < len; i++) {\r\n if (arr[i] === item) {\r\n arr.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Estimates the size of an object in bytes.\r\n * Object trees are traversed recursively\r\n * @param {Object} object - Object to determine the size of.\r\n * @returns {Number} Estimated size of the object in bytes.\r\n */\r\nfunction estimateSize(object) {\r\n var size = 0;\r\n var type = typeof object;\r\n\r\n if (type === \"object\" && object) {\r\n for (var name in object) {\r\n size += name.length * 2 + estimateSize(object[name]);\r\n }\r\n } else if (type === \"string\") {\r\n size = object.length * 2;\r\n } else {\r\n size = 8;\r\n }\r\n return size;\r\n}\r\n\r\n/** Snaps low and high indices into page sizes and returns a range.\r\n * @param {Number} lowIndex - Low index to snap to a lower value.\r\n * @param {Number} highIndex - High index to snap to a higher value.\r\n * @param {Number} pageSize - Page size to snap to.\r\n * @returns {Object} A range with (i)ndex and (c)ount of elements.\r\n */\r\nfunction snapToPageBoundaries(lowIndex, highIndex, pageSize) {\r\n lowIndex = Math.floor(lowIndex / pageSize) * pageSize;\r\n highIndex = Math.ceil((highIndex + 1) / pageSize) * pageSize;\r\n return { i: lowIndex, c: highIndex - lowIndex };\r\n}\r\n\r\n// The DataCache is implemented using state machines. The following constants are used to properly\r\n// identify and label the states that these machines transition to.\r\nvar CACHE_STATE_DESTROY = \"destroy\";\r\nvar CACHE_STATE_IDLE = \"idle\";\r\nvar CACHE_STATE_INIT = \"init\";\r\nvar CACHE_STATE_READ = \"read\";\r\nvar CACHE_STATE_PREFETCH = \"prefetch\";\r\nvar CACHE_STATE_WRITE = \"write\";\r\n\r\n// DataCacheOperation state machine states.\r\n// Transitions on operations also depend on the cache current of the cache.\r\nvar OPERATION_STATE_CANCEL = \"cancel\";\r\nvar OPERATION_STATE_END = \"end\";\r\nvar OPERATION_STATE_ERROR = \"error\";\r\nvar OPERATION_STATE_START = \"start\";\r\nvar OPERATION_STATE_WAIT = \"wait\";\r\n\r\n// Destroy state machine states\r\nvar DESTROY_STATE_CLEAR = \"clear\";\r\n\r\n// Read / Prefetch state machine states\r\nvar READ_STATE_DONE = \"done\";\r\nvar READ_STATE_LOCAL = \"local\";\r\nvar READ_STATE_SAVE = \"save\";\r\nvar READ_STATE_SOURCE = \"source\";\r\n\r\n/** Creates a new operation object.\r\n * @class DataCacheOperation\r\n * @param {Function} stateMachine - State machine that describes the specific behavior of the operation.\r\n * @param {DjsDeferred} promise - Promise for requested values.\r\n * @param {Boolean} isCancelable - Whether this operation can be canceled or not.\r\n * @param {Number} index - Index of first item requested.\r\n * @param {Number} count - Count of items requested.\r\n * @param {Array} data - Array with the items requested by the operation.\r\n * @param {Number} pending - Total number of pending prefetch records.\r\n * @returns {DataCacheOperation} A new data cache operation instance.\r\n */\r\nfunction DataCacheOperation(stateMachine, promise, isCancelable, index, count, data, pending) {\r\n\r\n var stateData;\r\n var cacheState;\r\n var that = this;\r\n\r\n that.p = promise;\r\n that.i = index;\r\n that.c = count;\r\n that.d = data;\r\n that.s = OPERATION_STATE_START;\r\n\r\n that.canceled = false;\r\n that.pending = pending;\r\n that.oncomplete = null;\r\n\r\n /** Transitions this operation to the cancel state and sets the canceled flag to true.\r\n * The function is a no-op if the operation is non-cancelable.\r\n * @method DataCacheOperation#cancel\r\n */\r\n that.cancel = function cancel() {\r\n\r\n if (!isCancelable) {\r\n return;\r\n }\r\n\r\n var state = that.s;\r\n if (state !== OPERATION_STATE_ERROR && state !== OPERATION_STATE_END && state !== OPERATION_STATE_CANCEL) {\r\n that.canceled = true;\r\n that.transition(OPERATION_STATE_CANCEL, stateData);\r\n }\r\n };\r\n\r\n /** Transitions this operation to the end state.\r\n * @method DataCacheOperation#complete\r\n */\r\n that.complete = function () {\r\n\r\n djsassert(that.s !== OPERATION_STATE_END, \"DataCacheOperation.complete() - operation is in the end state\", that);\r\n that.transition(OPERATION_STATE_END, stateData);\r\n };\r\n\r\n /** Transitions this operation to the error state.\r\n * @method DataCacheOperation#error\r\n */\r\n that.error = function (err) {\r\n if (!that.canceled) {\r\n djsassert(that.s !== OPERATION_STATE_END, \"DataCacheOperation.error() - operation is in the end state\", that);\r\n djsassert(that.s !== OPERATION_STATE_ERROR, \"DataCacheOperation.error() - operation is in the error state\", that);\r\n that.transition(OPERATION_STATE_ERROR, err);\r\n }\r\n };\r\n\r\n /** Executes the operation's current state in the context of a new cache state.\r\n * @method DataCacheOperation#run\r\n * @param {Object} state - New cache state.\r\n */\r\n that.run = function (state) {\r\n\r\n cacheState = state;\r\n that.transition(that.s, stateData);\r\n };\r\n\r\n /** Transitions this operation to the wait state.\r\n * @method DataCacheOperation#wait\r\n */\r\n that.wait = function (data) {\r\n\r\n djsassert(that.s !== OPERATION_STATE_END, \"DataCacheOperation.wait() - operation is in the end state\", that);\r\n that.transition(OPERATION_STATE_WAIT, data);\r\n };\r\n\r\n /** State machine that describes all operations common behavior.\r\n * @method DataCacheOperation#operationStateMachine\r\n * @param {Object} opTargetState - Operation state to transition to.\r\n * @param {Object} cacheState - Current cache state.\r\n * @param {Object} [data] - Additional data passed to the state.\r\n */\r\n var operationStateMachine = function (opTargetState, cacheState, data) {\r\n\r\n switch (opTargetState) {\r\n case OPERATION_STATE_START:\r\n // Initial state of the operation. The operation will remain in this state until the cache has been fully initialized.\r\n if (cacheState !== CACHE_STATE_INIT) {\r\n stateMachine(that, opTargetState, cacheState, data);\r\n }\r\n break;\r\n\r\n case OPERATION_STATE_WAIT:\r\n // Wait state indicating that the operation is active but waiting for an asynchronous operation to complete.\r\n stateMachine(that, opTargetState, cacheState, data);\r\n break;\r\n\r\n case OPERATION_STATE_CANCEL:\r\n // Cancel state.\r\n stateMachine(that, opTargetState, cacheState, data);\r\n that.fireCanceled();\r\n that.transition(OPERATION_STATE_END);\r\n break;\r\n\r\n case OPERATION_STATE_ERROR:\r\n // Error state. Data is expected to be an object detailing the error condition.\r\n stateMachine(that, opTargetState, cacheState, data);\r\n that.canceled = true;\r\n that.fireRejected(data);\r\n that.transition(OPERATION_STATE_END);\r\n break;\r\n\r\n case OPERATION_STATE_END:\r\n // Final state of the operation.\r\n if (that.oncomplete) {\r\n that.oncomplete(that);\r\n }\r\n if (!that.canceled) {\r\n that.fireResolved();\r\n }\r\n stateMachine(that, opTargetState, cacheState, data);\r\n break;\r\n\r\n default:\r\n // Any other state is passed down to the state machine describing the operation's specific behavior.\r\n\r\n if (true) {\r\n // Check that the state machine actually handled the sate.\r\n var handled = stateMachine(that, opTargetState, cacheState, data);\r\n djsassert(handled, \"Bad operation state: \" + opTargetState + \" cacheState: \" + cacheState, this);\r\n } else {\r\n\r\n stateMachine(that, opTargetState, cacheState, data);\r\n\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n\r\n\r\n /** Transitions this operation to a new state.\r\n * @method DataCacheOperation#transition\r\n * @param {Object} state - State to transition the operation to.\r\n * @param {Object} [data] - \r\n */\r\n that.transition = function (state, data) {\r\n that.s = state;\r\n stateData = data;\r\n operationStateMachine(state, cacheState, data);\r\n };\r\n \r\n return that;\r\n}\r\n\r\n/** Fires a resolved notification as necessary.\r\n * @method DataCacheOperation#fireResolved\r\n */\r\nDataCacheOperation.prototype.fireResolved = function () {\r\n\r\n // Fire the resolve just once.\r\n var p = this.p;\r\n if (p) {\r\n this.p = null;\r\n p.resolve(this.d);\r\n }\r\n};\r\n\r\n/** Fires a rejected notification as necessary.\r\n * @method DataCacheOperation#fireRejected\r\n */\r\nDataCacheOperation.prototype.fireRejected = function (reason) {\r\n\r\n // Fire the rejection just once.\r\n var p = this.p;\r\n if (p) {\r\n this.p = null;\r\n p.reject(reason);\r\n }\r\n};\r\n\r\n/** Fires a canceled notification as necessary.\r\n * @method DataCacheOperation#fireCanceled\r\n */\r\nDataCacheOperation.prototype.fireCanceled = function () {\r\n\r\n this.fireRejected({ canceled: true, message: \"Operation canceled\" });\r\n};\r\n\r\n\r\n/** Creates a data cache for a collection that is efficiently loaded on-demand.\r\n * @class DataCache\r\n * @param options - Options for the data cache, including name, source, pageSize,\r\n * prefetchSize, cacheSize, storage mechanism, and initial prefetch and local-data handler.\r\n * @returns {DataCache} A new data cache instance.\r\n */\r\nfunction DataCache(options) {\r\n\r\n var state = CACHE_STATE_INIT;\r\n var stats = { counts: 0, netReads: 0, prefetches: 0, cacheReads: 0 };\r\n\r\n var clearOperations = [];\r\n var readOperations = [];\r\n var prefetchOperations = [];\r\n\r\n var actualCacheSize = 0; // Actual cache size in bytes.\r\n var allDataLocal = false; // Whether all data is local.\r\n var cacheSize = undefinedDefault(options.cacheSize, 1048576); // Requested cache size in bytes, default 1 MB.\r\n var collectionCount = 0; // Number of elements in the server collection.\r\n var highestSavedPage = 0; // Highest index of all the saved pages.\r\n var highestSavedPageSize = 0; // Item count of the saved page with the highest index.\r\n var overflowed = cacheSize === 0; // If the cache has overflowed (actualCacheSize > cacheSize or cacheSize == 0);\r\n var pageSize = undefinedDefault(options.pageSize, 50); // Number of elements to store per page.\r\n var prefetchSize = undefinedDefault(options.prefetchSize, pageSize); // Number of elements to prefetch from the source when the cache is idling.\r\n var version = \"1.0\";\r\n var cacheFailure;\r\n\r\n var pendingOperations = 0;\r\n\r\n var source = options.source;\r\n if (typeof source === \"string\") {\r\n // Create a new cache source.\r\n source = new cacheSource.ODataCacheSource(options);\r\n }\r\n source.options = options;\r\n\r\n // Create a cache local store.\r\n var store = storeReq.createStore(options.name, options.mechanism);\r\n\r\n var that = this;\r\n\r\n that.onidle = options.idle;\r\n that.stats = stats;\r\n\r\n /** Counts the number of items in the collection.\r\n * @method DataCache#count\r\n * @returns {Object} A promise with the number of items.\r\n */\r\n that.count = function () {\r\n\r\n if (cacheFailure) {\r\n throw cacheFailure;\r\n }\r\n\r\n var deferred = createDeferred();\r\n var canceled = false;\r\n\r\n if (allDataLocal) {\r\n delay(function () {\r\n deferred.resolve(collectionCount);\r\n });\r\n\r\n return deferred.promise();\r\n }\r\n\r\n // TODO: Consider returning the local data count instead once allDataLocal flag is set to true.\r\n var request = source.count(function (count) {\r\n request = null;\r\n stats.counts++;\r\n deferred.resolve(count);\r\n }, function (err) {\r\n request = null;\r\n deferred.reject(extend(err, { canceled: canceled }));\r\n });\r\n\r\n return extend(deferred.promise(), {\r\n\r\n /** Aborts the count operation (used within promise callback)\r\n * @method DataCache#cancelCount\r\n */\r\n cancel: function () {\r\n \r\n if (request) {\r\n canceled = true;\r\n request.abort();\r\n request = null;\r\n }\r\n }\r\n });\r\n };\r\n\r\n /** Cancels all running operations and clears all local data associated with this cache.\r\n * New read requests made while a clear operation is in progress will not be canceled.\r\n * Instead they will be queued for execution once the operation is completed.\r\n * @method DataCache#clear\r\n * @returns {Object} A promise that has no value and can't be canceled.\r\n */\r\n that.clear = function () {\r\n\r\n if (cacheFailure) {\r\n throw cacheFailure;\r\n }\r\n\r\n if (clearOperations.length === 0) {\r\n var deferred = createDeferred();\r\n var op = new DataCacheOperation(destroyStateMachine, deferred, false);\r\n queueAndStart(op, clearOperations);\r\n return deferred.promise();\r\n }\r\n return clearOperations[0].p;\r\n };\r\n\r\n /** Filters the cache data based a predicate.\r\n * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.\r\n * @method DataCache#filterForward\r\n * @param {Number} index - The index of the item to start filtering forward from.\r\n * @param {Number} count - Maximum number of items to include in the result.\r\n * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.\r\n * @returns {DjsDeferred} A promise for an array of results.\r\n */\r\n that.filterForward = function (index, count, predicate) {\r\n return filter(index, count, predicate, false);\r\n };\r\n\r\n /** Filters the cache data based a predicate.\r\n * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.\r\n * @method DataCache#filterBack\r\n * @param {Number} index - The index of the item to start filtering backward from.\r\n * @param {Number} count - Maximum number of items to include in the result.\r\n * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.\r\n * @returns {DjsDeferred} A promise for an array of results.\r\n */\r\n that.filterBack = function (index, count, predicate) {\r\n return filter(index, count, predicate, true);\r\n };\r\n\r\n /** Reads a range of adjacent records.\r\n * New read requests made while a clear operation is in progress will not be canceled.\r\n * Instead they will be queued for execution once the operation is completed.\r\n * @method DataCache#readRange\r\n * @param {Number} index - Zero-based index of record range to read.\r\n * @param {Number} count - Number of records in the range.\r\n * @returns {DjsDeferred} A promise for an array of records; less records may be returned if the\r\n * end of the collection is found.\r\n */\r\n that.readRange = function (index, count) {\r\n\r\n checkZeroGreater(index, \"index\");\r\n checkZeroGreater(count, \"count\");\r\n\r\n if (cacheFailure) {\r\n throw cacheFailure;\r\n }\r\n\r\n var deferred = createDeferred();\r\n\r\n // Merging read operations would be a nice optimization here.\r\n var op = new DataCacheOperation(readStateMachine, deferred, true, index, count, {}, 0);\r\n queueAndStart(op, readOperations);\r\n\r\n return extend(deferred.promise(), {\r\n cancel: function () {\r\n /** Aborts the readRange operation (used within promise callback)\r\n * @method DataCache#cancelReadRange\r\n */\r\n op.cancel();\r\n }\r\n });\r\n };\r\n\r\n /** Creates an Observable object that enumerates all the cache contents.\r\n * @method DataCache#toObservable\r\n * @returns A new Observable object that enumerates all the cache contents.\r\n */\r\n that.ToObservable = that.toObservable = function () {\r\n if ( !utils.inBrowser()) {\r\n throw { message: \"Only in broser supported\" };\r\n }\r\n\r\n if (!window.Rx || !window.Rx.Observable) {\r\n throw { message: \"Rx library not available - include rx.js\" };\r\n }\r\n\r\n if (cacheFailure) {\r\n throw cacheFailure;\r\n }\r\n\r\n //return window.Rx.Observable.create(function (obs) {\r\n return new window.Rx.Observable(function (obs) {\r\n var disposed = false;\r\n var index = 0;\r\n\r\n var errorCallback = function (error) {\r\n if (!disposed) {\r\n obs.onError(error);\r\n }\r\n };\r\n\r\n var successCallback = function (data) {\r\n if (!disposed) {\r\n var i, len;\r\n for (i = 0, len = data.value.length; i < len; i++) {\r\n // The wrapper automatically checks for Dispose\r\n // on the observer, so we don't need to check it here.\r\n //obs.next(data.value[i]);\r\n obs.onNext(data.value[i]);\r\n }\r\n\r\n if (data.value.length < pageSize) {\r\n //obs.completed();\r\n obs.onCompleted();\r\n } else {\r\n index += pageSize;\r\n that.readRange(index, pageSize).then(successCallback, errorCallback);\r\n }\r\n }\r\n };\r\n\r\n that.readRange(index, pageSize).then(successCallback, errorCallback);\r\n\r\n return { Dispose: function () { \r\n obs.dispose(); // otherwise the check isStopped obs.onNext(data.value[i]);\r\n disposed = true; \r\n } };\r\n });\r\n };\r\n\r\n /** Creates a function that handles a callback by setting the cache into failure mode.\r\n * @method DataCache~cacheFailureCallback\r\n * @param {String} message - Message text.\r\n * @returns {Function} Function to use as error callback.\r\n * This function will specifically handle problems with critical store resources\r\n * during cache initialization.\r\n */\r\n var cacheFailureCallback = function (message) {\r\n \r\n\r\n return function (error) {\r\n cacheFailure = { message: message, error: error };\r\n\r\n // Destroy any pending clear or read operations.\r\n // At this point there should be no prefetch operations.\r\n // Count operations will go through but are benign because they\r\n // won't interact with the store.\r\n djsassert(prefetchOperations.length === 0, \"prefetchOperations.length === 0\");\r\n var i, len;\r\n for (i = 0, len = readOperations.length; i < len; i++) {\r\n readOperations[i].fireRejected(cacheFailure);\r\n }\r\n for (i = 0, len = clearOperations.length; i < len; i++) {\r\n clearOperations[i].fireRejected(cacheFailure);\r\n }\r\n\r\n // Null out the operation arrays.\r\n readOperations = clearOperations = null;\r\n };\r\n };\r\n\r\n /** Updates the cache's state and signals all pending operations of the change.\r\n * @method DataCache~changeState\r\n * @param {Object} newState - New cache state.\r\n * This method is a no-op if the cache's current state and the new state are the same.\r\n */\r\n var changeState = function (newState) {\r\n\r\n if (newState !== state) {\r\n state = newState;\r\n var operations = clearOperations.concat(readOperations, prefetchOperations);\r\n var i, len;\r\n for (i = 0, len = operations.length; i < len; i++) {\r\n operations[i].run(state);\r\n }\r\n }\r\n };\r\n\r\n /** Removes all the data stored in the cache.\r\n * @method DataCache~clearStore\r\n * @returns {DjsDeferred} A promise with no value.\r\n */\r\n var clearStore = function () {\r\n djsassert(state === CACHE_STATE_DESTROY || state === CACHE_STATE_INIT, \"DataCache.clearStore() - cache is not on the destroy or initialize state, current sate = \" + state);\r\n\r\n var deferred = new DjsDeferred();\r\n store.clear(function () {\r\n\r\n // Reset the cache settings.\r\n actualCacheSize = 0;\r\n allDataLocal = false;\r\n collectionCount = 0;\r\n highestSavedPage = 0;\r\n highestSavedPageSize = 0;\r\n overflowed = cacheSize === 0;\r\n\r\n // version is not reset, in case there is other state in eg V1.1 that is still around.\r\n\r\n // Reset the cache stats.\r\n stats = { counts: 0, netReads: 0, prefetches: 0, cacheReads: 0 };\r\n that.stats = stats;\r\n\r\n store.close();\r\n deferred.resolve();\r\n }, function (err) {\r\n deferred.reject(err);\r\n });\r\n return deferred;\r\n };\r\n\r\n /** Removes an operation from the caches queues and changes the cache state to idle.\r\n * @method DataCache~dequeueOperation\r\n * @param {DataCacheOperation} operation - Operation to dequeue.\r\n * This method is used as a handler for the operation's oncomplete event.\r\n */\r\n var dequeueOperation = function (operation) {\r\n\r\n var removed = removeFromArray(clearOperations, operation);\r\n if (!removed) {\r\n removed = removeFromArray(readOperations, operation);\r\n if (!removed) {\r\n removeFromArray(prefetchOperations, operation);\r\n }\r\n }\r\n\r\n pendingOperations--;\r\n changeState(CACHE_STATE_IDLE);\r\n };\r\n\r\n /** Requests data from the cache source.\r\n * @method DataCache~fetchPage\r\n * @param {Number} start - Zero-based index of items to request.\r\n * @returns {DjsDeferred} A promise for a page object with (i)ndex, (c)ount, (d)ata.\r\n */\r\n var fetchPage = function (start) {\r\n\r\n djsassert(state !== CACHE_STATE_DESTROY, \"DataCache.fetchPage() - cache is on the destroy state\");\r\n djsassert(state !== CACHE_STATE_IDLE, \"DataCache.fetchPage() - cache is on the idle state\");\r\n\r\n var deferred = new DjsDeferred();\r\n var canceled = false;\r\n\r\n var request = source.read(start, pageSize, function (data) {\r\n var length = getJsonValueArraryLength(data);\r\n var page = { i: start, c: length, d: data };\r\n deferred.resolve(page);\r\n }, function (err) {\r\n deferred.reject(err);\r\n });\r\n\r\n return extend(deferred, {\r\n cancel: function () {\r\n if (request) {\r\n request.abort();\r\n canceled = true;\r\n request = null;\r\n }\r\n }\r\n });\r\n };\r\n\r\n /** Filters the cache data based a predicate.\r\n * @method DataCache~filter\r\n * @param {Number} index - The index of the item to start filtering from.\r\n * @param {Number} count - Maximum number of items to include in the result.\r\n * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.\r\n * @param {Boolean} backwards - True if the filtering should move backward from the specified index, falsey otherwise.\r\n * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.\r\n * @returns {DjsDeferred} A promise for an array of results.\r\n */\r\n var filter = function (index, count, predicate, backwards) {\r\n\r\n index = parseInt10(index);\r\n count = parseInt10(count);\r\n\r\n if (isNaN(index)) {\r\n throw { message: \"'index' must be a valid number.\", index: index };\r\n }\r\n if (isNaN(count)) {\r\n throw { message: \"'count' must be a valid number.\", count: count };\r\n }\r\n\r\n if (cacheFailure) {\r\n throw cacheFailure;\r\n }\r\n\r\n index = Math.max(index, 0);\r\n\r\n var deferred = createDeferred();\r\n var returnData = {};\r\n returnData.value = [];\r\n var canceled = false;\r\n var pendingReadRange = null;\r\n\r\n var readMore = function (readIndex, readCount) {\r\n if (!canceled) {\r\n if (count > 0 && returnData.value.length >= count) {\r\n deferred.resolve(returnData);\r\n } else {\r\n pendingReadRange = that.readRange(readIndex, readCount).then(function (data) {\r\n if (data[\"@odata.context\"] && !returnData[\"@odata.context\"]) {\r\n returnData[\"@odata.context\"] = data[\"@odata.context\"];\r\n }\r\n \r\n for (var i = 0, length = data.value.length; i < length && (count < 0 || returnData.value.length < count); i++) {\r\n var dataIndex = backwards ? length - i - 1 : i;\r\n var item = data.value[dataIndex];\r\n if (predicate(item)) {\r\n var element = {\r\n index: readIndex + dataIndex,\r\n item: item\r\n };\r\n\r\n backwards ? returnData.value.unshift(element) : returnData.value.push(element);\r\n }\r\n }\r\n\r\n // Have we reached the end of the collection?\r\n if ((!backwards && data.value.length < readCount) || (backwards && readIndex <= 0)) {\r\n deferred.resolve(returnData);\r\n } else {\r\n var nextIndex = backwards ? Math.max(readIndex - pageSize, 0) : readIndex + readCount;\r\n readMore(nextIndex, pageSize);\r\n }\r\n }, function (err) {\r\n deferred.reject(err);\r\n });\r\n }\r\n }\r\n };\r\n\r\n // Initially, we read from the given starting index to the next/previous page boundary\r\n var initialPage = snapToPageBoundaries(index, index, pageSize);\r\n var initialIndex = backwards ? initialPage.i : index;\r\n var initialCount = backwards ? index - initialPage.i + 1 : initialPage.i + initialPage.c - index;\r\n readMore(initialIndex, initialCount);\r\n\r\n return extend(deferred.promise(), {\r\n /** Aborts the filter operation (used within promise callback)\r\n * @method DataCache#cancelFilter\r\n */\r\n cancel: function () {\r\n\r\n if (pendingReadRange) {\r\n pendingReadRange.cancel();\r\n }\r\n canceled = true;\r\n }\r\n });\r\n };\r\n\r\n /** Fires an onidle event if any functions are assigned.\r\n * @method DataCache~fireOnIdle\r\n */\r\n var fireOnIdle = function () {\r\n\r\n if (that.onidle && pendingOperations === 0) {\r\n that.onidle();\r\n }\r\n };\r\n\r\n /** Creates and starts a new prefetch operation.\r\n * @method DataCache~prefetch\r\n * @param {Number} start - Zero-based index of the items to prefetch.\r\n * This method is a no-op if any of the following conditions is true:\r\n * 1.- prefetchSize is 0\r\n * 2.- All data has been read and stored locally in the cache.\r\n * 3.- There is already an all data prefetch operation queued.\r\n * 4.- The cache has run out of available space (overflowed).\r\n */\r\n var prefetch = function (start) {\r\n \r\n\r\n if (allDataLocal || prefetchSize === 0 || overflowed) {\r\n return;\r\n }\r\n\r\n djsassert(state === CACHE_STATE_READ, \"DataCache.prefetch() - cache is not on the read state, current state: \" + state);\r\n\r\n if (prefetchOperations.length === 0 || (prefetchOperations[0] && prefetchOperations[0].c !== -1)) {\r\n // Merging prefetch operations would be a nice optimization here.\r\n var op = new DataCacheOperation(prefetchStateMachine, null, true, start, prefetchSize, null, prefetchSize);\r\n queueAndStart(op, prefetchOperations);\r\n }\r\n };\r\n\r\n /** Queues an operation and runs it.\r\n * @param {DataCacheOperation} op - Operation to queue.\r\n * @param {Array} queue - Array that will store the operation.\r\n */\r\n var queueAndStart = function (op, queue) {\r\n\r\n op.oncomplete = dequeueOperation;\r\n queue.push(op);\r\n pendingOperations++;\r\n op.run(state);\r\n };\r\n\r\n /** Requests a page from the cache local store.\r\n * @method DataCache~readPage \r\n * @param {Number} key - Zero-based index of the reuqested page.\r\n * @returns {DjsDeferred} A promise for a found flag and page object with (i)ndex, (c)ount, (d)ata, and (t)icks.\r\n */\r\n var readPage = function (key) {\r\n\r\n djsassert(state !== CACHE_STATE_DESTROY, \"DataCache.readPage() - cache is on the destroy state\");\r\n\r\n var canceled = false;\r\n var deferred = extend(new DjsDeferred(), {\r\n /** Aborts the readPage operation. (used within promise callback)\r\n * @method DataCache#cancelReadPage\r\n */\r\n cancel: function () {\r\n canceled = true;\r\n }\r\n });\r\n\r\n var error = storeFailureCallback(deferred, \"Read page from store failure\");\r\n\r\n store.contains(key, function (contained) {\r\n if (canceled) {\r\n return;\r\n }\r\n if (contained) {\r\n store.read(key, function (_, data) {\r\n if (!canceled) {\r\n deferred.resolve(data !== undefined, data);\r\n }\r\n }, error);\r\n return;\r\n }\r\n deferred.resolve(false);\r\n }, error);\r\n return deferred;\r\n };\r\n\r\n /** Saves a page to the cache local store.\r\n * @method DataCache~savePage \r\n * @param {Number} key - Zero-based index of the requested page.\r\n * @param {Object} page - Object with (i)ndex, (c)ount, (d)ata, and (t)icks.\r\n * @returns {DjsDeferred} A promise with no value.\r\n */\r\n var savePage = function (key, page) {\r\n\r\n djsassert(state !== CACHE_STATE_DESTROY, \"DataCache.savePage() - cache is on the destroy state\");\r\n djsassert(state !== CACHE_STATE_IDLE, \"DataCache.savePage() - cache is on the idle state\");\r\n\r\n var canceled = false;\r\n\r\n var deferred = extend(new DjsDeferred(), {\r\n /** Aborts the savePage operation. (used within promise callback)\r\n * @method DataCache#cancelReadPage\r\n */\r\n cancel: function () {\r\n canceled = true;\r\n }\r\n });\r\n\r\n var error = storeFailureCallback(deferred, \"Save page to store failure\");\r\n\r\n var resolve = function () {\r\n deferred.resolve(true);\r\n };\r\n\r\n if (page.c > 0) {\r\n var pageBytes = estimateSize(page);\r\n overflowed = cacheSize >= 0 && cacheSize < actualCacheSize + pageBytes;\r\n\r\n if (!overflowed) {\r\n store.addOrUpdate(key, page, function () {\r\n updateSettings(page, pageBytes);\r\n saveSettings(resolve, error);\r\n }, error);\r\n } else {\r\n resolve();\r\n }\r\n } else {\r\n updateSettings(page, 0);\r\n saveSettings(resolve, error);\r\n }\r\n return deferred;\r\n };\r\n\r\n /** Saves the cache's current settings to the local store.\r\n * @method DataCache~saveSettings \r\n * @param {Function} success - Success callback.\r\n * @param {Function} error - Errror callback.\r\n */\r\n var saveSettings = function (success, error) {\r\n\r\n var settings = {\r\n actualCacheSize: actualCacheSize,\r\n allDataLocal: allDataLocal,\r\n cacheSize: cacheSize,\r\n collectionCount: collectionCount,\r\n highestSavedPage: highestSavedPage,\r\n highestSavedPageSize: highestSavedPageSize,\r\n pageSize: pageSize,\r\n sourceId: source.identifier,\r\n version: version\r\n };\r\n\r\n store.addOrUpdate(\"__settings\", settings, success, error);\r\n };\r\n\r\n /** Creates a function that handles a store error.\r\n * @method DataCache~storeFailureCallback \r\n * @param {DjsDeferred} deferred - Deferred object to resolve.\r\n * @returns {Function} Function to use as error callback.\r\n \r\n * This function will specifically handle problems when interacting with the store.\r\n */\r\n var storeFailureCallback = function (deferred/*, message*/) {\r\n \r\n\r\n return function (/*error*/) {\r\n // var console = windo1w.console;\r\n // if (console && console.log) {\r\n // console.log(message);\r\n // console.dir(error);\r\n // }\r\n deferred.resolve(false);\r\n };\r\n };\r\n\r\n /** Updates the cache's settings based on a page object.\r\n * @method DataCache~updateSettings \r\n * @param {Object} page - Object with (i)ndex, (c)ount, (d)ata.\r\n * @param {Number} pageBytes - Size of the page in bytes.\r\n */\r\n var updateSettings = function (page, pageBytes) {\r\n\r\n var pageCount = page.c;\r\n var pageIndex = page.i;\r\n\r\n // Detect the collection size.\r\n if (pageCount === 0) {\r\n if (highestSavedPage === pageIndex - pageSize) {\r\n collectionCount = highestSavedPage + highestSavedPageSize;\r\n }\r\n } else {\r\n highestSavedPage = Math.max(highestSavedPage, pageIndex);\r\n if (highestSavedPage === pageIndex) {\r\n highestSavedPageSize = pageCount;\r\n }\r\n actualCacheSize += pageBytes;\r\n if (pageCount < pageSize && !collectionCount) {\r\n collectionCount = pageIndex + pageCount;\r\n }\r\n }\r\n\r\n // Detect the end of the collection.\r\n if (!allDataLocal && collectionCount === highestSavedPage + highestSavedPageSize) {\r\n allDataLocal = true;\r\n }\r\n };\r\n\r\n /** State machine describing the behavior for cancelling a read or prefetch operation.\r\n * @method DataCache~cancelStateMachine \r\n * @param {DataCacheOperation} operation - Operation being run.\r\n * @param {Object} opTargetState - Operation state to transition to.\r\n * @param {Object} cacheState - Current cache state.\r\n * @param {Object} [data] - \r\n * This state machine contains behavior common to read and prefetch operations.\r\n */\r\n var cancelStateMachine = function (operation, opTargetState, cacheState, data) {\r\n \r\n\r\n var canceled = operation.canceled && opTargetState !== OPERATION_STATE_END;\r\n if (canceled) {\r\n if (opTargetState === OPERATION_STATE_CANCEL) {\r\n // Cancel state.\r\n // Data is expected to be any pending request made to the cache.\r\n if (data && data.cancel) {\r\n data.cancel();\r\n }\r\n }\r\n }\r\n return canceled;\r\n };\r\n\r\n /** State machine describing the behavior of a clear operation.\r\n * @method DataCache~destroyStateMachine \r\n * @param {DataCacheOperation} operation - Operation being run.\r\n * @param {Object} opTargetState - Operation state to transition to.\r\n * @param {Object} cacheState - Current cache state.\r\n \r\n * Clear operations have the highest priority and can't be interrupted by other operations; however,\r\n * they will preempt any other operation currently executing.\r\n */\r\n var destroyStateMachine = function (operation, opTargetState, cacheState) {\r\n \r\n\r\n var transition = operation.transition;\r\n\r\n // Signal the cache that a clear operation is running.\r\n if (cacheState !== CACHE_STATE_DESTROY) {\r\n changeState(CACHE_STATE_DESTROY);\r\n return true;\r\n }\r\n\r\n switch (opTargetState) {\r\n case OPERATION_STATE_START:\r\n // Initial state of the operation.\r\n transition(DESTROY_STATE_CLEAR);\r\n break;\r\n\r\n case OPERATION_STATE_END:\r\n // State that signals the operation is done.\r\n fireOnIdle();\r\n break;\r\n\r\n case DESTROY_STATE_CLEAR:\r\n // State that clears all the local data of the cache.\r\n clearStore().then(function () {\r\n // Terminate the operation once the local store has been cleared.\r\n operation.complete();\r\n });\r\n // Wait until the clear request completes.\r\n operation.wait();\r\n break;\r\n\r\n default:\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n /** State machine describing the behavior of a prefetch operation.\r\n * @method DataCache~prefetchStateMachine \r\n * @param {DataCacheOperation} operation - Operation being run.\r\n * @param {Object} opTargetState - Operation state to transition to.\r\n * @param {Object} cacheState - Current cache state.\r\n * @param {Object} [data] - \r\n \r\n * Prefetch operations have the lowest priority and will be interrupted by operations of\r\n * other kinds. A preempted prefetch operation will resume its execution only when the state\r\n * of the cache returns to idle.\r\n * \r\n * If a clear operation starts executing then all the prefetch operations are canceled,\r\n * even if they haven't started executing yet.\r\n */\r\n var prefetchStateMachine = function (operation, opTargetState, cacheState, data) {\r\n \r\n\r\n // Handle cancelation\r\n if (!cancelStateMachine(operation, opTargetState, cacheState, data)) {\r\n\r\n var transition = operation.transition;\r\n\r\n // Handle preemption\r\n if (cacheState !== CACHE_STATE_PREFETCH) {\r\n if (cacheState === CACHE_STATE_DESTROY) {\r\n if (opTargetState !== OPERATION_STATE_CANCEL) {\r\n operation.cancel();\r\n }\r\n } else if (cacheState === CACHE_STATE_IDLE) {\r\n // Signal the cache that a prefetch operation is running.\r\n changeState(CACHE_STATE_PREFETCH);\r\n }\r\n return true;\r\n }\r\n\r\n switch (opTargetState) {\r\n case OPERATION_STATE_START:\r\n // Initial state of the operation.\r\n if (prefetchOperations[0] === operation) {\r\n transition(READ_STATE_LOCAL, operation.i);\r\n }\r\n break;\r\n\r\n case READ_STATE_DONE:\r\n // State that determines if the operation can be resolved or has to\r\n // continue processing.\r\n // Data is expected to be the read page.\r\n var pending = operation.pending;\r\n\r\n if (pending > 0) {\r\n pending -= Math.min(pending, data.c);\r\n }\r\n\r\n // Are we done, or has all the data been stored?\r\n if (allDataLocal || pending === 0 || data.c < pageSize || overflowed) {\r\n operation.complete();\r\n } else {\r\n // Continue processing the operation.\r\n operation.pending = pending;\r\n transition(READ_STATE_LOCAL, data.i + pageSize);\r\n }\r\n break;\r\n\r\n default:\r\n return readSaveStateMachine(operation, opTargetState, cacheState, data, true);\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n /** State machine describing the behavior of a read operation.\r\n * @method DataCache~readStateMachine \r\n * @param {DataCacheOperation} operation - Operation being run.\r\n * @param {Object} opTargetState - Operation state to transition to.\r\n * @param {Object} cacheState - Current cache state.\r\n * @param {Object} [data] - \r\n \r\n * Read operations have a higher priority than prefetch operations, but lower than\r\n * clear operations. They will preempt any prefetch operation currently running\r\n * but will be interrupted by a clear operation.\r\n * \r\n * If a clear operation starts executing then all the currently running\r\n * read operations are canceled. Read operations that haven't started yet will\r\n * wait in the start state until the destory operation finishes.\r\n */\r\n var readStateMachine = function (operation, opTargetState, cacheState, data) {\r\n \r\n\r\n // Handle cancelation\r\n if (!cancelStateMachine(operation, opTargetState, cacheState, data)) {\r\n\r\n var transition = operation.transition;\r\n\r\n // Handle preemption\r\n if (cacheState !== CACHE_STATE_READ && opTargetState !== OPERATION_STATE_START) {\r\n if (cacheState === CACHE_STATE_DESTROY) {\r\n if (opTargetState !== OPERATION_STATE_START) {\r\n operation.cancel();\r\n }\r\n } else if (cacheState !== CACHE_STATE_WRITE) {\r\n // Signal the cache that a read operation is running.\r\n djsassert(state == CACHE_STATE_IDLE || state === CACHE_STATE_PREFETCH, \"DataCache.readStateMachine() - cache is not on the read or idle state.\");\r\n changeState(CACHE_STATE_READ);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n switch (opTargetState) {\r\n case OPERATION_STATE_START:\r\n // Initial state of the operation.\r\n // Wait until the cache is idle or prefetching.\r\n if (cacheState === CACHE_STATE_IDLE || cacheState === CACHE_STATE_PREFETCH) {\r\n // Signal the cache that a read operation is running.\r\n changeState(CACHE_STATE_READ);\r\n if (operation.c >= 0) {\r\n // Snap the requested range to a page boundary.\r\n var range = snapToPageBoundaries(operation.i, operation.c, pageSize);\r\n transition(READ_STATE_LOCAL, range.i);\r\n } else {\r\n transition(READ_STATE_DONE, operation);\r\n }\r\n }\r\n break;\r\n\r\n case READ_STATE_DONE:\r\n // State that determines if the operation can be resolved or has to\r\n // continue processing.\r\n // Data is expected to be the read page.\r\n appendPage(operation, data);\r\n var len = getJsonValueArraryLength(operation.d);\r\n // Are we done?\r\n if (operation.c === len || data.c < pageSize) {\r\n // Update the stats, request for a prefetch operation.\r\n stats.cacheReads++;\r\n prefetch(data.i + data.c);\r\n // Terminate the operation.\r\n operation.complete();\r\n } else {\r\n // Continue processing the operation.\r\n transition(READ_STATE_LOCAL, data.i + pageSize);\r\n }\r\n break;\r\n\r\n default:\r\n return readSaveStateMachine(operation, opTargetState, cacheState, data, false);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /** State machine describing the behavior for reading and saving data into the cache.\r\n * @method DataCache~readSaveStateMachine \r\n * @param {DataCacheOperation} operation - Operation being run.\r\n * @param {Object} opTargetState - Operation state to transition to.\r\n * @param {Object} cacheState - Current cache state.\r\n * @param {Object} [data] - \r\n * @param {Boolean} isPrefetch - Flag indicating whether a read (false) or prefetch (true) operation is running.\r\n * This state machine contains behavior common to read and prefetch operations.\r\n */\r\n var readSaveStateMachine = function (operation, opTargetState, cacheState, data, isPrefetch) {\r\n\r\n var error = operation.error;\r\n var transition = operation.transition;\r\n var wait = operation.wait;\r\n var request;\r\n\r\n switch (opTargetState) {\r\n case OPERATION_STATE_END:\r\n // State that signals the operation is done.\r\n fireOnIdle();\r\n break;\r\n\r\n case READ_STATE_LOCAL:\r\n // State that requests for a page from the local store.\r\n // Data is expected to be the index of the page to request.\r\n request = readPage(data).then(function (found, page) {\r\n // Signal the cache that a read operation is running.\r\n if (!operation.canceled) {\r\n if (found) {\r\n // The page is in the local store, check if the operation can be resolved.\r\n transition(READ_STATE_DONE, page);\r\n } else {\r\n // The page is not in the local store, request it from the source.\r\n transition(READ_STATE_SOURCE, data);\r\n }\r\n }\r\n });\r\n break;\r\n\r\n case READ_STATE_SOURCE:\r\n // State that requests for a page from the cache source.\r\n // Data is expected to be the index of the page to request.\r\n request = fetchPage(data).then(function (page) {\r\n // Signal the cache that a read operation is running.\r\n if (!operation.canceled) {\r\n // Update the stats and save the page to the local store.\r\n if (isPrefetch) {\r\n stats.prefetches++;\r\n } else {\r\n stats.netReads++;\r\n }\r\n transition(READ_STATE_SAVE, page);\r\n }\r\n }, error);\r\n break;\r\n\r\n case READ_STATE_SAVE:\r\n // State that saves a page to the local store.\r\n // Data is expected to be the page to save.\r\n // Write access to the store is exclusive.\r\n if (cacheState !== CACHE_STATE_WRITE) {\r\n changeState(CACHE_STATE_WRITE);\r\n request = savePage(data.i, data).then(function (saved) {\r\n if (!operation.canceled) {\r\n if (!saved && isPrefetch) {\r\n operation.pending = 0;\r\n }\r\n // Check if the operation can be resolved.\r\n transition(READ_STATE_DONE, data);\r\n }\r\n changeState(CACHE_STATE_IDLE);\r\n });\r\n }\r\n break;\r\n\r\n default:\r\n // Unknown state that can't be handled by this state machine.\r\n return false;\r\n }\r\n\r\n if (request) {\r\n // The operation might have been canceled between stack frames do to the async calls.\r\n if (operation.canceled) {\r\n request.cancel();\r\n } else if (operation.s === opTargetState) {\r\n // Wait for the request to complete.\r\n wait(request);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // Initialize the cache.\r\n store.read(\"__settings\", function (_, settings) {\r\n if (assigned(settings)) {\r\n var settingsVersion = settings.version;\r\n if (!settingsVersion || settingsVersion.indexOf(\"1.\") !== 0) {\r\n cacheFailureCallback(\"Unsupported cache store version \" + settingsVersion)();\r\n return;\r\n }\r\n\r\n if (pageSize !== settings.pageSize || source.identifier !== settings.sourceId) {\r\n // The shape or the source of the data was changed so invalidate the store.\r\n clearStore().then(function () {\r\n // Signal the cache is fully initialized.\r\n changeState(CACHE_STATE_IDLE);\r\n }, cacheFailureCallback(\"Unable to clear store during initialization\"));\r\n } else {\r\n // Restore the saved settings.\r\n actualCacheSize = settings.actualCacheSize;\r\n allDataLocal = settings.allDataLocal;\r\n cacheSize = settings.cacheSize;\r\n collectionCount = settings.collectionCount;\r\n highestSavedPage = settings.highestSavedPage;\r\n highestSavedPageSize = settings.highestSavedPageSize;\r\n version = settingsVersion;\r\n\r\n // Signal the cache is fully initialized.\r\n changeState(CACHE_STATE_IDLE);\r\n }\r\n } else {\r\n // This is a brand new cache.\r\n saveSettings(function () {\r\n // Signal the cache is fully initialized.\r\n changeState(CACHE_STATE_IDLE);\r\n }, cacheFailureCallback(\"Unable to write settings during initialization.\"));\r\n }\r\n }, cacheFailureCallback(\"Unable to read settings from store.\"));\r\n\r\n return that;\r\n}\r\n\r\n/** Creates a data cache for a collection that is efficiently loaded on-demand.\r\n * @param options \r\n * Options for the data cache, including name, source, pageSize, TODO check doku\r\n * prefetchSize, cacheSize, storage mechanism, and initial prefetch and local-data handler.\r\n * @returns {DataCache} A new data cache instance.\r\n */\r\nfunction createDataCache (options) {\r\n checkUndefinedGreaterThanZero(options.pageSize, \"pageSize\");\r\n checkUndefinedOrNumber(options.cacheSize, \"cacheSize\");\r\n checkUndefinedOrNumber(options.prefetchSize, \"prefetchSize\");\r\n\r\n if (!assigned(options.name)) {\r\n throw { message: \"Undefined or null name\", options: options };\r\n }\r\n\r\n if (!assigned(options.source)) {\r\n throw { message: \"Undefined source\", options: options };\r\n }\r\n\r\n return new DataCache(options);\r\n}\r\n\r\n\r\n/** estimateSize (see {@link estimateSize}) */\r\nexports.estimateSize = estimateSize;\r\n\r\n/** createDataCache */ \r\nexports.createDataCache = createDataCache;\r\n\r\n\r\n\r\n}, \"source\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n /** @module cache/source */\r\n \r\nvar utils = require(\"./../utils.js\");\r\nvar odataRequest = require(\"./../odata.js\");\r\n\r\nvar parseInt10 = utils.parseInt10;\r\nvar normalizeURICase = utils.normalizeURICase;\r\n\r\n\r\n\r\n\r\n/** Appends the specified escaped query option to the specified URI.\r\n * @param {String} uri - URI to append option to.\r\n * @param {String} queryOption - Escaped query option to append.\r\n */\r\nfunction appendQueryOption(uri, queryOption) {\r\n var separator = (uri.indexOf(\"?\") >= 0) ? \"&\" : \"?\";\r\n return uri + separator + queryOption;\r\n}\r\n\r\n/** Appends the specified segment to the given URI.\r\n * @param {String} uri - URI to append a segment to.\r\n * @param {String} segment - Segment to append.\r\n * @returns {String} The original URI with a new segment appended.\r\n */\r\nfunction appendSegment(uri, segment) {\r\n var index = uri.indexOf(\"?\");\r\n var queryPortion = \"\";\r\n if (index >= 0) {\r\n queryPortion = uri.substr(index);\r\n uri = uri.substr(0, index);\r\n }\r\n\r\n if (uri[uri.length - 1] !== \"/\") {\r\n uri += \"/\";\r\n }\r\n return uri + segment + queryPortion;\r\n}\r\n\r\n/** Builds a request object to GET the specified URI.\r\n * @param {String} uri - URI for request.\r\n * @param {Object} options - Additional options.\r\n */\r\nfunction buildODataRequest(uri, options) {\r\n return {\r\n method: \"GET\",\r\n requestUri: uri,\r\n user: options.user,\r\n password: options.password,\r\n enableJsonpCallback: options.enableJsonpCallback,\r\n callbackParameterName: options.callbackParameterName,\r\n formatQueryString: options.formatQueryString\r\n };\r\n}\r\n\r\n/** Finds the index where the value of a query option starts.\r\n * @param {String} uri - URI to search in.\r\n * @param {String} name - Name to look for.\r\n * @returns {Number} The index where the query option starts.\r\n */\r\nfunction findQueryOptionStart(uri, name) {\r\n var result = -1;\r\n var queryIndex = uri.indexOf(\"?\");\r\n if (queryIndex !== -1) {\r\n var start = uri.indexOf(\"?\" + name + \"=\", queryIndex);\r\n if (start === -1) {\r\n start = uri.indexOf(\"&\" + name + \"=\", queryIndex);\r\n }\r\n if (start !== -1) {\r\n result = start + name.length + 2;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/** Gets data from an OData service.\r\n * @param {String} uri - URI to the OData service.\r\n * @param {Object} options - Object with additional well-known request options.\r\n * @param {Function} success - Success callback.\r\n * @param {Function} error - Error callback.\r\n * @returns {Object} Object with an abort method.\r\n */\r\nfunction queryForData (uri, options, success, error) {\r\n return queryForDataInternal(uri, options, {}, success, error);\r\n}\r\n\r\n/** Gets data from an OData service taking into consideration server side paging.\r\n * @param {String} uri - URI to the OData service.\r\n * @param {Object} options - Object with additional well-known request options.\r\n * @param {Array} data - Array that stores the data provided by the OData service.\r\n * @param {Function} success - Success callback.\r\n * @param {Function} error - Error callback.\r\n * @returns {Object} Object with an abort method.\r\n */\r\nfunction queryForDataInternal(uri, options, data, success, error) {\r\n\r\n var request = buildODataRequest(uri, options);\r\n var currentRequest = odataRequest.request(request, function (newData) {\r\n var nextLink = newData[\"@odata.nextLink\"];\r\n if (nextLink) {\r\n var index = uri.indexOf(\".svc/\", 0);\r\n if (index != -1) {\r\n nextLink = uri.substring(0, index + 5) + nextLink;\r\n }\r\n }\r\n\r\n if (data.value && newData.value) {\r\n data.value = data.value.concat(newData.value);\r\n }\r\n else {\r\n for (var property in newData) {\r\n if (property != \"@odata.nextLink\") {\r\n data[property] = newData[property];\r\n }\r\n }\r\n }\r\n\r\n if (nextLink) {\r\n currentRequest = queryForDataInternal(nextLink, options, data, success, error);\r\n }\r\n else {\r\n success(data);\r\n }\r\n }, error, undefined, options.httpClient, options.metadata);\r\n\r\n return {\r\n abort: function () {\r\n currentRequest.abort();\r\n }\r\n };\r\n}\r\n\r\n/** Creates a data cache source object for requesting data from an OData service.\r\n * @class ODataCacheSource\r\n * @param options - Options for the cache data source.\r\n * @returns {ODataCacheSource} A new data cache source instance.\r\n */\r\nfunction ODataCacheSource (options) {\r\n var that = this;\r\n var uri = options.source;\r\n \r\n that.identifier = normalizeURICase(encodeURI(decodeURI(uri)));\r\n that.options = options;\r\n\r\n /** Gets the number of items in the collection.\r\n * @method ODataCacheSource#count\r\n * @param {Function} success - Success callback with the item count.\r\n * @param {Function} error - Error callback.\r\n * @returns {Object} Request object with an abort method.\r\n */\r\n that.count = function (success, error) {\r\n var options = that.options;\r\n return odataRequest.request(\r\n buildODataRequest(appendSegment(uri, \"$count\"), options),\r\n function (data) {\r\n var count = parseInt10(data.toString());\r\n if (isNaN(count)) {\r\n error({ message: \"Count is NaN\", count: count });\r\n } else {\r\n success(count);\r\n }\r\n }, error, undefined, options.httpClient, options.metadata\r\n );\r\n };\r\n \r\n /** Gets a number of consecutive items from the collection.\r\n * @method ODataCacheSource#read\r\n * @param {Number} index - Zero-based index of the items to retrieve.\r\n * @param {Number} count - Number of items to retrieve.\r\n * @param {Function} success - Success callback with the requested items.\r\n * @param {Function} error - Error callback.\r\n * @returns {Object} Request object with an abort method.\r\n */\r\n that.read = function (index, count, success, error) {\r\n\r\n var queryOptions = \"$skip=\" + index + \"&$top=\" + count;\r\n return queryForData(appendQueryOption(uri, queryOptions), that.options, success, error);\r\n };\r\n\r\n return that;\r\n}\r\n\r\n\r\n\r\n/** ODataCacheSource (see {@link ODataCacheSource}) */\r\nexports.ODataCacheSource = ODataCacheSource;}, \"deferred\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n/** @module odatajs/deferred */\r\n\r\n\r\n\r\n/** Creates a new function to forward a call.\r\n * @param {Object} thisValue - Value to use as the 'this' object.\r\n * @param {String} name - Name of function to forward to.\r\n * @param {Object} returnValue - Return value for the forward call (helps keep identity when chaining calls).\r\n * @returns {Function} A new function that will forward a call.\r\n */\r\nfunction forwardCall(thisValue, name, returnValue) {\r\n return function () {\r\n thisValue[name].apply(thisValue, arguments);\r\n return returnValue;\r\n };\r\n}\r\n\r\n/** Initializes a new DjsDeferred object.\r\n * \r\n * @class DjsDeferred \r\n */\r\n function DjsDeferred() {\r\n this._arguments = undefined;\r\n this._done = undefined;\r\n this._fail = undefined;\r\n this._resolved = false;\r\n this._rejected = false;\r\n}\r\n\r\n\r\nDjsDeferred.prototype = {\r\n\r\n /** Adds success and error callbacks for this deferred object.\r\n * See Compatibility Note A.\r\n * @method DjsDeferred#then\r\n * @param {function} [fulfilledHandler] - Success callback ( may be null)\r\n * @param {function} [errorHandler] - Error callback ( may be null)\r\n */\r\n then: function (fulfilledHandler, errorHandler) {\r\n\r\n if (fulfilledHandler) {\r\n if (!this._done) {\r\n this._done = [fulfilledHandler];\r\n } else {\r\n this._done.push(fulfilledHandler);\r\n }\r\n }\r\n\r\n if (errorHandler) {\r\n if (!this._fail) {\r\n this._fail = [errorHandler];\r\n } else {\r\n this._fail.push(errorHandler);\r\n }\r\n }\r\n\r\n //// See Compatibility Note A in the DjsDeferred constructor.\r\n //// if (!this._next) {\r\n //// this._next = createDeferred();\r\n //// }\r\n //// return this._next.promise();\r\n\r\n if (this._resolved) {\r\n this.resolve.apply(this, this._arguments);\r\n } else if (this._rejected) {\r\n this.reject.apply(this, this._arguments);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /** Invokes success callbacks for this deferred object.\r\n * All arguments are forwarded to success callbacks.\r\n * @method DjsDeferred#resolve\r\n */\r\n resolve: function (/* args */) {\r\n if (this._done) {\r\n var i, len;\r\n for (i = 0, len = this._done.length; i < len; i++) {\r\n //// See Compability Note B - Fulfillment value.\r\n //// var nextValue =\r\n this._done[i].apply(null, arguments);\r\n }\r\n\r\n //// See Compatibility Note A in the DjsDeferred constructor.\r\n //// this._next.resolve(nextValue);\r\n //// delete this._next;\r\n\r\n this._done = undefined;\r\n this._resolved = false;\r\n this._arguments = undefined;\r\n } else {\r\n this._resolved = true;\r\n this._arguments = arguments;\r\n }\r\n },\r\n\r\n /** Invokes error callbacks for this deferred object.\r\n * All arguments are forwarded to error callbacks.\r\n * @method DjsDeferred#reject\r\n */\r\n reject: function (/* args */) {\r\n \r\n if (this._fail) {\r\n var i, len;\r\n for (i = 0, len = this._fail.length; i < len; i++) {\r\n this._fail[i].apply(null, arguments);\r\n }\r\n\r\n this._fail = undefined;\r\n this._rejected = false;\r\n this._arguments = undefined;\r\n } else {\r\n this._rejected = true;\r\n this._arguments = arguments;\r\n }\r\n },\r\n\r\n /** Returns a version of this object that has only the read-only methods available.\r\n * @method DjsDeferred#promise\r\n * @returns An object with only the promise object.\r\n */\r\n\r\n promise: function () {\r\n var result = {};\r\n result.then = forwardCall(this, \"then\", result);\r\n return result;\r\n }\r\n};\r\n\r\n/** Creates a deferred object.\r\n * @returns {DjsDeferred} A new deferred object. If jQuery is installed, then a jQueryDeferred object is returned, which provides a superset of features.\r\n*/\r\nfunction createDeferred() {\r\n if (window.jQuery && window.jQuery.Deferred) {\r\n return new window.jQuery.Deferred();\r\n } else {\r\n return new DjsDeferred();\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n/** createDeferred (see {@link module:datajs/deferred~createDeferred}) */\r\nexports.createDeferred = createDeferred;\r\n\r\n/** DjsDeferred (see {@link DjsDeferred}) */\r\nexports.DjsDeferred = DjsDeferred;}, \"odata\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n /** @module odata */\r\n\r\n// Imports\r\nvar odataUtils = exports.utils = require('./odata/odatautils.js');\r\nvar odataHandler = exports.handler = require('./odata/handler.js');\r\nvar odataMetadata = exports.metadata = require('./odata/metadata.js');\r\nvar odataNet = exports.net = require('./odata/net.js');\r\nvar odataJson = exports.json = require('./odata/json.js');\r\n exports.batch = require('./odata/batch.js');\r\n \r\n\r\n\r\nvar utils = require('./utils.js');\r\nvar assigned = utils.assigned;\r\n\r\nvar defined = utils.defined;\r\nvar throwErrorCallback = utils.throwErrorCallback;\r\n\r\nvar invokeRequest = odataUtils.invokeRequest;\r\nvar MAX_DATA_SERVICE_VERSION = odataHandler.MAX_DATA_SERVICE_VERSION;\r\nvar prepareRequest = odataUtils.prepareRequest;\r\nvar metadataParser = odataMetadata.metadataParser;\r\n\r\n// CONTENT START\r\n\r\nvar handlers = [odataJson.jsonHandler, odataHandler.textHandler];\r\n\r\n/** Dispatches an operation to handlers.\r\n * @param {String} handlerMethod - Name of handler method to invoke.\r\n * @param {Object} requestOrResponse - request/response argument for delegated call.\r\n * @param {Object} context - context argument for delegated call.\r\n */\r\nfunction dispatchHandler(handlerMethod, requestOrResponse, context) {\r\n\r\n var i, len;\r\n for (i = 0, len = handlers.length; i < len && !handlers[i][handlerMethod](requestOrResponse, context); i++) {\r\n }\r\n\r\n if (i === len) {\r\n throw { message: \"no handler for data\" };\r\n }\r\n}\r\n\r\n/** Default success handler for OData.\r\n * @param data - Data to process.\r\n */\r\nexports.defaultSuccess = function (data) {\r\n\r\n window.alert(window.JSON.stringify(data));\r\n};\r\n\r\nexports.defaultError = throwErrorCallback;\r\n\r\nexports.defaultHandler = {\r\n\r\n /** Reads the body of the specified response by delegating to JSON handlers.\r\n * @param response - Response object.\r\n * @param context - Operation context.\r\n */\r\n read: function (response, context) {\r\n\r\n if (response && assigned(response.body) && response.headers[\"Content-Type\"]) {\r\n dispatchHandler(\"read\", response, context);\r\n }\r\n },\r\n\r\n /** Write the body of the specified request by delegating to JSON handlers.\r\n * @param request - Reques tobject.\r\n * @param context - Operation context.\r\n */\r\n write: function (request, context) {\r\n\r\n dispatchHandler(\"write\", request, context);\r\n },\r\n\r\n maxDataServiceVersion: MAX_DATA_SERVICE_VERSION,\r\n accept: \"application/json;q=0.9, */*;q=0.1\"\r\n };\r\n\r\nexports.defaultMetadata = []; //TODO check why is the defaultMetadata an Array? and not an Object.\r\n\r\n/** Reads data from the specified URL.\r\n * @param urlOrRequest - URL to read data from.\r\n * @param {Function} [success] - \r\n * @param {Function} [error] - \r\n * @param {Object} [handler] - \r\n * @param {Object} [httpClient] - \r\n * @param {Object} [metadata] - \r\n */\r\nexports.read = function (urlOrRequest, success, error, handler, httpClient, metadata) {\r\n\r\n var request;\r\n if (urlOrRequest instanceof String || typeof urlOrRequest === \"string\") {\r\n request = { requestUri: urlOrRequest };\r\n } else {\r\n request = urlOrRequest;\r\n }\r\n\r\n return exports.request(request, success, error, handler, httpClient, metadata);\r\n};\r\n\r\n/** Sends a request containing OData payload to a server.\r\n * @param {Object} request - Object that represents the request to be sent.\r\n * @param {Function} [success] - \r\n * @param {Function} [error] - \r\n * @param {Object} [handler] - \r\n * @param {Object} [httpClient] - \r\n * @param {Object} [metadata] - \r\n */\r\nexports.request = function (request, success, error, handler, httpClient, metadata) {\r\n\r\n success = success || exports.defaultSuccess;\r\n error = error || exports.defaultError;\r\n handler = handler || exports.defaultHandler;\r\n httpClient = httpClient || odataNet.defaultHttpClient;\r\n metadata = metadata || exports.defaultMetadata;\r\n\r\n // Augment the request with additional defaults.\r\n request.recognizeDates = utils.defined(request.recognizeDates, odataJson.jsonHandler.recognizeDates);\r\n request.callbackParameterName = utils.defined(request.callbackParameterName, odataNet.defaultHttpClient.callbackParameterName);\r\n request.formatQueryString = utils.defined(request.formatQueryString, odataNet.defaultHttpClient.formatQueryString);\r\n request.enableJsonpCallback = utils.defined(request.enableJsonpCallback, odataNet.defaultHttpClient.enableJsonpCallback);\r\n\r\n // Create the base context for read/write operations, also specifying complete settings.\r\n var context = {\r\n metadata: metadata,\r\n recognizeDates: request.recognizeDates,\r\n callbackParameterName: request.callbackParameterName,\r\n formatQueryString: request.formatQueryString,\r\n enableJsonpCallback: request.enableJsonpCallback\r\n };\r\n\r\n try {\r\n odataUtils.prepareRequest(request, handler, context);\r\n return odataUtils.invokeRequest(request, success, error, handler, httpClient, context);\r\n } catch (err) {\r\n // errors in success handler for sync requests are catched here and result in error handler calls. \r\n // So here we fix this and throw that error further.\r\n if (err.bIsSuccessHandlerError) {\r\n throw err;\r\n } else {\r\n error(err);\r\n }\r\n }\r\n\r\n};\r\n\r\n/** Parses the csdl metadata to ODataJS metatdata format. This method can be used when the metadata is retrieved using something other than odatajs\r\n * @param {string} csdlMetadataDocument - A string that represents the entire csdl metadata.\r\n * @returns {Object} An object that has the representation of the metadata in odatajs format.\r\n */\r\nexports.parseMetadata = function (csdlMetadataDocument) {\r\n\r\n return metadataParser(null, csdlMetadataDocument);\r\n};\r\n\r\n// Configure the batch handler to use the default handler for the batch parts.\r\nexports.batch.batchHandler.partHandler = exports.defaultHandler;\r\nexports.metadataHandler = odataMetadata.metadataHandler;\r\nexports.jsonHandler = odataJson.jsonHandler;\r\n}, \"batch\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n/** @module odata/batch */\r\n\r\nvar utils = require('./../utils.js');\r\nvar odataUtils = require('./odatautils.js');\r\nvar odataHandler = require('./handler.js');\r\n\r\nvar extend = utils.extend;\r\nvar isArray = utils.isArray;\r\nvar trimString = utils.trimString;\r\n\r\nvar contentType = odataHandler.contentType;\r\nvar handler = odataHandler.handler;\r\nvar isBatch = odataUtils.isBatch;\r\nvar MAX_DATA_SERVICE_VERSION = odataHandler.MAX_DATA_SERVICE_VERSION;\r\nvar normalizeHeaders = odataUtils.normalizeHeaders;\r\n//TODO var payloadTypeOf = odata.payloadTypeOf;\r\nvar prepareRequest = odataUtils.prepareRequest;\r\n\r\n\r\n// Imports\r\n\r\n// CONTENT START\r\nvar batchMediaType = \"multipart/mixed\";\r\nvar responseStatusRegex = /^HTTP\\/1\\.\\d (\\d{3}) (.*)$/i;\r\nvar responseHeaderRegex = /^([^()<>@,;:\\\\\"\\/[\\]?={} \\t]+)\\s?:\\s?(.*)/;\r\n\r\n/** Calculates a random 16 bit number and returns it in hexadecimal format.\r\n * @returns {String} A 16-bit number in hex format.\r\n */\r\nfunction hex16() {\r\n\r\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substr(1);\r\n}\r\n\r\n/** Creates a string that can be used as a multipart request boundary.\r\n * @param {String} [prefix] - \r\n * @returns {String} Boundary string of the format: --\r\n */\r\nfunction createBoundary(prefix) {\r\n\r\n return prefix + hex16() + \"-\" + hex16() + \"-\" + hex16();\r\n}\r\n\r\n/** Gets the handler for data serialization of individual requests / responses in a batch.\r\n * @param context - Context used for data serialization.\r\n * @returns Handler object\r\n */\r\nfunction partHandler(context) {\r\n\r\n return context.handler.partHandler;\r\n}\r\n\r\n/** Gets the current boundary used for parsing the body of a multipart response.\r\n * @param context - Context used for parsing a multipart response.\r\n * @returns {String} Boundary string.\r\n */\r\nfunction currentBoundary(context) {\r\n var boundaries = context.boundaries;\r\n return boundaries[boundaries.length - 1];\r\n}\r\n\r\n/** Parses a batch response.\r\n * @param handler - This handler.\r\n * @param {String} text - Batch text.\r\n * @param {Object} context - Object with parsing context.\r\n * @return An object representation of the batch.\r\n */\r\nfunction batchParser(handler, text, context) {\r\n\r\n var boundary = context.contentType.properties[\"boundary\"];\r\n return { __batchResponses: readBatch(text, { boundaries: [boundary], handlerContext: context }) };\r\n}\r\n\r\n/** Serializes a batch object representation into text.\r\n * @param handler - This handler.\r\n * @param {Object} data - Representation of a batch.\r\n * @param {Object} context - Object with parsing context.\r\n * @return An text representation of the batch object; undefined if not applicable.#\r\n */\r\nfunction batchSerializer(handler, data, context) {\r\n\r\n var cType = context.contentType = context.contentType || contentType(batchMediaType);\r\n if (cType.mediaType === batchMediaType) {\r\n return writeBatch(data, context);\r\n }\r\n}\r\n\r\n/** Parses a multipart/mixed response body from from the position defined by the context.\r\n * @param {String} text - Body of the multipart/mixed response.\r\n * @param context - Context used for parsing.\r\n * @return Array of objects representing the individual responses.\r\n */\r\nfunction readBatch(text, context) {\r\n var delimiter = \"--\" + currentBoundary(context);\r\n\r\n // Move beyond the delimiter and read the complete batch\r\n readTo(text, context, delimiter);\r\n\r\n // Ignore the incoming line\r\n readLine(text, context);\r\n\r\n // Read the batch parts\r\n var responses = [];\r\n var partEnd = null;\r\n\r\n while (partEnd !== \"--\" && context.position < text.length) {\r\n var partHeaders = readHeaders(text, context);\r\n var partContentType = contentType(partHeaders[\"Content-Type\"]);\r\n\r\n var changeResponses;\r\n if (partContentType && partContentType.mediaType === batchMediaType) {\r\n context.boundaries.push(partContentType.properties.boundary);\r\n try {\r\n changeResponses = readBatch(text, context);\r\n } catch (e) {\r\n e.response = readResponse(text, context, delimiter);\r\n changeResponses = [e];\r\n }\r\n responses.push({ __changeResponses: changeResponses });\r\n context.boundaries.pop();\r\n readTo(text, context, \"--\" + currentBoundary(context));\r\n } else {\r\n if (!partContentType || partContentType.mediaType !== \"application/http\") {\r\n throw { message: \"invalid MIME part type \" };\r\n }\r\n // Skip empty line\r\n readLine(text, context);\r\n // Read the response\r\n var response = readResponse(text, context, delimiter);\r\n try {\r\n if (response.statusCode >= 200 && response.statusCode <= 299) {\r\n partHandler(context.handlerContext).read(response, context.handlerContext);\r\n } else {\r\n // Keep track of failed responses and continue processing the batch.\r\n response = { message: \"HTTP request failed\", response: response };\r\n }\r\n } catch (e) {\r\n response = e;\r\n }\r\n\r\n responses.push(response);\r\n }\r\n\r\n partEnd = text.substr(context.position, 2);\r\n\r\n // Ignore the incoming line.\r\n readLine(text, context);\r\n }\r\n return responses;\r\n}\r\n\r\n/** Parses the http headers in the text from the position defined by the context.\r\n * @param {String} text - Text containing an http response's headers\r\n * @param context - Context used for parsing.\r\n * @returns Object containing the headers as key value pairs.\r\n * This function doesn't support split headers and it will stop reading when it hits two consecutive line breaks.\r\n*/\r\nfunction readHeaders(text, context) {\r\n var headers = {};\r\n var parts;\r\n var line;\r\n var pos;\r\n\r\n do {\r\n pos = context.position;\r\n line = readLine(text, context);\r\n parts = responseHeaderRegex.exec(line);\r\n if (parts !== null) {\r\n headers[parts[1]] = parts[2];\r\n } else {\r\n // Whatever was found is not a header, so reset the context position.\r\n context.position = pos;\r\n }\r\n } while (line && parts);\r\n\r\n normalizeHeaders(headers);\r\n\r\n return headers;\r\n}\r\n\r\n/** Parses an HTTP response.\r\n * @param {String} text -Text representing the http response.\r\n * @param context optional - Context used for parsing.\r\n * @param {String} delimiter -String used as delimiter of the multipart response parts.\r\n * @return Object representing the http response.\r\n */\r\nfunction readResponse(text, context, delimiter) {\r\n // Read the status line.\r\n var pos = context.position;\r\n var match = responseStatusRegex.exec(readLine(text, context));\r\n\r\n var statusCode;\r\n var statusText;\r\n var headers;\r\n\r\n if (match) {\r\n statusCode = match[1];\r\n statusText = match[2];\r\n headers = readHeaders(text, context);\r\n readLine(text, context);\r\n } else {\r\n context.position = pos;\r\n }\r\n\r\n return {\r\n statusCode: statusCode,\r\n statusText: statusText,\r\n headers: headers,\r\n body: readTo(text, context, \"\\r\\n\" + delimiter)\r\n };\r\n}\r\n\r\n/** Returns a substring from the position defined by the context up to the next line break (CRLF).\r\n * @param {String} text - Input string.\r\n * @param context - Context used for reading the input string.\r\n * @returns {String} Substring to the first ocurrence of a line break or null if none can be found. \r\n */\r\nfunction readLine(text, context) {\r\n\r\n return readTo(text, context, \"\\r\\n\");\r\n}\r\n\r\n/** Returns a substring from the position given by the context up to value defined by the str parameter and increments the position in the context.\r\n * @param {String} text - Input string.\r\n * @param context - Context used for reading the input string.\r\n * @param {String} [str] - Substring to read up to.\r\n * @returns {String} Substring to the first ocurrence of str or the end of the input string if str is not specified. Null if the marker is not found.\r\n */\r\nfunction readTo(text, context, str) {\r\n var start = context.position || 0;\r\n var end = text.length;\r\n if (str) {\r\n end = text.indexOf(str, start);\r\n if (end === -1) {\r\n return null;\r\n }\r\n context.position = end + str.length;\r\n } else {\r\n context.position = end;\r\n }\r\n\r\n return text.substring(start, end);\r\n}\r\n\r\n/** Serializes a batch request object to a string.\r\n * @param data - Batch request object in payload representation format\r\n * @param context - Context used for the serialization\r\n * @returns {String} String representing the batch request\r\n */\r\nfunction writeBatch(data, context) {\r\n if (!isBatch(data)) {\r\n throw { message: \"Data is not a batch object.\" };\r\n }\r\n\r\n var batchBoundary = createBoundary(\"batch_\");\r\n var batchParts = data.__batchRequests;\r\n var batch = \"\";\r\n var i, len;\r\n for (i = 0, len = batchParts.length; i < len; i++) {\r\n batch += writeBatchPartDelimiter(batchBoundary, false) +\r\n writeBatchPart(batchParts[i], context);\r\n }\r\n batch += writeBatchPartDelimiter(batchBoundary, true);\r\n\r\n // Register the boundary with the request content type.\r\n var contentTypeProperties = context.contentType.properties;\r\n contentTypeProperties.boundary = batchBoundary;\r\n\r\n return batch;\r\n}\r\n\r\n/** Creates the delimiter that indicates that start or end of an individual request.\r\n * @param {String} boundary Boundary string used to indicate the start of the request\r\n * @param {Boolean} close - Flag indicating that a close delimiter string should be generated\r\n * @returns {String} Delimiter string\r\n */\r\nfunction writeBatchPartDelimiter(boundary, close) {\r\n var result = \"\\r\\n--\" + boundary;\r\n if (close) {\r\n result += \"--\";\r\n }\r\n\r\n return result + \"\\r\\n\";\r\n}\r\n\r\n/** Serializes a part of a batch request to a string. A part can be either a GET request or\r\n * a change set grouping several CUD (create, update, delete) requests.\r\n * @param part - Request or change set object in payload representation format\r\n * @param context - Object containing context information used for the serialization\r\n * @param {boolean} [nested] - \r\n * @returns {String} String representing the serialized part\r\n * A change set is an array of request objects and they cannot be nested inside other change sets.\r\n */\r\nfunction writeBatchPart(part, context, nested) {\r\n \r\n\r\n var changeSet = part.__changeRequests;\r\n var result;\r\n if (isArray(changeSet)) {\r\n if (nested) {\r\n throw { message: \"Not Supported: change set nested in other change set\" };\r\n }\r\n\r\n var changeSetBoundary = createBoundary(\"changeset_\");\r\n result = \"Content-Type: \" + batchMediaType + \"; boundary=\" + changeSetBoundary + \"\\r\\n\";\r\n var i, len;\r\n for (i = 0, len = changeSet.length; i < len; i++) {\r\n result += writeBatchPartDelimiter(changeSetBoundary, false) +\r\n writeBatchPart(changeSet[i], context, true);\r\n }\r\n\r\n result += writeBatchPartDelimiter(changeSetBoundary, true);\r\n } else {\r\n result = \"Content-Type: application/http\\r\\nContent-Transfer-Encoding: binary\\r\\n\\r\\n\";\r\n var partContext = extend({}, context);\r\n partContext.handler = handler;\r\n partContext.request = part;\r\n partContext.contentType = null;\r\n\r\n prepareRequest(part, partHandler(context), partContext);\r\n result += writeRequest(part);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** Serializes a request object to a string.\r\n * @param request - Request object to serialize\r\n * @returns {String} String representing the serialized request\r\n */\r\nfunction writeRequest(request) {\r\n var result = (request.method ? request.method : \"GET\") + \" \" + request.requestUri + \" HTTP/1.1\\r\\n\";\r\n for (var name in request.headers) {\r\n if (request.headers[name]) {\r\n result = result + name + \": \" + request.headers[name] + \"\\r\\n\";\r\n }\r\n }\r\n\r\n result += \"\\r\\n\";\r\n\r\n if (request.body) {\r\n result += request.body;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n\r\n\r\n/** batchHandler (see {@link module:odata/batch~batchParser}) */\r\nexports.batchHandler = handler(batchParser, batchSerializer, batchMediaType, MAX_DATA_SERVICE_VERSION);\r\n\r\n/** batchSerializer (see {@link module:odata/batch~batchSerializer}) */\r\nexports.batchSerializer = batchSerializer;\r\n\r\n/** writeRequest (see {@link module:odata/batch~writeRequest}) */\r\nexports.writeRequest = writeRequest;}, \"handler\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n/** @module odata/handler */\r\n\r\n\r\nvar utils = require('./../utils.js');\r\nvar oDataUtils = require('./odatautils.js');\r\n\r\n// Imports.\r\nvar assigned = utils.assigned;\r\nvar extend = utils.extend;\r\nvar trimString = utils.trimString;\r\nvar maxVersion = oDataUtils.maxVersion;\r\nvar MAX_DATA_SERVICE_VERSION = \"4.0\";\r\n\r\n/** Parses a string into an object with media type and properties.\r\n * @param {String} str - String with media type to parse.\r\n * @return null if the string is empty; an object with 'mediaType' and a 'properties' dictionary otherwise.\r\n */\r\nfunction contentType(str) {\r\n\r\n if (!str) {\r\n return null;\r\n }\r\n\r\n var contentTypeParts = str.split(\";\");\r\n var properties = {};\r\n\r\n var i, len;\r\n for (i = 1, len = contentTypeParts.length; i < len; i++) {\r\n var contentTypeParams = contentTypeParts[i].split(\"=\");\r\n properties[trimString(contentTypeParams[0])] = contentTypeParams[1];\r\n }\r\n\r\n return { mediaType: trimString(contentTypeParts[0]), properties: properties };\r\n}\r\n\r\n/** Serializes an object with media type and properties dictionary into a string.\r\n * @param contentType - Object with media type and properties dictionary to serialize.\r\n * @return String representation of the media type object; undefined if contentType is null or undefined.\r\n */\r\nfunction contentTypeToString(contentType) {\r\n if (!contentType) {\r\n return undefined;\r\n }\r\n\r\n var result = contentType.mediaType;\r\n var property;\r\n for (property in contentType.properties) {\r\n result += \";\" + property + \"=\" + contentType.properties[property];\r\n }\r\n return result;\r\n}\r\n\r\n/** Creates an object that is going to be used as the context for the handler's parser and serializer.\r\n * @param contentType - Object with media type and properties dictionary.\r\n * @param {String} dataServiceVersion - String indicating the version of the protocol to use.\r\n * @param context - Operation context.\r\n * @param handler - Handler object that is processing a resquest or response.\r\n * @return Context object.\r\n */\r\nfunction createReadWriteContext(contentType, dataServiceVersion, context, handler) {\r\n\r\n var rwContext = {};\r\n extend(rwContext, context);\r\n extend(rwContext, {\r\n contentType: contentType,\r\n dataServiceVersion: dataServiceVersion,\r\n handler: handler\r\n });\r\n\r\n return rwContext;\r\n}\r\n\r\n/** Sets a request header's value. If the header has already a value other than undefined, null or empty string, then this method does nothing.\r\n * @param request - Request object on which the header will be set.\r\n * @param {String} name - Header name.\r\n * @param {String} value - Header value.\r\n */\r\nfunction fixRequestHeader(request, name, value) {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n var headers = request.headers;\r\n if (!headers[name]) {\r\n headers[name] = value;\r\n }\r\n}\r\n\r\n/** Sets the DataServiceVersion header of the request if its value is not yet defined or of a lower version.\r\n * @param request - Request object on which the header will be set.\r\n * @param {String} version - Version value.\r\n * If the request has already a version value higher than the one supplied the this function does nothing.\r\n */\r\nfunction fixDataServiceVersionHeader(request, version) { \r\n\r\n if (request) {\r\n var headers = request.headers;\r\n var dsv = headers[\"OData-Version\"];\r\n headers[\"OData-Version\"] = dsv ? maxVersion(dsv, version) : version;\r\n }\r\n}\r\n\r\n/** Gets the value of a request or response header.\r\n * @param requestOrResponse - Object representing a request or a response.\r\n * @param {String} name - Name of the header to retrieve.\r\n * @returns {String} String value of the header; undefined if the header cannot be found.\r\n */\r\nfunction getRequestOrResponseHeader(requestOrResponse, name) {\r\n\r\n var headers = requestOrResponse.headers;\r\n return (headers && headers[name]) || undefined;\r\n}\r\n\r\n/** Gets the value of the Content-Type header from a request or response.\r\n * @param requestOrResponse - Object representing a request or a response.\r\n * @returns {Object} Object with 'mediaType' and a 'properties' dictionary; null in case that the header is not found or doesn't have a value.\r\n */\r\nfunction getContentType(requestOrResponse) {\r\n\r\n return contentType(getRequestOrResponseHeader(requestOrResponse, \"Content-Type\"));\r\n}\r\n\r\nvar versionRE = /^\\s?(\\d+\\.\\d+);?.*$/;\r\n/** Gets the value of the DataServiceVersion header from a request or response.\r\n * @param requestOrResponse - Object representing a request or a response.\r\n * @returns {String} Data service version; undefined if the header cannot be found.\r\n */\r\nfunction getDataServiceVersion(requestOrResponse) {\r\n\r\n var value = getRequestOrResponseHeader(requestOrResponse, \"OData-Version\");\r\n if (value) {\r\n var matches = versionRE.exec(value);\r\n if (matches && matches.length) {\r\n return matches[1];\r\n }\r\n }\r\n\r\n // Fall through and return undefined.\r\n}\r\n\r\n/** Checks that a handler can process a particular mime type.\r\n * @param handler - Handler object that is processing a resquest or response.\r\n * @param cType - Object with 'mediaType' and a 'properties' dictionary.\r\n * @returns {Boolean} True if the handler can process the mime type; false otherwise.\r\n *\r\n * The following check isn't as strict because if cType.mediaType = application/; it will match an accept value of \"application/xml\";\r\n * however in practice we don't not expect to see such \"suffixed\" mimeTypes for the handlers.\r\n */\r\nfunction handlerAccepts(handler, cType) {\r\n return handler.accept.indexOf(cType.mediaType) >= 0;\r\n}\r\n\r\n/** Invokes the parser associated with a handler for reading the payload of a HTTP response.\r\n * @param handler - Handler object that is processing the response.\r\n * @param {Function} parseCallback - Parser function that will process the response payload.\r\n * @param response - HTTP response whose payload is going to be processed.\r\n * @param context - Object used as the context for processing the response.\r\n * @returns {Boolean} True if the handler processed the response payload and the response.data property was set; false otherwise.\r\n */\r\nfunction handlerRead(handler, parseCallback, response, context) {\r\n\r\n if (!response || !response.headers) {\r\n return false;\r\n }\r\n\r\n var cType = getContentType(response);\r\n var version = getDataServiceVersion(response) || \"\";\r\n var body = response.body;\r\n\r\n if (!assigned(body)) {\r\n return false;\r\n }\r\n\r\n if (handlerAccepts(handler, cType)) {\r\n var readContext = createReadWriteContext(cType, version, context, handler);\r\n readContext.response = response;\r\n response.data = parseCallback(handler, body, readContext);\r\n return response.data !== undefined;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Invokes the serializer associated with a handler for generating the payload of a HTTP request.\r\n * @param handler - Handler object that is processing the request.\r\n * @param {Function} serializeCallback - Serializer function that will generate the request payload.\r\n * @param request - HTTP request whose payload is going to be generated.\r\n * @param context - Object used as the context for serializing the request.\r\n * @returns {Boolean} True if the handler serialized the request payload and the request.body property was set; false otherwise.\r\n */\r\nfunction handlerWrite(handler, serializeCallback, request, context) {\r\n if (!request || !request.headers) {\r\n return false;\r\n }\r\n\r\n var cType = getContentType(request);\r\n var version = getDataServiceVersion(request);\r\n\r\n if (!cType || handlerAccepts(handler, cType)) {\r\n var writeContext = createReadWriteContext(cType, version, context, handler);\r\n writeContext.request = request;\r\n\r\n request.body = serializeCallback(handler, request.data, writeContext);\r\n\r\n if (request.body !== undefined) {\r\n fixDataServiceVersionHeader(request, writeContext.dataServiceVersion || \"4.0\");\r\n\r\n fixRequestHeader(request, \"Content-Type\", contentTypeToString(writeContext.contentType));\r\n fixRequestHeader(request, \"OData-MaxVersion\", handler.maxDataServiceVersion);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Creates a handler object for processing HTTP requests and responses.\r\n * @param {Function} parseCallback - Parser function that will process the response payload.\r\n * @param {Function} serializeCallback - Serializer function that will generate the request payload.\r\n * @param {String} accept - String containing a comma separated list of the mime types that this handler can work with.\r\n * @param {String} maxDataServiceVersion - String indicating the highest version of the protocol that this handler can work with.\r\n * @returns {Object} Handler object.\r\n */\r\nfunction handler(parseCallback, serializeCallback, accept, maxDataServiceVersion) {\r\n\r\n return {\r\n accept: accept,\r\n maxDataServiceVersion: maxDataServiceVersion,\r\n\r\n read: function (response, context) {\r\n return handlerRead(this, parseCallback, response, context);\r\n },\r\n\r\n write: function (request, context) {\r\n return handlerWrite(this, serializeCallback, request, context);\r\n }\r\n };\r\n}\r\n\r\nfunction textParse(handler, body /*, context */) {\r\n return body;\r\n}\r\n\r\nfunction textSerialize(handler, data /*, context */) {\r\n if (assigned(data)) {\r\n return data.toString();\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nexports.textHandler = handler(textParse, textSerialize, \"text/plain\", MAX_DATA_SERVICE_VERSION);\r\nexports.contentType = contentType;\r\nexports.contentTypeToString = contentTypeToString;\r\nexports.handler = handler;\r\nexports.createReadWriteContext = createReadWriteContext;\r\nexports.fixRequestHeader = fixRequestHeader;\r\nexports.getRequestOrResponseHeader = getRequestOrResponseHeader;\r\nexports.getContentType = getContentType;\r\nexports.getDataServiceVersion = getDataServiceVersion;\r\nexports.MAX_DATA_SERVICE_VERSION = MAX_DATA_SERVICE_VERSION;}, \"json\" : function(exports, module, require) {\r\n\r\n/** @module odata/json */\r\n\r\n\r\n\r\nvar utils = require('./../utils.js');\r\nvar oDataUtils = require('./odatautils.js');\r\nvar oDataHandler = require('./handler.js');\r\n\r\nvar odataNs = \"odata\";\r\nvar odataAnnotationPrefix = odataNs + \".\";\r\nvar contextUrlAnnotation = \"@\" + odataAnnotationPrefix + \"context\";\r\n\r\nvar assigned = utils.assigned;\r\nvar defined = utils.defined;\r\nvar isArray = utils.isArray;\r\n//var isDate = utils.isDate;\r\nvar isObject = utils.isObject;\r\n//var normalizeURI = utils.normalizeURI;\r\nvar parseInt10 = utils.parseInt10;\r\nvar getFormatKind = utils.getFormatKind;\r\nvar convertByteArrayToHexString = utils.convertByteArrayToHexString;\r\n\r\n\r\nvar formatDateTimeOffset = oDataUtils.formatDateTimeOffset;\r\nvar formatDuration = oDataUtils.formatDuration;\r\nvar formatNumberWidth = oDataUtils.formatNumberWidth;\r\nvar getCanonicalTimezone = oDataUtils.getCanonicalTimezone;\r\nvar handler = oDataUtils.handler;\r\nvar isComplex = oDataUtils.isComplex;\r\nvar isPrimitive = oDataUtils.isPrimitive;\r\nvar isCollectionType = oDataUtils.isCollectionType;\r\nvar lookupComplexType = oDataUtils.lookupComplexType;\r\nvar lookupEntityType = oDataUtils.lookupEntityType;\r\nvar lookupSingleton = oDataUtils.lookupSingleton;\r\nvar lookupEntitySet = oDataUtils.lookupEntitySet;\r\nvar lookupDefaultEntityContainer = oDataUtils.lookupDefaultEntityContainer;\r\nvar lookupProperty = oDataUtils.lookupProperty;\r\nvar MAX_DATA_SERVICE_VERSION = oDataUtils.MAX_DATA_SERVICE_VERSION;\r\nvar maxVersion = oDataUtils.maxVersion;\r\n\r\nvar isPrimitiveEdmType = oDataUtils.isPrimitiveEdmType;\r\nvar isGeographyEdmType = oDataUtils.isGeographyEdmType;\r\nvar isGeometryEdmType = oDataUtils.isGeometryEdmType;\r\n\r\nvar PAYLOADTYPE_FEED = \"f\";\r\nvar PAYLOADTYPE_ENTRY = \"e\";\r\nvar PAYLOADTYPE_PROPERTY = \"p\";\r\nvar PAYLOADTYPE_COLLECTION = \"c\";\r\nvar PAYLOADTYPE_ENUMERATION_PROPERTY = \"enum\";\r\nvar PAYLOADTYPE_SVCDOC = \"s\";\r\nvar PAYLOADTYPE_ENTITY_REF_LINK = \"erl\";\r\nvar PAYLOADTYPE_ENTITY_REF_LINKS = \"erls\";\r\n\r\nvar PAYLOADTYPE_VALUE = \"v\";\r\n\r\nvar PAYLOADTYPE_DELTA = \"d\";\r\nvar DELTATYPE_FEED = \"f\";\r\nvar DELTATYPE_DELETED_ENTRY = \"de\";\r\nvar DELTATYPE_LINK = \"l\";\r\nvar DELTATYPE_DELETED_LINK = \"dl\";\r\n\r\nvar jsonMediaType = \"application/json\";\r\nvar jsonContentType = oDataHandler.contentType(jsonMediaType);\r\n\r\nvar jsonSerializableMetadata = [\"@odata.id\", \"@odata.type\"];\r\n\r\n\r\n\r\n\r\n\r\n/** Extend JSON OData payload with metadata\r\n * @param handler - This handler.\r\n * @param text - Payload text (this parser also handles pre-parsed objects).\r\n * @param {Object} context - Object with parsing context.\r\n * @return An object representation of the OData payload.\r\n */\r\nfunction jsonParser(handler, text, context) {\r\n var recognizeDates = defined(context.recognizeDates, handler.recognizeDates);\r\n var model = context.metadata;\r\n var json = (typeof text === \"string\") ? JSON.parse(text) : text;\r\n var metadataContentType;\r\n if (assigned(context.contentType) && assigned(context.contentType.properties)) {\r\n metadataContentType = context.contentType.properties[\"odata.metadata\"]; //TODO convert to lower before comparism\r\n }\r\n\r\n var payloadFormat = getFormatKind(metadataContentType, 1); // none: 0, minimal: 1, full: 2\r\n\r\n // No errors should be throw out if we could not parse the json payload, instead we should just return the original json object.\r\n if (payloadFormat === 0) {\r\n return json;\r\n }\r\n else if (payloadFormat === 1) {\r\n return addMinimalMetadataToJsonPayload(json, model, recognizeDates);\r\n }\r\n else if (payloadFormat === 2) {\r\n // to do: using the EDM Model to get the type of each property instead of just guessing.\r\n return addFullMetadataToJsonPayload(json, model, recognizeDates);\r\n }\r\n else {\r\n return json;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// The regular expression corresponds to something like this:\r\n// /Date(123+60)/\r\n//\r\n// This first number is date ticks, the + may be a - and is optional,\r\n// with the second number indicating a timezone offset in minutes.\r\n//\r\n// On the wire, the leading and trailing forward slashes are\r\n// escaped without being required to so the chance of collisions is reduced;\r\n// however, by the time we see the objects, the characters already\r\n// look like regular forward slashes.\r\nvar jsonDateRE = /^\\/Date\\((-?\\d+)(\\+|-)?(\\d+)?\\)\\/$/;\r\n\r\n\r\n// Some JSON implementations cannot produce the character sequence \\/\r\n// which is needed to format DateTime and DateTimeOffset into the\r\n// JSON string representation defined by the OData protocol.\r\n// See the history of this file for a candidate implementation of\r\n// a 'formatJsonDateString' function.\r\n\r\n\r\nvar jsonReplacer = function (_, value) {\r\n /// JSON replacer function for converting a value to its JSON representation.\r\n /// Value to convert.\r\n /// JSON representation of the input value.\r\n /// \r\n /// This method is used during JSON serialization and invoked only by the JSON.stringify function.\r\n /// It should never be called directly.\r\n /// \r\n\r\n if (value && value.__edmType === \"Edm.Time\") {\r\n return formatDuration(value);\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\n/** Serializes a ODataJs payload structure to the wire format which can be send to the server\r\n * @param handler - This handler.\r\n * @param data - Data to serialize.\r\n * @param {Object} context - Object with serialization context.\r\n * @returns {String} The string representation of data.\r\n */\r\nfunction jsonSerializer(handler, data, context) {\r\n\r\n var dataServiceVersion = context.dataServiceVersion || \"4.0\";\r\n var cType = context.contentType = context.contentType || jsonContentType;\r\n\r\n if (cType && cType.mediaType === jsonContentType.mediaType) {\r\n context.dataServiceVersion = maxVersion(dataServiceVersion, \"4.0\");\r\n var newdata = formatJsonRequestPayload(data);\r\n if (newdata) {\r\n return JSON.stringify(newdata,jsonReplacer);\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n\r\n\r\n\r\n/** Convert OData objects for serialisation in to a new data structure\r\n * @param data - Data to serialize.\r\n * @returns {String} The string representation of data.\r\n */\r\nfunction formatJsonRequestPayload(data) {\r\n if (!data) {\r\n return data;\r\n }\r\n\r\n if (isPrimitive(data)) {\r\n return data;\r\n }\r\n\r\n if (isArray(data)) {\r\n var newArrayData = [];\r\n var i, len;\r\n for (i = 0, len = data.length; i < len; i++) {\r\n newArrayData[i] = formatJsonRequestPayload(data[i]);\r\n }\r\n\r\n return newArrayData;\r\n }\r\n\r\n var newdata = {};\r\n for (var property in data) {\r\n if (isJsonSerializableProperty(property)) {\r\n newdata[property] = formatJsonRequestPayload(data[property]);\r\n }\r\n }\r\n\r\n return newdata;\r\n}\r\n\r\n/** Determine form the attribute name if the attribute is a serializable property\r\n * @param attribute\r\n * @returns {boolean}\r\n */\r\nfunction isJsonSerializableProperty(attribute) {\r\n if (!attribute) {\r\n return false;\r\n }\r\n\r\n if (attribute.indexOf(\"@odata.\") == -1) {\r\n return true;\r\n }\r\n\r\n var i, len;\r\n for (i = 0, len = jsonSerializableMetadata.length; i < len; i++) {\r\n var name = jsonSerializableMetadata[i];\r\n if (attribute.indexOf(name) != -1) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Creates an object containing information for the json payload.\r\n * @param {String} kind - JSON payload kind\r\n * @param {String} type - Type name of the JSON payload.\r\n * @returns {Object} Object with kind and type fields.\r\n */\r\nfunction jsonMakePayloadInfo(kind, type) {\r\n return { kind: kind, type: type || null };\r\n}\r\n\r\n\r\n\r\n/** Add metadata to an JSON payload complex object containing full metadata\r\n * @param {Object} data - Data structure to be extended\r\n * @param {Object} model - Metadata model\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n */\r\nfunction addFullMetadataToJsonPayload(data, model, recognizeDates) {\r\n var type;\r\n if (utils.isObject(data)) {\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n if (key.indexOf('@') === -1) {\r\n if (utils.isArray(data[key])) {\r\n for (var i = 0; i < data[key].length; ++i) {\r\n addFullMetadataToJsonPayload(data[key][i], model, recognizeDates);\r\n }\r\n } else if (utils.isObject(data[key])) {\r\n if (data[key] !== null) {\r\n //don't step into geo.. objects\r\n type = data[key+'@odata.type'];\r\n if (!type) {\r\n //type unknown\r\n addFullMetadataToJsonPayload(data[key], model, recognizeDates);\r\n } else {\r\n type = type.substring(1);\r\n if (isGeographyEdmType(type) || isGeometryEdmType(type)) {\r\n // don't add type info for geo* types\r\n } else {\r\n addFullMetadataToJsonPayload(data[key], model, recognizeDates);\r\n }\r\n }\r\n }\r\n } else {\r\n type = data[key + '@odata.type'];\r\n\r\n // On .Net OData library, some basic EDM type is omitted, e.g. Edm.String, Edm.Int, and etc.\r\n // For the full metadata payload, we need to full fill the @data.type for each property if it is missing.\r\n // We do this is to help the OlingoJS consumers to easily get the type of each property.\r\n if (!assigned(type)) {\r\n // Guessing the \"type\" from the type of the value is not the right way here.\r\n // To do: we need to get the type from metadata instead of guessing.\r\n var typeFromObject = typeof data[key];\r\n if (typeFromObject === 'string') {\r\n addType(data, key, 'String');\r\n } else if (typeFromObject === 'boolean') {\r\n addType(data, key, 'Boolean');\r\n } else if (typeFromObject === 'number') {\r\n if (data[key] % 1 === 0) { // has fraction\r\n addType(data, key, 'Int32'); // the biggst integer\r\n } else {\r\n addType(data, key, 'Decimal'); // the biggst float single,doulbe,decimal\r\n }\r\n }\r\n }\r\n else {\r\n if (recognizeDates) {\r\n convertDatesNoEdm(data, key, type.substring(1));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n}\r\n\r\n/** Loop through the properties of an JSON payload object, look up the type info of the property and call\r\n * the appropriate add*MetadataToJsonPayloadObject function\r\n * @param {Object} data - Data structure to be extended\r\n * @param {String} objectInfoType - Information about the data (name,type,typename,...)\r\n * @param {String} baseURI - Base Url\r\n * @param {Object} model - Metadata model\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n */\r\nfunction checkProperties(data, objectInfoType, baseURI, model, recognizeDates) {\r\n for (var name in data) {\r\n if (name.indexOf(\"@\") === -1) {\r\n var curType = objectInfoType;\r\n var propertyValue = data[name];\r\n var property = lookupProperty(curType.property,name); //TODO SK add check for parent type\r\n\r\n while (( property === null) && (curType.baseType !== undefined)) {\r\n curType = lookupEntityType(curType.baseType, model);\r\n property = lookupProperty(curType.property,name);\r\n }\r\n\r\n if ( isArray(propertyValue)) {\r\n //data[name+'@odata.type'] = '#' + property.type;\r\n if (isCollectionType(property.type)) {\r\n addTypeColNoEdm(data,name,property.type.substring(11,property.type.length-1));\r\n } else {\r\n addTypeNoEdm(data,name,property.type);\r\n }\r\n\r\n\r\n for ( var i = 0; i < propertyValue.length; i++) {\r\n addMetadataToJsonMinimalPayloadComplex(propertyValue[i], property, baseURI, model, recognizeDates);\r\n }\r\n } else if (isObject(propertyValue) && (propertyValue !== null)) {\r\n addMetadataToJsonMinimalPayloadComplex(propertyValue, property, baseURI, model, recognizeDates);\r\n } else {\r\n //data[name+'@odata.type'] = '#' + property.type;\r\n addTypeNoEdm(data,name,property.type);\r\n if (recognizeDates) {\r\n convertDates(data, name, property.type);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/** Add metadata to an JSON payload object containing minimal metadata\r\n * @param {Object} data - Json response payload object\r\n * @param {Object} model - Object describing an OData conceptual schema\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n * @returns {Object} Object in the library's representation.\r\n */\r\nfunction addMinimalMetadataToJsonPayload(data, model, recognizeDates) {\r\n\r\n if (!assigned(model) || isArray(model)) {\r\n return data;\r\n }\r\n\r\n var baseURI = data[contextUrlAnnotation];\r\n var payloadInfo = createPayloadInfo(data, model);\r\n\r\n switch (payloadInfo.detectedPayloadKind) {\r\n\r\n case PAYLOADTYPE_VALUE:\r\n if (payloadInfo.type !== null) {\r\n return addMetadataToJsonMinimalPayloadEntity(data, payloadInfo, baseURI, model, recognizeDates);\r\n } else {\r\n return addTypeNoEdm(data,'value', payloadInfo.typeName);\r\n }\r\n\r\n case PAYLOADTYPE_FEED:\r\n return addMetadataToJsonMinimalPayloadFeed(data, model, payloadInfo, baseURI, recognizeDates);\r\n\r\n case PAYLOADTYPE_ENTRY:\r\n return addMetadataToJsonMinimalPayloadEntity(data, payloadInfo, baseURI, model, recognizeDates);\r\n\r\n case PAYLOADTYPE_COLLECTION:\r\n return addMetadataToJsonMinimalPayloadCollection(data, model, payloadInfo, baseURI, recognizeDates);\r\n\r\n case PAYLOADTYPE_PROPERTY:\r\n if (payloadInfo.type !== null) {\r\n return addMetadataToJsonMinimalPayloadEntity(data, payloadInfo, baseURI, model, recognizeDates);\r\n } else {\r\n return addTypeNoEdm(data,'value', payloadInfo.typeName);\r\n }\r\n\r\n case PAYLOADTYPE_SVCDOC:\r\n return data;\r\n\r\n case PAYLOADTYPE_LINKS:\r\n return data;\r\n }\r\n\r\n return data;\r\n}\r\n\r\n/** Add metadata to an JSON payload feed object containing minimal metadata\r\n * @param {Object} data - Data structure to be extended\r\n * @param {Object} model - Metadata model\r\n * @param {String} feedInfo - Information about the data (name,type,typename,...)\r\n * @param {String} baseURI - Base Url\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n */\r\nfunction addMetadataToJsonMinimalPayloadFeed(data, model, feedInfo, baseURI, recognizeDates) {\r\n var entries = [];\r\n var items = data.value;\r\n var i,len;\r\n var entry;\r\n for (i = 0, len = items.length; i < len; i++) {\r\n var item = items[i];\r\n if ( defined(item['@odata.type'])) { // in case of mixed feeds\r\n var typeName = item['@odata.type'].substring(1);\r\n var type = lookupEntityType( typeName, model);\r\n var entryInfo = {\r\n contentTypeOdata : feedInfo.contentTypeOdata,\r\n detectedPayloadKind : feedInfo.detectedPayloadKind,\r\n name : feedInfo.name,\r\n type : type,\r\n typeName : typeName\r\n };\r\n\r\n entry = addMetadataToJsonMinimalPayloadEntity(item, entryInfo, baseURI, model, recognizeDates);\r\n } else {\r\n entry = addMetadataToJsonMinimalPayloadEntity(item, feedInfo, baseURI, model, recognizeDates);\r\n }\r\n\r\n entries.push(entry);\r\n }\r\n data.value = entries;\r\n return data;\r\n}\r\n\r\n\r\n/** Add metadata to an JSON payload entity object containing minimal metadata\r\n * @param {Object} data - Data structure to be extended\r\n * @param {String} objectInfo - Information about the data (name,type,typename,...)\r\n * @param {String} baseURI - Base Url\r\n * @param {Object} model - Metadata model\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n */\r\nfunction addMetadataToJsonMinimalPayloadEntity(data, objectInfo, baseURI, model, recognizeDates) {\r\n addType(data,'',objectInfo.typeName);\r\n\r\n var keyType = objectInfo.type;\r\n while ((defined(keyType)) && ( keyType.key === undefined) && (keyType.baseType !== undefined)) {\r\n keyType = lookupEntityType(keyType.baseType, model);\r\n }\r\n\r\n if (keyType.key !== undefined) {\r\n var lastIdSegment = objectInfo.name + jsonGetEntryKey(data, keyType);\r\n data['@odata.id'] = baseURI.substring(0, baseURI.lastIndexOf(\"$metadata\")) + lastIdSegment;\r\n data['@odata.editLink'] = lastIdSegment;\r\n }\r\n\r\n //var serviceURI = baseURI.substring(0, baseURI.lastIndexOf(\"$metadata\"));\r\n\r\n checkProperties(data, objectInfo.type, baseURI, model, recognizeDates);\r\n\r\n return data;\r\n}\r\n\r\n/** Add metadata to an JSON payload complex object containing minimal metadata\r\n * @param {Object} data - Data structure to be extended\r\n * @param {String} property - Information about the data (name,type,typename,...)\r\n * @param {String} baseURI - Base Url\r\n * @param {Object} model - Metadata model\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n */\r\nfunction addMetadataToJsonMinimalPayloadComplex(data, property, baseURI, model, recognizeDates) {\r\n var type = property.type;\r\n if (isCollectionType(property.type)) {\r\n type =property.type.substring(11,property.type.length-1);\r\n }\r\n\r\n addType(data,'',property.type);\r\n\r\n var propertyType = lookupComplexType(type, model);\r\n if (propertyType === null) {\r\n return; //TODO check what to do if the type is not known e.g. type #GeometryCollection\r\n }\r\n\r\n checkProperties(data, propertyType, baseURI, model, recognizeDates);\r\n}\r\n\r\n/** Add metadata to an JSON payload collection object containing minimal metadata\r\n * @param {Object} data - Data structure to be extended\r\n * @param {Object} model - Metadata model\r\n * @param {String} collectionInfo - Information about the data (name,type,typename,...)\r\n * @param {String} baseURI - Base Url\r\n * @param {Boolean} recognizeDates - Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.\r\n */\r\nfunction addMetadataToJsonMinimalPayloadCollection(data, model, collectionInfo, baseURI, recognizeDates) {\r\n\r\n addTypeColNoEdm(data,'', collectionInfo.typeName);\r\n\r\n if (collectionInfo.type !== null) {\r\n var entries = [];\r\n\r\n var items = data.value;\r\n var i,len;\r\n var entry;\r\n for (i = 0, len = items.length; i < len; i++) {\r\n var item = items[i];\r\n if ( defined(item['@odata.type'])) { // in case of mixed collections\r\n var typeName = item['@odata.type'].substring(1);\r\n var type = lookupEntityType( typeName, model);\r\n var entryInfo = {\r\n contentTypeOdata : collectionInfo.contentTypeOdata,\r\n detectedPayloadKind : collectionInfo.detectedPayloadKind,\r\n name : collectionInfo.name,\r\n type : type,\r\n typeName : typeName\r\n };\r\n\r\n entry = addMetadataToJsonMinimalPayloadEntity(item, entryInfo, baseURI, model, recognizeDates);\r\n } else {\r\n entry = addMetadataToJsonMinimalPayloadEntity(item, collectionInfo, baseURI, model, recognizeDates);\r\n }\r\n\r\n entries.push(entry);\r\n }\r\n data.value = entries;\r\n }\r\n return data;\r\n}\r\n\r\n/** Add an OData type tag to an JSON payload object\r\n * @param {Object} data - Data structure to be extended\r\n * @param {String} name - Name of the property whose type is set\r\n * @param {String} value - Type name\r\n */\r\nfunction addType(data, name, value ) {\r\n var fullName = name + '@odata.type';\r\n\r\n if ( data[fullName] === undefined) {\r\n data[fullName] = '#' + value;\r\n }\r\n}\r\n\r\n/** Add an OData type tag to an JSON payload object collection (without \"Edm.\" namespace)\r\n * @param {Object} data - Data structure to be extended\r\n * @param {String} name - Name of the property whose type is set\r\n * @param {String} typeName - Type name\r\n */\r\nfunction addTypeColNoEdm(data, name, typeName ) {\r\n var fullName = name + '@odata.type';\r\n\r\n if ( data[fullName] === undefined) {\r\n if ( typeName.substring(0,4)==='Edm.') {\r\n data[fullName] = '#Collection('+typeName.substring(4)+ ')';\r\n } else {\r\n data[fullName] = '#Collection('+typeName+ ')';\r\n }\r\n }\r\n}\r\n\r\n\r\n/** Add an OData type tag to an JSON payload object (without \"Edm.\" namespace)\r\n * @param {Object} data - Data structure to be extended\r\n * @param {String} name - Name of the property whose type is set\r\n * @param {String} value - Type name\r\n */\r\nfunction addTypeNoEdm(data, name, value ) {\r\n var fullName = name + '@odata.type';\r\n\r\n if ( data[fullName] === undefined) {\r\n if ( value.substring(0,4)==='Edm.') {\r\n data[fullName] = '#' + value.substring(4);\r\n } else {\r\n data[fullName] = '#' + value;\r\n }\r\n }\r\n return data;\r\n}\r\n/** Convert the date/time format of an property from the JSON payload object (without \"Edm.\" namespace)\r\n * @param {Object} data - Data structure to be extended\r\n * @param propertyName - Name of the property to be changed\r\n * @param type - Type\r\n */\r\nfunction convertDates(data, propertyName,type) {\r\n if (type === 'Edm.Date') {\r\n data[propertyName] = oDataUtils.parseDate(data[propertyName], true);\r\n } else if (type === 'Edm.DateTimeOffset') {\r\n data[propertyName] = oDataUtils.parseDateTimeOffset(data[propertyName], true);\r\n } else if (type === 'Edm.Duration') {\r\n data[propertyName] = oDataUtils.parseDuration(data[propertyName], true);\r\n } else if (type === 'Edm.Time') {\r\n data[propertyName] = oDataUtils.parseTime(data[propertyName], true);\r\n }\r\n}\r\n\r\n/** Convert the date/time format of an property from the JSON payload object\r\n * @param {Object} data - Data structure to be extended\r\n * @param propertyName - Name of the property to be changed\r\n * @param type - Type\r\n */\r\nfunction convertDatesNoEdm(data, propertyName,type) {\r\n if (type === 'Date') {\r\n data[propertyName] = oDataUtils.parseDate(data[propertyName], true);\r\n } else if (type === 'DateTimeOffset') {\r\n data[propertyName] = oDataUtils.parseDateTimeOffset(data[propertyName], true);\r\n } else if (type === 'Duration') {\r\n data[propertyName] = oDataUtils.parseDuration(data[propertyName], true);\r\n } else if (type === 'Time') {\r\n data[propertyName] = oDataUtils.parseTime(data[propertyName], true);\r\n }\r\n}\r\n\r\n/** Formats a value according to Uri literal format\r\n * @param value - Value to be formatted.\r\n * @param type - Edm type of the value\r\n * @returns {string} Value after formatting\r\n */\r\nfunction formatLiteral(value, type) {\r\n\r\n value = \"\" + formatRawLiteral(value, type);\r\n value = encodeURIComponent(value.replace(\"'\", \"''\"));\r\n switch ((type)) {\r\n case \"Edm.Binary\":\r\n return \"X'\" + value + \"'\";\r\n case \"Edm.DateTime\":\r\n return \"datetime\" + \"'\" + value + \"'\";\r\n case \"Edm.DateTimeOffset\":\r\n return \"datetimeoffset\" + \"'\" + value + \"'\";\r\n case \"Edm.Decimal\":\r\n return value + \"M\";\r\n case \"Edm.Guid\":\r\n return \"guid\" + \"'\" + value + \"'\";\r\n case \"Edm.Int64\":\r\n return value + \"L\";\r\n case \"Edm.Float\":\r\n return value + \"f\";\r\n case \"Edm.Double\":\r\n return value + \"D\";\r\n case \"Edm.Geography\":\r\n return \"geography\" + \"'\" + value + \"'\";\r\n case \"Edm.Geometry\":\r\n return \"geometry\" + \"'\" + value + \"'\";\r\n case \"Edm.Time\":\r\n return \"time\" + \"'\" + value + \"'\";\r\n case \"Edm.String\":\r\n return \"'\" + value + \"'\";\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\n/** convert raw byteArray to hexString if the property is an binary property\r\n * @param value - Value to be formatted.\r\n * @param type - Edm type of the value\r\n * @returns {string} Value after formatting\r\n */\r\nfunction formatRawLiteral(value, type) {\r\n switch (type) {\r\n case \"Edm.Binary\":\r\n return convertByteArrayToHexString(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\n/** Formats the given minutes into (+/-)hh:mm format.\r\n * @param {Number} minutes - Number of minutes to format.\r\n * @returns {String} The minutes in (+/-)hh:mm format.\r\n */\r\nfunction minutesToOffset(minutes) {\r\n\r\n var sign;\r\n if (minutes < 0) {\r\n sign = \"-\";\r\n minutes = -minutes;\r\n } else {\r\n sign = \"+\";\r\n }\r\n\r\n var hours = Math.floor(minutes / 60);\r\n minutes = minutes - (60 * hours);\r\n\r\n return sign + formatNumberWidth(hours, 2) + \":\" + formatNumberWidth(minutes, 2);\r\n}\r\n\r\n/** Parses the JSON Date representation into a Date object.\r\n * @param {String} value - String value.\r\n * @returns {Date} A Date object if the value matches one; falsy otherwise.\r\n */\r\nfunction parseJsonDateString(value) {\r\n\r\n var arr = value && jsonDateRE.exec(value);\r\n if (arr) {\r\n // 0 - complete results; 1 - ticks; 2 - sign; 3 - minutes\r\n var result = new Date(parseInt10(arr[1]));\r\n if (arr[2]) {\r\n var mins = parseInt10(arr[3]);\r\n if (arr[2] === \"-\") {\r\n mins = -mins;\r\n }\r\n\r\n // The offset is reversed to get back the UTC date, which is\r\n // what the API will eventually have.\r\n var current = result.getUTCMinutes();\r\n result.setUTCMinutes(current - mins);\r\n result.__edmType = \"Edm.DateTimeOffset\";\r\n result.__offset = minutesToOffset(mins);\r\n }\r\n if (!isNaN(result.valueOf())) {\r\n return result;\r\n }\r\n }\r\n\r\n // Allow undefined to be returned.\r\n}\r\n\r\n/** Creates an object containing information for the context\r\n * @param {String} fragments - Uri fragment\r\n * @param {Object} model - Object describing an OData conceptual schema\r\n * @returns {Object} type(optional) object containing type information for entity- and complex-types ( null if a typeName is a primitive)\r\n */\r\nfunction parseContextUriFragment( fragments, model ) {\r\n var ret = {};\r\n\r\n if (fragments.indexOf('/') === -1 ) {\r\n if (fragments.length === 0) {\r\n // Capter 10.1\r\n ret.detectedPayloadKind = PAYLOADTYPE_SVCDOC;\r\n return ret;\r\n } else if (fragments === 'Edm.Null') {\r\n // Capter 10.15\r\n ret.detectedPayloadKind = PAYLOADTYPE_VALUE;\r\n ret.isNullProperty = true;\r\n return ret;\r\n } else if (fragments === 'Collection($ref)') {\r\n // Capter 10.11\r\n ret.detectedPayloadKind = PAYLOADTYPE_ENTITY_REF_LINKS;\r\n return ret;\r\n } else if (fragments === '$ref') {\r\n // Capter 10.12\r\n ret.detectedPayloadKind = PAYLOADTYPE_ENTITY_REF_LINK;\r\n return ret;\r\n } else {\r\n //TODO check for navigation resource\r\n }\r\n }\r\n\r\n ret.type = undefined;\r\n ret.typeName = undefined;\r\n\r\n var fragmentParts = fragments.split(\"/\");\r\n var type;\r\n\r\n for(var i = 0; i < fragmentParts.length; ++i) {\r\n var fragment = fragmentParts[i];\r\n if (ret.typeName === undefined) {\r\n //preparation\r\n if ( fragment.indexOf('(') !== -1 ) {\r\n //remove the query function, cut fragment to matching '('\r\n var index = fragment.length - 2 ;\r\n for ( var rCount = 1; rCount > 0 && index > 0; --index) {\r\n if ( fragment.charAt(index)=='(') {\r\n rCount --;\r\n } else if ( fragment.charAt(index)==')') {\r\n rCount ++;\r\n }\r\n }\r\n\r\n if (index === 0) {\r\n //TODO throw error\r\n }\r\n\r\n //remove the projected entity from the fragment; TODO decide if we want to store the projected entity\r\n var inPharenthesis = fragment.substring(index+2,fragment.length - 1);\r\n fragment = fragment.substring(0,index+1);\r\n\r\n if (utils.startsWith(fragment, 'Collection')) {\r\n ret.detectedPayloadKind = PAYLOADTYPE_COLLECTION;\r\n // Capter 10.14\r\n ret.typeName = inPharenthesis;\r\n\r\n type = lookupEntityType(ret.typeName, model);\r\n if ( type !== null) {\r\n ret.type = type;\r\n continue;\r\n }\r\n type = lookupComplexType(ret.typeName, model);\r\n if ( type !== null) {\r\n ret.type = type;\r\n continue;\r\n }\r\n\r\n ret.type = null;//in case of #Collection(Edm.String) only lastTypeName is filled\r\n continue;\r\n } else {\r\n // projection: Capter 10.7, 10.8 and 10.9\r\n ret.projection = inPharenthesis;\r\n }\r\n }\r\n\r\n\r\n if (jsonIsPrimitiveType(fragment)) {\r\n ret.typeName = fragment;\r\n ret.type = null;\r\n ret.detectedPayloadKind = PAYLOADTYPE_VALUE;\r\n continue;\r\n }\r\n\r\n var container = lookupDefaultEntityContainer(model);\r\n\r\n //check for entity\r\n var entitySet = lookupEntitySet(container.entitySet, fragment);\r\n if ( entitySet !== null) {\r\n ret.typeName = entitySet.entityType;\r\n ret.type = lookupEntityType( ret.typeName, model);\r\n ret.name = fragment;\r\n ret.detectedPayloadKind = PAYLOADTYPE_FEED;\r\n // Capter 10.2\r\n continue;\r\n }\r\n\r\n //check for singleton\r\n var singleton = lookupSingleton(container.singleton, fragment);\r\n if ( singleton !== null) {\r\n ret.typeName = singleton.entityType;\r\n ret.type = lookupEntityType( ret.typeName, model);\r\n ret.name = fragment;\r\n ret.detectedPayloadKind = PAYLOADTYPE_ENTRY;\r\n // Capter 10.4\r\n continue;\r\n }\r\n\r\n\r\n\r\n //TODO throw ERROR\r\n } else {\r\n //check for $entity\r\n if (utils.endsWith(fragment, '$entity') && (ret.detectedPayloadKind === PAYLOADTYPE_FEED)) {\r\n //TODO ret.name = fragment;\r\n ret.detectedPayloadKind = PAYLOADTYPE_ENTRY;\r\n // Capter 10.3 and 10.6\r\n continue;\r\n }\r\n\r\n //check for derived types\r\n if (fragment.indexOf('.') !== -1) {\r\n // Capter 10.6\r\n ret.typeName = fragment;\r\n type = lookupEntityType(ret.typeName, model);\r\n if ( type !== null) {\r\n ret.type = type;\r\n continue;\r\n }\r\n type = lookupComplexType(ret.typeName, model);\r\n if ( type !== null) {\r\n ret.type = type;\r\n continue;\r\n }\r\n\r\n //TODO throw ERROR invalid type\r\n }\r\n\r\n //check for property value\r\n if ( ret.detectedPayloadKind === PAYLOADTYPE_FEED || ret.detectedPayloadKind === PAYLOADTYPE_ENTRY) {\r\n var property = lookupProperty(ret.type.property, fragment);\r\n if (property !== null) {\r\n //PAYLOADTYPE_COLLECTION\r\n ret.typeName = property.type;\r\n\r\n\r\n if (utils.startsWith(property.type, 'Collection')) {\r\n ret.detectedPayloadKind = PAYLOADTYPE_COLLECTION;\r\n var tmp12 = property.type.substring(10+1,property.type.length - 1);\r\n ret.typeName = tmp12;\r\n ret.type = lookupComplexType(tmp12, model);\r\n ret.detectedPayloadKind = PAYLOADTYPE_COLLECTION;\r\n } else {\r\n ret.type = lookupComplexType(property.type, model);\r\n ret.detectedPayloadKind = PAYLOADTYPE_PROPERTY;\r\n }\r\n\r\n ret.name = fragment;\r\n // Capter 10.15\r\n }\r\n continue;\r\n }\r\n\r\n if (fragment === '$delta') {\r\n ret.deltaKind = DELTATYPE_FEED;\r\n continue;\r\n } else if (utils.endsWith(fragment, '/$deletedEntity')) {\r\n ret.deltaKind = DELTATYPE_DELETED_ENTRY;\r\n continue;\r\n } else if (utils.endsWith(fragment, '/$link')) {\r\n ret.deltaKind = DELTATYPE_LINK;\r\n continue;\r\n } else if (utils.endsWith(fragment, '/$deletedLink')) {\r\n ret.deltaKind = DELTATYPE_DELETED_LINK;\r\n continue;\r\n }\r\n //TODO throw ERROr\r\n }\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n\r\n/** Infers the information describing the JSON payload from its metadata annotation, structure, and data model.\r\n * @param {Object} data - Json response payload object.\r\n * @param {Object} model - Object describing an OData conceptual schema.\r\n * If the arguments passed to the function don't convey enough information about the payload to determine without doubt that the payload is a feed then it\r\n * will try to use the payload object structure instead. If the payload looks like a feed (has value property that is an array or non-primitive values) then\r\n * the function will report its kind as PAYLOADTYPE_FEED unless the inferFeedAsComplexType flag is set to true. This flag comes from the user request\r\n * and allows the user to control how the library behaves with an ambigous JSON payload.\r\n * @return Object with kind and type fields. Null if there is no metadata annotation or the payload info cannot be obtained..\r\n */\r\nfunction createPayloadInfo(data, model) {\r\n var metadataUri = data[contextUrlAnnotation];\r\n if (!metadataUri || typeof metadataUri !== \"string\") {\r\n return null;\r\n }\r\n\r\n var fragmentStart = metadataUri.lastIndexOf(\"#\");\r\n if (fragmentStart === -1) {\r\n return jsonMakePayloadInfo(PAYLOADTYPE_SVCDOC);\r\n }\r\n\r\n var fragment = metadataUri.substring(fragmentStart + 1);\r\n return parseContextUriFragment(fragment,model);\r\n}\r\n/** Gets the key of an entry.\r\n * @param {Object} data - JSON entry.\r\n * @param {Object} data - EDM entity model for key loockup.\r\n * @returns {string} Entry instance key.\r\n */\r\nfunction jsonGetEntryKey(data, entityModel) {\r\n\r\n var entityInstanceKey;\r\n var entityKeys = entityModel.key[0].propertyRef;\r\n var type;\r\n entityInstanceKey = \"(\";\r\n if (entityKeys.length == 1) {\r\n type = lookupProperty(entityModel.property, entityKeys[0].name).type;\r\n entityInstanceKey += formatLiteral(data[entityKeys[0].name], type);\r\n } else {\r\n var first = true;\r\n for (var i = 0; i < entityKeys.length; i++) {\r\n if (!first) {\r\n entityInstanceKey += \",\";\r\n } else {\r\n first = false;\r\n }\r\n type = lookupProperty(entityModel.property, entityKeys[i].name).type;\r\n entityInstanceKey += entityKeys[i].name + \"=\" + formatLiteral(data[entityKeys[i].name], type);\r\n }\r\n }\r\n entityInstanceKey += \")\";\r\n return entityInstanceKey;\r\n}\r\n/** Determines whether a type name is a primitive type in a JSON payload.\r\n * @param {String} typeName - Type name to test.\r\n * @returns {Boolean} True if the type name an EDM primitive type or an OData spatial type; false otherwise.\r\n */\r\nfunction jsonIsPrimitiveType(typeName) {\r\n return isPrimitiveEdmType(typeName) || isGeographyEdmType(typeName) || isGeometryEdmType(typeName);\r\n}\r\n\r\n\r\nvar jsonHandler = oDataHandler.handler(jsonParser, jsonSerializer, jsonMediaType, MAX_DATA_SERVICE_VERSION);\r\njsonHandler.recognizeDates = false;\r\n\r\nexports.createPayloadInfo = createPayloadInfo;\r\nexports.jsonHandler = jsonHandler;\r\nexports.jsonParser = jsonParser;\r\nexports.jsonSerializer = jsonSerializer;\r\nexports.parseJsonDateString = parseJsonDateString;}, \"metadata\" : function(exports, module, require) {\r\n'use strict';\r\n\r\n/** @module odata/metadata */\r\n\r\nvar utils = require('./../utils.js');\r\nvar oDSxml = require('./../xml.js');\r\nvar odataHandler = require('./handler.js');\r\n\r\n\r\n\r\n// imports \r\nvar contains = utils.contains;\r\nvar normalizeURI = utils.normalizeURI;\r\nvar xmlAttributes = oDSxml.xmlAttributes;\r\nvar xmlChildElements = oDSxml.xmlChildElements;\r\nvar xmlFirstChildElement = oDSxml.xmlFirstChildElement;\r\nvar xmlInnerText = oDSxml.xmlInnerText;\r\nvar xmlLocalName = oDSxml.xmlLocalName;\r\nvar xmlNamespaceURI = oDSxml.xmlNamespaceURI;\r\nvar xmlNS = oDSxml.xmlNS;\r\nvar xmlnsNS = oDSxml.xmlnsNS;\r\nvar xmlParse = oDSxml.xmlParse;\r\n\r\nvar ado = oDSxml.http + \"docs.oasis-open.org/odata/\"; // http://docs.oasis-open.org/odata/\r\nvar adoDs = ado + \"ns\"; // http://docs.oasis-open.org/odata/ns\r\nvar edmxNs = adoDs + \"/edm\"; // http://docs.oasis-open.org/odata/ns/edmx\r\nvar edmNs1 = adoDs + \"/edm\"; // http://docs.oasis-open.org/odata/ns/edm\r\nvar odataMetaXmlNs = adoDs + \"/metadata\"; // http://docs.oasis-open.org/odata/ns/metadata\r\nvar MAX_DATA_SERVICE_VERSION = odataHandler.MAX_DATA_SERVICE_VERSION;\r\n\r\nvar xmlMediaType = \"application/xml\";\r\n\r\n/** Creates an object that describes an element in an schema.\r\n * @param {Array} attributes - List containing the names of the attributes allowed for this element.\r\n * @param {Array} elements - List containing the names of the child elements allowed for this element.\r\n * @param {Boolean} text - Flag indicating if the element's text value is of interest or not.\r\n * @param {String} ns - Namespace to which the element belongs to.\r\n * If a child element name ends with * then it is understood by the schema that that child element can appear 0 or more times.\r\n * @returns {Object} Object with attributes, elements, text, and ns fields.\r\n */\r\nfunction schemaElement(attributes, elements, text, ns) {\r\n\r\n return {\r\n attributes: attributes,\r\n elements: elements,\r\n text: text || false,\r\n ns: ns\r\n };\r\n}\r\n\r\n// It's assumed that all elements may have Documentation children and Annotation elements.\r\n// See http://docs.oasis-open.org/odata/odata/v4.0/cs01/part3-csdl/odata-v4.0-cs01-part3-csdl.html for a CSDL reference.\r\nvar schema = {\r\n elements: {\r\n Action: schemaElement(\r\n /*attributes*/[\"Name\", \"IsBound\", \"EntitySetPath\"],\r\n /*elements*/[\"ReturnType\", \"Parameter*\", \"Annotation*\"]\r\n ),\r\n ActionImport: schemaElement(\r\n /*attributes*/[\"Name\", \"Action\", \"EntitySet\", \"Annotation*\"]\r\n ),\r\n Annotation: schemaElement(\r\n /*attributes*/[\"Term\", \"Qualifier\", \"Binary\", \"Bool\", \"Date\", \"DateTimeOffset\", \"Decimal\", \"Duration\", \"EnumMember\", \"Float\", \"Guid\", \"Int\", \"String\", \"TimeOfDay\", \"AnnotationPath\", \"NavigationPropertyPath\", \"Path\", \"PropertyPath\", \"UrlRef\"],\r\n /*elements*/[\"Binary*\", \"Bool*\", \"Date*\", \"DateTimeOffset*\", \"Decimal*\", \"Duration*\", \"EnumMember*\", \"Float*\", \"Guid*\", \"Int*\", \"String*\", \"TimeOfDay*\", \"And*\", \"Or*\", \"Not*\", \"Eq*\", \"Ne*\", \"Gt*\", \"Ge*\", \"Lt*\", \"Le*\", \"AnnotationPath*\", \"Apply*\", \"Cast*\", \"Collection*\", \"If*\", \"IsOf*\", \"LabeledElement*\", \"LabeledElementReference*\", \"Null*\", \"NavigationPropertyPath*\", \"Path*\", \"PropertyPath*\", \"Record*\", \"UrlRef*\", \"Annotation*\"]\r\n ),\r\n AnnotationPath: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Annotations: schemaElement(\r\n /*attributes*/[\"Target\", \"Qualifier\"],\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n Apply: schemaElement(\r\n /*attributes*/[\"Function\"],\r\n /*elements*/[\"String*\", \"Path*\", \"LabeledElement*\", \"Annotation*\"]\r\n ),\r\n And: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Or: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Not: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Eq: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Ne: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Gt: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Ge: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Lt: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Le: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Binary: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Bool: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Cast: schemaElement(\r\n /*attributes*/[\"Type\"],\r\n /*elements*/[\"Path*\", \"Annotation*\"]\r\n ),\r\n Collection: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/[\"Binary*\", \"Bool*\", \"Date*\", \"DateTimeOffset*\", \"Decimal*\", \"Duration*\", \"EnumMember*\", \"Float*\", \"Guid*\", \"Int*\", \"String*\", \"TimeOfDay*\", \"And*\", \"Or*\", \"Not*\", \"Eq*\", \"Ne*\", \"Gt*\", \"Ge*\", \"Lt*\", \"Le*\", \"AnnotationPath*\", \"Apply*\", \"Cast*\", \"Collection*\", \"If*\", \"IsOf*\", \"LabeledElement*\", \"LabeledElementReference*\", \"Null*\", \"NavigationPropertyPath*\", \"Path*\", \"PropertyPath*\", \"Record*\", \"UrlRef*\"]\r\n ),\r\n ComplexType: schemaElement(\r\n /*attributes*/[\"Name\", \"BaseType\", \"Abstract\", \"OpenType\"],\r\n /*elements*/[\"Property*\", \"NavigationProperty*\", \"Annotation*\"]\r\n ),\r\n Date: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n DateTimeOffset: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Decimal: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Duration: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n EntityContainer: schemaElement(\r\n /*attributes*/[\"Name\", \"Extends\"],\r\n /*elements*/[\"EntitySet*\", \"Singleton*\", \"ActionImport*\", \"FunctionImport*\", \"Annotation*\"]\r\n ),\r\n EntitySet: schemaElement(\r\n /*attributes*/[\"Name\", \"EntityType\", \"IncludeInServiceDocument\"],\r\n /*elements*/[\"NavigationPropertyBinding*\", \"Annotation*\"]\r\n ),\r\n EntityType: schemaElement(\r\n /*attributes*/[\"Name\", \"BaseType\", \"Abstract\", \"OpenType\", \"HasStream\"],\r\n /*elements*/[\"Key*\", \"Property*\", \"NavigationProperty*\", \"Annotation*\"]\r\n ),\r\n EnumMember: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n EnumType: schemaElement(\r\n /*attributes*/[\"Name\", \"UnderlyingType\", \"IsFlags\"],\r\n /*elements*/[\"Member*\"]\r\n ),\r\n Float: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Function: schemaElement(\r\n /*attributes*/[\"Name\", \"IsBound\", \"IsComposable\", \"EntitySetPath\"],\r\n /*elements*/[\"ReturnType\", \"Parameter*\", \"Annotation*\"]\r\n ),\r\n FunctionImport: schemaElement(\r\n /*attributes*/[\"Name\", \"Function\", \"EntitySet\", \"IncludeInServiceDocument\", \"Annotation*\"]\r\n ),\r\n Guid: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n If: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/[\"Path*\", \"String*\", \"Annotation*\"]\r\n ),\r\n Int: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n IsOf: schemaElement(\r\n /*attributes*/[\"Type\", \"MaxLength\", \"Precision\", \"Scale\", \"Unicode\", \"SRID\", \"DefaultValue\", \"Annotation*\"],\r\n /*elements*/[\"Path*\"]\r\n ),\r\n Key: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/[\"PropertyRef*\"]\r\n ),\r\n LabeledElement: schemaElement(\r\n /*attributes*/[\"Name\"],\r\n /*elements*/[\"Binary*\", \"Bool*\", \"Date*\", \"DateTimeOffset*\", \"Decimal*\", \"Duration*\", \"EnumMember*\", \"Float*\", \"Guid*\", \"Int*\", \"String*\", \"TimeOfDay*\", \"And*\", \"Or*\", \"Not*\", \"Eq*\", \"Ne*\", \"Gt*\", \"Ge*\", \"Lt*\", \"Le*\", \"AnnotationPath*\", \"Apply*\", \"Cast*\", \"Collection*\", \"If*\", \"IsOf*\", \"LabeledElement*\", \"LabeledElementReference*\", \"Null*\", \"NavigationPropertyPath*\", \"Path*\", \"PropertyPath*\", \"Record*\", \"UrlRef*\", \"Annotation*\"]\r\n ),\r\n LabeledElementReference: schemaElement(\r\n /*attributes*/[\"Term\"],\r\n /*elements*/[\"Binary*\", \"Bool*\", \"Date*\", \"DateTimeOffset*\", \"Decimal*\", \"Duration*\", \"EnumMember*\", \"Float*\", \"Guid*\", \"Int*\", \"String*\", \"TimeOfDay*\", \"And*\", \"Or*\", \"Not*\", \"Eq*\", \"Ne*\", \"Gt*\", \"Ge*\", \"Lt*\", \"Le*\", \"AnnotationPath*\", \"Apply*\", \"Cast*\", \"Collection*\", \"If*\", \"IsOf*\", \"LabeledElement*\", \"LabeledElementReference*\", \"Null*\", \"NavigationPropertyPath*\", \"Path*\", \"PropertyPath*\", \"Record*\", \"UrlRef*\"]\r\n ),\r\n Member: schemaElement(\r\n /*attributes*/[\"Name\", \"Value\"],\r\n /*element*/[\"Annotation*\"]\r\n ),\r\n NavigationProperty: schemaElement(\r\n /*attributes*/[\"Name\", \"Type\", \"Nullable\", \"Partner\", \"ContainsTarget\"],\r\n /*elements*/[\"ReferentialConstraint*\", \"OnDelete*\", \"Annotation*\"]\r\n ),\r\n NavigationPropertyBinding: schemaElement(\r\n /*attributes*/[\"Path\", \"Target\"]\r\n ),\r\n NavigationPropertyPath: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Null: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n OnDelete: schemaElement(\r\n /*attributes*/[\"Action\"],\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n Path: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Parameter: schemaElement(\r\n /*attributes*/[\"Name\", \"Type\", \"Nullable\", \"MaxLength\", \"Precision\", \"Scale\", \"SRID\"],\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n Property: schemaElement(\r\n /*attributes*/[\"Name\", \"Type\", \"Nullable\", \"MaxLength\", \"Precision\", \"Scale\", \"Unicode\", \"SRID\", \"DefaultValue\"],\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n PropertyPath: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n PropertyRef: schemaElement(\r\n /*attributes*/[\"Name\", \"Alias\"]\r\n ),\r\n PropertyValue: schemaElement(\r\n /*attributes*/[\"Property\", \"Path\"],\r\n /*elements*/[\"Binary*\", \"Bool*\", \"Date*\", \"DateTimeOffset*\", \"Decimal*\", \"Duration*\", \"EnumMember*\", \"Float*\", \"Guid*\", \"Int*\", \"String*\", \"TimeOfDay*\", \"And*\", \"Or*\", \"Not*\", \"Eq*\", \"Ne*\", \"Gt*\", \"Ge*\", \"Lt*\", \"Le*\", \"AnnotationPath*\", \"Apply*\", \"Cast*\", \"Collection*\", \"If*\", \"IsOf*\", \"LabeledElement*\", \"LabeledElementReference*\", \"Null*\", \"NavigationPropertyPath*\", \"Path*\", \"PropertyPath*\", \"Record*\", \"UrlRef*\", \"Annotation*\"]\r\n ),\r\n Record: schemaElement(\r\n /*attributes*/null,\r\n /*Elements*/[\"PropertyValue*\", \"Property*\", \"Annotation*\"]\r\n ),\r\n ReferentialConstraint: schemaElement(\r\n /*attributes*/[\"Property\", \"ReferencedProperty\", \"Annotation*\"]\r\n ),\r\n ReturnType: schemaElement(\r\n /*attributes*/[\"Type\", \"Nullable\", \"MaxLength\", \"Precision\", \"Scale\", \"SRID\"]\r\n ),\r\n String: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n Schema: schemaElement(\r\n /*attributes*/[\"Namespace\", \"Alias\"],\r\n /*elements*/[\"Action*\", \"Annotations*\", \"Annotation*\", \"ComplexType*\", \"EntityContainer\", \"EntityType*\", \"EnumType*\", \"Function*\", \"Term*\", \"TypeDefinition*\", \"Annotation*\"]\r\n ),\r\n Singleton: schemaElement(\r\n /*attributes*/[\"Name\", \"Type\"],\r\n /*elements*/[\"NavigationPropertyBinding*\", \"Annotation*\"]\r\n ),\r\n Term: schemaElement(\r\n /*attributes*/[\"Name\", \"Type\", \"BaseTerm\", \"DefaultValue \", \"AppliesTo\", \"Nullable\", \"MaxLength\", \"Precision\", \"Scale\", \"SRID\"],\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n TimeOfDay: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/null,\r\n /*text*/true\r\n ),\r\n TypeDefinition: schemaElement(\r\n /*attributes*/[\"Name\", \"UnderlyingType\", \"MaxLength\", \"Unicode\", \"Precision\", \"Scale\", \"SRID\"],\r\n /*elements*/[\"Annotation*\"]\r\n ),\r\n UrlRef: schemaElement(\r\n /*attributes*/null,\r\n /*elements*/[\"Binary*\", \"Bool*\", \"Date*\", \"DateTimeOffset*\", \"Decimal*\", \"Duration*\", \"EnumMember*\", \"Float*\", \"Guid*\", \"Int*\", \"String*\", \"TimeOfDay*\", \"And*\", \"Or*\", \"Not*\", \"Eq*\", \"Ne*\", \"Gt*\", \"Ge*\", \"Lt*\", \"Le*\", \"AnnotationPath*\", \"Apply*\", \"Cast*\", \"Collection*\", \"If*\", \"IsOf*\", \"LabeledElement*\", \"LabeledElementReference*\", \"Null*\", \"NavigationPropertyPath*\", \"Path*\", \"PropertyPath*\", \"Record*\", \"UrlRef*\", \"Annotation*\"]\r\n ),\r\n\r\n // See http://msdn.microsoft.com/en-us/library/dd541238(v=prot.10) for an EDMX reference.\r\n Edmx: schemaElement(\r\n /*attributes*/[\"Version\"],\r\n /*elements*/[\"DataServices\", \"Reference*\"],\r\n /*text*/false,\r\n /*ns*/edmxNs\r\n ),\r\n DataServices: schemaElement(\r\n /*attributes*/[\"m:MaxDataServiceVersion\", \"m:DataServiceVersion\"],\r\n /*elements*/[\"Schema*\"],\r\n /*text*/false,\r\n /*ns*/edmxNs\r\n ),\r\n Reference: schemaElement(\r\n /*attributes*/[\"Uri\"],\r\n /*elements*/[\"Include*\", \"IncludeAnnotations*\", \"Annotation*\"]\r\n ),\r\n Include: schemaElement(\r\n /*attributes*/[\"Namespace\", \"Alias\"]\r\n ),\r\n IncludeAnnotations: schemaElement(\r\n /*attributes*/[\"TermNamespace\", \"Qualifier\", \"TargetNamespace\"]\r\n )\r\n }\r\n};\r\n\r\n\r\n/** Converts a Pascal-case identifier into a camel-case identifier.\r\n * @param {String} text - Text to convert.\r\n * @returns {String} Converted text.\r\n * If the text starts with multiple uppercase characters, it is left as-is.\r\n */\r\nfunction scriptCase(text) {\r\n\r\n if (!text) {\r\n return text;\r\n }\r\n\r\n if (text.length > 1) {\r\n var firstTwo = text.substr(0, 2);\r\n if (firstTwo === firstTwo.toUpperCase()) {\r\n return text;\r\n }\r\n\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n }\r\n\r\n return text.charAt(0).toLowerCase();\r\n}\r\n\r\n/** Gets the schema node for the specified element.\r\n * @param {Object} parentSchema - Schema of the parent XML node of 'element'.\r\n * @param candidateName - XML element name to consider.\r\n * @returns {Object} The schema that describes the specified element; null if not found.\r\n */\r\nfunction getChildSchema(parentSchema, candidateName) {\r\n\r\n var elements = parentSchema.elements;\r\n if (!elements) {\r\n return null;\r\n }\r\n\r\n var i, len;\r\n for (i = 0, len = elements.length; i < len; i++) {\r\n var elementName = elements[i];\r\n var multipleElements = false;\r\n if (elementName.charAt(elementName.length - 1) === \"*\") {\r\n multipleElements = true;\r\n elementName = elementName.substr(0, elementName.length - 1);\r\n }\r\n\r\n if (candidateName === elementName) {\r\n var propertyName = scriptCase(elementName);\r\n return { isArray: multipleElements, propertyName: propertyName };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/** Checks whether the specifies namespace URI is one of the known CSDL namespace URIs.\r\n * @param {String} nsURI - Namespace URI to check.\r\n * @returns {Boolean} true if nsURI is a known CSDL namespace; false otherwise.\r\n */\r\nfunction isEdmNamespace(nsURI) {\r\n\r\n return nsURI === edmNs1;\r\n}\r\n\r\n/** Parses a CSDL document.\r\n * @param element - DOM element to parse.\r\n * @returns {Object} An object describing the parsed element.\r\n */\r\nfunction parseConceptualModelElement(element) {\r\n\r\n var localName = xmlLocalName(element);\r\n var nsURI = xmlNamespaceURI(element);\r\n var elementSchema = schema.elements[localName];\r\n if (!elementSchema) {\r\n return null;\r\n }\r\n\r\n if (elementSchema.ns) {\r\n if (nsURI !== elementSchema.ns) {\r\n return null;\r\n }\r\n } else if (!isEdmNamespace(nsURI)) {\r\n return null;\r\n }\r\n\r\n var item = {};\r\n var attributes = elementSchema.attributes || [];\r\n xmlAttributes(element, function (attribute) {\r\n\r\n var localName = xmlLocalName(attribute);\r\n var nsURI = xmlNamespaceURI(attribute);\r\n var value = attribute.value;\r\n\r\n // Don't do anything with xmlns attributes.\r\n if (nsURI === xmlnsNS) {\r\n return;\r\n }\r\n\r\n // Currently, only m: for metadata is supported as a prefix in the internal schema table,\r\n // un-prefixed element names imply one a CSDL element.\r\n var schemaName = null;\r\n if (isEdmNamespace(nsURI) || nsURI === null) {\r\n schemaName = \"\";\r\n } else if (nsURI === odataMetaXmlNs) {\r\n schemaName = \"m:\";\r\n }\r\n\r\n if (schemaName !== null) {\r\n schemaName += localName;\r\n\r\n if (contains(attributes, schemaName)) {\r\n item[scriptCase(localName)] = value;\r\n }\r\n }\r\n\r\n });\r\n\r\n xmlChildElements(element, function (child) {\r\n var localName = xmlLocalName(child);\r\n var childSchema = getChildSchema(elementSchema, localName);\r\n if (childSchema) {\r\n if (childSchema.isArray) {\r\n var arr = item[childSchema.propertyName];\r\n if (!arr) {\r\n arr = [];\r\n item[childSchema.propertyName] = arr;\r\n }\r\n arr.push(parseConceptualModelElement(child));\r\n } else {\r\n item[childSchema.propertyName] = parseConceptualModelElement(child);\r\n }\r\n } \r\n });\r\n\r\n if (elementSchema.text) {\r\n item.text = xmlInnerText(element);\r\n }\r\n\r\n return item;\r\n}\r\n\r\n/** Parses a metadata document.\r\n * @param handler - This handler.\r\n * @param {String} text - Metadata text.\r\n * @returns An object representation of the conceptual model.\r\n */\r\nfunction metadataParser(handler, text) {\r\n\r\n var doc = xmlParse(text);\r\n var root = xmlFirstChildElement(doc);\r\n return parseConceptualModelElement(root) || undefined;\r\n}\r\n\r\n\r\n\r\nexports.metadataHandler = odataHandler.handler(metadataParser, null, xmlMediaType, MAX_DATA_SERVICE_VERSION);\r\n\r\nexports.schema = schema;\r\nexports.scriptCase = scriptCase;\r\nexports.getChildSchema = getChildSchema;\r\nexports.parseConceptualModelElement = parseConceptualModelElement;\r\nexports.metadataParser = metadataParser;}, \"net\" : function(exports, module, require) {\r\n\r\n/** @module odata/net */\r\n/*for browser*/\r\n\r\n\r\nvar utils = require('./../utils.js');\r\n// Imports.\r\n\r\nvar defined = utils.defined;\r\nvar delay = utils.delay;\r\n\r\nvar ticks = 0;\r\n\r\n/* Checks whether the specified request can be satisfied with a JSONP request.\r\n * @param request - Request object to check.\r\n * @returns {Boolean} true if the request can be satisfied; false otherwise.\r\n\r\n * Requests that 'degrade' without changing their meaning by going through JSONP\r\n * are considered usable.\r\n *\r\n * We allow data to come in a different format, as the servers SHOULD honor the Accept\r\n * request but may in practice return content with a different MIME type.\r\n */\r\nfunction canUseJSONP(request) {\r\n \r\n return !(request.method && request.method !== \"GET\");\r\n\r\n\r\n}\r\n\r\n/** Creates an IFRAME tag for loading the JSONP script\r\n * @param {String} url - The source URL of the script\r\n * @returns {HTMLElement} The IFRAME tag\r\n */\r\nfunction createIFrame(url) {\r\n var iframe = window.document.createElement(\"IFRAME\");\r\n iframe.style.display = \"none\";\r\n\r\n var attributeEncodedUrl = url.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/