0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function f(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}n.getArg=r;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;p1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),S.push(r),"number"==typeof r.originalLine&&A.push(r)}g(S,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,g(A,a.compareByOriginalPositions),this.__originalMappings=A},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap)\n\t : new BasicSourceMapConsumer(sourceMap);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t if (source != null && sourceRoot != null) {\n\t source = util.join(sourceRoot, source);\n\t }\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: Optional. the column number in the original source.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t if (this.sourceRoot != null) {\n\t needle.source = util.relative(this.sourceRoot, needle.source);\n\t }\n\t if (!this._sources.has(needle.source)) {\n\t return [];\n\t }\n\t needle.source = this._sources.indexOf(needle.source);\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The only parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._sources.toArray().map(function (s) {\n\t return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n\t }, this);\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t if (this.sourceRoot != null) {\n\t source = util.join(this.sourceRoot, source);\n\t }\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t if (this.sourceRoot != null) {\n\t aSource = util.relative(this.sourceRoot, aSource);\n\t }\n\t\n\t if (this._sources.has(aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(aSource)];\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t if (this.sourceRoot != null) {\n\t source = util.relative(this.sourceRoot, source);\n\t }\n\t if (!this._sources.has(source)) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t source = this._sources.indexOf(source);\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The only parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t if (section.consumer.sourceRoot !== null) {\n\t source = util.join(section.consumer.sourceRoot, source);\n\t }\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 42c329f865e32e011afb","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex];\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex];\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/node_modules/source-map/lib/array-set.js b/build/node_modules/source-map/lib/array-set.js
new file mode 100644
index 00000000..fbd5c81c
--- /dev/null
+++ b/build/node_modules/source-map/lib/array-set.js
@@ -0,0 +1,121 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+var has = Object.prototype.hasOwnProperty;
+var hasNativeMap = typeof Map !== "undefined";
+
+/**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+function ArraySet() {
+ this._array = [];
+ this._set = hasNativeMap ? new Map() : Object.create(null);
+}
+
+/**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+ var set = new ArraySet();
+ for (var i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
+ }
+ return set;
+};
+
+/**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ArraySet.prototype.size = function ArraySet_size() {
+ return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+};
+
+/**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+ var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+ var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+ var idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ if (hasNativeMap) {
+ this._set.set(aStr, idx);
+ } else {
+ this._set[sStr] = idx;
+ }
+ }
+};
+
+/**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.has = function ArraySet_has(aStr) {
+ if (hasNativeMap) {
+ return this._set.has(aStr);
+ } else {
+ var sStr = util.toSetString(aStr);
+ return has.call(this._set, sStr);
+ }
+};
+
+/**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+ if (hasNativeMap) {
+ var idx = this._set.get(aStr);
+ if (idx >= 0) {
+ return idx;
+ }
+ } else {
+ var sStr = util.toSetString(aStr);
+ if (has.call(this._set, sStr)) {
+ return this._set[sStr];
+ }
+ }
+
+ throw new Error('"' + aStr + '" is not in the set.');
+};
+
+/**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ArraySet.prototype.at = function ArraySet_at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
+ }
+ throw new Error('No element indexed by ' + aIdx);
+};
+
+/**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ArraySet.prototype.toArray = function ArraySet_toArray() {
+ return this._array.slice();
+};
+
+exports.ArraySet = ArraySet;
diff --git a/build/node_modules/source-map/lib/base64-vlq.js b/build/node_modules/source-map/lib/base64-vlq.js
new file mode 100644
index 00000000..612b4040
--- /dev/null
+++ b/build/node_modules/source-map/lib/base64-vlq.js
@@ -0,0 +1,140 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var base64 = require('./base64');
+
+// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+// length quantities we use in the source map spec, the first bit is the sign,
+// the next four bits are the actual value, and the 6th bit is the
+// continuation bit. The continuation bit tells us whether there are more
+// digits in this value following this digit.
+//
+// Continuation
+// | Sign
+// | |
+// V V
+// 101011
+
+var VLQ_BASE_SHIFT = 5;
+
+// binary: 100000
+var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+// binary: 011111
+var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+// binary: 100000
+var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+/**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+function toVLQSigned(aValue) {
+ return aValue < 0
+ ? ((-aValue) << 1) + 1
+ : (aValue << 1) + 0;
+}
+
+/**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+function fromVLQSigned(aValue) {
+ var isNegative = (aValue & 1) === 1;
+ var shifted = aValue >> 1;
+ return isNegative
+ ? -shifted
+ : shifted;
+}
+
+/**
+ * Returns the base 64 VLQ encoded value.
+ */
+exports.encode = function base64VLQ_encode(aValue) {
+ var encoded = "";
+ var digit;
+
+ var vlq = toVLQSigned(aValue);
+
+ do {
+ digit = vlq & VLQ_BASE_MASK;
+ vlq >>>= VLQ_BASE_SHIFT;
+ if (vlq > 0) {
+ // There are still more digits in this value, so we must make sure the
+ // continuation bit is marked.
+ digit |= VLQ_CONTINUATION_BIT;
+ }
+ encoded += base64.encode(digit);
+ } while (vlq > 0);
+
+ return encoded;
+};
+
+/**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+ var strLen = aStr.length;
+ var result = 0;
+ var shift = 0;
+ var continuation, digit;
+
+ do {
+ if (aIndex >= strLen) {
+ throw new Error("Expected more digits in base 64 VLQ value.");
+ }
+
+ digit = base64.decode(aStr.charCodeAt(aIndex++));
+ if (digit === -1) {
+ throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+ }
+
+ continuation = !!(digit & VLQ_CONTINUATION_BIT);
+ digit &= VLQ_BASE_MASK;
+ result = result + (digit << shift);
+ shift += VLQ_BASE_SHIFT;
+ } while (continuation);
+
+ aOutParam.value = fromVLQSigned(result);
+ aOutParam.rest = aIndex;
+};
diff --git a/build/node_modules/source-map/lib/base64.js b/build/node_modules/source-map/lib/base64.js
new file mode 100644
index 00000000..8aa86b30
--- /dev/null
+++ b/build/node_modules/source-map/lib/base64.js
@@ -0,0 +1,67 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+/**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+exports.encode = function (number) {
+ if (0 <= number && number < intToCharMap.length) {
+ return intToCharMap[number];
+ }
+ throw new TypeError("Must be between 0 and 63: " + number);
+};
+
+/**
+ * Decode a single base 64 character code digit to an integer. Returns -1 on
+ * failure.
+ */
+exports.decode = function (charCode) {
+ var bigA = 65; // 'A'
+ var bigZ = 90; // 'Z'
+
+ var littleA = 97; // 'a'
+ var littleZ = 122; // 'z'
+
+ var zero = 48; // '0'
+ var nine = 57; // '9'
+
+ var plus = 43; // '+'
+ var slash = 47; // '/'
+
+ var littleOffset = 26;
+ var numberOffset = 52;
+
+ // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ if (bigA <= charCode && charCode <= bigZ) {
+ return (charCode - bigA);
+ }
+
+ // 26 - 51: abcdefghijklmnopqrstuvwxyz
+ if (littleA <= charCode && charCode <= littleZ) {
+ return (charCode - littleA + littleOffset);
+ }
+
+ // 52 - 61: 0123456789
+ if (zero <= charCode && charCode <= nine) {
+ return (charCode - zero + numberOffset);
+ }
+
+ // 62: +
+ if (charCode == plus) {
+ return 62;
+ }
+
+ // 63: /
+ if (charCode == slash) {
+ return 63;
+ }
+
+ // Invalid base64 digit.
+ return -1;
+};
diff --git a/build/node_modules/source-map/lib/binary-search.js b/build/node_modules/source-map/lib/binary-search.js
new file mode 100644
index 00000000..010ac941
--- /dev/null
+++ b/build/node_modules/source-map/lib/binary-search.js
@@ -0,0 +1,111 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+exports.GREATEST_LOWER_BOUND = 1;
+exports.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ */
+function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+ // This function terminates when one of the following is true:
+ //
+ // 1. We find the exact element we are looking for.
+ //
+ // 2. We did not find the exact element, but we can return the index of
+ // the next-closest element.
+ //
+ // 3. We did not find the exact element, and there is no next-closest
+ // element than the one we are searching for, so we return -1.
+ var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+ var cmp = aCompare(aNeedle, aHaystack[mid], true);
+ if (cmp === 0) {
+ // Found the element we are looking for.
+ return mid;
+ }
+ else if (cmp > 0) {
+ // Our needle is greater than aHaystack[mid].
+ if (aHigh - mid > 1) {
+ // The element is in the upper half.
+ return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+ }
+
+ // The exact needle element was not found in this haystack. Determine if
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return aHigh < aHaystack.length ? aHigh : -1;
+ } else {
+ return mid;
+ }
+ }
+ else {
+ // Our needle is less than aHaystack[mid].
+ if (mid - aLow > 1) {
+ // The element is in the lower half.
+ return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+ }
+
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return mid;
+ } else {
+ return aLow < 0 ? -1 : aLow;
+ }
+ }
+}
+
+/**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ * array and returns -1, 0, or 1 depending on whether the needle is less
+ * than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+ if (aHaystack.length === 0) {
+ return -1;
+ }
+
+ var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+ aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+ if (index < 0) {
+ return -1;
+ }
+
+ // We have found either the exact element, or the next-closest element than
+ // the one we are searching for. However, there may be more than one such
+ // element. Make sure we always return the smallest of these.
+ while (index - 1 >= 0) {
+ if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+ break;
+ }
+ --index;
+ }
+
+ return index;
+};
diff --git a/build/node_modules/source-map/lib/mapping-list.js b/build/node_modules/source-map/lib/mapping-list.js
new file mode 100644
index 00000000..06d1274a
--- /dev/null
+++ b/build/node_modules/source-map/lib/mapping-list.js
@@ -0,0 +1,79 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+
+/**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+function generatedPositionAfter(mappingA, mappingB) {
+ // Optimized for most common case
+ var lineA = mappingA.generatedLine;
+ var lineB = mappingB.generatedLine;
+ var columnA = mappingA.generatedColumn;
+ var columnB = mappingB.generatedColumn;
+ return lineB > lineA || lineB == lineA && columnB >= columnA ||
+ util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+}
+
+/**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+function MappingList() {
+ this._array = [];
+ this._sorted = true;
+ // Serves as infimum
+ this._last = {generatedLine: -1, generatedColumn: 0};
+}
+
+/**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+MappingList.prototype.unsortedForEach =
+ function MappingList_forEach(aCallback, aThisArg) {
+ this._array.forEach(aCallback, aThisArg);
+ };
+
+/**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+MappingList.prototype.add = function MappingList_add(aMapping) {
+ if (generatedPositionAfter(this._last, aMapping)) {
+ this._last = aMapping;
+ this._array.push(aMapping);
+ } else {
+ this._sorted = false;
+ this._array.push(aMapping);
+ }
+};
+
+/**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+MappingList.prototype.toArray = function MappingList_toArray() {
+ if (!this._sorted) {
+ this._array.sort(util.compareByGeneratedPositionsInflated);
+ this._sorted = true;
+ }
+ return this._array;
+};
+
+exports.MappingList = MappingList;
diff --git a/build/node_modules/source-map/lib/quick-sort.js b/build/node_modules/source-map/lib/quick-sort.js
new file mode 100644
index 00000000..6a7caadb
--- /dev/null
+++ b/build/node_modules/source-map/lib/quick-sort.js
@@ -0,0 +1,114 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+// It turns out that some (most?) JavaScript engines don't self-host
+// `Array.prototype.sort`. This makes sense because C++ will likely remain
+// faster than JS when doing raw CPU-intensive sorting. However, when using a
+// custom comparator function, calling back and forth between the VM's C++ and
+// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+// worse generated code for the comparator function than would be optimal. In
+// fact, when sorting with a comparator, these costs outweigh the benefits of
+// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+// a ~3500ms mean speed-up in `bench/bench.html`.
+
+/**
+ * Swap the elements indexed by `x` and `y` in the array `ary`.
+ *
+ * @param {Array} ary
+ * The array.
+ * @param {Number} x
+ * The index of the first item.
+ * @param {Number} y
+ * The index of the second item.
+ */
+function swap(ary, x, y) {
+ var temp = ary[x];
+ ary[x] = ary[y];
+ ary[y] = temp;
+}
+
+/**
+ * Returns a random integer within the range `low .. high` inclusive.
+ *
+ * @param {Number} low
+ * The lower bound on the range.
+ * @param {Number} high
+ * The upper bound on the range.
+ */
+function randomIntInRange(low, high) {
+ return Math.round(low + (Math.random() * (high - low)));
+}
+
+/**
+ * The Quick Sort algorithm.
+ *
+ * @param {Array} ary
+ * An array to sort.
+ * @param {function} comparator
+ * Function to use to compare two items.
+ * @param {Number} p
+ * Start index of the array
+ * @param {Number} r
+ * End index of the array
+ */
+function doQuickSort(ary, comparator, p, r) {
+ // If our lower bound is less than our upper bound, we (1) partition the
+ // array into two pieces and (2) recurse on each half. If it is not, this is
+ // the empty array and our base case.
+
+ if (p < r) {
+ // (1) Partitioning.
+ //
+ // The partitioning chooses a pivot between `p` and `r` and moves all
+ // elements that are less than or equal to the pivot to the before it, and
+ // all the elements that are greater than it after it. The effect is that
+ // once partition is done, the pivot is in the exact place it will be when
+ // the array is put in sorted order, and it will not need to be moved
+ // again. This runs in O(n) time.
+
+ // Always choose a random pivot so that an input array which is reverse
+ // sorted does not cause O(n^2) running time.
+ var pivotIndex = randomIntInRange(p, r);
+ var i = p - 1;
+
+ swap(ary, pivotIndex, r);
+ var pivot = ary[r];
+
+ // Immediately after `j` is incremented in this loop, the following hold
+ // true:
+ //
+ // * Every element in `ary[p .. i]` is less than or equal to the pivot.
+ //
+ // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+ for (var j = p; j < r; j++) {
+ if (comparator(ary[j], pivot) <= 0) {
+ i += 1;
+ swap(ary, i, j);
+ }
+ }
+
+ swap(ary, i + 1, j);
+ var q = i + 1;
+
+ // (2) Recurse on each half.
+
+ doQuickSort(ary, comparator, p, q - 1);
+ doQuickSort(ary, comparator, q + 1, r);
+ }
+}
+
+/**
+ * Sort the given array in-place with the given comparator function.
+ *
+ * @param {Array} ary
+ * An array to sort.
+ * @param {function} comparator
+ * Function to use to compare two items.
+ */
+exports.quickSort = function (ary, comparator) {
+ doQuickSort(ary, comparator, 0, ary.length - 1);
+};
diff --git a/build/node_modules/source-map/lib/source-map-consumer.js b/build/node_modules/source-map/lib/source-map-consumer.js
new file mode 100644
index 00000000..6abcc280
--- /dev/null
+++ b/build/node_modules/source-map/lib/source-map-consumer.js
@@ -0,0 +1,1082 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+var binarySearch = require('./binary-search');
+var ArraySet = require('./array-set').ArraySet;
+var base64VLQ = require('./base64-vlq');
+var quickSort = require('./quick-sort').quickSort;
+
+function SourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ return sourceMap.sections != null
+ ? new IndexedSourceMapConsumer(sourceMap)
+ : new BasicSourceMapConsumer(sourceMap);
+}
+
+SourceMapConsumer.fromSourceMap = function(aSourceMap) {
+ return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
+}
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+SourceMapConsumer.prototype._version = 3;
+
+// `__generatedMappings` and `__originalMappings` are arrays that hold the
+// parsed mapping coordinates from the source map's "mappings" attribute. They
+// are lazily instantiated, accessed via the `_generatedMappings` and
+// `_originalMappings` getters respectively, and we only parse the mappings
+// and create these arrays once queried for a source location. We jump through
+// these hoops because there can be many thousands of mappings, and parsing
+// them is expensive, so we only want to do it if we must.
+//
+// Each object in the arrays is of the form:
+//
+// {
+// generatedLine: The line number in the generated code,
+// generatedColumn: The column number in the generated code,
+// source: The path to the original source file that generated this
+// chunk of code,
+// originalLine: The line number in the original source that
+// corresponds to this chunk of generated code,
+// originalColumn: The column number in the original source that
+// corresponds to this chunk of generated code,
+// name: The name of the original symbol which generated this chunk of
+// code.
+// }
+//
+// All properties except for `generatedLine` and `generatedColumn` can be
+// `null`.
+//
+// `_generatedMappings` is ordered by the generated positions.
+//
+// `_originalMappings` is ordered by the original positions.
+
+SourceMapConsumer.prototype.__generatedMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+ get: function () {
+ if (!this.__generatedMappings) {
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__generatedMappings;
+ }
+});
+
+SourceMapConsumer.prototype.__originalMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+ get: function () {
+ if (!this.__originalMappings) {
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__originalMappings;
+ }
+});
+
+SourceMapConsumer.prototype._charIsMappingSeparator =
+ function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+ var c = aStr.charAt(index);
+ return c === ";" || c === ",";
+ };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+SourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ throw new Error("Subclasses must implement _parseMappings");
+ };
+
+SourceMapConsumer.GENERATED_ORDER = 1;
+SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ * The function that is called with each mapping.
+ * @param Object aContext
+ * Optional. If specified, this object will be the value of `this` every
+ * time that `aCallback` is called.
+ * @param aOrder
+ * Either `SourceMapConsumer.GENERATED_ORDER` or
+ * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ * iterate over the mappings sorted by the generated file's line/column
+ * order or the original's source/line/column order, respectively. Defaults to
+ * `SourceMapConsumer.GENERATED_ORDER`.
+ */
+SourceMapConsumer.prototype.eachMapping =
+ function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+ var context = aContext || null;
+ var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+ var mappings;
+ switch (order) {
+ case SourceMapConsumer.GENERATED_ORDER:
+ mappings = this._generatedMappings;
+ break;
+ case SourceMapConsumer.ORIGINAL_ORDER:
+ mappings = this._originalMappings;
+ break;
+ default:
+ throw new Error("Unknown order of iteration.");
+ }
+
+ var sourceRoot = this.sourceRoot;
+ mappings.map(function (mapping) {
+ var source = mapping.source === null ? null : this._sources.at(mapping.source);
+ if (source != null && sourceRoot != null) {
+ source = util.join(sourceRoot, source);
+ }
+ return {
+ source: source,
+ generatedLine: mapping.generatedLine,
+ generatedColumn: mapping.generatedColumn,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name === null ? null : this._names.at(mapping.name)
+ };
+ }, this).forEach(aCallback, context);
+ };
+
+/**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: Optional. the column number in the original source.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+SourceMapConsumer.prototype.allGeneratedPositionsFor =
+ function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+ var line = util.getArg(aArgs, 'line');
+
+ // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+ // returns the index of the closest mapping less than the needle. By
+ // setting needle.originalColumn to 0, we thus find the last mapping for
+ // the given line, provided such a mapping exists.
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: line,
+ originalColumn: util.getArg(aArgs, 'column', 0)
+ };
+
+ if (this.sourceRoot != null) {
+ needle.source = util.relative(this.sourceRoot, needle.source);
+ }
+ if (!this._sources.has(needle.source)) {
+ return [];
+ }
+ needle.source = this._sources.indexOf(needle.source);
+
+ var mappings = [];
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions,
+ binarySearch.LEAST_UPPER_BOUND);
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ if (aArgs.column === undefined) {
+ var originalLine = mapping.originalLine;
+
+ // Iterate until either we run out of mappings, or we run into
+ // a mapping for a different line than the one we found. Since
+ // mappings are sorted, this is guaranteed to find all mappings for
+ // the line we found.
+ while (mapping && mapping.originalLine === originalLine) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[++index];
+ }
+ } else {
+ var originalColumn = mapping.originalColumn;
+
+ // Iterate until either we run out of mappings, or we run into
+ // a mapping for a different line than the one we were searching for.
+ // Since mappings are sorted, this is guaranteed to find all mappings for
+ // the line we are searching for.
+ while (mapping &&
+ mapping.originalLine === line &&
+ mapping.originalColumn == originalColumn) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[++index];
+ }
+ }
+ }
+
+ return mappings;
+ };
+
+exports.SourceMapConsumer = SourceMapConsumer;
+
+/**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The only parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - sources: An array of URLs to the original source files.
+ * - names: An array of identifiers which can be referrenced by individual mappings.
+ * - sourceRoot: Optional. The URL root from which all sources are relative.
+ * - sourcesContent: Optional. An array of contents of the original source files.
+ * - mappings: A string of base64 VLQs which contain the actual mappings.
+ * - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ * {
+ * version : 3,
+ * file: "out.js",
+ * sourceRoot : "",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AA,AB;;ABCDE;"
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+function BasicSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sources = util.getArg(sourceMap, 'sources');
+ // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+ // requires the array) to play nice here.
+ var names = util.getArg(sourceMap, 'names', []);
+ var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+ var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+ var mappings = util.getArg(sourceMap, 'mappings');
+ var file = util.getArg(sourceMap, 'file', null);
+
+ // Once again, Sass deviates from the spec and supplies the version as a
+ // string rather than a number, so we use loose equality checking here.
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ sources = sources
+ .map(String)
+ // Some source maps produce relative source paths like "./foo.js" instead of
+ // "foo.js". Normalize these first so that future comparisons will succeed.
+ // See bugzil.la/1090768.
+ .map(util.normalize)
+ // Always ensure that absolute sources are internally stored relative to
+ // the source root, if the source root is absolute. Not doing this would
+ // be particularly problematic when the source root is a prefix of the
+ // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+ .map(function (source) {
+ return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+ ? util.relative(sourceRoot, source)
+ : source;
+ });
+
+ // Pass `true` below to allow duplicate names and sources. While source maps
+ // are intended to be compressed and deduplicated, the TypeScript compiler
+ // sometimes generates source maps with duplicates in them. See Github issue
+ // #72 and bugzil.la/889492.
+ this._names = ArraySet.fromArray(names.map(String), true);
+ this._sources = ArraySet.fromArray(sources, true);
+
+ this.sourceRoot = sourceRoot;
+ this.sourcesContent = sourcesContent;
+ this._mappings = mappings;
+ this.file = file;
+}
+
+BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+/**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ * The source map that will be consumed.
+ * @returns BasicSourceMapConsumer
+ */
+BasicSourceMapConsumer.fromSourceMap =
+ function SourceMapConsumer_fromSourceMap(aSourceMap) {
+ var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+ var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+ var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+ smc.sourceRoot = aSourceMap._sourceRoot;
+ smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+ smc.sourceRoot);
+ smc.file = aSourceMap._file;
+
+ // Because we are modifying the entries (by converting string sources and
+ // names to indices into the sources and names ArraySets), we have to make
+ // a copy of the entry or else bad things happen. Shared mutable state
+ // strikes again! See github issue #191.
+
+ var generatedMappings = aSourceMap._mappings.toArray().slice();
+ var destGeneratedMappings = smc.__generatedMappings = [];
+ var destOriginalMappings = smc.__originalMappings = [];
+
+ for (var i = 0, length = generatedMappings.length; i < length; i++) {
+ var srcMapping = generatedMappings[i];
+ var destMapping = new Mapping;
+ destMapping.generatedLine = srcMapping.generatedLine;
+ destMapping.generatedColumn = srcMapping.generatedColumn;
+
+ if (srcMapping.source) {
+ destMapping.source = sources.indexOf(srcMapping.source);
+ destMapping.originalLine = srcMapping.originalLine;
+ destMapping.originalColumn = srcMapping.originalColumn;
+
+ if (srcMapping.name) {
+ destMapping.name = names.indexOf(srcMapping.name);
+ }
+
+ destOriginalMappings.push(destMapping);
+ }
+
+ destGeneratedMappings.push(destMapping);
+ }
+
+ quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+
+ return smc;
+ };
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+BasicSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ return this._sources.toArray().map(function (s) {
+ return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
+ }, this);
+ }
+});
+
+/**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+function Mapping() {
+ this.generatedLine = 0;
+ this.generatedColumn = 0;
+ this.source = null;
+ this.originalLine = null;
+ this.originalColumn = null;
+ this.name = null;
+}
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+BasicSourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ var generatedLine = 1;
+ var previousGeneratedColumn = 0;
+ var previousOriginalLine = 0;
+ var previousOriginalColumn = 0;
+ var previousSource = 0;
+ var previousName = 0;
+ var length = aStr.length;
+ var index = 0;
+ var cachedSegments = {};
+ var temp = {};
+ var originalMappings = [];
+ var generatedMappings = [];
+ var mapping, str, segment, end, value;
+
+ while (index < length) {
+ if (aStr.charAt(index) === ';') {
+ generatedLine++;
+ index++;
+ previousGeneratedColumn = 0;
+ }
+ else if (aStr.charAt(index) === ',') {
+ index++;
+ }
+ else {
+ mapping = new Mapping();
+ mapping.generatedLine = generatedLine;
+
+ // Because each offset is encoded relative to the previous one,
+ // many segments often have the same encoding. We can exploit this
+ // fact by caching the parsed variable length fields of each segment,
+ // allowing us to avoid a second parse if we encounter the same
+ // segment again.
+ for (end = index; end < length; end++) {
+ if (this._charIsMappingSeparator(aStr, end)) {
+ break;
+ }
+ }
+ str = aStr.slice(index, end);
+
+ segment = cachedSegments[str];
+ if (segment) {
+ index += str.length;
+ } else {
+ segment = [];
+ while (index < end) {
+ base64VLQ.decode(aStr, index, temp);
+ value = temp.value;
+ index = temp.rest;
+ segment.push(value);
+ }
+
+ if (segment.length === 2) {
+ throw new Error('Found a source, but no line and column');
+ }
+
+ if (segment.length === 3) {
+ throw new Error('Found a source and line, but no column');
+ }
+
+ cachedSegments[str] = segment;
+ }
+
+ // Generated column.
+ mapping.generatedColumn = previousGeneratedColumn + segment[0];
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (segment.length > 1) {
+ // Original source.
+ mapping.source = previousSource + segment[1];
+ previousSource += segment[1];
+
+ // Original line.
+ mapping.originalLine = previousOriginalLine + segment[2];
+ previousOriginalLine = mapping.originalLine;
+ // Lines are stored 0-based
+ mapping.originalLine += 1;
+
+ // Original column.
+ mapping.originalColumn = previousOriginalColumn + segment[3];
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (segment.length > 4) {
+ // Original name.
+ mapping.name = previousName + segment[4];
+ previousName += segment[4];
+ }
+ }
+
+ generatedMappings.push(mapping);
+ if (typeof mapping.originalLine === 'number') {
+ originalMappings.push(mapping);
+ }
+ }
+ }
+
+ quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
+ this.__generatedMappings = generatedMappings;
+
+ quickSort(originalMappings, util.compareByOriginalPositions);
+ this.__originalMappings = originalMappings;
+ };
+
+/**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+BasicSourceMapConsumer.prototype._findMapping =
+ function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+ aColumnName, aComparator, aBias) {
+ // To return the position we are searching for, we must first find the
+ // mapping for the given position and then return the opposite position it
+ // points to. Because the mappings are sorted, we can use binary search to
+ // find the best mapping.
+
+ if (aNeedle[aLineName] <= 0) {
+ throw new TypeError('Line must be greater than or equal to 1, got '
+ + aNeedle[aLineName]);
+ }
+ if (aNeedle[aColumnName] < 0) {
+ throw new TypeError('Column must be greater than or equal to 0, got '
+ + aNeedle[aColumnName]);
+ }
+
+ return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+ };
+
+/**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+BasicSourceMapConsumer.prototype.computeColumnSpans =
+ function SourceMapConsumer_computeColumnSpans() {
+ for (var index = 0; index < this._generatedMappings.length; ++index) {
+ var mapping = this._generatedMappings[index];
+
+ // Mappings do not contain a field for the last generated columnt. We
+ // can come up with an optimistic estimate, however, by assuming that
+ // mappings are contiguous (i.e. given two consecutive mappings, the
+ // first mapping ends where the second one starts).
+ if (index + 1 < this._generatedMappings.length) {
+ var nextMapping = this._generatedMappings[index + 1];
+
+ if (mapping.generatedLine === nextMapping.generatedLine) {
+ mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+ continue;
+ }
+ }
+
+ // The last mapping for each line spans the entire line.
+ mapping.lastGeneratedColumn = Infinity;
+ }
+ };
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+BasicSourceMapConsumer.prototype.originalPositionFor =
+ function SourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(
+ needle,
+ this._generatedMappings,
+ "generatedLine",
+ "generatedColumn",
+ util.compareByGeneratedPositionsDeflated,
+ util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+ );
+
+ if (index >= 0) {
+ var mapping = this._generatedMappings[index];
+
+ if (mapping.generatedLine === needle.generatedLine) {
+ var source = util.getArg(mapping, 'source', null);
+ if (source !== null) {
+ source = this._sources.at(source);
+ if (this.sourceRoot != null) {
+ source = util.join(this.sourceRoot, source);
+ }
+ }
+ var name = util.getArg(mapping, 'name', null);
+ if (name !== null) {
+ name = this._names.at(name);
+ }
+ return {
+ source: source,
+ line: util.getArg(mapping, 'originalLine', null),
+ column: util.getArg(mapping, 'originalColumn', null),
+ name: name
+ };
+ }
+ }
+
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+ function BasicSourceMapConsumer_hasContentsOfAllSources() {
+ if (!this.sourcesContent) {
+ return false;
+ }
+ return this.sourcesContent.length >= this._sources.size() &&
+ !this.sourcesContent.some(function (sc) { return sc == null; });
+ };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+BasicSourceMapConsumer.prototype.sourceContentFor =
+ function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ if (!this.sourcesContent) {
+ return null;
+ }
+
+ if (this.sourceRoot != null) {
+ aSource = util.relative(this.sourceRoot, aSource);
+ }
+
+ if (this._sources.has(aSource)) {
+ return this.sourcesContent[this._sources.indexOf(aSource)];
+ }
+
+ var url;
+ if (this.sourceRoot != null
+ && (url = util.urlParse(this.sourceRoot))) {
+ // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+ // many users. We can help them out when they expect file:// URIs to
+ // behave like it would if they were running a local HTTP server. See
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+ var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
+ if (url.scheme == "file"
+ && this._sources.has(fileUriAbsPath)) {
+ return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+ }
+
+ if ((!url.path || url.path == "/")
+ && this._sources.has("/" + aSource)) {
+ return this.sourcesContent[this._sources.indexOf("/" + aSource)];
+ }
+ }
+
+ // This function is used recursively from
+ // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+ // don't want to throw if we can't find the source - we just want to
+ // return null, so we provide a flag to exit gracefully.
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+BasicSourceMapConsumer.prototype.generatedPositionFor =
+ function SourceMapConsumer_generatedPositionFor(aArgs) {
+ var source = util.getArg(aArgs, 'source');
+ if (this.sourceRoot != null) {
+ source = util.relative(this.sourceRoot, source);
+ }
+ if (!this._sources.has(source)) {
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ }
+ source = this._sources.indexOf(source);
+
+ var needle = {
+ source: source,
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(
+ needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions,
+ util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+ );
+
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ if (mapping.source === needle.source) {
+ return {
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ };
+ }
+ }
+
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ };
+
+exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+/**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The only parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - file: Optional. The generated file this source map is associated with.
+ * - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ * - offset: The offset into the original specified at which this section
+ * begins to apply, defined as an object with a "line" and "column"
+ * field.
+ * - map: A source map definition. This source map could also be indexed,
+ * but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ * {
+ * version : 3,
+ * file: "app.js",
+ * sections: [{
+ * offset: {line:100, column:10},
+ * map: {
+ * version : 3,
+ * file: "section.js",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AAAA,E;;ABCDE;"
+ * }
+ * }],
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+function IndexedSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sections = util.getArg(sourceMap, 'sections');
+
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+
+ var lastOffset = {
+ line: -1,
+ column: 0
+ };
+ this._sections = sections.map(function (s) {
+ if (s.url) {
+ // The url field will require support for asynchronicity.
+ // See https://github.com/mozilla/source-map/issues/16
+ throw new Error('Support for url field in sections not implemented.');
+ }
+ var offset = util.getArg(s, 'offset');
+ var offsetLine = util.getArg(offset, 'line');
+ var offsetColumn = util.getArg(offset, 'column');
+
+ if (offsetLine < lastOffset.line ||
+ (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+ throw new Error('Section offsets must be ordered and non-overlapping.');
+ }
+ lastOffset = offset;
+
+ return {
+ generatedOffset: {
+ // The offset fields are 0-based, but we use 1-based indices when
+ // encoding/decoding from VLQ.
+ generatedLine: offsetLine + 1,
+ generatedColumn: offsetColumn + 1
+ },
+ consumer: new SourceMapConsumer(util.getArg(s, 'map'))
+ }
+ });
+}
+
+IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+IndexedSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ var sources = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+ sources.push(this._sections[i].consumer.sources[j]);
+ }
+ }
+ return sources;
+ }
+});
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+IndexedSourceMapConsumer.prototype.originalPositionFor =
+ function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ // Find the section containing the generated position we're trying to map
+ // to an original position.
+ var sectionIndex = binarySearch.search(needle, this._sections,
+ function(needle, section) {
+ var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return (needle.generatedColumn -
+ section.generatedOffset.generatedColumn);
+ });
+ var section = this._sections[sectionIndex];
+
+ if (!section) {
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ }
+
+ return section.consumer.originalPositionFor({
+ line: needle.generatedLine -
+ (section.generatedOffset.generatedLine - 1),
+ column: needle.generatedColumn -
+ (section.generatedOffset.generatedLine === needle.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ bias: aArgs.bias
+ });
+ };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+ function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+ return this._sections.every(function (s) {
+ return s.consumer.hasContentsOfAllSources();
+ });
+ };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+IndexedSourceMapConsumer.prototype.sourceContentFor =
+ function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ var content = section.consumer.sourceContentFor(aSource, true);
+ if (content) {
+ return content;
+ }
+ }
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+IndexedSourceMapConsumer.prototype.generatedPositionFor =
+ function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ // Only consider this section if the requested source is in the list of
+ // sources of the consumer.
+ if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
+ continue;
+ }
+ var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+ if (generatedPosition) {
+ var ret = {
+ line: generatedPosition.line +
+ (section.generatedOffset.generatedLine - 1),
+ column: generatedPosition.column +
+ (section.generatedOffset.generatedLine === generatedPosition.line
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ };
+ return ret;
+ }
+ }
+
+ return {
+ line: null,
+ column: null
+ };
+ };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+IndexedSourceMapConsumer.prototype._parseMappings =
+ function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+ var sectionMappings = section.consumer._generatedMappings;
+ for (var j = 0; j < sectionMappings.length; j++) {
+ var mapping = sectionMappings[j];
+
+ var source = section.consumer._sources.at(mapping.source);
+ if (section.consumer.sourceRoot !== null) {
+ source = util.join(section.consumer.sourceRoot, source);
+ }
+ this._sources.add(source);
+ source = this._sources.indexOf(source);
+
+ var name = section.consumer._names.at(mapping.name);
+ this._names.add(name);
+ name = this._names.indexOf(name);
+
+ // The mappings coming from the consumer for the section have
+ // generated positions relative to the start of the section, so we
+ // need to offset them to be relative to the start of the concatenated
+ // generated file.
+ var adjustedMapping = {
+ source: source,
+ generatedLine: mapping.generatedLine +
+ (section.generatedOffset.generatedLine - 1),
+ generatedColumn: mapping.generatedColumn +
+ (section.generatedOffset.generatedLine === mapping.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: name
+ };
+
+ this.__generatedMappings.push(adjustedMapping);
+ if (typeof adjustedMapping.originalLine === 'number') {
+ this.__originalMappings.push(adjustedMapping);
+ }
+ }
+ }
+
+ quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+ quickSort(this.__originalMappings, util.compareByOriginalPositions);
+ };
+
+exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
diff --git a/build/node_modules/source-map/lib/source-map-generator.js b/build/node_modules/source-map/lib/source-map-generator.js
new file mode 100644
index 00000000..aff1e7fb
--- /dev/null
+++ b/build/node_modules/source-map/lib/source-map-generator.js
@@ -0,0 +1,416 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var base64VLQ = require('./base64-vlq');
+var util = require('./util');
+var ArraySet = require('./array-set').ArraySet;
+var MappingList = require('./mapping-list').MappingList;
+
+/**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ * - file: The filename of the generated source.
+ * - sourceRoot: A root for all relative URLs in this source map.
+ */
+function SourceMapGenerator(aArgs) {
+ if (!aArgs) {
+ aArgs = {};
+ }
+ this._file = util.getArg(aArgs, 'file', null);
+ this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+ this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+ this._mappings = new MappingList();
+ this._sourcesContents = null;
+}
+
+SourceMapGenerator.prototype._version = 3;
+
+/**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+SourceMapGenerator.fromSourceMap =
+ function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+ var sourceRoot = aSourceMapConsumer.sourceRoot;
+ var generator = new SourceMapGenerator({
+ file: aSourceMapConsumer.file,
+ sourceRoot: sourceRoot
+ });
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ var newMapping = {
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ }
+ };
+
+ if (mapping.source != null) {
+ newMapping.source = mapping.source;
+ if (sourceRoot != null) {
+ newMapping.source = util.relative(sourceRoot, newMapping.source);
+ }
+
+ newMapping.original = {
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ };
+
+ if (mapping.name != null) {
+ newMapping.name = mapping.name;
+ }
+ }
+
+ generator.addMapping(newMapping);
+ });
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ generator.setSourceContent(sourceFile, content);
+ }
+ });
+ return generator;
+ };
+
+/**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ * - generated: An object with the generated line and column positions.
+ * - original: An object with the original line and column positions.
+ * - source: The original source file (relative to the sourceRoot).
+ * - name: An optional original token name for this mapping.
+ */
+SourceMapGenerator.prototype.addMapping =
+ function SourceMapGenerator_addMapping(aArgs) {
+ var generated = util.getArg(aArgs, 'generated');
+ var original = util.getArg(aArgs, 'original', null);
+ var source = util.getArg(aArgs, 'source', null);
+ var name = util.getArg(aArgs, 'name', null);
+
+ if (!this._skipValidation) {
+ this._validateMapping(generated, original, source, name);
+ }
+
+ if (source != null) {
+ source = String(source);
+ if (!this._sources.has(source)) {
+ this._sources.add(source);
+ }
+ }
+
+ if (name != null) {
+ name = String(name);
+ if (!this._names.has(name)) {
+ this._names.add(name);
+ }
+ }
+
+ this._mappings.add({
+ generatedLine: generated.line,
+ generatedColumn: generated.column,
+ originalLine: original != null && original.line,
+ originalColumn: original != null && original.column,
+ source: source,
+ name: name
+ });
+ };
+
+/**
+ * Set the source content for a source file.
+ */
+SourceMapGenerator.prototype.setSourceContent =
+ function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+ var source = aSourceFile;
+ if (this._sourceRoot != null) {
+ source = util.relative(this._sourceRoot, source);
+ }
+
+ if (aSourceContent != null) {
+ // Add the source content to the _sourcesContents map.
+ // Create a new _sourcesContents map if the property is null.
+ if (!this._sourcesContents) {
+ this._sourcesContents = Object.create(null);
+ }
+ this._sourcesContents[util.toSetString(source)] = aSourceContent;
+ } else if (this._sourcesContents) {
+ // Remove the source file from the _sourcesContents map.
+ // If the _sourcesContents map is empty, set the property to null.
+ delete this._sourcesContents[util.toSetString(source)];
+ if (Object.keys(this._sourcesContents).length === 0) {
+ this._sourcesContents = null;
+ }
+ }
+ };
+
+/**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ * If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ * to be applied. If relative, it is relative to the SourceMapConsumer.
+ * This parameter is needed when the two source maps aren't in the same
+ * directory, and the source map to be applied contains relative source
+ * paths. If so, those relative source paths need to be rewritten
+ * relative to the SourceMapGenerator.
+ */
+SourceMapGenerator.prototype.applySourceMap =
+ function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+ var sourceFile = aSourceFile;
+ // If aSourceFile is omitted, we will use the file property of the SourceMap
+ if (aSourceFile == null) {
+ if (aSourceMapConsumer.file == null) {
+ throw new Error(
+ 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+ 'or the source map\'s "file" property. Both were omitted.'
+ );
+ }
+ sourceFile = aSourceMapConsumer.file;
+ }
+ var sourceRoot = this._sourceRoot;
+ // Make "sourceFile" relative if an absolute Url is passed.
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ // Applying the SourceMap can add and remove items from the sources and
+ // the names array.
+ var newSources = new ArraySet();
+ var newNames = new ArraySet();
+
+ // Find mappings for the "sourceFile"
+ this._mappings.unsortedForEach(function (mapping) {
+ if (mapping.source === sourceFile && mapping.originalLine != null) {
+ // Check if it can be mapped by the source map, then update the mapping.
+ var original = aSourceMapConsumer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+ if (original.source != null) {
+ // Copy mapping
+ mapping.source = original.source;
+ if (aSourceMapPath != null) {
+ mapping.source = util.join(aSourceMapPath, mapping.source)
+ }
+ if (sourceRoot != null) {
+ mapping.source = util.relative(sourceRoot, mapping.source);
+ }
+ mapping.originalLine = original.line;
+ mapping.originalColumn = original.column;
+ if (original.name != null) {
+ mapping.name = original.name;
+ }
+ }
+ }
+
+ var source = mapping.source;
+ if (source != null && !newSources.has(source)) {
+ newSources.add(source);
+ }
+
+ var name = mapping.name;
+ if (name != null && !newNames.has(name)) {
+ newNames.add(name);
+ }
+
+ }, this);
+ this._sources = newSources;
+ this._names = newNames;
+
+ // Copy sourcesContents of applied map.
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aSourceMapPath != null) {
+ sourceFile = util.join(aSourceMapPath, sourceFile);
+ }
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ this.setSourceContent(sourceFile, content);
+ }
+ }, this);
+ };
+
+/**
+ * A mapping can have one of the three levels of data:
+ *
+ * 1. Just the generated position.
+ * 2. The Generated position, original position, and original source.
+ * 3. Generated and original position, original source, as well as a name
+ * token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+SourceMapGenerator.prototype._validateMapping =
+ function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+ aName) {
+ // When aOriginal is truthy but has empty values for .line and .column,
+ // it is most likely a programmer error. In this case we throw a very
+ // specific error message to try to guide them the right way.
+ // For example: https://github.com/Polymer/polymer-bundler/pull/519
+ if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
+ throw new Error(
+ 'original.line and original.column are not numbers -- you probably meant to omit ' +
+ 'the original mapping entirely and only map the generated position. If so, pass ' +
+ 'null for the original mapping instead of an object with empty or null values.'
+ );
+ }
+
+ if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && !aOriginal && !aSource && !aName) {
+ // Case 1.
+ return;
+ }
+ else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && aOriginal.line > 0 && aOriginal.column >= 0
+ && aSource) {
+ // Cases 2 and 3.
+ return;
+ }
+ else {
+ throw new Error('Invalid mapping: ' + JSON.stringify({
+ generated: aGenerated,
+ source: aSource,
+ original: aOriginal,
+ name: aName
+ }));
+ }
+ };
+
+/**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+SourceMapGenerator.prototype._serializeMappings =
+ function SourceMapGenerator_serializeMappings() {
+ var previousGeneratedColumn = 0;
+ var previousGeneratedLine = 1;
+ var previousOriginalColumn = 0;
+ var previousOriginalLine = 0;
+ var previousName = 0;
+ var previousSource = 0;
+ var result = '';
+ var next;
+ var mapping;
+ var nameIdx;
+ var sourceIdx;
+
+ var mappings = this._mappings.toArray();
+ for (var i = 0, len = mappings.length; i < len; i++) {
+ mapping = mappings[i];
+ next = ''
+
+ if (mapping.generatedLine !== previousGeneratedLine) {
+ previousGeneratedColumn = 0;
+ while (mapping.generatedLine !== previousGeneratedLine) {
+ next += ';';
+ previousGeneratedLine++;
+ }
+ }
+ else {
+ if (i > 0) {
+ if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+ continue;
+ }
+ next += ',';
+ }
+ }
+
+ next += base64VLQ.encode(mapping.generatedColumn
+ - previousGeneratedColumn);
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (mapping.source != null) {
+ sourceIdx = this._sources.indexOf(mapping.source);
+ next += base64VLQ.encode(sourceIdx - previousSource);
+ previousSource = sourceIdx;
+
+ // lines are stored 0-based in SourceMap spec version 3
+ next += base64VLQ.encode(mapping.originalLine - 1
+ - previousOriginalLine);
+ previousOriginalLine = mapping.originalLine - 1;
+
+ next += base64VLQ.encode(mapping.originalColumn
+ - previousOriginalColumn);
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (mapping.name != null) {
+ nameIdx = this._names.indexOf(mapping.name);
+ next += base64VLQ.encode(nameIdx - previousName);
+ previousName = nameIdx;
+ }
+ }
+
+ result += next;
+ }
+
+ return result;
+ };
+
+SourceMapGenerator.prototype._generateSourcesContent =
+ function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+ return aSources.map(function (source) {
+ if (!this._sourcesContents) {
+ return null;
+ }
+ if (aSourceRoot != null) {
+ source = util.relative(aSourceRoot, source);
+ }
+ var key = util.toSetString(source);
+ return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+ ? this._sourcesContents[key]
+ : null;
+ }, this);
+ };
+
+/**
+ * Externalize the source map.
+ */
+SourceMapGenerator.prototype.toJSON =
+ function SourceMapGenerator_toJSON() {
+ var map = {
+ version: this._version,
+ sources: this._sources.toArray(),
+ names: this._names.toArray(),
+ mappings: this._serializeMappings()
+ };
+ if (this._file != null) {
+ map.file = this._file;
+ }
+ if (this._sourceRoot != null) {
+ map.sourceRoot = this._sourceRoot;
+ }
+ if (this._sourcesContents) {
+ map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ }
+
+ return map;
+ };
+
+/**
+ * Render the source map being generated to a string.
+ */
+SourceMapGenerator.prototype.toString =
+ function SourceMapGenerator_toString() {
+ return JSON.stringify(this.toJSON());
+ };
+
+exports.SourceMapGenerator = SourceMapGenerator;
diff --git a/build/node_modules/source-map/lib/source-node.js b/build/node_modules/source-map/lib/source-node.js
new file mode 100644
index 00000000..d196a53f
--- /dev/null
+++ b/build/node_modules/source-map/lib/source-node.js
@@ -0,0 +1,413 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
+var util = require('./util');
+
+// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+// operating systems these days (capturing the result).
+var REGEX_NEWLINE = /(\r?\n)/;
+
+// Newline character code for charCodeAt() comparisons
+var NEWLINE_CODE = 10;
+
+// Private symbol for identifying `SourceNode`s when multiple versions of
+// the source-map library are loaded. This MUST NOT CHANGE across
+// versions!
+var isSourceNode = "$$$isSourceNode$$$";
+
+/**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ * generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+ this.children = [];
+ this.sourceContents = {};
+ this.line = aLine == null ? null : aLine;
+ this.column = aColumn == null ? null : aColumn;
+ this.source = aSource == null ? null : aSource;
+ this.name = aName == null ? null : aName;
+ this[isSourceNode] = true;
+ if (aChunks != null) this.add(aChunks);
+}
+
+/**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ * SourceMapConsumer should be relative to.
+ */
+SourceNode.fromStringWithSourceMap =
+ function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+ // The SourceNode we want to fill with the generated code
+ // and the SourceMap
+ var node = new SourceNode();
+
+ // All even indices of this array are one line of the generated code,
+ // while all odd indices are the newlines between two adjacent lines
+ // (since `REGEX_NEWLINE` captures its match).
+ // Processed fragments are accessed by calling `shiftNextLine`.
+ var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+ var remainingLinesIndex = 0;
+ var shiftNextLine = function() {
+ var lineContents = getNextLine();
+ // The last line of a file might not have a newline.
+ var newLine = getNextLine() || "";
+ return lineContents + newLine;
+
+ function getNextLine() {
+ return remainingLinesIndex < remainingLines.length ?
+ remainingLines[remainingLinesIndex++] : undefined;
+ }
+ };
+
+ // We need to remember the position of "remainingLines"
+ var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+ // The generate SourceNodes we need a code range.
+ // To extract it current and last mapping is used.
+ // Here we store the last mapping.
+ var lastMapping = null;
+
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ if (lastMapping !== null) {
+ // We add the code from "lastMapping" to "mapping":
+ // First check if there is a new line in between.
+ if (lastGeneratedLine < mapping.generatedLine) {
+ // Associate first line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ lastGeneratedLine++;
+ lastGeneratedColumn = 0;
+ // The remaining code is added without mapping
+ } else {
+ // There is no new line in between.
+ // Associate the code between "lastGeneratedColumn" and
+ // "mapping.generatedColumn" with "lastMapping"
+ var nextLine = remainingLines[remainingLinesIndex];
+ var code = nextLine.substr(0, mapping.generatedColumn -
+ lastGeneratedColumn);
+ remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+ lastGeneratedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ addMappingWithCode(lastMapping, code);
+ // No more remaining code, continue
+ lastMapping = mapping;
+ return;
+ }
+ }
+ // We add the generated code until the first mapping
+ // to the SourceNode without any mapping.
+ // Each line is added as separate string.
+ while (lastGeneratedLine < mapping.generatedLine) {
+ node.add(shiftNextLine());
+ lastGeneratedLine++;
+ }
+ if (lastGeneratedColumn < mapping.generatedColumn) {
+ var nextLine = remainingLines[remainingLinesIndex];
+ node.add(nextLine.substr(0, mapping.generatedColumn));
+ remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ }
+ lastMapping = mapping;
+ }, this);
+ // We have processed all mappings.
+ if (remainingLinesIndex < remainingLines.length) {
+ if (lastMapping) {
+ // Associate the remaining code in the current line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ }
+ // and add the remaining lines without any mapping
+ node.add(remainingLines.splice(remainingLinesIndex).join(""));
+ }
+
+ // Copy sourcesContent into SourceNode
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aRelativePath != null) {
+ sourceFile = util.join(aRelativePath, sourceFile);
+ }
+ node.setSourceContent(sourceFile, content);
+ }
+ });
+
+ return node;
+
+ function addMappingWithCode(mapping, code) {
+ if (mapping === null || mapping.source === undefined) {
+ node.add(code);
+ } else {
+ var source = aRelativePath
+ ? util.join(aRelativePath, mapping.source)
+ : mapping.source;
+ node.add(new SourceNode(mapping.originalLine,
+ mapping.originalColumn,
+ source,
+ code,
+ mapping.name));
+ }
+ }
+ };
+
+/**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.add = function SourceNode_add(aChunk) {
+ if (Array.isArray(aChunk)) {
+ aChunk.forEach(function (chunk) {
+ this.add(chunk);
+ }, this);
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ if (aChunk) {
+ this.children.push(aChunk);
+ }
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+};
+
+/**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+ if (Array.isArray(aChunk)) {
+ for (var i = aChunk.length-1; i >= 0; i--) {
+ this.prepend(aChunk[i]);
+ }
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ this.children.unshift(aChunk);
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+};
+
+/**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+ var chunk;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ chunk = this.children[i];
+ if (chunk[isSourceNode]) {
+ chunk.walk(aFn);
+ }
+ else {
+ if (chunk !== '') {
+ aFn(chunk, { source: this.source,
+ line: this.line,
+ column: this.column,
+ name: this.name });
+ }
+ }
+ }
+};
+
+/**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+SourceNode.prototype.join = function SourceNode_join(aSep) {
+ var newChildren;
+ var i;
+ var len = this.children.length;
+ if (len > 0) {
+ newChildren = [];
+ for (i = 0; i < len-1; i++) {
+ newChildren.push(this.children[i]);
+ newChildren.push(aSep);
+ }
+ newChildren.push(this.children[i]);
+ this.children = newChildren;
+ }
+ return this;
+};
+
+/**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+ var lastChild = this.children[this.children.length - 1];
+ if (lastChild[isSourceNode]) {
+ lastChild.replaceRight(aPattern, aReplacement);
+ }
+ else if (typeof lastChild === 'string') {
+ this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+ }
+ else {
+ this.children.push(''.replace(aPattern, aReplacement));
+ }
+ return this;
+};
+
+/**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+SourceNode.prototype.setSourceContent =
+ function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+ this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+ };
+
+/**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walkSourceContents =
+ function SourceNode_walkSourceContents(aFn) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ if (this.children[i][isSourceNode]) {
+ this.children[i].walkSourceContents(aFn);
+ }
+ }
+
+ var sources = Object.keys(this.sourceContents);
+ for (var i = 0, len = sources.length; i < len; i++) {
+ aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ }
+ };
+
+/**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+SourceNode.prototype.toString = function SourceNode_toString() {
+ var str = "";
+ this.walk(function (chunk) {
+ str += chunk;
+ });
+ return str;
+};
+
+/**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+ var generated = {
+ code: "",
+ line: 1,
+ column: 0
+ };
+ var map = new SourceMapGenerator(aArgs);
+ var sourceMappingActive = false;
+ var lastOriginalSource = null;
+ var lastOriginalLine = null;
+ var lastOriginalColumn = null;
+ var lastOriginalName = null;
+ this.walk(function (chunk, original) {
+ generated.code += chunk;
+ if (original.source !== null
+ && original.line !== null
+ && original.column !== null) {
+ if(lastOriginalSource !== original.source
+ || lastOriginalLine !== original.line
+ || lastOriginalColumn !== original.column
+ || lastOriginalName !== original.name) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ lastOriginalSource = original.source;
+ lastOriginalLine = original.line;
+ lastOriginalColumn = original.column;
+ lastOriginalName = original.name;
+ sourceMappingActive = true;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ generated: {
+ line: generated.line,
+ column: generated.column
+ }
+ });
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ }
+ for (var idx = 0, length = chunk.length; idx < length; idx++) {
+ if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+ generated.line++;
+ generated.column = 0;
+ // Mappings end at eol
+ if (idx + 1 === length) {
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ } else {
+ generated.column++;
+ }
+ }
+ });
+ this.walkSourceContents(function (sourceFile, sourceContent) {
+ map.setSourceContent(sourceFile, sourceContent);
+ });
+
+ return { code: generated.code, map: map };
+};
+
+exports.SourceNode = SourceNode;
diff --git a/build/node_modules/source-map/lib/util.js b/build/node_modules/source-map/lib/util.js
new file mode 100644
index 00000000..44e0e452
--- /dev/null
+++ b/build/node_modules/source-map/lib/util.js
@@ -0,0 +1,417 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+function getArg(aArgs, aName, aDefaultValue) {
+ if (aName in aArgs) {
+ return aArgs[aName];
+ } else if (arguments.length === 3) {
+ return aDefaultValue;
+ } else {
+ throw new Error('"' + aName + '" is a required argument.');
+ }
+}
+exports.getArg = getArg;
+
+var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
+var dataUrlRegexp = /^data:.+\,.+$/;
+
+function urlParse(aUrl) {
+ var match = aUrl.match(urlRegexp);
+ if (!match) {
+ return null;
+ }
+ return {
+ scheme: match[1],
+ auth: match[2],
+ host: match[3],
+ port: match[4],
+ path: match[5]
+ };
+}
+exports.urlParse = urlParse;
+
+function urlGenerate(aParsedUrl) {
+ var url = '';
+ if (aParsedUrl.scheme) {
+ url += aParsedUrl.scheme + ':';
+ }
+ url += '//';
+ if (aParsedUrl.auth) {
+ url += aParsedUrl.auth + '@';
+ }
+ if (aParsedUrl.host) {
+ url += aParsedUrl.host;
+ }
+ if (aParsedUrl.port) {
+ url += ":" + aParsedUrl.port
+ }
+ if (aParsedUrl.path) {
+ url += aParsedUrl.path;
+ }
+ return url;
+}
+exports.urlGenerate = urlGenerate;
+
+/**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consecutive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+function normalize(aPath) {
+ var path = aPath;
+ var url = urlParse(aPath);
+ if (url) {
+ if (!url.path) {
+ return aPath;
+ }
+ path = url.path;
+ }
+ var isAbsolute = exports.isAbsolute(path);
+
+ var parts = path.split(/\/+/);
+ for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+ part = parts[i];
+ if (part === '.') {
+ parts.splice(i, 1);
+ } else if (part === '..') {
+ up++;
+ } else if (up > 0) {
+ if (part === '') {
+ // The first part is blank if the path is absolute. Trying to go
+ // above the root is a no-op. Therefore we can remove all '..' parts
+ // directly after the root.
+ parts.splice(i + 1, up);
+ up = 0;
+ } else {
+ parts.splice(i, 2);
+ up--;
+ }
+ }
+ }
+ path = parts.join('/');
+
+ if (path === '') {
+ path = isAbsolute ? '/' : '.';
+ }
+
+ if (url) {
+ url.path = path;
+ return urlGenerate(url);
+ }
+ return path;
+}
+exports.normalize = normalize;
+
+/**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ * first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ * is updated with the result and aRoot is returned. Otherwise the result
+ * is returned.
+ * - If aPath is absolute, the result is aPath.
+ * - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+function join(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+ if (aPath === "") {
+ aPath = ".";
+ }
+ var aPathUrl = urlParse(aPath);
+ var aRootUrl = urlParse(aRoot);
+ if (aRootUrl) {
+ aRoot = aRootUrl.path || '/';
+ }
+
+ // `join(foo, '//www.example.org')`
+ if (aPathUrl && !aPathUrl.scheme) {
+ if (aRootUrl) {
+ aPathUrl.scheme = aRootUrl.scheme;
+ }
+ return urlGenerate(aPathUrl);
+ }
+
+ if (aPathUrl || aPath.match(dataUrlRegexp)) {
+ return aPath;
+ }
+
+ // `join('http://', 'www.example.com')`
+ if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+ aRootUrl.host = aPath;
+ return urlGenerate(aRootUrl);
+ }
+
+ var joined = aPath.charAt(0) === '/'
+ ? aPath
+ : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+ if (aRootUrl) {
+ aRootUrl.path = joined;
+ return urlGenerate(aRootUrl);
+ }
+ return joined;
+}
+exports.join = join;
+
+exports.isAbsolute = function (aPath) {
+ return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
+};
+
+/**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+function relative(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+
+ aRoot = aRoot.replace(/\/$/, '');
+
+ // It is possible for the path to be above the root. In this case, simply
+ // checking whether the root is a prefix of the path won't work. Instead, we
+ // need to remove components from the root one by one, until either we find
+ // a prefix that fits, or we run out of components to remove.
+ var level = 0;
+ while (aPath.indexOf(aRoot + '/') !== 0) {
+ var index = aRoot.lastIndexOf("/");
+ if (index < 0) {
+ return aPath;
+ }
+
+ // If the only part of the root that is left is the scheme (i.e. http://,
+ // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+ // have exhausted all components, so the path is not relative to the root.
+ aRoot = aRoot.slice(0, index);
+ if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+ return aPath;
+ }
+
+ ++level;
+ }
+
+ // Make sure we add a "../" for each component we removed from the root.
+ return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+}
+exports.relative = relative;
+
+var supportsNullProto = (function () {
+ var obj = Object.create(null);
+ return !('__proto__' in obj);
+}());
+
+function identity (s) {
+ return s;
+}
+
+/**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+function toSetString(aStr) {
+ if (isProtoString(aStr)) {
+ return '$' + aStr;
+ }
+
+ return aStr;
+}
+exports.toSetString = supportsNullProto ? identity : toSetString;
+
+function fromSetString(aStr) {
+ if (isProtoString(aStr)) {
+ return aStr.slice(1);
+ }
+
+ return aStr;
+}
+exports.fromSetString = supportsNullProto ? identity : fromSetString;
+
+function isProtoString(s) {
+ if (!s) {
+ return false;
+ }
+
+ var length = s.length;
+
+ if (length < 9 /* "__proto__".length */) {
+ return false;
+ }
+
+ if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 2) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+ s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+ s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+ s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+ s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+ s.charCodeAt(length - 8) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 9) !== 95 /* '_' */) {
+ return false;
+ }
+
+ for (var i = length - 10; i >= 0; i--) {
+ if (s.charCodeAt(i) !== 36 /* '$' */) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+ var cmp = mappingA.source - mappingB.source;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0 || onlyCompareOriginal) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return mappingA.name - mappingB.name;
+}
+exports.compareByOriginalPositions = compareByOriginalPositions;
+
+/**
+ * Comparator between two mappings with deflated source and name indices where
+ * the generated positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+ var cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0 || onlyCompareGenerated) {
+ return cmp;
+ }
+
+ cmp = mappingA.source - mappingB.source;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return mappingA.name - mappingB.name;
+}
+exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+
+function strcmp(aStr1, aStr2) {
+ if (aStr1 === aStr2) {
+ return 0;
+ }
+
+ if (aStr1 > aStr2) {
+ return 1;
+ }
+
+ return -1;
+}
+
+/**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+ var cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
diff --git a/build/node_modules/source-map/package.json b/build/node_modules/source-map/package.json
new file mode 100644
index 00000000..12953247
--- /dev/null
+++ b/build/node_modules/source-map/package.json
@@ -0,0 +1,255 @@
+{
+ "_args": [
+ [
+ "source-map@^0.5.6",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/snapdragon"
+ ]
+ ],
+ "_from": "source-map@>=0.5.6 <0.6.0",
+ "_id": "source-map@0.5.7",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/source-map",
+ "_nodeVersion": "6.11.1",
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages",
+ "tmp": "tmp/source-map-0.5.7.tgz_1503333015516_0.19087489508092403"
+ },
+ "_npmUser": {
+ "email": "tom@tromey.com",
+ "name": "tromey"
+ },
+ "_npmVersion": "3.10.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "source-map",
+ "raw": "source-map@^0.5.6",
+ "rawSpec": "^0.5.6",
+ "scope": null,
+ "spec": ">=0.5.6 <0.6.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/snapdragon"
+ ],
+ "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "_shasum": "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
+ "_shrinkwrap": null,
+ "_spec": "source-map@^0.5.6",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/snapdragon",
+ "author": {
+ "email": "nfitzgerald@mozilla.com",
+ "name": "Nick Fitzgerald"
+ },
+ "bugs": {
+ "url": "https://github.com/mozilla/source-map/issues"
+ },
+ "contributors": [
+ {
+ "email": "tobias.koppers@googlemail.com",
+ "name": "Tobias Koppers"
+ },
+ {
+ "email": "duncan@dweebd.com",
+ "name": "Duncan Beevers"
+ },
+ {
+ "email": "scrane@mozilla.com",
+ "name": "Stephen Crane"
+ },
+ {
+ "email": "seddon.ryan@gmail.com",
+ "name": "Ryan Seddon"
+ },
+ {
+ "email": "miles.elam@deem.com",
+ "name": "Miles Elam"
+ },
+ {
+ "email": "mihai.bazon@gmail.com",
+ "name": "Mihai Bazon"
+ },
+ {
+ "email": "github.public.email@michael.ficarra.me",
+ "name": "Michael Ficarra"
+ },
+ {
+ "email": "todd@twolfson.com",
+ "name": "Todd Wolfson"
+ },
+ {
+ "email": "alexander@solovyov.net",
+ "name": "Alexander Solovyov"
+ },
+ {
+ "email": "fgnass@gmail.com",
+ "name": "Felix Gnass"
+ },
+ {
+ "email": "conrad.irwin@gmail.com",
+ "name": "Conrad Irwin"
+ },
+ {
+ "email": "usrbincc@yahoo.com",
+ "name": "usrbincc"
+ },
+ {
+ "email": "glasser@davidglasser.net",
+ "name": "David Glasser"
+ },
+ {
+ "email": "chase@newrelic.com",
+ "name": "Chase Douglas"
+ },
+ {
+ "email": "evan.exe@gmail.com",
+ "name": "Evan Wallace"
+ },
+ {
+ "email": "fayearthur@gmail.com",
+ "name": "Heather Arthur"
+ },
+ {
+ "email": "hughskennedy@gmail.com",
+ "name": "Hugh Kennedy"
+ },
+ {
+ "email": "glasser@davidglasser.net",
+ "name": "David Glasser"
+ },
+ {
+ "email": "simon.lydell@gmail.com",
+ "name": "Simon Lydell"
+ },
+ {
+ "email": "jellyes2@gmail.com",
+ "name": "Jmeas Smith"
+ },
+ {
+ "email": "mzgoddard@gmail.com",
+ "name": "Michael Z Goddard"
+ },
+ {
+ "email": "azu@users.noreply.github.com",
+ "name": "azu"
+ },
+ {
+ "email": "john@gozde.ca",
+ "name": "John Gozde"
+ },
+ {
+ "email": "akirkton@truefitinnovation.com",
+ "name": "Adam Kirkton"
+ },
+ {
+ "email": "christopher.montgomery@dowjones.com",
+ "name": "Chris Montgomery"
+ },
+ {
+ "email": "jryans@gmail.com",
+ "name": "J. Ryan Stinnett"
+ },
+ {
+ "email": "jherrington@walmartlabs.com",
+ "name": "Jack Herrington"
+ },
+ {
+ "email": "jeffpalentine@gmail.com",
+ "name": "Chris Truter"
+ },
+ {
+ "email": "daniel@danielespeset.com",
+ "name": "Daniel Espeset"
+ },
+ {
+ "email": "jamie.lf.wong@gmail.com",
+ "name": "Jamie Wong"
+ },
+ {
+ "email": "ejpbruel@mozilla.com",
+ "name": "Eddy Bruël"
+ },
+ {
+ "email": "hawkrives@gmail.com",
+ "name": "Hawken Rives"
+ },
+ {
+ "email": "giladp007@gmail.com",
+ "name": "Gilad Peleg"
+ },
+ {
+ "email": "djchie.dev@gmail.com",
+ "name": "djchie"
+ },
+ {
+ "email": "garysye@gmail.com",
+ "name": "Gary Ye"
+ },
+ {
+ "email": "nicolas.lalevee@hibnet.org",
+ "name": "Nicolas Lalevée"
+ }
+ ],
+ "dependencies": {},
+ "description": "Generates and consumes source maps",
+ "devDependencies": {
+ "doctoc": "^0.15.0",
+ "webpack": "^1.12.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
+ "tarball": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "source-map.js",
+ "lib/",
+ "dist/source-map.debug.js",
+ "dist/source-map.js",
+ "dist/source-map.min.js",
+ "dist/source-map.min.js.map"
+ ],
+ "gitHead": "326dd955a366569759d9537ef5f0f167c89d92d2",
+ "homepage": "https://github.com/mozilla/source-map",
+ "license": "BSD-3-Clause",
+ "main": "./source-map.js",
+ "maintainers": [
+ {
+ "email": "tom@tromey.com",
+ "name": "tromey"
+ },
+ {
+ "email": "ejpbruel@gmail.com",
+ "name": "ejpbruel"
+ },
+ {
+ "email": "nfitzgerald@mozilla.com",
+ "name": "mozilla-devtools"
+ },
+ {
+ "email": "dherman@mozilla.com",
+ "name": "mozilla"
+ },
+ {
+ "email": "fitzgen@gmail.com",
+ "name": "nickfitzgerald"
+ }
+ ],
+ "name": "source-map",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/mozilla/source-map.git"
+ },
+ "scripts": {
+ "build": "webpack --color",
+ "test": "npm run build && node test/run-tests.js",
+ "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md"
+ },
+ "typings": "source-map",
+ "version": "0.5.7"
+}
diff --git a/build/node_modules/source-map/source-map.js b/build/node_modules/source-map/source-map.js
new file mode 100644
index 00000000..bc88fe82
--- /dev/null
+++ b/build/node_modules/source-map/source-map.js
@@ -0,0 +1,8 @@
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
+exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
+exports.SourceNode = require('./lib/source-node').SourceNode;
diff --git a/build/node_modules/split-string/LICENSE b/build/node_modules/split-string/LICENSE
new file mode 100644
index 00000000..e33d14b7
--- /dev/null
+++ b/build/node_modules/split-string/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/split-string/README.md b/build/node_modules/split-string/README.md
new file mode 100644
index 00000000..d622e44d
--- /dev/null
+++ b/build/node_modules/split-string/README.md
@@ -0,0 +1,321 @@
+# split-string [![NPM version](https://img.shields.io/npm/v/split-string.svg?style=flat)](https://www.npmjs.com/package/split-string) [![NPM monthly downloads](https://img.shields.io/npm/dm/split-string.svg?style=flat)](https://npmjs.org/package/split-string) [![NPM total downloads](https://img.shields.io/npm/dt/split-string.svg?style=flat)](https://npmjs.org/package/split-string) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/split-string.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/split-string)
+
+> Split a string on a character except when the character is escaped.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save split-string
+```
+
+
+
+
+Why use this?
+
+
+
+Although it's easy to split on a string:
+
+```js
+console.log('a.b.c'.split('.'));
+//=> ['a', 'b', 'c']
+```
+
+It's more challenging to split a string whilst respecting escaped or quoted characters.
+
+**Bad**
+
+```js
+console.log('a\\.b.c'.split('.'));
+//=> ['a\\', 'b', 'c']
+
+console.log('"a.b.c".d'.split('.'));
+//=> ['"a', 'b', 'c"', 'd']
+```
+
+**Good**
+
+```js
+var split = require('split-string');
+console.log(split('a\\.b.c'));
+//=> ['a.b', 'c']
+
+console.log(split('"a.b.c".d'));
+//=> ['a.b.c', 'd']
+```
+
+See the [options](#options) to learn how to choose the separator or retain quotes or escaping.
+
+
+
+
+
+## Usage
+
+```js
+var split = require('split-string');
+
+split('a.b.c');
+//=> ['a', 'b', 'c']
+
+// respects escaped characters
+split('a.b.c\\.d');
+//=> ['a', 'b', 'c.d']
+
+// respects double-quoted strings
+split('a."b.c.d".e');
+//=> ['a', 'b.c.d', 'e']
+```
+
+**Brackets**
+
+Also respects brackets [unless disabled](#optionsbrackets):
+
+```js
+split('a (b c d) e', ' ');
+//=> ['a', '(b c d)', 'e']
+```
+
+## Options
+
+### options.brackets
+
+**Type**: `object|boolean`
+
+**Default**: `undefined`
+
+**Description**
+
+If enabled, split-string will not split inside brackets. The following brackets types are supported when `options.brackets` is `true`,
+
+```js
+{
+ '<': '>',
+ '(': ')',
+ '[': ']',
+ '{': '}'
+}
+```
+
+Or, if object of brackets must be passed, each property on the object must be a bracket type, where the property key is the opening delimiter and property value is the closing delimiter.
+
+**Examples**
+
+```js
+// no bracket support by default
+split('a.{b.c}');
+//=> [ 'a', '{b', 'c}' ]
+
+// support all basic bracket types: "<>{}[]()"
+split('a.{b.c}', {brackets: true});
+//=> [ 'a', '{b.c}' ]
+
+// also supports nested brackets
+split('a.{b.{c.d}.e}.f', {brackets: true});
+//=> [ 'a', '{b.{c.d}.e}', 'f' ]
+
+// support only the specified brackets
+split('[a.b].(c.d)', {brackets: {'[': ']'}});
+//=> [ '[a.b]', '(c', 'd)' ]
+```
+
+### options.sep
+
+**Type**: `string`
+
+**Default**: `.`
+
+The separator/character to split on.
+
+**Example**
+
+```js
+split('a.b,c', {sep: ','});
+//=> ['a.b', 'c']
+
+// you can also pass the separator as string as the last argument
+split('a.b,c', ',');
+//=> ['a.b', 'c']
+```
+
+### options.keepEscaping
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Keep backslashes in the result.
+
+**Example**
+
+```js
+split('a.b\\.c');
+//=> ['a', 'b.c']
+
+split('a.b.\\c', {keepEscaping: true});
+//=> ['a', 'b\.c']
+```
+
+### options.keepQuotes
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Keep single- or double-quotes in the result.
+
+**Example**
+
+```js
+split('a."b.c.d".e');
+//=> ['a', 'b.c.d', 'e']
+
+split('a."b.c.d".e', {keepQuotes: true});
+//=> ['a', '"b.c.d"', 'e']
+
+split('a.\'b.c.d\'.e', {keepQuotes: true});
+//=> ['a', '\'b.c.d\'', 'e']
+```
+
+### options.keepDoubleQuotes
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Keep double-quotes in the result.
+
+**Example**
+
+```js
+split('a."b.c.d".e');
+//=> ['a', 'b.c.d', 'e']
+
+split('a."b.c.d".e', {keepDoubleQuotes: true});
+//=> ['a', '"b.c.d"', 'e']
+```
+
+### options.keepSingleQuotes
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Keep single-quotes in the result.
+
+**Example**
+
+```js
+split('a.\'b.c.d\'.e');
+//=> ['a', 'b.c.d', 'e']
+
+split('a.\'b.c.d\'.e', {keepSingleQuotes: true});
+//=> ['a', '\'b.c.d\'', 'e']
+```
+
+## Customizer
+
+**Type**: `function`
+
+**Default**: `undefined`
+
+Pass a function as the last argument to customize how tokens are added to the array.
+
+**Example**
+
+```js
+var arr = split('a.b', function(tok) {
+ if (tok.arr[tok.arr.length - 1] === 'a') {
+ tok.split = false;
+ }
+});
+console.log(arr);
+//=> ['a.b']
+```
+
+**Properties**
+
+The `tok` object has the following properties:
+
+* `tok.val` (string) The current value about to be pushed onto the result array
+* `tok.idx` (number) the current index in the string
+* `tok.str` (string) the entire string
+* `tok.arr` (array) the result array
+
+## Release history
+
+### v3.0.0 - 2017-06-17
+
+**Added**
+
+* adds support for brackets
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [deromanize](https://www.npmjs.com/package/deromanize): Convert roman numerals to arabic numbers (useful for books, outlines, documentation, slide decks, etc) | [homepage](https://github.com/jonschlinkert/deromanize "Convert roman numerals to arabic numbers (useful for books, outlines, documentation, slide decks, etc)")
+* [randomatic](https://www.npmjs.com/package/randomatic): Generate randomized strings of a specified length using simple character sequences. The original generate-password. | [homepage](https://github.com/jonschlinkert/randomatic "Generate randomized strings of a specified length using simple character sequences. The original generate-password.")
+* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.")
+* [romanize](https://www.npmjs.com/package/romanize): Convert numbers to roman numerals (useful for books, outlines, documentation, slide decks, etc) | [homepage](https://github.com/jonschlinkert/romanize "Convert numbers to roman numerals (useful for books, outlines, documentation, slide decks, etc)")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 28 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 9 | [doowb](https://github.com/doowb) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 19, 2017._
\ No newline at end of file
diff --git a/build/node_modules/split-string/index.js b/build/node_modules/split-string/index.js
new file mode 100644
index 00000000..7bc0ea91
--- /dev/null
+++ b/build/node_modules/split-string/index.js
@@ -0,0 +1,171 @@
+/*!
+ * split-string
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var extend = require('extend-shallow');
+
+module.exports = function(str, options, fn) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ if (typeof options === 'function') {
+ fn = options;
+ options = null;
+ }
+
+ // allow separator to be defined as a string
+ if (typeof options === 'string') {
+ options = { sep: options };
+ }
+
+ var opts = extend({sep: '.'}, options);
+ var quotes = opts.quotes || ['"', "'", '`'];
+ var brackets;
+
+ if (opts.brackets === true) {
+ brackets = {
+ '<': '>',
+ '(': ')',
+ '[': ']',
+ '{': '}'
+ };
+ } else if (opts.brackets) {
+ brackets = opts.brackets;
+ }
+
+ var tokens = [];
+ var stack = [];
+ var arr = [''];
+ var sep = opts.sep;
+ var len = str.length;
+ var idx = -1;
+ var closeIdx;
+
+ function expected() {
+ if (brackets && stack.length) {
+ return brackets[stack[stack.length - 1]];
+ }
+ }
+
+ while (++idx < len) {
+ var ch = str[idx];
+ var next = str[idx + 1];
+ var tok = { val: ch, idx: idx, arr: arr, str: str };
+ tokens.push(tok);
+
+ if (ch === '\\') {
+ tok.val = keepEscaping(opts, str, idx) === true ? (ch + next) : next;
+ tok.escaped = true;
+ if (typeof fn === 'function') {
+ fn(tok);
+ }
+ arr[arr.length - 1] += tok.val;
+ idx++;
+ continue;
+ }
+
+ if (brackets && brackets[ch]) {
+ stack.push(ch);
+ var e = expected();
+ var i = idx + 1;
+
+ if (str.indexOf(e, i + 1) !== -1) {
+ while (stack.length && i < len) {
+ var s = str[++i];
+ if (s === '\\') {
+ s++;
+ continue;
+ }
+
+ if (quotes.indexOf(s) !== -1) {
+ i = getClosingQuote(str, s, i + 1);
+ continue;
+ }
+
+ e = expected();
+ if (stack.length && str.indexOf(e, i + 1) === -1) {
+ break;
+ }
+
+ if (brackets[s]) {
+ stack.push(s);
+ continue;
+ }
+
+ if (e === s) {
+ stack.pop();
+ }
+ }
+ }
+
+ closeIdx = i;
+ if (closeIdx === -1) {
+ arr[arr.length - 1] += ch;
+ continue;
+ }
+
+ ch = str.slice(idx, closeIdx + 1);
+ tok.val = ch;
+ tok.idx = idx = closeIdx;
+ }
+
+ if (quotes.indexOf(ch) !== -1) {
+ closeIdx = getClosingQuote(str, ch, idx + 1);
+ if (closeIdx === -1) {
+ arr[arr.length - 1] += ch;
+ continue;
+ }
+
+ if (keepQuotes(ch, opts) === true) {
+ ch = str.slice(idx, closeIdx + 1);
+ } else {
+ ch = str.slice(idx + 1, closeIdx);
+ }
+
+ tok.val = ch;
+ tok.idx = idx = closeIdx;
+ }
+
+ if (typeof fn === 'function') {
+ fn(tok, tokens);
+ ch = tok.val;
+ idx = tok.idx;
+ }
+
+ if (tok.val === sep && tok.split !== false) {
+ arr.push('');
+ continue;
+ }
+
+ arr[arr.length - 1] += tok.val;
+ }
+
+ return arr;
+};
+
+function getClosingQuote(str, ch, i, brackets) {
+ var idx = str.indexOf(ch, i);
+ if (str.charAt(idx - 1) === '\\') {
+ return getClosingQuote(str, ch, idx + 1);
+ }
+ return idx;
+}
+
+function keepQuotes(ch, opts) {
+ if (opts.keepDoubleQuotes === true && ch === '"') return true;
+ if (opts.keepSingleQuotes === true && ch === "'") return true;
+ return opts.keepQuotes;
+}
+
+function keepEscaping(opts, str, idx) {
+ if (typeof opts.keepEscaping === 'function') {
+ return opts.keepEscaping(str, idx);
+ }
+ return opts.keepEscaping === true || str[idx + 1] === '\\';
+}
diff --git a/build/node_modules/split-string/package.json b/build/node_modules/split-string/package.json
new file mode 100644
index 00000000..7f4b739c
--- /dev/null
+++ b/build/node_modules/split-string/package.json
@@ -0,0 +1,135 @@
+{
+ "_args": [
+ [
+ "split-string@^3.0.2",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/braces"
+ ]
+ ],
+ "_from": "split-string@>=3.0.2 <4.0.0",
+ "_id": "split-string@3.1.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/split-string",
+ "_nodeVersion": "9.1.0",
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages",
+ "tmp": "tmp/split-string-3.1.0.tgz_1511106894667_0.3419800808187574"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "5.5.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "split-string",
+ "raw": "split-string@^3.0.2",
+ "rawSpec": "^3.0.2",
+ "scope": null,
+ "spec": ">=3.0.2 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/braces",
+ "/set-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "_shasum": "7cb09dda3a86585705c64b39a6466038682e8fe2",
+ "_shrinkwrap": null,
+ "_spec": "split-string@^3.0.2",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/braces",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/split-string/issues"
+ },
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ }
+ ],
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "description": "Split a string on a character except when the character is escaped.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "directories": {},
+ "dist": {
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "shasum": "7cb09dda3a86585705c64b39a6466038682e8fe2",
+ "tarball": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "2f83feb70267a54ca01e795e6a0558a51b89d6c8",
+ "homepage": "https://github.com/jonschlinkert/split-string",
+ "keywords": [
+ "character",
+ "escape",
+ "split",
+ "string"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "brian.woodward@gmail.com",
+ "name": "doowb"
+ },
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "split-string",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/split-string.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "deromanize",
+ "randomatic",
+ "repeat-string",
+ "romanize"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "titles": [
+ ".",
+ "install",
+ "Why use this?"
+ ],
+ "toc": false
+ },
+ "version": "3.1.0"
+}
diff --git a/build/node_modules/static-extend/LICENSE b/build/node_modules/static-extend/LICENSE
new file mode 100644
index 00000000..e28e6032
--- /dev/null
+++ b/build/node_modules/static-extend/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/static-extend/index.js b/build/node_modules/static-extend/index.js
new file mode 100644
index 00000000..f4124b2a
--- /dev/null
+++ b/build/node_modules/static-extend/index.js
@@ -0,0 +1,90 @@
+/*!
+ * static-extend
+ *
+ * Copyright (c) 2016, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var copy = require('object-copy');
+var define = require('define-property');
+var util = require('util');
+
+/**
+ * Returns a function for extending the static properties,
+ * prototype properties, and descriptors from the `Parent`
+ * constructor onto `Child` constructors.
+ *
+ * ```js
+ * var extend = require('static-extend');
+ * Parent.extend = extend(Parent);
+ *
+ * // optionally pass a custom merge function as the second arg
+ * Parent.extend = extend(Parent, function(Child) {
+ * Child.prototype.mixin = function(key, val) {
+ * Child.prototype[key] = val;
+ * };
+ * });
+ *
+ * // extend "child" constructors
+ * Parent.extend(Child);
+ *
+ * // optionally define prototype methods as the second arg
+ * Parent.extend(Child, {
+ * foo: function() {},
+ * bar: function() {}
+ * });
+ * ```
+ * @param {Function} `Parent` Parent ctor
+ * @param {Function} `extendFn` Optional extend function for handling any necessary custom merging. Useful when updating methods that require a specific prototype.
+ * @param {Function} `Child` Child ctor
+ * @param {Object} `proto` Optionally pass additional prototype properties to inherit.
+ * @return {Object}
+ * @api public
+ */
+
+function extend(Parent, extendFn) {
+ if (typeof Parent !== 'function') {
+ throw new TypeError('expected Parent to be a function.');
+ }
+
+ return function(Ctor, proto) {
+ if (typeof Ctor !== 'function') {
+ throw new TypeError('expected Ctor to be a function.');
+ }
+
+ util.inherits(Ctor, Parent);
+ copy(Ctor, Parent);
+
+ // proto can be null or a plain object
+ if (typeof proto === 'object') {
+ var obj = Object.create(proto);
+
+ for (var k in obj) {
+ Ctor.prototype[k] = obj[k];
+ }
+ }
+
+ // keep a reference to the parent prototype
+ define(Ctor.prototype, '_parent_', {
+ configurable: true,
+ set: function() {},
+ get: function() {
+ return Parent.prototype;
+ }
+ });
+
+ if (typeof extendFn === 'function') {
+ extendFn(Ctor, Parent);
+ }
+
+ Ctor.extend = extend(Ctor, extendFn);
+ };
+};
+
+/**
+ * Expose `extend`
+ */
+
+module.exports = extend;
diff --git a/build/node_modules/static-extend/node_modules/define-property/LICENSE b/build/node_modules/static-extend/node_modules/define-property/LICENSE
new file mode 100644
index 00000000..65f90aca
--- /dev/null
+++ b/build/node_modules/static-extend/node_modules/define-property/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/static-extend/node_modules/define-property/README.md b/build/node_modules/static-extend/node_modules/define-property/README.md
new file mode 100644
index 00000000..8cac698a
--- /dev/null
+++ b/build/node_modules/static-extend/node_modules/define-property/README.md
@@ -0,0 +1,77 @@
+# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property)
+
+> Define a non-enumerable property on an object.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i define-property --save
+```
+
+## Usage
+
+**Params**
+
+* `obj`: The object on which to define the property.
+* `prop`: The name of the property to be defined or modified.
+* `descriptor`: The descriptor for the property being defined or modified.
+
+```js
+var define = require('define-property');
+var obj = {};
+define(obj, 'foo', function(val) {
+ return val.toUpperCase();
+});
+
+console.log(obj);
+//=> {}
+
+console.log(obj.foo('bar'));
+//=> 'BAR'
+```
+
+**get/set**
+
+```js
+define(obj, 'foo', {
+ get: function() {},
+ set: function() {}
+});
+```
+
+## Related projects
+
+* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object)
+* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object)
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep)
+* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._
diff --git a/build/node_modules/static-extend/node_modules/define-property/index.js b/build/node_modules/static-extend/node_modules/define-property/index.js
new file mode 100644
index 00000000..3e0e5e13
--- /dev/null
+++ b/build/node_modules/static-extend/node_modules/define-property/index.js
@@ -0,0 +1,31 @@
+/*!
+ * define-property
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var isDescriptor = require('is-descriptor');
+
+module.exports = function defineProperty(obj, prop, val) {
+ if (typeof obj !== 'object' && typeof obj !== 'function') {
+ throw new TypeError('expected an object or function.');
+ }
+
+ if (typeof prop !== 'string') {
+ throw new TypeError('expected `prop` to be a string.');
+ }
+
+ if (isDescriptor(val) && ('set' in val || 'get' in val)) {
+ return Object.defineProperty(obj, prop, val);
+ }
+
+ return Object.defineProperty(obj, prop, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: val
+ });
+};
diff --git a/build/node_modules/static-extend/node_modules/define-property/package.json b/build/node_modules/static-extend/node_modules/define-property/package.json
new file mode 100644
index 00000000..45da5aa7
--- /dev/null
+++ b/build/node_modules/static-extend/node_modules/define-property/package.json
@@ -0,0 +1,105 @@
+{
+ "_args": [
+ [
+ "define-property@^0.2.5",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/static-extend"
+ ]
+ ],
+ "_from": "define-property@>=0.2.5 <0.3.0",
+ "_id": "define-property@0.2.5",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/static-extend/define-property",
+ "_nodeVersion": "0.12.4",
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "2.10.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "define-property",
+ "raw": "define-property@^0.2.5",
+ "rawSpec": "^0.2.5",
+ "scope": null,
+ "spec": ">=0.2.5 <0.3.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/static-extend"
+ ],
+ "_resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "_shasum": "c35b1ef918ec3c990f9a5bc57be04aacec5c8116",
+ "_shrinkwrap": null,
+ "_spec": "define-property@^0.2.5",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/static-extend",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/define-property/issues"
+ },
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "description": "Define a non-enumerable property on an object.",
+ "devDependencies": {
+ "mocha": "*",
+ "should": "^7.0.4"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "c35b1ef918ec3c990f9a5bc57be04aacec5c8116",
+ "tarball": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "5bf4e5e9d8d1fdf8fba07fff4bdf13a5d6df8ae4",
+ "homepage": "https://github.com/jonschlinkert/define-property",
+ "keywords": [
+ "define",
+ "define-property",
+ "enumerable",
+ "key",
+ "non",
+ "non-enumerable",
+ "object",
+ "prop",
+ "property",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "define-property",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/define-property.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "mixin-deep",
+ "mixin-object",
+ "delegate-object",
+ "forward-object"
+ ]
+ }
+ },
+ "version": "0.2.5"
+}
diff --git a/build/node_modules/static-extend/package.json b/build/node_modules/static-extend/package.json
new file mode 100644
index 00000000..681f2f45
--- /dev/null
+++ b/build/node_modules/static-extend/package.json
@@ -0,0 +1,123 @@
+{
+ "_args": [
+ [
+ "static-extend@^0.1.1",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/class-utils"
+ ]
+ ],
+ "_from": "static-extend@>=0.1.1 <0.2.0",
+ "_id": "static-extend@0.1.2",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/static-extend",
+ "_nodeVersion": "6.2.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/static-extend-0.1.2.tgz_1465497934772_0.6460855521727353"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "3.8.9",
+ "_phantomChildren": {
+ "is-descriptor": "0.1.6"
+ },
+ "_requested": {
+ "name": "static-extend",
+ "raw": "static-extend@^0.1.1",
+ "rawSpec": "^0.1.1",
+ "scope": null,
+ "spec": ">=0.1.1 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/class-utils"
+ ],
+ "_resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "_shasum": "60809c39cbff55337226fd5e0b520f341f1fb5c6",
+ "_shrinkwrap": null,
+ "_spec": "static-extend@^0.1.1",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/class-utils",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/static-extend/issues"
+ },
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "description": "Adds a static `extend` method to a class, to simplify inheritance. Extends the static properties, prototype properties, and descriptors from a `Parent` constructor onto `Child` constructors.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.9",
+ "mocha": "^2.5.3"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "60809c39cbff55337226fd5e0b520f341f1fb5c6",
+ "tarball": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "ce41369391163eb9403848a1b4daf00be981c56b",
+ "homepage": "https://github.com/jonschlinkert/static-extend",
+ "keywords": [
+ "class",
+ "ctor",
+ "descriptor",
+ "extend",
+ "extends",
+ "inherit",
+ "inheritance",
+ "merge",
+ "method",
+ "prop",
+ "properties",
+ "property",
+ "prototype"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "static-extend",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/static-extend.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb",
+ "verb-readme-generator"
+ ],
+ "run": true,
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "0.1.2"
+}
diff --git a/build/node_modules/string_decoder/package.json b/build/node_modules/string_decoder/package.json
index 2f03c7fb..fb57109a 100644
--- a/build/node_modules/string_decoder/package.json
+++ b/build/node_modules/string_decoder/package.json
@@ -33,7 +33,7 @@
"_requiredBy": [
"/readable-stream"
],
- "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-1.1.1.tgz",
+ "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"_shasum": "9cf1611ba62685d7030ae9e4ba34149c3af03fc8",
"_shrinkwrap": null,
"_spec": "string_decoder@~1.1.1",
diff --git a/build/node_modules/to-object-path/LICENSE b/build/node_modules/to-object-path/LICENSE
new file mode 100644
index 00000000..1e49edf8
--- /dev/null
+++ b/build/node_modules/to-object-path/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/to-object-path/README.md b/build/node_modules/to-object-path/README.md
new file mode 100644
index 00000000..7f3cfb16
--- /dev/null
+++ b/build/node_modules/to-object-path/README.md
@@ -0,0 +1,71 @@
+# to-object-path [![NPM version](https://badge.fury.io/js/to-object-path.svg)](http://badge.fury.io/js/to-object-path)
+
+> Create an object path from a list or array of strings.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i to-object-path --save
+```
+
+## Usage
+
+```js
+var toPath = require('to-object-path');
+
+toPath('foo', 'bar', 'baz');
+toPath('foo', ['bar', 'baz']);
+//=> 'foo.bar.baz'
+```
+
+Also supports passing an arguments object (without having to slice args):
+
+```js
+function foo()
+ return toPath(arguments);
+}
+
+foo('foo', 'bar', 'baz');
+foo('foo', ['bar', 'baz']);
+//=> 'foo.bar.baz'
+```
+
+Visit the [example](./example.js) to see how this could be used in an application.
+
+## Related projects
+
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (` a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value)
+* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://www.npmjs.com/package/has-value) | [homepage](https://github.com/jonschlinkert/has-value)
+* [omit-value](https://www.npmjs.com/package/omit-value): Omit properties from an object or deeply nested property of an object using object path… [more](https://www.npmjs.com/package/omit-value) | [homepage](https://github.com/jonschlinkert/omit-value)
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value)
+* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/to-object-path/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on October 28, 2015._
\ No newline at end of file
diff --git a/build/node_modules/to-object-path/index.js b/build/node_modules/to-object-path/index.js
new file mode 100644
index 00000000..489f8f68
--- /dev/null
+++ b/build/node_modules/to-object-path/index.js
@@ -0,0 +1,33 @@
+/*!
+ * to-object-path
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+
+module.exports = function toPath(args) {
+ if (typeOf(args) !== 'arguments') {
+ args = arguments;
+ }
+ return filter(args).join('.');
+};
+
+function filter(arr) {
+ var len = arr.length;
+ var idx = -1;
+ var res = [];
+
+ while (++idx < len) {
+ var ele = arr[idx];
+ if (typeOf(ele) === 'arguments' || Array.isArray(ele)) {
+ res.push.apply(res, filter(ele));
+ } else if (typeof ele === 'string') {
+ res.push(ele);
+ }
+ }
+ return res;
+}
diff --git a/build/node_modules/to-object-path/node_modules/kind-of/LICENSE b/build/node_modules/to-object-path/node_modules/kind-of/LICENSE
new file mode 100644
index 00000000..d734237b
--- /dev/null
+++ b/build/node_modules/to-object-path/node_modules/kind-of/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/to-object-path/node_modules/kind-of/README.md b/build/node_modules/to-object-path/node_modules/kind-of/README.md
new file mode 100644
index 00000000..6a9df36d
--- /dev/null
+++ b/build/node_modules/to-object-path/node_modules/kind-of/README.md
@@ -0,0 +1,261 @@
+# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of)
+
+> Get the native type of a value.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save kind-of
+```
+
+## Install
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install kind-of --save
+```
+
+## Usage
+
+> es5, browser and es6 ready
+
+```js
+var kindOf = require('kind-of');
+
+kindOf(undefined);
+//=> 'undefined'
+
+kindOf(null);
+//=> 'null'
+
+kindOf(true);
+//=> 'boolean'
+
+kindOf(false);
+//=> 'boolean'
+
+kindOf(new Boolean(true));
+//=> 'boolean'
+
+kindOf(new Buffer(''));
+//=> 'buffer'
+
+kindOf(42);
+//=> 'number'
+
+kindOf(new Number(42));
+//=> 'number'
+
+kindOf('str');
+//=> 'string'
+
+kindOf(new String('str'));
+//=> 'string'
+
+kindOf(arguments);
+//=> 'arguments'
+
+kindOf({});
+//=> 'object'
+
+kindOf(Object.create(null));
+//=> 'object'
+
+kindOf(new Test());
+//=> 'object'
+
+kindOf(new Date());
+//=> 'date'
+
+kindOf([]);
+//=> 'array'
+
+kindOf([1, 2, 3]);
+//=> 'array'
+
+kindOf(new Array());
+//=> 'array'
+
+kindOf(/foo/);
+//=> 'regexp'
+
+kindOf(new RegExp('foo'));
+//=> 'regexp'
+
+kindOf(function () {});
+//=> 'function'
+
+kindOf(function * () {});
+//=> 'function'
+
+kindOf(new Function());
+//=> 'function'
+
+kindOf(new Map());
+//=> 'map'
+
+kindOf(new WeakMap());
+//=> 'weakmap'
+
+kindOf(new Set());
+//=> 'set'
+
+kindOf(new WeakSet());
+//=> 'weakset'
+
+kindOf(Symbol('str'));
+//=> 'symbol'
+
+kindOf(new Int8Array());
+//=> 'int8array'
+
+kindOf(new Uint8Array());
+//=> 'uint8array'
+
+kindOf(new Uint8ClampedArray());
+//=> 'uint8clampedarray'
+
+kindOf(new Int16Array());
+//=> 'int16array'
+
+kindOf(new Uint16Array());
+//=> 'uint16array'
+
+kindOf(new Int32Array());
+//=> 'int32array'
+
+kindOf(new Uint32Array());
+//=> 'uint32array'
+
+kindOf(new Float32Array());
+//=> 'float32array'
+
+kindOf(new Float64Array());
+//=> 'float64array'
+```
+
+## Benchmarks
+
+Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).
+Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`.
+
+```bash
+#1: array
+ current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
+ lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
+ lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
+
+#2: boolean
+ current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
+ lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
+ lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
+
+#3: date
+ current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
+ lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
+ lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
+
+#4: function
+ current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
+ lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
+ lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
+
+#5: null
+ current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
+ lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
+ lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
+
+#6: number
+ current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
+ lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
+ lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
+
+#7: object
+ current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
+ lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
+ lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
+
+#8: regex
+ current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
+ lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
+ lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
+
+#9: string
+ current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
+ lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
+ lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
+
+#10: undef
+ current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
+ lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
+ lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
+
+```
+
+## Optimizations
+
+In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:
+
+1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.
+2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.
+3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`
+
+## About
+
+### Related projects
+
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 59 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [miguelmota](https://github.com/miguelmota) |
+| 1 | [dtothefp](https://github.com/dtothefp) |
+| 1 | [ksheedlo](https://github.com/ksheedlo) |
+| 1 | [pdehaan](https://github.com/pdehaan) |
+| 1 | [laggingreflex](https://github.com/laggingreflex) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 16, 2017._
\ No newline at end of file
diff --git a/build/node_modules/to-object-path/node_modules/kind-of/index.js b/build/node_modules/to-object-path/node_modules/kind-of/index.js
new file mode 100644
index 00000000..b52c2917
--- /dev/null
+++ b/build/node_modules/to-object-path/node_modules/kind-of/index.js
@@ -0,0 +1,116 @@
+var isBuffer = require('is-buffer');
+var toString = Object.prototype.toString;
+
+/**
+ * Get the native `typeof` a value.
+ *
+ * @param {*} `val`
+ * @return {*} Native javascript type
+ */
+
+module.exports = function kindOf(val) {
+ // primitivies
+ if (typeof val === 'undefined') {
+ return 'undefined';
+ }
+ if (val === null) {
+ return 'null';
+ }
+ if (val === true || val === false || val instanceof Boolean) {
+ return 'boolean';
+ }
+ if (typeof val === 'string' || val instanceof String) {
+ return 'string';
+ }
+ if (typeof val === 'number' || val instanceof Number) {
+ return 'number';
+ }
+
+ // functions
+ if (typeof val === 'function' || val instanceof Function) {
+ return 'function';
+ }
+
+ // array
+ if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
+ return 'array';
+ }
+
+ // check for instances of RegExp and Date before calling `toString`
+ if (val instanceof RegExp) {
+ return 'regexp';
+ }
+ if (val instanceof Date) {
+ return 'date';
+ }
+
+ // other objects
+ var type = toString.call(val);
+
+ if (type === '[object RegExp]') {
+ return 'regexp';
+ }
+ if (type === '[object Date]') {
+ return 'date';
+ }
+ if (type === '[object Arguments]') {
+ return 'arguments';
+ }
+ if (type === '[object Error]') {
+ return 'error';
+ }
+
+ // buffer
+ if (isBuffer(val)) {
+ return 'buffer';
+ }
+
+ // es6: Map, WeakMap, Set, WeakSet
+ if (type === '[object Set]') {
+ return 'set';
+ }
+ if (type === '[object WeakSet]') {
+ return 'weakset';
+ }
+ if (type === '[object Map]') {
+ return 'map';
+ }
+ if (type === '[object WeakMap]') {
+ return 'weakmap';
+ }
+ if (type === '[object Symbol]') {
+ return 'symbol';
+ }
+
+ // typed arrays
+ if (type === '[object Int8Array]') {
+ return 'int8array';
+ }
+ if (type === '[object Uint8Array]') {
+ return 'uint8array';
+ }
+ if (type === '[object Uint8ClampedArray]') {
+ return 'uint8clampedarray';
+ }
+ if (type === '[object Int16Array]') {
+ return 'int16array';
+ }
+ if (type === '[object Uint16Array]') {
+ return 'uint16array';
+ }
+ if (type === '[object Int32Array]') {
+ return 'int32array';
+ }
+ if (type === '[object Uint32Array]') {
+ return 'uint32array';
+ }
+ if (type === '[object Float32Array]') {
+ return 'float32array';
+ }
+ if (type === '[object Float64Array]') {
+ return 'float64array';
+ }
+
+ // must be a plain object
+ return 'object';
+};
diff --git a/build/node_modules/to-object-path/node_modules/kind-of/package.json b/build/node_modules/to-object-path/node_modules/kind-of/package.json
new file mode 100644
index 00000000..83bbe4f4
--- /dev/null
+++ b/build/node_modules/to-object-path/node_modules/kind-of/package.json
@@ -0,0 +1,170 @@
+{
+ "_args": [
+ [
+ "kind-of@^3.0.2",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/to-object-path"
+ ]
+ ],
+ "_from": "kind-of@>=3.0.2 <4.0.0",
+ "_id": "kind-of@3.2.2",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/to-object-path/kind-of",
+ "_nodeVersion": "7.7.3",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/kind-of-3.2.2.tgz_1494958899918_0.23780996026471257"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "4.5.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "kind-of",
+ "raw": "kind-of@^3.0.2",
+ "rawSpec": "^3.0.2",
+ "scope": null,
+ "spec": ">=3.0.2 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/to-object-path"
+ ],
+ "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "_shasum": "31ea21a734bab9bbb0f32466d893aea51e4a3c64",
+ "_shrinkwrap": null,
+ "_spec": "kind-of@^3.0.2",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/to-object-path",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/kind-of/issues"
+ },
+ "contributors": [
+ {
+ "name": "David Fox-Powell",
+ "url": "https://dtothefp.github.io/me"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Ken Sheedlo",
+ "url": "kensheedlo.com"
+ },
+ {
+ "name": "laggingreflex",
+ "url": "https://github.com/laggingreflex"
+ },
+ {
+ "name": "Miguel Mota",
+ "url": "https://miguelmota.com"
+ },
+ {
+ "name": "Peter deHaan",
+ "url": "http://about.me/peterdehaan"
+ }
+ ],
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "description": "Get the native type of a value.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^1.0.0",
+ "browserify": "^14.3.0",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.3.0",
+ "type-of": "^2.0.1",
+ "typeof": "^1.0.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "31ea21a734bab9bbb0f32466d893aea51e4a3c64",
+ "tarball": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "0ffe67cf12f5396047c1bacf04232b7deeb24063",
+ "homepage": "https://github.com/jonschlinkert/kind-of",
+ "keywords": [
+ "arguments",
+ "array",
+ "boolean",
+ "check",
+ "date",
+ "function",
+ "is",
+ "is-type",
+ "is-type-of",
+ "kind",
+ "kind-of",
+ "number",
+ "object",
+ "of",
+ "regexp",
+ "string",
+ "test",
+ "type",
+ "type-of",
+ "typeof",
+ "types"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ {
+ "email": "brian.woodward@gmail.com",
+ "name": "doowb"
+ }
+ ],
+ "name": "kind-of",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/kind-of.git"
+ },
+ "scripts": {
+ "prepublish": "browserify -o browser.js -e index.js -s index --bare",
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "is-glob",
+ "is-number",
+ "is-primitive"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "3.2.2"
+}
diff --git a/build/node_modules/to-object-path/package.json b/build/node_modules/to-object-path/package.json
new file mode 100644
index 00000000..f1a7bcdf
--- /dev/null
+++ b/build/node_modules/to-object-path/package.json
@@ -0,0 +1,105 @@
+{
+ "_args": [
+ [
+ "to-object-path@^0.3.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/cache-base"
+ ]
+ ],
+ "_from": "to-object-path@>=0.3.0 <0.4.0",
+ "_id": "to-object-path@0.3.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/to-object-path",
+ "_nodeVersion": "5.3.0",
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "3.3.12",
+ "_phantomChildren": {
+ "is-buffer": "1.1.6"
+ },
+ "_requested": {
+ "name": "to-object-path",
+ "raw": "to-object-path@^0.3.0",
+ "rawSpec": "^0.3.0",
+ "scope": null,
+ "spec": ">=0.3.0 <0.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/cache-base",
+ "/union-value/set-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "_shasum": "297588b7b0e7e0ac08e04e672f85c1f4999e17af",
+ "_shrinkwrap": null,
+ "_spec": "to-object-path@^0.3.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/cache-base",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/to-object-path/issues"
+ },
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "description": "Create an object path from a list or array of strings.",
+ "devDependencies": {
+ "base": "^0.6.7",
+ "mocha": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "297588b7b0e7e0ac08e04e672f85c1f4999e17af",
+ "tarball": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "56f6627285b7f5b7563e6f3ffe3766d966368c17",
+ "homepage": "https://github.com/jonschlinkert/to-object-path",
+ "keywords": [
+ "dot",
+ "nested",
+ "notation",
+ "object",
+ "path",
+ "stringify"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "to-object-path",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/to-object-path.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "get-value",
+ "set-value",
+ "has-value",
+ "omit-value",
+ "unset-value"
+ ]
+ }
+ },
+ "version": "0.3.0"
+}
diff --git a/build/node_modules/to-regex-range/LICENSE b/build/node_modules/to-regex-range/LICENSE
new file mode 100644
index 00000000..83b56e70
--- /dev/null
+++ b/build/node_modules/to-regex-range/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/to-regex-range/README.md b/build/node_modules/to-regex-range/README.md
new file mode 100644
index 00000000..2763c5ae
--- /dev/null
+++ b/build/node_modules/to-regex-range/README.md
@@ -0,0 +1,281 @@
+# to-regex-range [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range)
+
+> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save to-regex-range
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add to-regex-range
+```
+
+
+What does this do?
+
+
+
+This libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers.
+
+**Example**
+
+```js
+var toRegexRange = require('to-regex-range');
+var regex = new RegExp(toRegexRange('15', '95'));
+```
+
+A string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string).
+
+
+
+
+
+
+Why use this library?
+
+
+
+### Convenience
+
+Creating regular expressions for matching numbers gets deceptively complicated pretty fast.
+
+For example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc:
+
+* regex for matching `1` => `/1/` (easy enough)
+* regex for matching `1` through `5` => `/[1-5]/` (not bad...)
+* regex for matching `1` or `5` => `/(1|5)/` (still easy...)
+* regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...)
+* regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...)
+* regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...)
+* regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!)
+
+The numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation.
+
+**Learn more**
+
+If you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful.
+
+### Heavily tested
+
+As of April 27, 2017, this library runs [2,783,483 test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are indeed correct.
+
+Tests run in ~870ms on my MacBook Pro, 2.5 GHz Intel Core i7.
+
+### Highly optimized
+
+Generated regular expressions are highly optimized:
+
+* duplicate sequences and character classes are reduced using quantifiers
+* smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative
+* uses fragment caching to avoid processing the same exact string more than once
+
+
+
+
+
+## Usage
+
+Add this library to your javascript application with the following line of code
+
+```js
+var toRegexRange = require('to-regex-range');
+```
+
+The main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers).
+
+```js
+var source = toRegexRange('15', '95');
+//=> 1[5-9]|[2-8][0-9]|9[0-5]
+
+var re = new RegExp('^' + source + '$');
+console.log(re.test('14')); //=> false
+console.log(re.test('50')); //=> true
+console.log(re.test('94')); //=> true
+console.log(re.test('96')); //=> false
+```
+
+## Options
+
+### options.capture
+
+**Type**: `boolean`
+
+**Deafault**: `undefined`
+
+Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges.
+
+```js
+console.log(toRegexRange('-10', '10'));
+//=> -[1-9]|-?10|[0-9]
+
+console.log(toRegexRange('-10', '10', {capture: true}));
+//=> (-[1-9]|-?10|[0-9])
+```
+
+### options.shorthand
+
+**Type**: `boolean`
+
+**Deafault**: `undefined`
+
+Use the regex shorthand for `[0-9]`:
+
+```js
+console.log(toRegexRange('0', '999999'));
+//=> [0-9]|[1-9][0-9]{1,5}
+
+console.log(toRegexRange('0', '999999', {shorthand: true}));
+//=> \d|[1-9]\d{1,5}
+```
+
+### options.relaxZeros
+
+**Type**: `boolean`
+
+**Default**: `true`
+
+This option only applies to **negative zero-padded ranges**. By default, when a negative zero-padded range is defined, the number of leading zeros is relaxed using `-0*`.
+
+```js
+console.log(toRegexRange('-001', '100'));
+//=> -0*1|0{2}[0-9]|0[1-9][0-9]|100
+
+console.log(toRegexRange('-001', '100', {relaxZeros: false}));
+//=> -0{2}1|0{2}[0-9]|0[1-9][0-9]|100
+```
+
+
+Why are zeros relaxed for negative zero-padded ranges by default?
+
+Consider the following.
+
+```js
+var regex = toRegexRange('-001', '100');
+```
+
+_Note that `-001` and `100` are both three digits long_.
+
+In most zero-padding implementations, only a single leading zero is enough to indicate that zero-padding should be applied. Thus, the leading zeros would be "corrected" on the negative range in the example to `-01`, instead of `-001`, to make total length of each string no greater than the length of the largest number in the range (in other words, `-001` is 4 digits, but `100` is only three digits).
+
+If zeros were not relaxed by default, you might expect the resulting regex of the above pattern to match `-001` - given that it's defined that way in the arguments - _but it wouldn't_. It would, however, match `-01`. This gets even more ambiguous with large ranges, like `-01` to `1000000`.
+
+Thus, we relax zeros by default to provide a more predictable experience for users.
+
+
+
+## Examples
+
+| **Range** | **Result** | **Compile time** |
+| --- | --- | --- |
+| `toRegexRange('5, 5')` | `5` | _33μs_ |
+| `toRegexRange('5, 6')` | `5\|6` | _53μs_ |
+| `toRegexRange('29, 51')` | `29\|[34][0-9]\|5[01]` | _699μs_ |
+| `toRegexRange('31, 877')` | `3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7]` | _711μs_ |
+| `toRegexRange('111, 555')` | `11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _62μs_ |
+| `toRegexRange('-10, 10')` | `-[1-9]\|-?10\|[0-9]` | _74μs_ |
+| `toRegexRange('-100, -10')` | `-1[0-9]\|-[2-9][0-9]\|-100` | _49μs_ |
+| `toRegexRange('-100, 100')` | `-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9]` | _45μs_ |
+| `toRegexRange('001, 100')` | `0{2}[1-9]\|0[1-9][0-9]\|100` | _158μs_ |
+| `toRegexRange('0010, 1000')` | `0{2}1[0-9]\|0{2}[2-9][0-9]\|0[1-9][0-9]{2}\|1000` | _61μs_ |
+| `toRegexRange('1, 2')` | `1\|2` | _10μs_ |
+| `toRegexRange('1, 5')` | `[1-5]` | _24μs_ |
+| `toRegexRange('1, 10')` | `[1-9]\|10` | _23μs_ |
+| `toRegexRange('1, 100')` | `[1-9]\|[1-9][0-9]\|100` | _30μs_ |
+| `toRegexRange('1, 1000')` | `[1-9]\|[1-9][0-9]{1,2}\|1000` | _52μs_ |
+| `toRegexRange('1, 10000')` | `[1-9]\|[1-9][0-9]{1,3}\|10000` | _47μs_ |
+| `toRegexRange('1, 100000')` | `[1-9]\|[1-9][0-9]{1,4}\|100000` | _44μs_ |
+| `toRegexRange('1, 1000000')` | `[1-9]\|[1-9][0-9]{1,5}\|1000000` | _49μs_ |
+| `toRegexRange('1, 10000000')` | `[1-9]\|[1-9][0-9]{1,6}\|10000000` | _63μs_ |
+
+## Heads up!
+
+**Order of arguments**
+
+When the `min` is larger than the `max`, values will be flipped to create a valid range:
+
+```js
+toRegexRange('51', '29');
+```
+
+Is effectively flipped to:
+
+```js
+toRegexRange('29', '51');
+//=> 29|[3-4][0-9]|5[0-1]
+```
+
+**Steps / increments**
+
+This library does not support steps (increments). A pr to add support would be welcome.
+
+## History
+
+### v2.0.0 - 2017-04-21
+
+**New features**
+
+Adds support for zero-padding!
+
+### v1.0.0
+
+**Optimizations**
+
+Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching.
+
+## Attribution
+
+Inspired by the python library [range-regex](https://github.com/dimka665/range-regex).
+
+## About
+
+### Related projects
+
+* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.")
+* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+* [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.")
+* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 27, 2017._
\ No newline at end of file
diff --git a/build/node_modules/to-regex-range/index.js b/build/node_modules/to-regex-range/index.js
new file mode 100644
index 00000000..7bb5a743
--- /dev/null
+++ b/build/node_modules/to-regex-range/index.js
@@ -0,0 +1,294 @@
+/*!
+ * to-regex-range
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var repeat = require('repeat-string');
+var isNumber = require('is-number');
+var cache = {};
+
+function toRegexRange(min, max, options) {
+ if (isNumber(min) === false) {
+ throw new RangeError('toRegexRange: first argument is invalid.');
+ }
+
+ if (typeof max === 'undefined' || min === max) {
+ return String(min);
+ }
+
+ if (isNumber(max) === false) {
+ throw new RangeError('toRegexRange: second argument is invalid.');
+ }
+
+ options = options || {};
+ var relax = String(options.relaxZeros);
+ var shorthand = String(options.shorthand);
+ var capture = String(options.capture);
+ var key = min + ':' + max + '=' + relax + shorthand + capture;
+ if (cache.hasOwnProperty(key)) {
+ return cache[key].result;
+ }
+
+ var a = Math.min(min, max);
+ var b = Math.max(min, max);
+
+ if (Math.abs(a - b) === 1) {
+ var result = min + '|' + max;
+ if (options.capture) {
+ return '(' + result + ')';
+ }
+ return result;
+ }
+
+ var isPadded = padding(min) || padding(max);
+ var positives = [];
+ var negatives = [];
+
+ var tok = {min: min, max: max, a: a, b: b};
+ if (isPadded) {
+ tok.isPadded = isPadded;
+ tok.maxLen = String(tok.max).length;
+ }
+
+ if (a < 0) {
+ var newMin = b < 0 ? Math.abs(b) : 1;
+ var newMax = Math.abs(a);
+ negatives = splitToPatterns(newMin, newMax, tok, options);
+ a = tok.a = 0;
+ }
+
+ if (b >= 0) {
+ positives = splitToPatterns(a, b, tok, options);
+ }
+
+ tok.negatives = negatives;
+ tok.positives = positives;
+ tok.result = siftPatterns(negatives, positives, options);
+
+ if (options.capture && (positives.length + negatives.length) > 1) {
+ tok.result = '(' + tok.result + ')';
+ }
+
+ cache[key] = tok;
+ return tok.result;
+}
+
+function siftPatterns(neg, pos, options) {
+ var onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
+ var onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
+ var intersected = filterPatterns(neg, pos, '-?', true, options) || [];
+ var subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
+ return subpatterns.join('|');
+}
+
+function splitToRanges(min, max) {
+ min = Number(min);
+ max = Number(max);
+
+ var nines = 1;
+ var stops = [max];
+ var stop = +countNines(min, nines);
+
+ while (min <= stop && stop <= max) {
+ stops = push(stops, stop);
+ nines += 1;
+ stop = +countNines(min, nines);
+ }
+
+ var zeros = 1;
+ stop = countZeros(max + 1, zeros) - 1;
+
+ while (min < stop && stop <= max) {
+ stops = push(stops, stop);
+ zeros += 1;
+ stop = countZeros(max + 1, zeros) - 1;
+ }
+
+ stops.sort(compare);
+ return stops;
+}
+
+/**
+ * Convert a range to a regex pattern
+ * @param {Number} `start`
+ * @param {Number} `stop`
+ * @return {String}
+ */
+
+function rangeToPattern(start, stop, options) {
+ if (start === stop) {
+ return {pattern: String(start), digits: []};
+ }
+
+ var zipped = zip(String(start), String(stop));
+ var len = zipped.length, i = -1;
+
+ var pattern = '';
+ var digits = 0;
+
+ while (++i < len) {
+ var numbers = zipped[i];
+ var startDigit = numbers[0];
+ var stopDigit = numbers[1];
+
+ if (startDigit === stopDigit) {
+ pattern += startDigit;
+
+ } else if (startDigit !== '0' || stopDigit !== '9') {
+ pattern += toCharacterClass(startDigit, stopDigit);
+
+ } else {
+ digits += 1;
+ }
+ }
+
+ if (digits) {
+ pattern += options.shorthand ? '\\d' : '[0-9]';
+ }
+
+ return { pattern: pattern, digits: [digits] };
+}
+
+function splitToPatterns(min, max, tok, options) {
+ var ranges = splitToRanges(min, max);
+ var len = ranges.length;
+ var idx = -1;
+
+ var tokens = [];
+ var start = min;
+ var prev;
+
+ while (++idx < len) {
+ var range = ranges[idx];
+ var obj = rangeToPattern(start, range, options);
+ var zeros = '';
+
+ if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
+ if (prev.digits.length > 1) {
+ prev.digits.pop();
+ }
+ prev.digits.push(obj.digits[0]);
+ prev.string = prev.pattern + toQuantifier(prev.digits);
+ start = range + 1;
+ continue;
+ }
+
+ if (tok.isPadded) {
+ zeros = padZeros(range, tok);
+ }
+
+ obj.string = zeros + obj.pattern + toQuantifier(obj.digits);
+ tokens.push(obj);
+ start = range + 1;
+ prev = obj;
+ }
+
+ return tokens;
+}
+
+function filterPatterns(arr, comparison, prefix, intersection, options) {
+ var res = [];
+
+ for (var i = 0; i < arr.length; i++) {
+ var tok = arr[i];
+ var ele = tok.string;
+
+ if (options.relaxZeros !== false) {
+ if (prefix === '-' && ele.charAt(0) === '0') {
+ if (ele.charAt(1) === '{') {
+ ele = '0*' + ele.replace(/^0\{\d+\}/, '');
+ } else {
+ ele = '0*' + ele.slice(1);
+ }
+ }
+ }
+
+ if (!intersection && !contains(comparison, 'string', ele)) {
+ res.push(prefix + ele);
+ }
+
+ if (intersection && contains(comparison, 'string', ele)) {
+ res.push(prefix + ele);
+ }
+ }
+ return res;
+}
+
+/**
+ * Zip strings (`for in` can be used on string characters)
+ */
+
+function zip(a, b) {
+ var arr = [];
+ for (var ch in a) arr.push([a[ch], b[ch]]);
+ return arr;
+}
+
+function compare(a, b) {
+ return a > b ? 1 : b > a ? -1 : 0;
+}
+
+function push(arr, ele) {
+ if (arr.indexOf(ele) === -1) arr.push(ele);
+ return arr;
+}
+
+function contains(arr, key, val) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i][key] === val) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function countNines(min, len) {
+ return String(min).slice(0, -len) + repeat('9', len);
+}
+
+function countZeros(integer, zeros) {
+ return integer - (integer % Math.pow(10, zeros));
+}
+
+function toQuantifier(digits) {
+ var start = digits[0];
+ var stop = digits[1] ? (',' + digits[1]) : '';
+ if (!stop && (!start || start === 1)) {
+ return '';
+ }
+ return '{' + start + stop + '}';
+}
+
+function toCharacterClass(a, b) {
+ return '[' + a + ((b - a === 1) ? '' : '-') + b + ']';
+}
+
+function padding(str) {
+ return /^-?(0+)\d/.exec(str);
+}
+
+function padZeros(val, tok) {
+ if (tok.isPadded) {
+ var diff = Math.abs(tok.maxLen - String(val).length);
+ switch (diff) {
+ case 0:
+ return '';
+ case 1:
+ return '0';
+ default: {
+ return '0{' + diff + '}';
+ }
+ }
+ }
+ return val;
+}
+
+/**
+ * Expose `toRegexRange`
+ */
+
+module.exports = toRegexRange;
diff --git a/build/node_modules/to-regex-range/package.json b/build/node_modules/to-regex-range/package.json
new file mode 100644
index 00000000..b878e035
--- /dev/null
+++ b/build/node_modules/to-regex-range/package.json
@@ -0,0 +1,148 @@
+{
+ "_args": [
+ [
+ "to-regex-range@^2.1.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/fill-range"
+ ]
+ ],
+ "_from": "to-regex-range@>=2.1.0 <3.0.0",
+ "_id": "to-regex-range@2.1.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/to-regex-range",
+ "_nodeVersion": "7.7.3",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/to-regex-range-2.1.1.tgz_1493300068448_0.391837228089571"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "4.2.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "to-regex-range",
+ "raw": "to-regex-range@^2.1.0",
+ "rawSpec": "^2.1.0",
+ "scope": null,
+ "spec": ">=2.1.0 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fill-range"
+ ],
+ "_resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "_shasum": "7c80c17b9dfebe599e27367e0d4dd5590141db38",
+ "_shrinkwrap": null,
+ "_spec": "to-regex-range@^2.1.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/fill-range",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/micromatch/to-regex-range/issues"
+ },
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.",
+ "devDependencies": {
+ "fill-range": "^3.1.1",
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.2.0",
+ "text-table": "^0.2.0",
+ "time-diff": "^0.3.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7c80c17b9dfebe599e27367e0d4dd5590141db38",
+ "tarball": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "de34e5079dbf33f8ac992d87914fa5e3507fa07d",
+ "homepage": "https://github.com/micromatch/to-regex-range",
+ "keywords": [
+ "alpha",
+ "alphabetical",
+ "bash",
+ "brace",
+ "date",
+ "expand",
+ "expansion",
+ "glob",
+ "match",
+ "matches",
+ "matching",
+ "number",
+ "numerical",
+ "range",
+ "ranges",
+ "regex",
+ "sequence",
+ "sh",
+ "to",
+ "year"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ {
+ "email": "brian.woodward@gmail.com",
+ "name": "doowb"
+ }
+ ],
+ "name": "to-regex-range",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/micromatch/to-regex-range.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "helpers": [
+ "./examples.js"
+ ],
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "0-5",
+ "0-9",
+ "1-5",
+ "1-9"
+ ],
+ "related": {
+ "list": [
+ "expand-range",
+ "fill-range",
+ "micromatch",
+ "repeat-element",
+ "repeat-string"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "2.1.1"
+}
diff --git a/build/node_modules/to-regex/LICENSE b/build/node_modules/to-regex/LICENSE
new file mode 100644
index 00000000..7c9987bc
--- /dev/null
+++ b/build/node_modules/to-regex/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2018, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/to-regex/README.md b/build/node_modules/to-regex/README.md
new file mode 100644
index 00000000..5a28fc33
--- /dev/null
+++ b/build/node_modules/to-regex/README.md
@@ -0,0 +1,205 @@
+# to-regex [![NPM version](https://img.shields.io/npm/v/to-regex.svg?style=flat)](https://www.npmjs.com/package/to-regex) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex.svg?style=flat)](https://npmjs.org/package/to-regex) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex.svg?style=flat)](https://npmjs.org/package/to-regex) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/to-regex.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/to-regex)
+
+> Generate a regex from a string or array of strings.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+- [Install](#install)
+- [Usage](#usage)
+- [Options](#options)
+ * [options.contains](#optionscontains)
+ * [options.negate](#optionsnegate)
+ * [options.nocase](#optionsnocase)
+ * [options.flags](#optionsflags)
+ * [options.cache](#optionscache)
+ * [options.safe](#optionssafe)
+- [About](#about)
+ * [Related projects](#related-projects)
+ * [Author](#author)
+ * [License](#license)
+
+_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save to-regex
+```
+
+## Usage
+
+```js
+var toRegex = require('to-regex');
+
+console.log(toRegex('foo'));
+//=> /^(?:foo)$/
+
+console.log(toRegex('foo', {negate: true}));
+//=> /^(?:(?:(?!^(?:foo)$).)*)$/
+
+console.log(toRegex('foo', {contains: true}));
+//=> /(?:foo)/
+
+console.log(toRegex(['foo', 'bar'], {negate: true}));
+//=> /^(?:(?:(?!^(?:(?:foo)|(?:bar))$).)*)$/
+
+console.log(toRegex(['foo', 'bar'], {negate: true, contains: true}));
+//=> /^(?:(?:(?!(?:(?:foo)|(?:bar))).)*)$/
+```
+
+## Options
+
+### options.contains
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+Generate a regex that will match any string that _contains_ the given pattern. By default, regex is strict will only return true for exact matches.
+
+```js
+var toRegex = require('to-regex');
+console.log(toRegex('foo', {contains: true}));
+//=> /(?:foo)/
+```
+
+### options.negate
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+Create a regex that will match everything except the given pattern.
+
+```js
+var toRegex = require('to-regex');
+console.log(toRegex('foo', {negate: true}));
+//=> /^(?:(?:(?!^(?:foo)$).)*)$/
+```
+
+### options.nocase
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+Adds the `i` flag, to enable case-insensitive matching.
+
+```js
+var toRegex = require('to-regex');
+console.log(toRegex('foo', {nocase: true}));
+//=> /^(?:foo)$/i
+```
+
+Alternatively you can pass the flags you want directly on [options.flags](#options.flags).
+
+### options.flags
+
+**Type**: `String`
+
+**Default**: `undefined`
+
+Define the flags you want to use on the generated regex.
+
+```js
+var toRegex = require('to-regex');
+console.log(toRegex('foo', {flags: 'gm'}));
+//=> /^(?:foo)$/gm
+console.log(toRegex('foo', {flags: 'gmi', nocase: true})); //<= handles redundancy
+//=> /^(?:foo)$/gmi
+```
+
+### options.cache
+
+**Type**: `Boolean`
+
+**Default**: `true`
+
+Generated regex is cached based on the provided string and options. As a result, runtime compilation only happens once per pattern (as long as options are also the same), which can result in dramatic speed improvements.
+
+This also helps with debugging, since adding options and pattern are added to the generated regex.
+
+**Disable caching**
+
+```js
+toRegex('foo', {cache: false});
+```
+
+### options.safe
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+Check the generated regular expression with [safe-regex](https://github.com/substack/safe-regex) and throw an error if the regex is potentially unsafe.
+
+**Examples**
+
+```js
+console.log(toRegex('(x+x+)+y'));
+//=> /^(?:(x+x+)+y)$/
+
+// The following would throw an error
+toRegex('(x+x+)+y', {safe: true});
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob "Returns `true` if an array has a glob pattern.")
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [path-regex](https://www.npmjs.com/package/path-regex): Regular expression for matching the parts of a file path. | [homepage](https://github.com/regexps/path-regex "Regular expression for matching the parts of a file path.")
+* [to-regex-range](https://www.npmjs.com/package/to-regex-range): Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than… [more](https://github.com/micromatch/to-regex-range) | [homepage](https://github.com/micromatch/to-regex-range "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.")
+
+### Author
+
+**Jon Schlinkert**
+
+* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert)
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on February 24, 2018._
\ No newline at end of file
diff --git a/build/node_modules/to-regex/index.js b/build/node_modules/to-regex/index.js
new file mode 100644
index 00000000..a87d0159
--- /dev/null
+++ b/build/node_modules/to-regex/index.js
@@ -0,0 +1,155 @@
+'use strict';
+
+var safe = require('safe-regex');
+var define = require('define-property');
+var extend = require('extend-shallow');
+var not = require('regex-not');
+var MAX_LENGTH = 1024 * 64;
+
+/**
+ * Session cache
+ */
+
+var cache = {};
+
+/**
+ * Create a regular expression from the given `pattern` string.
+ *
+ * @param {String|RegExp} `pattern` Pattern can be a string or regular expression.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+module.exports = function(patterns, options) {
+ if (!Array.isArray(patterns)) {
+ return makeRe(patterns, options);
+ }
+ return makeRe(patterns.join('|'), options);
+};
+
+/**
+ * Create a regular expression from the given `pattern` string.
+ *
+ * @param {String|RegExp} `pattern` Pattern can be a string or regular expression.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+function makeRe(pattern, options) {
+ if (pattern instanceof RegExp) {
+ return pattern;
+ }
+
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ if (pattern.length > MAX_LENGTH) {
+ throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters');
+ }
+
+ var key = pattern;
+ // do this before shallow cloning options, it's a lot faster
+ if (!options || (options && options.cache !== false)) {
+ key = createKey(pattern, options);
+
+ if (cache.hasOwnProperty(key)) {
+ return cache[key];
+ }
+ }
+
+ var opts = extend({}, options);
+ if (opts.contains === true) {
+ if (opts.negate === true) {
+ opts.strictNegate = false;
+ } else {
+ opts.strict = false;
+ }
+ }
+
+ if (opts.strict === false) {
+ opts.strictOpen = false;
+ opts.strictClose = false;
+ }
+
+ var open = opts.strictOpen !== false ? '^' : '';
+ var close = opts.strictClose !== false ? '$' : '';
+ var flags = opts.flags || '';
+ var regex;
+
+ if (opts.nocase === true && !/i/.test(flags)) {
+ flags += 'i';
+ }
+
+ try {
+ if (opts.negate || typeof opts.strictNegate === 'boolean') {
+ pattern = not.create(pattern, opts);
+ }
+
+ var str = open + '(?:' + pattern + ')' + close;
+ regex = new RegExp(str, flags);
+
+ if (opts.safe === true && safe(regex) === false) {
+ throw new Error('potentially unsafe regular expression: ' + regex.source);
+ }
+
+ } catch (err) {
+ if (opts.strictErrors === true || opts.safe === true) {
+ err.key = key;
+ err.pattern = pattern;
+ err.originalOptions = options;
+ err.createdOptions = opts;
+ throw err;
+ }
+
+ try {
+ regex = new RegExp('^' + pattern.replace(/(\W)/g, '\\$1') + '$');
+ } catch (err) {
+ regex = /.^/; //<= match nothing
+ }
+ }
+
+ if (opts.cache !== false) {
+ memoize(regex, key, pattern, opts);
+ }
+ return regex;
+}
+
+/**
+ * Memoize generated regex. This can result in dramatic speed improvements
+ * and simplify debugging by adding options and pattern to the regex. It can be
+ * disabled by passing setting `options.cache` to false.
+ */
+
+function memoize(regex, key, pattern, options) {
+ define(regex, 'cached', true);
+ define(regex, 'pattern', pattern);
+ define(regex, 'options', options);
+ define(regex, 'key', key);
+ cache[key] = regex;
+}
+
+/**
+ * Create the key to use for memoization. The key is generated
+ * by iterating over the options and concatenating key-value pairs
+ * to the pattern string.
+ */
+
+function createKey(pattern, options) {
+ if (!options) return pattern;
+ var key = pattern;
+ for (var prop in options) {
+ if (options.hasOwnProperty(prop)) {
+ key += ';' + prop + '=' + String(options[prop]);
+ }
+ }
+ return key;
+}
+
+/**
+ * Expose `makeRe`
+ */
+
+module.exports.makeRe = makeRe;
diff --git a/build/node_modules/to-regex/package.json b/build/node_modules/to-regex/package.json
new file mode 100644
index 00000000..3ecb8a11
--- /dev/null
+++ b/build/node_modules/to-regex/package.json
@@ -0,0 +1,128 @@
+{
+ "_args": [
+ [
+ "to-regex@^3.0.2",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/micromatch"
+ ]
+ ],
+ "_from": "to-regex@>=3.0.2 <4.0.0",
+ "_hasShrinkwrap": false,
+ "_id": "to-regex@3.0.2",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/to-regex",
+ "_nodeVersion": "9.5.0",
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages",
+ "tmp": "tmp/to-regex_3.0.2_1519460972133_0.47922488575382616"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "5.6.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "to-regex",
+ "raw": "to-regex@^3.0.2",
+ "rawSpec": "^3.0.2",
+ "scope": null,
+ "spec": ">=3.0.2 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/braces",
+ "/expand-brackets",
+ "/extglob",
+ "/micromatch",
+ "/nanomatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "_shasum": "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce",
+ "_shrinkwrap": null,
+ "_spec": "to-regex@^3.0.2",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/micromatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/to-regex/issues"
+ },
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "description": "Generate a regex from a string or array of strings.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "directories": {},
+ "dist": {
+ "fileCount": 4,
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "shasum": "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce",
+ "tarball": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "unpackedSize": 12626
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "cc5735f98f62c8e9cfb98ae5b309abea1c8a2432",
+ "homepage": "https://github.com/jonschlinkert/to-regex",
+ "keywords": [
+ "match",
+ "regex",
+ "regular expression",
+ "test",
+ "to"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "to-regex",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/to-regex.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "has-glob",
+ "is-glob",
+ "path-regex",
+ "to-regex-range"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": {
+ "method": "preWrite"
+ }
+ },
+ "version": "3.0.2"
+}
diff --git a/build/node_modules/typedarray/package.json b/build/node_modules/typedarray/package.json
index 534a6025..cea7bf12 100644
--- a/build/node_modules/typedarray/package.json
+++ b/build/node_modules/typedarray/package.json
@@ -27,7 +27,7 @@
"_requiredBy": [
"/concat-stream"
],
- "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/typedarray/-/typedarray-0.0.6.tgz",
+ "_resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"_shasum": "867ac74e3864187b1d3d47d996a78ec5c8830777",
"_shrinkwrap": null,
"_spec": "typedarray@^0.0.6",
diff --git a/build/node_modules/union-value/LICENSE b/build/node_modules/union-value/LICENSE
new file mode 100644
index 00000000..83b56e70
--- /dev/null
+++ b/build/node_modules/union-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/union-value/README.md b/build/node_modules/union-value/README.md
new file mode 100644
index 00000000..1a90ffbd
--- /dev/null
+++ b/build/node_modules/union-value/README.md
@@ -0,0 +1,73 @@
+# union-value [![NPM version](https://img.shields.io/npm/v/union-value.svg?style=flat)](https://www.npmjs.com/package/union-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/union-value.svg?style=flat)](https://npmjs.org/package/union-value) [![NPM total downloads](https://img.shields.io/npm/dt/union-value.svg?style=flat)](https://npmjs.org/package/union-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/union-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/union-value)
+
+> Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save union-value
+```
+
+## Usage
+
+```js
+var union = require('union-value');
+
+var obj = {};
+
+union(obj, 'a.b.c', ['one', 'two']);
+union(obj, 'a.b.c', ['three']);
+
+console.log(obj);
+//=> {a: {b: {c: [ 'one', 'two', 'three' ] }}}
+```
+
+## About
+
+### Related projects
+
+* [assign-value](https://www.npmjs.com/package/assign-value): Assign a value or extend a deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/assign-value) | [homepage](https://github.com/jonschlinkert/assign-value "Assign a value or extend a deeply nested property of an object using object path notation.")
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 25, 2017._
\ No newline at end of file
diff --git a/build/node_modules/union-value/index.js b/build/node_modules/union-value/index.js
new file mode 100644
index 00000000..9c5d8db2
--- /dev/null
+++ b/build/node_modules/union-value/index.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var isObject = require('is-extendable');
+var union = require('arr-union');
+var get = require('get-value');
+var set = require('set-value');
+
+module.exports = function unionValue(obj, prop, value) {
+ if (!isObject(obj)) {
+ throw new TypeError('union-value expects the first argument to be an object.');
+ }
+
+ if (typeof prop !== 'string') {
+ throw new TypeError('union-value expects `prop` to be a string.');
+ }
+
+ var arr = arrayify(get(obj, prop));
+ set(obj, prop, union(arr, arrayify(value)));
+ return obj;
+};
+
+function arrayify(val) {
+ if (val === null || typeof val === 'undefined') {
+ return [];
+ }
+ if (Array.isArray(val)) {
+ return val;
+ }
+ return [val];
+}
diff --git a/build/node_modules/union-value/node_modules/extend-shallow/LICENSE b/build/node_modules/union-value/node_modules/extend-shallow/LICENSE
new file mode 100644
index 00000000..fa30c4cb
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/extend-shallow/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/union-value/node_modules/extend-shallow/README.md b/build/node_modules/union-value/node_modules/extend-shallow/README.md
new file mode 100644
index 00000000..cdc45d4f
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/extend-shallow/README.md
@@ -0,0 +1,61 @@
+# extend-shallow [![NPM version](https://badge.fury.io/js/extend-shallow.svg)](http://badge.fury.io/js/extend-shallow) [![Build Status](https://travis-ci.org/jonschlinkert/extend-shallow.svg)](https://travis-ci.org/jonschlinkert/extend-shallow)
+
+> Extend an object with the properties of additional objects. node.js/javascript util.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i extend-shallow --save
+```
+
+## Usage
+
+```js
+var extend = require('extend-shallow');
+
+extend({a: 'b'}, {c: 'd'})
+//=> {a: 'b', c: 'd'}
+```
+
+Pass an empty object to shallow clone:
+
+```js
+var obj = {};
+extend(obj, {a: 'b'}, {c: 'd'})
+//=> {a: 'b', c: 'd'}
+```
+
+## Related
+
+* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util.
+* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own)
+* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in)
+* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor.
+* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null.
+* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value.
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 29, 2015._
\ No newline at end of file
diff --git a/build/node_modules/union-value/node_modules/extend-shallow/index.js b/build/node_modules/union-value/node_modules/extend-shallow/index.js
new file mode 100644
index 00000000..92a067fc
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/extend-shallow/index.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var isObject = require('is-extendable');
+
+module.exports = function extend(o/*, objects*/) {
+ if (!isObject(o)) { o = {}; }
+
+ var len = arguments.length;
+ for (var i = 1; i < len; i++) {
+ var obj = arguments[i];
+
+ if (isObject(obj)) {
+ assign(o, obj);
+ }
+ }
+ return o;
+};
+
+function assign(a, b) {
+ for (var key in b) {
+ if (hasOwn(b, key)) {
+ a[key] = b[key];
+ }
+ }
+}
+
+/**
+ * Returns true if the given `key` is an own property of `obj`.
+ */
+
+function hasOwn(obj, key) {
+ return Object.prototype.hasOwnProperty.call(obj, key);
+}
diff --git a/build/node_modules/union-value/node_modules/extend-shallow/package.json b/build/node_modules/union-value/node_modules/extend-shallow/package.json
new file mode 100644
index 00000000..347ac711
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/extend-shallow/package.json
@@ -0,0 +1,110 @@
+{
+ "_args": [
+ [
+ "extend-shallow@^2.0.1",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/union-value/node_modules/set-value"
+ ]
+ ],
+ "_from": "extend-shallow@>=2.0.1 <3.0.0",
+ "_id": "extend-shallow@2.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/union-value/extend-shallow",
+ "_nodeVersion": "0.12.4",
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "2.10.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "extend-shallow",
+ "raw": "extend-shallow@^2.0.1",
+ "rawSpec": "^2.0.1",
+ "scope": null,
+ "spec": ">=2.0.1 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/union-value/set-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "_shasum": "51af7d614ad9a9f610ea1bafbb989d6b1c56890f",
+ "_shrinkwrap": null,
+ "_spec": "extend-shallow@^2.0.1",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/union-value/node_modules/set-value",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/extend-shallow/issues"
+ },
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "description": "Extend an object with the properties of additional objects. node.js/javascript util.",
+ "devDependencies": {
+ "array-slice": "^0.2.3",
+ "benchmarked": "^0.1.4",
+ "chalk": "^1.0.0",
+ "for-own": "^0.1.3",
+ "glob": "^5.0.12",
+ "is-plain-object": "^2.0.1",
+ "kind-of": "^2.0.0",
+ "minimist": "^1.1.1",
+ "mocha": "^2.2.5",
+ "should": "^7.0.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "51af7d614ad9a9f610ea1bafbb989d6b1c56890f",
+ "tarball": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "e9b1f1d2ff9d2990ec4a127afa7c14732d1eec8a",
+ "homepage": "https://github.com/jonschlinkert/extend-shallow",
+ "keywords": [
+ "assign",
+ "extend",
+ "javascript",
+ "js",
+ "keys",
+ "merge",
+ "obj",
+ "object",
+ "prop",
+ "properties",
+ "property",
+ "props",
+ "shallow",
+ "util",
+ "utility",
+ "utils",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "extend-shallow",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/extend-shallow.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "2.0.1"
+}
diff --git a/build/node_modules/union-value/node_modules/set-value/LICENSE b/build/node_modules/union-value/node_modules/set-value/LICENSE
new file mode 100644
index 00000000..d734237b
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/set-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/union-value/node_modules/set-value/README.md b/build/node_modules/union-value/node_modules/set-value/README.md
new file mode 100644
index 00000000..19fbdbb4
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/set-value/README.md
@@ -0,0 +1,81 @@
+# set-value [![NPM version](https://img.shields.io/npm/v/set-value.svg?style=flat)](https://www.npmjs.com/package/set-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/set-value.svg?style=flat)](https://npmjs.org/package/set-value) [![NPM total downloads](https://img.shields.io/npm/dt/set-value.svg?style=flat)](https://npmjs.org/package/set-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/set-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/set-value)
+
+> Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save set-value
+```
+
+## Usage
+
+```js
+var set = require('set-value');
+
+var obj = {};
+set(obj, 'a.b.c', 'd');
+console.log(obj);
+//=> {a: {b: c: 'd'}}
+```
+
+## About
+
+### Related projects
+
+* [assign-value](https://www.npmjs.com/package/assign-value): Assign a value or extend a deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/assign-value) | [homepage](https://github.com/jonschlinkert/assign-value "Assign a value or extend a deeply nested property of an object using object path notation.")
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.")
+* [merge-value](https://www.npmjs.com/package/merge-value): Similar to assign-value but deeply merges object values or nested values using object path/dot notation. | [homepage](https://github.com/jonschlinkert/merge-value "Similar to assign-value but deeply merges object values or nested values using object path/dot notation.")
+* [omit-value](https://www.npmjs.com/package/omit-value): Omit properties from an object or deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/omit-value) | [homepage](https://github.com/jonschlinkert/omit-value "Omit properties from an object or deeply nested property of an object using object path notation.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [union-value](https://www.npmjs.com/package/union-value): Set an array of unique values as the property of an object. Supports setting deeply… [more](https://github.com/jonschlinkert/union-value) | [homepage](https://github.com/jonschlinkert/union-value "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.")
+* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 53 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [vadimdemedes](https://github.com/vadimdemedes) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 22, 2017._
\ No newline at end of file
diff --git a/build/node_modules/union-value/node_modules/set-value/index.js b/build/node_modules/union-value/node_modules/set-value/index.js
new file mode 100644
index 00000000..e51ece55
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/set-value/index.js
@@ -0,0 +1,63 @@
+/*!
+ * set-value
+ *
+ * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var toPath = require('to-object-path');
+var extend = require('extend-shallow');
+var isPlainObject = require('is-plain-object');
+var isObject = require('is-extendable');
+
+module.exports = function(obj, path, val) {
+ if (!isObject(obj)) {
+ return obj;
+ }
+
+ if (Array.isArray(path)) {
+ path = toPath(path);
+ }
+
+ if (typeof path !== 'string') {
+ return obj;
+ }
+
+ var segs = path.split('.');
+ var len = segs.length, i = -1;
+ var res = obj;
+ var last;
+
+ while (++i < len) {
+ var key = segs[i];
+
+ while (key[key.length - 1] === '\\') {
+ key = key.slice(0, -1) + '.' + segs[++i];
+ }
+
+ if (i === len - 1) {
+ last = key;
+ break;
+ }
+
+ if (!isObject(obj[key])) {
+ obj[key] = {};
+ }
+ obj = obj[key];
+ }
+
+ if (obj.hasOwnProperty(last) && isObject(obj[last])) {
+ if (isPlainObject(val)) {
+ extend(obj[last], val);
+ } else {
+ obj[last] = val;
+ }
+
+ } else {
+ obj[last] = val;
+ }
+ return res;
+};
+
diff --git a/build/node_modules/union-value/node_modules/set-value/package.json b/build/node_modules/union-value/node_modules/set-value/package.json
new file mode 100644
index 00000000..c347672f
--- /dev/null
+++ b/build/node_modules/union-value/node_modules/set-value/package.json
@@ -0,0 +1,148 @@
+{
+ "_args": [
+ [
+ "set-value@^0.4.3",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/union-value"
+ ]
+ ],
+ "_from": "set-value@>=0.4.3 <0.5.0",
+ "_id": "set-value@0.4.3",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/union-value/set-value",
+ "_nodeVersion": "7.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/set-value-0.4.3.tgz_1487799887096_0.9961463622748852"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "4.1.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "set-value",
+ "raw": "set-value@^0.4.3",
+ "rawSpec": "^0.4.3",
+ "scope": null,
+ "spec": ">=0.4.3 <0.5.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/union-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "_shasum": "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1",
+ "_shrinkwrap": null,
+ "_spec": "set-value@^0.4.3",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/union-value",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/set-value/issues"
+ },
+ "contributors": [
+ {
+ "email": "wtgtybhertgeghgtwtg@gmail.com",
+ "url": "https://github.com/wtgtybhertgeghgtwtg"
+ },
+ {
+ "email": "jon.schlinkert@sellside.com",
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "email": "vdemedes@gmail.com",
+ "name": "Vadim Demedes",
+ "url": "https://vadimdemedes.com"
+ }
+ ],
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ },
+ "description": "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.10",
+ "mocha": "^3.0.2"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1",
+ "tarball": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "2a16afca69bce51978cd5396a68d4435de0c6cc5",
+ "homepage": "https://github.com/jonschlinkert/set-value",
+ "keywords": [
+ "get",
+ "has",
+ "hasown",
+ "key",
+ "keys",
+ "nested",
+ "notation",
+ "object",
+ "prop",
+ "properties",
+ "property",
+ "props",
+ "set",
+ "value",
+ "values"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "set-value",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/set-value.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "assign-value",
+ "get-value",
+ "has-value",
+ "merge-value",
+ "omit-value",
+ "set-value",
+ "union-value",
+ "unset-value"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "0.4.3"
+}
diff --git a/build/node_modules/union-value/package.json b/build/node_modules/union-value/package.json
new file mode 100644
index 00000000..fdd880df
--- /dev/null
+++ b/build/node_modules/union-value/package.json
@@ -0,0 +1,132 @@
+{
+ "_args": [
+ [
+ "union-value@^1.0.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/cache-base"
+ ]
+ ],
+ "_from": "union-value@>=1.0.0 <2.0.0",
+ "_id": "union-value@1.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/union-value",
+ "_nodeVersion": "7.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/union-value-1.0.0.tgz_1488062568793_0.8357821961399168"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "4.1.2",
+ "_phantomChildren": {
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ },
+ "_requested": {
+ "name": "union-value",
+ "raw": "union-value@^1.0.0",
+ "rawSpec": "^1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/cache-base"
+ ],
+ "_resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "_shasum": "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4",
+ "_shrinkwrap": null,
+ "_spec": "union-value@^1.0.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/cache-base",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/union-value/issues"
+ },
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "description": "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "^3.2.0",
+ "should": "^11.2.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4",
+ "tarball": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "3ef3dfbb89ae1f72aae88744dfafe70a47b313f8",
+ "homepage": "https://github.com/jonschlinkert/union-value",
+ "keywords": [
+ "array",
+ "dot",
+ "get",
+ "has",
+ "nested",
+ "notation",
+ "object",
+ "path",
+ "prop",
+ "property",
+ "set",
+ "union",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "union-value",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/union-value.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "assign-value",
+ "get-value",
+ "has-value",
+ "set-value",
+ "unset-value"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "1.0.0"
+}
diff --git a/build/node_modules/unset-value/LICENSE b/build/node_modules/unset-value/LICENSE
new file mode 100644
index 00000000..ec85897e
--- /dev/null
+++ b/build/node_modules/unset-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/unset-value/README.md b/build/node_modules/unset-value/README.md
new file mode 100644
index 00000000..f0fec3d3
--- /dev/null
+++ b/build/node_modules/unset-value/README.md
@@ -0,0 +1,131 @@
+# unset-value [![NPM version](https://img.shields.io/npm/v/unset-value.svg?style=flat)](https://www.npmjs.com/package/unset-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/unset-value.svg?style=flat)](https://npmjs.org/package/unset-value) [![NPM total downloads](https://img.shields.io/npm/dt/unset-value.svg?style=flat)](https://npmjs.org/package/unset-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/unset-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/unset-value)
+
+> Delete nested properties from an object using dot notation.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save unset-value
+```
+
+## Usage
+
+```js
+var unset = require('unset-value');
+
+var obj = {a: {b: {c: 'd', e: 'f'}}};
+unset(obj, 'a.b.c');
+console.log(obj);
+//=> {a: {b: {e: 'f'}}};
+```
+
+## Examples
+
+### Updates the object when a property is deleted
+
+```js
+var obj = {a: 'b'};
+unset(obj, 'a');
+console.log(obj);
+//=> {}
+```
+
+### Returns true when a property is deleted
+
+```js
+unset({a: 'b'}, 'a') // true
+```
+
+### Returns `true` when a property does not exist
+
+This is consistent with `delete` behavior in that it does not
+throw when a property does not exist.
+
+```js
+unset({a: {b: {c: 'd'}}}, 'd') // true
+```
+
+### delete nested values
+
+```js
+var one = {a: {b: {c: 'd'}}};
+unset(one, 'a.b');
+console.log(one);
+//=> {a: {}}
+
+var two = {a: {b: {c: 'd'}}};
+unset(two, 'a.b.c');
+console.log(two);
+//=> {a: {b: {}}}
+
+var three = {a: {b: {c: 'd', e: 'f'}}};
+unset(three, 'a.b.c');
+console.log(three);
+//=> {a: {b: {e: 'f'}}}
+```
+
+### throws on invalid args
+
+```js
+unset();
+// 'expected an object.'
+```
+
+## About
+
+### Related projects
+
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [get-values](https://www.npmjs.com/package/get-values): Return an array of all values from the given object. | [homepage](https://github.com/jonschlinkert/get-values "Return an array of all values from the given object.")
+* [omit-value](https://www.npmjs.com/package/omit-value): Omit properties from an object or deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/omit-value) | [homepage](https://github.com/jonschlinkert/omit-value "Omit properties from an object or deeply nested property of an object using object path notation.")
+* [put-value](https://www.npmjs.com/package/put-value): Update only existing values from an object, works with dot notation paths like `a.b.c` and… [more](https://github.com/tunnckocore/put-value#readme) | [homepage](https://github.com/tunnckocore/put-value#readme "Update only existing values from an object, works with dot notation paths like `a.b.c` and support deep nesting.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [union-value](https://www.npmjs.com/package/union-value): Set an array of unique values as the property of an object. Supports setting deeply… [more](https://github.com/jonschlinkert/union-value) | [homepage](https://github.com/jonschlinkert/union-value "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.")
+* [upsert-value](https://www.npmjs.com/package/upsert-value): Update or set nested values and any intermediaries with dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/doowb/upsert-value "Update or set nested values and any intermediaries with dot notation (`'a.b.c'`) paths.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 6 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 25, 2017._
\ No newline at end of file
diff --git a/build/node_modules/unset-value/index.js b/build/node_modules/unset-value/index.js
new file mode 100644
index 00000000..a9190101
--- /dev/null
+++ b/build/node_modules/unset-value/index.js
@@ -0,0 +1,32 @@
+/*!
+ * unset-value
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var isObject = require('isobject');
+var has = require('has-value');
+
+module.exports = function unset(obj, prop) {
+ if (!isObject(obj)) {
+ throw new TypeError('expected an object.');
+ }
+ if (obj.hasOwnProperty(prop)) {
+ delete obj[prop];
+ return true;
+ }
+
+ if (has(obj, prop)) {
+ var segs = prop.split('.');
+ var last = segs.pop();
+ while (segs.length && segs[segs.length - 1].slice(-1) === '\\') {
+ last = segs.pop().slice(0, -1) + '.' + last;
+ }
+ while (segs.length) obj = obj[prop = segs.shift()];
+ return (delete obj[last]);
+ }
+ return true;
+};
diff --git a/build/node_modules/unset-value/node_modules/has-value/LICENSE b/build/node_modules/unset-value/node_modules/has-value/LICENSE
new file mode 100644
index 00000000..39245ac1
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/unset-value/node_modules/has-value/README.md b/build/node_modules/unset-value/node_modules/has-value/README.md
new file mode 100644
index 00000000..a927633e
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/README.md
@@ -0,0 +1,130 @@
+# has-value [![NPM version](https://img.shields.io/npm/v/has-value.svg?style=flat)](https://www.npmjs.com/package/has-value) [![NPM downloads](https://img.shields.io/npm/dm/has-value.svg?style=flat)](https://npmjs.org/package/has-value) [![Build Status](https://img.shields.io/travis/jonschlinkert/has-value.svg?style=flat)](https://travis-ci.org/jonschlinkert/has-value)
+
+> Returns true if a value exists, false if empty. Works with deeply nested values using object paths.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install has-value --save
+```
+
+**Works for:**
+
+* booleans
+* functions
+* numbers (pass `true` as the last arg to treat zero as a value instead of falsey)
+* strings
+* nulls
+* object
+* arrays
+
+## Usage
+
+Works with nested object paths or a single value:
+
+```js
+var hasValue = require('has-value');
+
+hasValue({a: {b: {c: 'foo'}}} 'a.b.c');
+//=> true
+
+hasValue('a');
+//=> true
+
+hasValue('');
+//=> false
+
+hasValue(1);
+//=> true
+
+hasValue(0);
+//=> false
+
+hasValue(0, true); // pass `true` as the last arg to treat zero as a value
+//=> true
+
+hasValue({a: 'a'}});
+//=> true
+
+hasValue({}});
+//=> false
+
+hasValue(['a']);
+//=> true
+
+hasValue([]);
+//=> false
+
+hasValue(function(foo) {}); // function length/arity
+//=> true
+
+hasValue(function() {});
+//=> false
+
+hasValue(true);
+hasValue(false);
+//=> true
+```
+
+## isEmpty
+
+To do the opposite and test for empty values, do:
+
+```js
+function isEmpty(o, isZero) {
+ return !hasValue.apply(hasValue, arguments);
+}
+```
+
+## Related projects
+
+You might also be interested in these projects:
+
+* [get-object](https://www.npmjs.com/package/get-object): Get a property from an object using dot (object path) notation. | [homepage](https://github.com/jonschlinkert/get-object)
+* [get-property](https://www.npmjs.com/package/get-property): Get a nested property or its value from an object using simple `a.b.c` paths. | [homepage](https://github.com/jonschlinkert/get-property)
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value)
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/has-value/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/has-value/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v, on March 27, 2016._
\ No newline at end of file
diff --git a/build/node_modules/unset-value/node_modules/has-value/index.js b/build/node_modules/unset-value/node_modules/has-value/index.js
new file mode 100644
index 00000000..90687c87
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/index.js
@@ -0,0 +1,19 @@
+/*!
+ * has-value
+ *
+ * Copyright (c) 2014-2016, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var isObject = require('isobject');
+var hasValues = require('has-values');
+var get = require('get-value');
+
+module.exports = function(obj, prop, noZero) {
+ if (isObject(obj)) {
+ return hasValues(get(obj, prop), noZero);
+ }
+ return hasValues(obj, prop);
+};
diff --git a/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE
new file mode 100644
index 00000000..39245ac1
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/README.md b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/README.md
new file mode 100644
index 00000000..9dd897aa
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/README.md
@@ -0,0 +1,112 @@
+# isobject [![NPM version](https://img.shields.io/npm/v/isobject.svg?style=flat)](https://www.npmjs.com/package/isobject) [![NPM downloads](https://img.shields.io/npm/dm/isobject.svg?style=flat)](https://npmjs.org/package/isobject) [![Build Status](https://img.shields.io/travis/jonschlinkert/isobject.svg?style=flat)](https://travis-ci.org/jonschlinkert/isobject)
+
+Returns true if the value is an object and not an array or null.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install isobject --save
+```
+
+Use [is-plain-object](https://github.com/jonschlinkert/is-plain-object) if you want only objects that are created by the `Object` constructor.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install isobject
+```
+
+Install with [bower](http://bower.io/)
+
+```sh
+$ bower install isobject
+```
+
+## Usage
+
+```js
+var isObject = require('isobject');
+```
+
+**True**
+
+All of the following return `true`:
+
+```js
+isObject({});
+isObject(Object.create({}));
+isObject(Object.create(Object.prototype));
+isObject(Object.create(null));
+isObject({});
+isObject(new Foo);
+isObject(/foo/);
+```
+
+**False**
+
+All of the following return `false`:
+
+```js
+isObject();
+isObject(function () {});
+isObject(1);
+isObject([]);
+isObject(undefined);
+isObject(null);
+```
+
+## Related projects
+
+You might also be interested in these projects:
+
+[merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep)
+
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow)
+* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object)
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/isobject/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/isobject/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on April 25, 2016._
\ No newline at end of file
diff --git a/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js
new file mode 100644
index 00000000..aa0dce0b
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js
@@ -0,0 +1,14 @@
+/*!
+ * isobject
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var isArray = require('isarray');
+
+module.exports = function isObject(val) {
+ return val != null && typeof val === 'object' && isArray(val) === false;
+};
diff --git a/build/node_modules/expand-range/package.json b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json
similarity index 50%
rename from build/node_modules/expand-range/package.json
rename to build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json
index 04823679..8b989cea 100644
--- a/build/node_modules/expand-range/package.json
+++ b/build/node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json
@@ -1,19 +1,19 @@
{
"_args": [
[
- "expand-range@^1.8.1",
- "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/braces"
+ "isobject@^2.0.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/unset-value/node_modules/has-value"
]
],
- "_from": "expand-range@>=1.8.1 <2.0.0",
- "_id": "expand-range@1.8.2",
+ "_from": "isobject@>=2.0.0 <3.0.0",
+ "_id": "isobject@2.1.0",
"_inCache": true,
"_installable": true,
- "_location": "/expand-range",
+ "_location": "/unset-value/has-value/isobject",
"_nodeVersion": "5.5.0",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
- "tmp": "tmp/expand-range-1.8.2.tgz_1462440434873_0.7174076174851507"
+ "tmp": "tmp/isobject-2.1.0.tgz_1461618425262_0.8524945541284978"
},
"_npmUser": {
"email": "github@sellside.com",
@@ -22,44 +22,40 @@
"_npmVersion": "3.6.0",
"_phantomChildren": {},
"_requested": {
- "name": "expand-range",
- "raw": "expand-range@^1.8.1",
- "rawSpec": "^1.8.1",
+ "name": "isobject",
+ "raw": "isobject@^2.0.0",
+ "rawSpec": "^2.0.0",
"scope": null,
- "spec": ">=1.8.1 <2.0.0",
+ "spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"_requiredBy": [
- "/braces"
+ "/unset-value/has-value"
],
- "_resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "_shasum": "a299effd335fe2721ebae8e257ec79644fc85337",
+ "_resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "_shasum": "f065561096a3f1da2ef46272f815c840d87e0c89",
"_shrinkwrap": null,
- "_spec": "expand-range@^1.8.1",
- "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/braces",
+ "_spec": "isobject@^2.0.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/unset-value/node_modules/has-value",
"author": {
"name": "Jon Schlinkert",
"url": "https://github.com/jonschlinkert"
},
"bugs": {
- "url": "https://github.com/jonschlinkert/expand-range/issues"
+ "url": "https://github.com/jonschlinkert/isobject/issues"
},
"dependencies": {
- "fill-range": "^2.1.0"
+ "isarray": "1.0.0"
},
- "description": "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.",
+ "description": "Returns true if the value is an object and not an array or null.",
"devDependencies": {
- "benchmarked": "^0.2.4",
- "brace-expansion": "^1.1.4",
- "glob": "^7.0.3",
"gulp-format-md": "^0.1.9",
- "minimatch": "^3.0.0",
"mocha": "^2.4.5"
},
"directories": {},
"dist": {
- "shasum": "a299effd335fe2721ebae8e257ec79644fc85337",
- "tarball": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz"
+ "shasum": "f065561096a3f1da2ef46272f815c840d87e0c89",
+ "tarball": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz"
},
"engines": {
"node": ">=0.10.0"
@@ -67,24 +63,21 @@
"files": [
"index.js"
],
- "gitHead": "4c873af0870df8382bafc66a93d5c89e3aad3d4d",
- "homepage": "https://github.com/jonschlinkert/expand-range",
+ "gitHead": "d693ec8d31b02b42a19b2d806407a4ecb2f9fb73",
+ "homepage": "https://github.com/jonschlinkert/isobject",
"keywords": [
- "alpha",
- "alphabetical",
- "bash",
- "brace",
- "expand",
- "expansion",
- "glob",
- "match",
- "matches",
- "matching",
- "number",
- "numerical",
- "range",
- "ranges",
- "sh"
+ "check",
+ "is",
+ "is-object",
+ "isobject",
+ "kind",
+ "kind-of",
+ "kindof",
+ "native",
+ "object",
+ "type",
+ "typeof",
+ "value"
],
"license": "MIT",
"main": "index.js",
@@ -98,12 +91,12 @@
"name": "doowb"
}
],
- "name": "expand-range",
+ "name": "isobject",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
- "url": "git+https://github.com/jonschlinkert/expand-range.git"
+ "url": "git+https://github.com/jonschlinkert/isobject.git"
},
"scripts": {
"test": "mocha"
@@ -121,9 +114,10 @@
],
"related": {
"list": [
- "micromatch",
- "fill-range",
- "braces"
+ "merge-deep",
+ "extend-shallow",
+ "is-plain-object",
+ "kind-of"
]
},
"tasks": [
@@ -131,5 +125,5 @@
],
"toc": false
},
- "version": "1.8.2"
+ "version": "2.1.0"
}
diff --git a/build/node_modules/unset-value/node_modules/has-value/package.json b/build/node_modules/unset-value/node_modules/has-value/package.json
new file mode 100644
index 00000000..a46c778a
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-value/package.json
@@ -0,0 +1,141 @@
+{
+ "_args": [
+ [
+ "has-value@^0.3.1",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/unset-value"
+ ]
+ ],
+ "_from": "has-value@>=0.3.1 <0.4.0",
+ "_id": "has-value@0.3.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/unset-value/has-value",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/has-value-0.3.1.tgz_1459091935592_0.006853065919131041"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "3.6.0",
+ "_phantomChildren": {
+ "isarray": "1.0.0"
+ },
+ "_requested": {
+ "name": "has-value",
+ "raw": "has-value@^0.3.1",
+ "rawSpec": "^0.3.1",
+ "scope": null,
+ "spec": ">=0.3.1 <0.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/unset-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "_shasum": "7b1f58bada62ca827ec0a2078025654845995e1f",
+ "_shrinkwrap": null,
+ "_spec": "has-value@^0.3.1",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/unset-value",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/has-value/issues"
+ },
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "description": "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.7",
+ "mocha": "^2.4.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7b1f58bada62ca827ec0a2078025654845995e1f",
+ "tarball": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "adecb27b13b7e99688694e228a946e6e635fcc64",
+ "homepage": "https://github.com/jonschlinkert/has-value",
+ "keywords": [
+ "array",
+ "boolean",
+ "empty",
+ "find",
+ "function",
+ "has",
+ "hasOwn",
+ "javascript",
+ "js",
+ "key",
+ "keys",
+ "node.js",
+ "null",
+ "number",
+ "object",
+ "properties",
+ "property",
+ "string",
+ "type",
+ "util",
+ "utilities",
+ "utility",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "has-value",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/has-value.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "get-object",
+ "get-property",
+ "get-value",
+ "set-value"
+ ]
+ },
+ "run": true,
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "0.3.1"
+}
diff --git a/build/node_modules/unset-value/node_modules/has-values/LICENSE b/build/node_modules/unset-value/node_modules/has-values/LICENSE
new file mode 100644
index 00000000..39245ac1
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-values/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/unset-value/node_modules/has-values/README.md b/build/node_modules/unset-value/node_modules/has-values/README.md
new file mode 100644
index 00000000..13319c51
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-values/README.md
@@ -0,0 +1,114 @@
+# has-values [![NPM version](https://img.shields.io/npm/v/has-values.svg?style=flat)](https://www.npmjs.com/package/has-values) [![NPM downloads](https://img.shields.io/npm/dm/has-values.svg?style=flat)](https://npmjs.org/package/has-values) [![Build Status](https://img.shields.io/travis/jonschlinkert/has-values.svg?style=flat)](https://travis-ci.org/jonschlinkert/has-values)
+
+> Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install has-values --save
+```
+
+## Usage
+
+```js
+var hasValue = require('has-values');
+
+hasValue('a');
+//=> true
+
+hasValue('');
+//=> false
+
+hasValue(1);
+//=> true
+
+hasValue(0);
+//=> false
+
+hasValue(0, true); // treat zero as a value
+//=> true
+
+hasValue({a: 'a'}});
+//=> true
+
+hasValue({}});
+//=> false
+
+hasValue(['a']);
+//=> true
+
+hasValue([]);
+//=> false
+
+hasValue(function(foo) {}); // function length/arity
+//=> true
+
+hasValue(function() {});
+//=> false
+
+hasValue(true);
+hasValue(false);
+//=> true
+```
+
+## isEmpty
+
+To test for empty values, do:
+
+```js
+function isEmpty(o, isZero) {
+ return !hasValue(o, isZero);
+}
+```
+
+## Related projects
+
+You might also be interested in these projects:
+
+* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://www.npmjs.com/package/has-value) | [homepage](https://github.com/jonschlinkert/has-value)
+* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object)
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/has-values/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/has-values/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v, on March 27, 2016._
\ No newline at end of file
diff --git a/build/node_modules/unset-value/node_modules/has-values/index.js b/build/node_modules/unset-value/node_modules/has-values/index.js
new file mode 100644
index 00000000..6d04ba1f
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-values/index.js
@@ -0,0 +1,36 @@
+/*!
+ * has-values
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function hasValue(o, noZero) {
+ if (o === null || o === undefined) {
+ return false;
+ }
+
+ if (typeof o === 'boolean') {
+ return true;
+ }
+
+ if (typeof o === 'number') {
+ if (o === 0 && noZero === true) {
+ return false;
+ }
+ return true;
+ }
+
+ if (o.length !== undefined) {
+ return o.length !== 0;
+ }
+
+ for (var key in o) {
+ if (o.hasOwnProperty(key)) {
+ return true;
+ }
+ }
+ return false;
+};
diff --git a/build/node_modules/unset-value/node_modules/has-values/package.json b/build/node_modules/unset-value/node_modules/has-values/package.json
new file mode 100644
index 00000000..a08cff90
--- /dev/null
+++ b/build/node_modules/unset-value/node_modules/has-values/package.json
@@ -0,0 +1,134 @@
+{
+ "_args": [
+ [
+ "has-values@^0.1.4",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/unset-value/node_modules/has-value"
+ ]
+ ],
+ "_from": "has-values@>=0.1.4 <0.2.0",
+ "_id": "has-values@0.1.4",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/unset-value/has-values",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/has-values-0.1.4.tgz_1459080711641_0.050919414730742574"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "3.6.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "has-values",
+ "raw": "has-values@^0.1.4",
+ "rawSpec": "^0.1.4",
+ "scope": null,
+ "spec": ">=0.1.4 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/unset-value/has-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "_shasum": "6d61de95d91dfca9b9a02089ad384bff8f62b771",
+ "_shrinkwrap": null,
+ "_spec": "has-values@^0.1.4",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/unset-value/node_modules/has-value",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/has-values/issues"
+ },
+ "dependencies": {},
+ "description": "Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays. ",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.7",
+ "mocha": "^2.4.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "6d61de95d91dfca9b9a02089ad384bff8f62b771",
+ "tarball": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "199a3eacd663b4ae4b00aef5ef5541aa2c7c8089",
+ "homepage": "https://github.com/jonschlinkert/has-values",
+ "keywords": [
+ "array",
+ "boolean",
+ "empty",
+ "find",
+ "function",
+ "has",
+ "hasOwn",
+ "javascript",
+ "js",
+ "key",
+ "keys",
+ "node.js",
+ "null",
+ "number",
+ "object",
+ "properties",
+ "property",
+ "string",
+ "type",
+ "util",
+ "utilities",
+ "utility",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "has-values",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/has-values.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "has-value",
+ "isobject",
+ "is-plain-object"
+ ]
+ },
+ "run": true,
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "0.1.4"
+}
diff --git a/build/node_modules/unset-value/package.json b/build/node_modules/unset-value/package.json
new file mode 100644
index 00000000..99010a8d
--- /dev/null
+++ b/build/node_modules/unset-value/package.json
@@ -0,0 +1,139 @@
+{
+ "_args": [
+ [
+ "unset-value@^1.0.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/cache-base"
+ ]
+ ],
+ "_from": "unset-value@>=1.0.0 <2.0.0",
+ "_id": "unset-value@1.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/unset-value",
+ "_nodeVersion": "7.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/unset-value-1.0.0.tgz_1488061635259_0.42952891532331705"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "4.1.2",
+ "_phantomChildren": {
+ "get-value": "2.0.6",
+ "isarray": "1.0.0"
+ },
+ "_requested": {
+ "name": "unset-value",
+ "raw": "unset-value@^1.0.0",
+ "rawSpec": "^1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/cache-base"
+ ],
+ "_resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "_shasum": "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559",
+ "_shrinkwrap": null,
+ "_spec": "unset-value@^1.0.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/cache-base",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/unset-value/issues"
+ },
+ "contributors": [
+ {
+ "email": "wtgtybhertgeghgtwtg@gmail.com",
+ "url": "https://github.com/wtgtybhertgeghgtwtg"
+ },
+ {
+ "email": "jon.schlinkert@sellside.com",
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ }
+ ],
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "description": "Delete nested properties from an object using dot notation.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "*",
+ "should": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559",
+ "tarball": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "36b62353cde18d6be17a1c0dc080fddcc262d2da",
+ "homepage": "https://github.com/jonschlinkert/unset-value",
+ "keywords": [
+ "del",
+ "delete",
+ "key",
+ "object",
+ "omit",
+ "prop",
+ "property",
+ "remove",
+ "unset",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ }
+ ],
+ "name": "unset-value",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/unset-value.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "get-value",
+ "get-values",
+ "omit-value",
+ "put-value",
+ "set-value",
+ "union-value",
+ "upsert-value"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "1.0.0"
+}
diff --git a/build/node_modules/urix/.jshintrc b/build/node_modules/urix/.jshintrc
new file mode 100644
index 00000000..9d1a6183
--- /dev/null
+++ b/build/node_modules/urix/.jshintrc
@@ -0,0 +1,42 @@
+{
+ "bitwise": true,
+ "camelcase": true,
+ "curly": false,
+ "eqeqeq": true,
+ "es3": false,
+ "forin": true,
+ "immed": false,
+ "indent": false,
+ "latedef": "nofunc",
+ "newcap": false,
+ "noarg": true,
+ "noempty": true,
+ "nonew": false,
+ "plusplus": false,
+ "quotmark": true,
+ "undef": true,
+ "unused": "vars",
+ "strict": false,
+ "trailing": true,
+ "maxparams": 5,
+ "maxdepth": false,
+ "maxstatements": false,
+ "maxcomplexity": false,
+ "maxlen": 100,
+
+ "asi": true,
+ "expr": true,
+ "globalstrict": true,
+ "smarttabs": true,
+ "sub": true,
+
+ "node": true,
+ "globals": {
+ "describe": false,
+ "it": false,
+ "before": false,
+ "beforeEach": false,
+ "after": false,
+ "afterEach": false
+ }
+}
diff --git a/build/node_modules/urix/LICENSE b/build/node_modules/urix/LICENSE
new file mode 100644
index 00000000..0595be36
--- /dev/null
+++ b/build/node_modules/urix/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Simon Lydell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/urix/index.js b/build/node_modules/urix/index.js
new file mode 100644
index 00000000..dc6ef270
--- /dev/null
+++ b/build/node_modules/urix/index.js
@@ -0,0 +1,17 @@
+// Copyright 2014 Simon Lydell
+// X11 (“MIT”) Licensed. (See LICENSE.)
+
+var path = require("path")
+
+"use strict"
+
+function urix(aPath) {
+ if (path.sep === "\\") {
+ return aPath
+ .replace(/\\/g, "/")
+ .replace(/^[a-z]:\/?/i, "/")
+ }
+ return aPath
+}
+
+module.exports = urix
diff --git a/build/node_modules/urix/package.json b/build/node_modules/urix/package.json
new file mode 100644
index 00000000..ffc8f3c5
--- /dev/null
+++ b/build/node_modules/urix/package.json
@@ -0,0 +1,81 @@
+{
+ "_args": [
+ [
+ "urix@^0.1.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/source-map-resolve"
+ ]
+ ],
+ "_from": "urix@>=0.1.0 <0.2.0",
+ "_id": "urix@0.1.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/urix",
+ "_npmUser": {
+ "email": "simon.lydell@gmail.com",
+ "name": "lydell"
+ },
+ "_npmVersion": "1.4.4",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "urix",
+ "raw": "urix@^0.1.0",
+ "rawSpec": "^0.1.0",
+ "scope": null,
+ "spec": ">=0.1.0 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/source-map-resolve"
+ ],
+ "_resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "_shasum": "da937f7a62e21fec1fd18d49b35c2935067a6c72",
+ "_shrinkwrap": null,
+ "_spec": "urix@^0.1.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/source-map-resolve",
+ "author": {
+ "name": "Simon Lydell"
+ },
+ "bugs": {
+ "url": "https://github.com/lydell/urix/issues"
+ },
+ "dependencies": {},
+ "description": "Makes Windows-style paths more unix and URI friendly.",
+ "devDependencies": {
+ "jshint": "^2.4.4",
+ "mocha": "^1.17.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "da937f7a62e21fec1fd18d49b35c2935067a6c72",
+ "tarball": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz"
+ },
+ "homepage": "https://github.com/lydell/urix",
+ "keywords": [
+ "path",
+ "url",
+ "uri",
+ "unix",
+ "windows",
+ "backslash",
+ "slash"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "simon.lydell@gmail.com",
+ "name": "lydell"
+ }
+ ],
+ "name": "urix",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/lydell/urix.git"
+ },
+ "scripts": {
+ "test": "jshint index.js test/ && mocha"
+ },
+ "version": "0.1.0"
+}
diff --git a/build/node_modules/urix/readme.md b/build/node_modules/urix/readme.md
new file mode 100644
index 00000000..b258b986
--- /dev/null
+++ b/build/node_modules/urix/readme.md
@@ -0,0 +1,46 @@
+[![Build Status](https://travis-ci.org/lydell/urix.png?branch=master)](https://travis-ci.org/lydell/urix)
+
+Overview
+========
+
+Makes Windows-style paths more unix and URI friendly. Useful if you work with
+paths that eventually will be used in URLs.
+
+```js
+var urix = require("urix")
+
+// On Windows:
+urix("c:\\users\\you\\foo")
+// /users/you/foo
+
+// On unix-like systems:
+urix("c:\\users\\you\\foo")
+// c:\users\you\foo
+```
+
+
+Installation
+============
+
+`npm install urix`
+
+```js
+var urix = require("urix")
+```
+
+
+Usage
+=====
+
+### `urix(path)` ###
+
+On Windows, replaces all backslashes with slashes and uses a slash instead of a
+drive letter and a colon for absolute paths.
+
+On unix-like systems it is a no-op.
+
+
+License
+=======
+
+[The X11 (“MIT”) License](LICENSE).
diff --git a/build/node_modules/urix/test/index.js b/build/node_modules/urix/test/index.js
new file mode 100644
index 00000000..5333f246
--- /dev/null
+++ b/build/node_modules/urix/test/index.js
@@ -0,0 +1,43 @@
+// Copyright 2014 Simon Lydell
+// X11 (“MIT”) Licensed. (See LICENSE.)
+
+var path = require("path")
+var assert = require("assert")
+var urix = require("../")
+
+"use stict"
+
+function test(testPath, expected) {
+ path.sep = "\\"
+ assert.equal(urix(testPath), expected)
+ path.sep = "/"
+ assert.equal(urix(testPath), testPath)
+}
+
+describe("urix", function() {
+
+ it("is a function", function() {
+ assert.equal(typeof urix, "function")
+ })
+
+
+ it("converts backslashes to slashes", function() {
+ test("a\\b\\c", "a/b/c")
+ test("\\a\\b\\c", "/a/b/c")
+ test("a/b\\c", "a/b/c")
+ test("\\\\a\\\\\\b///c", "//a///b///c")
+ })
+
+
+ it("changes the drive letter to a slash", function() {
+ test("c:\\a", "/a")
+ test("C:\\a", "/a")
+ test("z:\\a", "/a")
+ test("c:a", "/a")
+ test("c:/a", "/a")
+ test("c:\\\\a", "//a")
+ test("c://a", "//a")
+ test("c:\\//a", "///a")
+ })
+
+})
diff --git a/build/node_modules/use/LICENSE b/build/node_modules/use/LICENSE
new file mode 100644
index 00000000..7cccaf9e
--- /dev/null
+++ b/build/node_modules/use/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build/node_modules/use/README.md b/build/node_modules/use/README.md
new file mode 100644
index 00000000..59b1dbd8
--- /dev/null
+++ b/build/node_modules/use/README.md
@@ -0,0 +1,90 @@
+# use [![NPM version](https://img.shields.io/npm/v/use.svg?style=flat)](https://www.npmjs.com/package/use) [![NPM monthly downloads](https://img.shields.io/npm/dm/use.svg?style=flat)](https://npmjs.org/package/use) [![NPM total downloads](https://img.shields.io/npm/dt/use.svg?style=flat)](https://npmjs.org/package/use) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/use.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/use)
+
+> Easily add plugin support to your node.js application.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save use
+```
+
+A different take on plugin handling! This is not a middleware system, if you need something that handles async middleware, [ware](https://github.com/segmentio/ware) is great for that.
+
+## Usage
+
+```js
+const use = require('use');
+```
+
+See the [examples folder](./examples) for usage examples.
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [base-plugins](https://www.npmjs.com/package/base-plugins): Adds 'smart plugin' support to your base application. | [homepage](https://github.com/node-base/base-plugins "Adds 'smart plugin' support to your base application.")
+* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base "Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks")
+* [ware](https://www.npmjs.com/package/ware): Easily create your own middleware layer. | [homepage](https://github.com/segmentio/ware "Easily create your own middleware layer.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 37 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 7 | [charlike-old](https://github.com/charlike-old) |
+| 2 | [doowb](https://github.com/doowb) |
+| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
+* [GitHub Profile](https://github.com/jonschlinkert)
+* [Twitter Profile](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 12, 2018._
\ No newline at end of file
diff --git a/build/node_modules/use/index.js b/build/node_modules/use/index.js
new file mode 100644
index 00000000..9a1eb4ee
--- /dev/null
+++ b/build/node_modules/use/index.js
@@ -0,0 +1,155 @@
+/*!
+ * use
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function base(app, options) {
+ if (!isObject(app) && typeof app !== 'function') {
+ throw new TypeError('expected an object or function');
+ }
+
+ var opts = isObject(options) ? options : {};
+ var prop = typeof opts.prop === 'string' ? opts.prop : 'fns';
+ if (!Array.isArray(app[prop])) {
+ define(app, prop, []);
+ }
+
+ /**
+ * Define a plugin function to be passed to use. The only
+ * parameter exposed to the plugin is `app`, the object or function.
+ * passed to `use(app)`. `app` is also exposed as `this` in plugins.
+ *
+ * Additionally, **if a plugin returns a function, the function will
+ * be pushed onto the `fns` array**, allowing the plugin to be
+ * called at a later point by the `run` method.
+ *
+ * ```js
+ * var use = require('use');
+ *
+ * // define a plugin
+ * function foo(app) {
+ * // do stuff
+ * }
+ *
+ * var app = function(){};
+ * use(app);
+ *
+ * // register plugins
+ * app.use(foo);
+ * app.use(bar);
+ * app.use(baz);
+ * ```
+ * @name .use
+ * @param {Function} `fn` plugin function to call
+ * @api public
+ */
+
+ define(app, 'use', use);
+
+ /**
+ * Run all plugins on `fns`. Any plugin that returns a function
+ * when called by `use` is pushed onto the `fns` array.
+ *
+ * ```js
+ * var config = {};
+ * app.run(config);
+ * ```
+ * @name .run
+ * @param {Object} `value` Object to be modified by plugins.
+ * @return {Object} Returns the object passed to `run`
+ * @api public
+ */
+
+ define(app, 'run', function(val) {
+ if (!isObject(val)) return;
+
+ if (!val.use || !val.run) {
+ define(val, prop, val[prop] || []);
+ define(val, 'use', use);
+ }
+
+ if (!val[prop] || val[prop].indexOf(base) === -1) {
+ val.use(base);
+ }
+
+ var self = this || app;
+ var fns = self[prop];
+ var len = fns.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ val.use(fns[idx]);
+ }
+ return val;
+ });
+
+ /**
+ * Call plugin `fn`. If a function is returned push it into the
+ * `fns` array to be called by the `run` method.
+ */
+
+ function use(type, fn, options) {
+ var offset = 1;
+
+ if (typeof type === 'string' || Array.isArray(type)) {
+ fn = wrap(type, fn);
+ offset++;
+ } else {
+ options = fn;
+ fn = type;
+ }
+
+ if (typeof fn !== 'function') {
+ throw new TypeError('expected a function');
+ }
+
+ var self = this || app;
+ var fns = self[prop];
+
+ var args = [].slice.call(arguments, offset);
+ args.unshift(self);
+
+ if (typeof opts.hook === 'function') {
+ opts.hook.apply(self, args);
+ }
+
+ var val = fn.apply(self, args);
+ if (typeof val === 'function' && fns.indexOf(val) === -1) {
+ fns.push(val);
+ }
+ return self;
+ }
+
+ /**
+ * Wrap a named plugin function so that it's only called on objects of the
+ * given `type`
+ *
+ * @param {String} `type`
+ * @param {Function} `fn` Plugin function
+ * @return {Function}
+ */
+
+ function wrap(type, fn) {
+ return function plugin() {
+ return this.type === type ? fn.apply(this, arguments) : plugin;
+ };
+ }
+
+ return app;
+};
+
+function isObject(val) {
+ return val && typeof val === 'object' && !Array.isArray(val);
+}
+
+function define(obj, key, val) {
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ writable: true,
+ value: val
+ });
+}
diff --git a/build/node_modules/use/package.json b/build/node_modules/use/package.json
new file mode 100644
index 00000000..296cf7e5
--- /dev/null
+++ b/build/node_modules/use/package.json
@@ -0,0 +1,144 @@
+{
+ "_args": [
+ [
+ "use@^3.1.0",
+ "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/snapdragon"
+ ]
+ ],
+ "_from": "use@>=3.1.0 <4.0.0",
+ "_id": "use@3.1.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/use",
+ "_nodeVersion": "10.0.0",
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages",
+ "tmp": "tmp/use_3.1.1_1531415621811_0.13512177880723786"
+ },
+ "_npmUser": {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ "_npmVersion": "6.1.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "use",
+ "raw": "use@^3.1.0",
+ "rawSpec": "^3.1.0",
+ "scope": null,
+ "spec": ">=3.1.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/snapdragon"
+ ],
+ "_resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "_shasum": "d50c8cac79a19fbc20f2911f56eb973f4e10070f",
+ "_shrinkwrap": null,
+ "_spec": "use@^3.1.0",
+ "_where": "/var/build/workspace/build-platform-sdks/platform-client-sdk-common/output/purecloudjavascript-guest/build/node_modules/snapdragon",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/use/issues"
+ },
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Olsten Larck",
+ "url": "https://i.am.charlike.online"
+ },
+ {
+ "url": "https://github.com/wtgtybhertgeghgtwtg"
+ }
+ ],
+ "dependencies": {},
+ "description": "Easily add plugin support to your node.js application.",
+ "devDependencies": {
+ "base-plugins": "^1.0.0",
+ "define-property": "^2.0.0",
+ "extend-shallow": "^3.0.1",
+ "gulp": "^3.9.1",
+ "gulp-eslint": "^4.0.0",
+ "gulp-format-md": "^1.0.0",
+ "gulp-istanbul": "^1.1.2",
+ "gulp-mocha": "^3.0.1",
+ "mocha": "^4.0.1"
+ },
+ "directories": {},
+ "dist": {
+ "fileCount": 4,
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR4xFCRA9TVsSAnZWagAA1YwP/RPHo9+AgKfTsmDxVTH4\nom8gr6Xw75OjefybLHMp6D5diTmmJOoqHJX5MOO4Xn7TrCKgOM7m01xhd3xD\n17RwOBR8XeIpaHcla+GhUCwVBgtmbxfyPsbo+JqL+MCNOOx5w8/cdQ8e66O+\nSWM4JZX9UGg3lvke1hDH8qb6JPCqVKmASisrNWkPfKhX/iG107IQx4ElbvQT\n5VqWoNNs/NMjNdYmfiiQr8rUroAKq7P2sdMKfdHry5gCyOlVchndyjyoOGRk\nqrEt9QdpAXkHg444PTjS2dA/7b36qMkas8keu6VlWXPrwh8+45WFhaLGva1d\nZ3Lg6uu6hUnlxX6pKR8MVoQjdb7GMNMFOkATJA6FrVca8iddvK6IaXDukpVS\nw78bwkAlb7g/h5SwmgvfCOs16kiUiiyPDFE/lsXHcz/jU/oGlIKOiV7Czshh\nS8OPPV8+xtzxQYfrPWKnp/Tqx328+ADCr2yalLSP8QWKqqaWKYWzRJ77EQxt\nnWOZb0iGeLOIeJ2O2fud/5aIcFRJ1RFfzzsjtCtZmc7w/0DjSg6F4kK32aeG\n+oXirG8NBGAn4omdxkkCdtK9/kkKlLbrqH8YPvMRSDPrynLU2kyX54VIlBVb\noMXRIoZN5rmUQPyRJ2BCScJk9liFi9CsR7a6UkiYlSgWHLUODysiufIobBc8\npPz5\r\n=H04c\r\n-----END PGP SIGNATURE-----\r\n",
+ "shasum": "d50c8cac79a19fbc20f2911f56eb973f4e10070f",
+ "tarball": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "unpackedSize": 9514
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "163104d5c5cc8ed35602625eb90a687df1dbc487",
+ "homepage": "https://github.com/jonschlinkert/use",
+ "keywords": [
+ "use"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "email": "github@sellside.com",
+ "name": "jonschlinkert"
+ },
+ {
+ "email": "kgriffs@me.com",
+ "name": "kgriffs"
+ }
+ ],
+ "name": "use",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/use.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb",
+ "ware"
+ ],
+ "related": {
+ "list": [
+ "base",
+ "base-plugins",
+ "ware"
+ ]
+ },
+ "tasks": [
+ "readme"
+ ],
+ "toc": false
+ },
+ "version": "3.1.1"
+}
diff --git a/build/node_modules/util-deprecate/package.json b/build/node_modules/util-deprecate/package.json
index 289fabab..e9942e2c 100644
--- a/build/node_modules/util-deprecate/package.json
+++ b/build/node_modules/util-deprecate/package.json
@@ -28,7 +28,7 @@
"_requiredBy": [
"/readable-stream"
],
- "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf",
"_shrinkwrap": null,
"_spec": "util-deprecate@~1.0.1",
diff --git a/build/node_modules/util/package.json b/build/node_modules/util/package.json
index 6820028f..67de24ef 100644
--- a/build/node_modules/util/package.json
+++ b/build/node_modules/util/package.json
@@ -33,7 +33,7 @@
"_requiredBy": [
"/sinon"
],
- "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/util/-/util-0.11.1.tgz",
+ "_resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
"_shasum": "3236733720ec64bb27f6e26f421aaa2e1b588d61",
"_shrinkwrap": null,
"_spec": "util@>=0.10.3 <1",
diff --git a/build/node_modules/wrappy/package.json b/build/node_modules/wrappy/package.json
index 3cfb5a65..2f285775 100644
--- a/build/node_modules/wrappy/package.json
+++ b/build/node_modules/wrappy/package.json
@@ -32,7 +32,7 @@
"_requiredBy": [
"/once"
],
- "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/wrappy/-/wrappy-1.0.2.tgz",
+ "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
"_shrinkwrap": null,
"_spec": "wrappy@1",
diff --git a/build/package.json b/build/package.json
index fa8b3a77..b256016b 100644
--- a/build/package.json
+++ b/build/package.json
@@ -1,6 +1,6 @@
{
"name": "purecloud-guest-chat-client",
- "version": "2.0.0",
+ "version": "3.0.0",
"description": "A JavaScript library to interface with the PureCloud Platform API",
"license": "MIT",
"main": "dist/node/purecloud-guest-chat-client.js",
diff --git a/build/src/purecloud-guest-chat-client/ApiClient.js b/build/src/purecloud-guest-chat-client/ApiClient.js
index 51d28380..c8a4441b 100644
--- a/build/src/purecloud-guest-chat-client/ApiClient.js
+++ b/build/src/purecloud-guest-chat-client/ApiClient.js
@@ -2,7 +2,7 @@ import superagent from 'superagent';
/**
* @module purecloud-guest-chat-client/ApiClient
- * @version 2.0.0
+ * @version 3.0.0
*/
class ApiClient {
/**
@@ -531,7 +531,7 @@ class ApiClient {
// set header parameters
request.set(this.defaultHeaders).set(this.normalizeParams(headerParams));
- //request.set({ 'purecloud-sdk': '2.0.0' });
+ //request.set({ 'purecloud-sdk': '3.0.0' });
// set request timeout
request.timeout(this.timeout);
diff --git a/build/src/purecloud-guest-chat-client/api/WebChatApi.js b/build/src/purecloud-guest-chat-client/api/WebChatApi.js
index e1e48b7b..52cc8a77 100644
--- a/build/src/purecloud-guest-chat-client/api/WebChatApi.js
+++ b/build/src/purecloud-guest-chat-client/api/WebChatApi.js
@@ -5,7 +5,7 @@ class WebChatApi {
/**
* WebChat service.
* @module purecloud-guest-chat-client/api/WebChatApi
- * @version 2.0.0
+ * @version 3.0.0
*/
/**
diff --git a/build/src/purecloud-guest-chat-client/index.js b/build/src/purecloud-guest-chat-client/index.js
index f58b0c04..b2bb74f6 100644
--- a/build/src/purecloud-guest-chat-client/index.js
+++ b/build/src/purecloud-guest-chat-client/index.js
@@ -31,7 +31,7 @@ import WebChatApi from './api/WebChatApi.js';
*
*
* @module purecloud-guest-chat-client/index
- * @version 2.0.0
+ * @version 3.0.0
*/
class platformClient {
constructor() {
diff --git a/releaseNotes.md b/releaseNotes.md
index 7583b34d..65721a98 100644
--- a/releaseNotes.md
+++ b/releaseNotes.md
@@ -1,45 +1,58 @@
-Platform API version: 3021
+Platform API version: 3060
-# Major Changes (2 changes)
+# Major Changes (3 changes)
+
+**GuestMemberInfo** (1 change)
+
+* Property profileImageUrl was removed
+
+**WebChatMemberInfo** (1 change)
+
+* Property profileImageUrl was removed
+
+**WebChatMessage** (1 change)
+
+* Required property bodyType was added
-**GET /api/v2/webchat/guest/conversations/{conversationId}/messages** (1 change)
-* Parameter sortOrder was added
+# Minor Changes (9 changes)
**CreateWebChatConversationRequest** (1 change)
-* Property memberInfo was changed from WebChatMemberInfo to GuestMemberInfo
+* Optional property journeyContext was added
+**GuestMemberInfo** (1 change)
-# Minor Changes (8 changes)
+* Optional property avatarImageUrl was added
-**/api/v2/webchat/guest/conversations/{conversationId}/mediarequests** (2 changes)
+**JourneyContext** (1 change)
-* Path was added
-* Operation GET was added
+* Model was added
-**/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (3 changes)
+**JourneyCustomer** (1 change)
-* Path was added
-* Operation GET was added
-* Operation PATCH was added
+* Model was added
-**WebChatGuestMediaRequestEntityList** (1 change)
+**JourneyCustomerSession** (1 change)
* Model was added
-**WebChatGuestMediaRequest** (1 change)
+**JourneyAction** (1 change)
* Model was added
-**GuestMemberInfo** (1 change)
+**JourneyActionMap** (1 change)
* Model was added
+**WebChatMemberInfo** (1 change)
+
+* Optional property avatarImageUrl was added
+
+**CreateWebChatMessageRequest** (1 change)
-# Point Changes (1 change)
+* Optional property bodyType was added
-**POST /api/v2/webchat/guest/conversations** (1 change)
-* Description was changed
+# Point Changes (0 changes)
diff --git a/swagger.json b/swagger.json
index 44138de1..a74e2e96 100644
--- a/swagger.json
+++ b/swagger.json
@@ -1 +1 @@
-{"swagger":"2.0","info":{"description":"With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.","version":"v2","title":"PureCloud Platform API","termsOfService":"https://developer.mypurecloud.com/tos","contact":{"name":"PureCloud Developer Evangelists","url":"https://developer.mypurecloud.com","email":"DeveloperEvangelists@genesys.com"},"license":{"name":"ININ","url":"http://www.inin.com"}},"host":"api.mypurecloud.com","tags":[{"name":"Alerting","description":"Rules and alerts","externalDocs":{"description":"Alerting Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/alerting/index.html"}},{"name":"Analytics","description":"Analytics querying and reporting.","externalDocs":{"description":"Analytics Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/index.html"}},{"name":"Architect","description":"Flows, Prompts, IVR schedules, Dependency Tracking","externalDocs":{"description":"Architect Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/architect/index.html"}},{"name":"Audit","description":"","externalDocs":{"description":"Audit Documentation","url":""}},{"name":"Authorization","description":"Roles and permissions","externalDocs":{"description":"Authorization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/authorization/index.html"}},{"name":"Badges","description":"Badges stats"},{"name":"Billing","description":"","externalDocs":{"description":"billing Documentation","url":"https://developer.mypurecloud.com/billing"}},{"name":"Bridge","description":""},{"name":"Callbacks","description":""},{"name":"Calls","description":""},{"name":"Carrier Services","description":""},{"name":"Chats","description":""},{"name":"Cobrowse","description":""},{"name":"Compliance","description":""},{"name":"Configuration","description":"","externalDocs":{"description":"Configuration Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/configuration/index.html"}},{"name":"Content Management","description":"","externalDocs":{"description":"Content Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/contentmanagement/index.html"}},{"name":"Conversations","description":"","externalDocs":{"description":"Conversations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/conversations/index.html"}},{"name":"Data Extensions","description":"Data extensions","externalDocs":{"description":"Data Extensions","url":"https://developer.mypurecloud.com"}},{"name":"Directory Proxy","description":"Search, Suggest, and people"},{"name":"Docs","description":"Swagger documentation definitions","externalDocs":{"description":"docs","url":"https://developer.mypurecloud.com"}},{"name":"Downloads","description":"Download file","externalDocs":{"description":"Downloads Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/downloads/index.html"}},{"name":"Emails","description":""},{"name":"External Contacts","description":"External Organizations, contacts, notes and relationships","externalDocs":{"description":"External Contacts","url":"https://developer.mypurecloud.com/api/rest/v2/externalcontacts/index.html"}},{"name":"Fax","description":"","externalDocs":{"description":"Fax Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/fax/index.html"}},{"name":"Flows","description":"IVR Flows","externalDocs":{"description":"Flow Aggregates Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/flow_aggregate.html"}},{"name":"General Data Protection Regulation","description":"Working with General Data Protection Regulation (GDPR) requests"},{"name":"Geolocation","description":"","externalDocs":{"description":"Geolocation Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/geolocation/index.html"}},{"name":"Greetings","description":"","externalDocs":{"description":"Greetings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/greetings/index.html"}},{"name":"Groups","description":"Groups, members","externalDocs":{"description":"Groups Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/groups/index.html"}},{"name":"Identity Provider","description":"Identity providers","externalDocs":{"description":"Identity Providers Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/identityproviders/index.html"}},{"name":"Integrations","description":"","externalDocs":{"description":"Integrations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/integrations/index.html"}},{"name":"Languages","description":"Available languages","externalDocs":{"description":"Languages Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/languages/index.html"}},{"name":"Licensing","description":""},{"name":"License","description":"Per-user platform license assignments"},{"name":"Locations","description":"Physical locations","externalDocs":{"description":"Locations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/locations/index.html"}},{"name":"Marketplace","description":"Marketplace listing management"},{"name":"Meeting","description":"","externalDocs":{"description":"Meeting Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/meetings/index.html"}},{"name":"Messaging","description":"Messaging","externalDocs":{"description":"Messaging Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/messaging/index.html"}},{"name":"Mobile Devices","description":"Devices","externalDocs":{"description":"Devices Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/devices/index.html"}},{"name":"Notifications","description":"Channels, subscriptions, topics","externalDocs":{"description":"Notifications Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/notifications/index.html"}},{"name":"OAuth","description":"OAuth clients, providers","externalDocs":{"description":"OAuth Documentation","url":""}},{"name":"Objects","description":"Access-controlled objects in the platform","externalDocs":{"description":"authorization docs","url":"https://developer.mypurecloud.com/authorization"}},{"name":"Organization","description":"Organization"},{"name":"Organization Authorization","description":"Organization Authorization"},{"name":"Outbound","description":"","externalDocs":{"description":"Outbound Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/outbound/index.html"}},{"name":"Presence","description":"User and organization presences","externalDocs":{"description":"Presence Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/presence/index.html"}},{"name":"Process Automation","description":"Work items, flows"},{"name":"Quality","description":"Evaluations, calibrations","externalDocs":{"description":"Quality Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/quality/index.html"}},{"name":"Recording","description":"Recordings, policies, annotations, orphans","externalDocs":{"description":"Recording Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/recording/index.html"}},{"name":"Response Management","description":"Responses, library, query","externalDocs":{"description":"Response Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/responsemanagement/index.html"}},{"name":"Routing","description":"Queues, wrapup codes, skills, email & sms config","externalDocs":{"description":"Routing Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/routing/index.html"}},{"name":"SCIM","description":"System for Cross-domain Identity Management","externalDocs":{"description":"System for Cross-domain Identity Management: Definitions, Overview, Concepts, and Requirements","url":"https://tools.ietf.org/html/rfc7642"}},{"name":"Scripts","description":"Agent-facing scripts for interactions","externalDocs":{"description":"Scripts Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/scripts/index.html"}},{"name":"Search","description":"Search aggregate, users, groups","externalDocs":{"description":"Search Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/search/index.html"}},{"name":"SignedData","description":"Package data in signed JWTs"},{"name":"Socialize","description":"Gets, sets and updates entity data for the Socialize service"},{"name":"Stations","description":"Stations","externalDocs":{"description":"Stations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/stations/index.html"}},{"name":"Suggest","description":"Search suggest user, group, locations"},{"name":"Telephony","description":"Telephony providers and configuration","externalDocs":{"description":"Telephony Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/telephonyprovidersedge/index.html"}},{"name":"Telephony Providers Edge","description":"Edge phones, trunks, lines.","externalDocs":{"description":"telephony provider edge","url":"https://developer.mypurecloud.com/api/rest/v2/telephonyprovidersedge/index.html"}},{"name":"Tokens","description":"Authentication Tokens","externalDocs":{"description":"Tokens Documentation","url":""}},{"name":"User Recordings","description":"Summary, media","externalDocs":{"description":"User Recordings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/userrecordings/index.html"}},{"name":"Users","description":"Me, routing, roles","externalDocs":{"description":"Users Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/users/index.html"}},{"name":"Utilities","description":"","externalDocs":{"description":"Utilities Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/utilities/index.html"}},{"name":"Videos","description":""},{"name":"Virtual Reality","description":"Virtual Reality scenes and assets"},{"name":"Voicemail","description":"Mailbox, messages, policy","externalDocs":{"description":"Voicemail Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/voicemail/index.html"}},{"name":"WebChat","description":"WebChat deployments"},{"name":"Workforce Management","description":"Adherence, Schedules, Forecasts, Intraday Monitoring, Time Off Requests, Configuration","externalDocs":{"description":"Workforce Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/workforcemanagement/index.html"}}],"schemes":["https"],"consumes":["application/json"],"produces":["application/json"],"paths":{"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests":{"get":{"tags":["WebChat"],"summary":"Get all media requests to the guest in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequests","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequestEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequests"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages":{"get":{"tags":["WebChat"],"summary":"Get the messages of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"after","in":"query","description":"If available, get the messages chronologically after the id of this message","required":false,"type":"string"},{"name":"before","in":"query","description":"If available, get the messages chronologically before the id of this message","required":false,"type":"string"},{"name":"sortOrder","in":"query","description":"Sort order","required":false,"type":"string","default":"ascending","enum":["ascending","descending"]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessageEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessages"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing":{"post":{"tags":["WebChat"],"summary":"Send a typing-indicator in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberTyping","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatTyping"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.member.state":"The conversation member is in a state which does not permit this action.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberTyping"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages":{"post":{"tags":["WebChat"],"summary":"Send a message in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"},{"in":"body","name":"body","description":"Message","required":true,"schema":{"$ref":"#/definitions/CreateWebChatMessageRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.member.state":"The conversation member is in a state which does not permit this action.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberMessages"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation member","description":"","operationId":"getWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfo"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMember"},"delete":{"tags":["WebChat"],"summary":"Remove a member from a chat conversation","description":"","operationId":"deleteWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"204":{"description":"Operation was successful."},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","chat.error.member.state":"The conversation member is in a state which does not permit this action."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"deleteWebchatGuestConversationMember"}},"/api/v2/webchat/guest/conversations":{"post":{"tags":["WebChat"],"summary":"Create an ACD chat conversation from an external customer.","description":"This endpoint will create a new ACD Chat conversation under the specified Chat Deployment.\n The conversation will begin with a guest member in it (with a role=CUSTOMER) according to the customer information that is supplied. If the guest member is authenticated, the 'memberAuthToken' field should include his JWT as generated by the 'POST /api/v2/signeddata' resource; if the guest member is anonymous (and the Deployment permits it) this field can be omitted.\n The returned data includes the IDs of the conversation created, along with a newly-create JWT token that you can supply to all future endpoints as authentication to perform operations against that conversation. After successfully creating a conversation, you should connect a websocket to the event stream named in the 'eventStreamUri' field of the response; the conversation is not routed until the event stream is attached.","operationId":"postWebchatGuestConversations","produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"CreateConversationRequest","required":true,"schema":{"$ref":"#/definitions/CreateWebChatConversationRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CreateWebChatConversationResponse"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.deployment.disabled":"The web chat deployment is currently disabled.","chat.deployment.bad.auth":"The customer member authentication has failed.","chat.error.notnull.createconversationrequest.memberinfo":"The member info cannot be null.","chat.error.invalid.queue":"The specified queue is not valid.","bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.createconversationrequest.routingtarget":"The routing target is not valid.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s","chat.deployment.require.auth":"The deployment requires the customer member to be authenticated."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"x-purecloud-method-name":"postWebchatGuestConversations"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}":{"get":{"tags":["WebChat"],"summary":"Get a media request in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequest"},"patch":{"tags":["WebChat"],"summary":"Update a media request in the conversation, setting the state to ACCEPTED/DECLINED/ERRORED","description":"","operationId":"patchWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"},{"in":"body","name":"body","description":"Request","required":true,"schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"patchWebchatGuestConversationMediarequest"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation message","description":"","operationId":"getWebchatGuestConversationMessage","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"messageId","in":"path","description":"messageId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessage"}},"/api/v2/webchat/guest/conversations/{conversationId}/members":{"get":{"tags":["WebChat"],"summary":"Get the members of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMembers","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"pageSize","in":"query","description":"The number of entries to return per page, or omitted for the default.","required":false,"type":"integer","default":25,"format":"int32"},{"name":"pageNumber","in":"query","description":"The page number to return, or omitted for the first page.","required":false,"type":"integer","default":1,"format":"int32"},{"name":"excludeDisconnectedMembers","in":"query","description":"If true, the results will not contain members who have a DISCONNECTED state.","required":false,"type":"boolean","default":false}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfoEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMembers"}}},"securityDefinitions":{"PureCloud OAuth":{"type":"oauth2","authorizationUrl":"https://login.mypurecloud.com/authorize","flow":"implicit","scopes":{"all":"All the scopes"}},"Guest Chat JWT":{"type":"apiKey","name":"Authorization","in":"header"}},"definitions":{"WebChatGuestMediaRequestEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}}},"WebChatGuestMediaRequest":{"type":"object","required":["state","types"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"types":{"type":"array","description":"The types of media being requested.","items":{"type":"string","enum":["COBROWSE","SCREENSHARE"]}},"state":{"type":"string","description":"The state of the media request, one of PENDING|ACCEPTED|DECLINED|TIMEDOUT|CANCELLED|ERRORED.","enum":["PENDING","ACCEPTED","DECLINED","TIMEDOUT","CANCELLED","ERRORED"]},"communicationId":{"type":"string","description":"The ID of the new media communication, if applicable."},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}},"description":"Object representing the guest model of a media request of a chat conversation."},"ErrorBody":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"code":{"type":"string"},"entityId":{"type":"string"},"entityName":{"type":"string"},"message":{"type":"string"},"messageWithParams":{"type":"string"},"messageParams":{"type":"object","additionalProperties":{"type":"string"}},"contextId":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/definitions/Detail"}},"errors":{"type":"array","items":{"$ref":"#/definitions/ErrorBody"}}}},"Detail":{"type":"object","properties":{"errorCode":{"type":"string"},"fieldName":{"type":"string"},"entityId":{"type":"string"},"entityName":{"type":"string"}}},"WebChatMessageEntityList":{"type":"object","properties":{"pageSize":{"type":"integer","format":"int32"},"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMessage"}},"previousPage":{"type":"string"},"next":{"type":"string"},"selfUri":{"type":"string","format":"uri"}}},"WebChatMessage":{"type":"object","required":["body","conversation","sender","timestamp"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"body":{"type":"string","description":"The message body."},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatConversation":{"type":"object","properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatMemberInfo":{"type":"object","required":["role"],"properties":{"id":{"type":"string","description":"The communicationId of this member."},"displayName":{"type":"string","description":"The display name of the member."},"profileImageUrl":{"type":"string","format":"uri","description":"The url to the profile image of the member."},"role":{"type":"string","description":"The role of the member, one of [agent, customer, acd, workflow]","enum":["AGENT","CUSTOMER","WORKFLOW","ACD"]},"joinDate":{"type":"string","format":"date-time","description":"The time the member joined the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss.SSSZ"},"leaveDate":{"type":"string","format":"date-time","description":"The time the member left the conversation, or null if the member is still active in the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss.SSSZ"},"authenticatedGuest":{"type":"boolean","description":"If true, the guest member is an authenticated guest."},"customFields":{"type":"object","description":"Any custom fields of information pertaining to this member.","additionalProperties":{"type":"string"}},"state":{"type":"string","description":"The connection state of this member.","enum":["CONNECTED","DISCONNECTED","ALERTING"]}}},"WebChatTyping":{"type":"object","required":["conversation","id","sender","timestamp"],"properties":{"id":{"type":"string","description":"The event identifier of this typing indicator event (useful to guard against event re-delivery"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"}}},"CreateWebChatMessageRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string","description":"The message body. Note that message bodies are limited to 4,000 characters."}}},"CreateWebChatConversationRequest":{"type":"object","required":["deploymentId","memberInfo","organizationId","routingTarget"],"properties":{"organizationId":{"type":"string","description":"The organization identifier."},"deploymentId":{"type":"string","description":"The web chat Deployment ID which contains the appropriate settings for this chat conversation."},"routingTarget":{"description":"The routing information to use for the new chat conversation.","$ref":"#/definitions/WebChatRoutingTarget"},"memberInfo":{"description":"The guest member info to use for the new chat conversation.","$ref":"#/definitions/GuestMemberInfo"},"memberAuthToken":{"type":"string","description":"If the guest member is an authenticated member (ie, not anonymous) his JWT is provided here. The token will have been previously generated with the \"POST /api/v2/signeddata\" resource."}}},"WebChatRoutingTarget":{"type":"object","required":["targetAddress","targetType"],"properties":{"targetType":{"type":"string","description":"The target type of the routing target, such as 'QUEUE'.","enum":["QUEUE"]},"targetAddress":{"type":"string","description":"The target of the route, in the format appropriate given the 'targetType'."},"skills":{"type":"array","description":"The list of skill names to use for routing.","items":{"type":"string"}},"language":{"type":"string","description":"The language name to use for routing."},"priority":{"type":"integer","format":"int64","description":"The priority to assign to the conversation for routing."}}},"GuestMemberInfo":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"The display name to use for the guest member in the conversation."},"profileImageUrl":{"type":"string","format":"uri","description":"The URL to the profile image to use for the guest member in the conversation, if any."},"customFields":{"type":"object","description":"Any custom fields of information, in key-value format, to attach to the guest member in the conversation.","additionalProperties":{"type":"string"}}}},"CreateWebChatConversationResponse":{"type":"object","properties":{"id":{"type":"string","description":"Chat Conversation identifier"},"jwt":{"type":"string","description":"The JWT that you can use to identify subsequent calls on this conversation"},"eventStreamUri":{"type":"string","format":"uri","description":"The URI which provides the conversation event stream."},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"}}},"WebChatMemberInfoEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMemberInfo"}},"pageSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"total":{"type":"integer","format":"int64"},"firstUri":{"type":"string","format":"uri"},"selfUri":{"type":"string","format":"uri"},"previousUri":{"type":"string","format":"uri"},"nextUri":{"type":"string","format":"uri"},"lastUri":{"type":"string","format":"uri"},"pageCount":{"type":"integer","format":"int32"}}}},"responses":{"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"}}},"externalDocs":{"description":"PureCloud API Documentation","url":"https://developer.mypurecloud.com"}}
\ No newline at end of file
+{"swagger":"2.0","info":{"description":"With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.","version":"v2","title":"PureCloud Platform API","termsOfService":"https://developer.mypurecloud.com/tos","contact":{"name":"PureCloud Developer Evangelists","url":"https://developer.mypurecloud.com","email":"DeveloperEvangelists@genesys.com"},"license":{"name":"ININ","url":"http://www.inin.com"}},"host":"api.mypurecloud.com","tags":[{"name":"Alerting","description":"Rules and alerts","externalDocs":{"description":"Alerting Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/alerting/index.html"}},{"name":"Analytics","description":"Analytics querying and reporting.","externalDocs":{"description":"Analytics Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/index.html"}},{"name":"Architect","description":"Flows, Prompts, IVR schedules, Dependency Tracking","externalDocs":{"description":"Architect Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/architect/index.html"}},{"name":"Audit","description":"","externalDocs":{"description":"Audit Documentation","url":""}},{"name":"Authorization","description":"Roles and permissions","externalDocs":{"description":"Authorization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/authorization/index.html"}},{"name":"Badges","description":"Badges stats"},{"name":"Billing","description":"","externalDocs":{"description":"billing Documentation","url":"https://developer.mypurecloud.com/billing"}},{"name":"Bridge","description":""},{"name":"Callbacks","description":""},{"name":"Calls","description":""},{"name":"Carrier Services","description":""},{"name":"Chats","description":""},{"name":"Cobrowse","description":""},{"name":"Compliance","description":""},{"name":"Configuration","description":"","externalDocs":{"description":"Configuration Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/configuration/index.html"}},{"name":"Content Management","description":"","externalDocs":{"description":"Content Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/contentmanagement/index.html"}},{"name":"Conversations","description":"","externalDocs":{"description":"Conversations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/conversations/index.html"}},{"name":"Data Extensions","description":"Data extensions","externalDocs":{"description":"Data Extensions","url":"https://developer.mypurecloud.com"}},{"name":"Directory Proxy","description":"Search, Suggest, and people"},{"name":"Docs","description":"Swagger documentation definitions","externalDocs":{"description":"docs","url":"https://developer.mypurecloud.com"}},{"name":"Downloads","description":"Download file","externalDocs":{"description":"Downloads Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/downloads/index.html"}},{"name":"Emails","description":""},{"name":"External Contacts","description":"External Organizations, contacts, notes and relationships","externalDocs":{"description":"External Contacts","url":"https://developer.mypurecloud.com/api/rest/v2/externalcontacts/index.html"}},{"name":"Fax","description":"","externalDocs":{"description":"Fax Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/fax/index.html"}},{"name":"Flows","description":"IVR Flows","externalDocs":{"description":"Flow Aggregates Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/flow_aggregate.html"}},{"name":"General Data Protection Regulation","description":"Working with General Data Protection Regulation (GDPR) requests"},{"name":"Geolocation","description":"","externalDocs":{"description":"Geolocation Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/geolocation/index.html"}},{"name":"Greetings","description":"","externalDocs":{"description":"Greetings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/greetings/index.html"}},{"name":"Groups","description":"Groups, members","externalDocs":{"description":"Groups Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/groups/index.html"}},{"name":"Identity Provider","description":"Identity providers","externalDocs":{"description":"Identity Providers Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/identityproviders/index.html"}},{"name":"Integrations","description":"","externalDocs":{"description":"Integrations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/integrations/index.html"}},{"name":"Journey","description":"Journey Analytics","externalDocs":{"description":"Journey documentation","url":"https://developer.mypurecloud.com/api/rest/v1/journey/index.html"}},{"name":"Languages","description":"Available languages","externalDocs":{"description":"Languages Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/languages/index.html"}},{"name":"Licensing","description":""},{"name":"License","description":"Per-user platform license assignments"},{"name":"Locations","description":"Physical locations","externalDocs":{"description":"Locations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/locations/index.html"}},{"name":"Marketplace","description":"Marketplace listing management"},{"name":"Meeting","description":"","externalDocs":{"description":"Meeting Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/meetings/index.html"}},{"name":"Messaging","description":"Messaging","externalDocs":{"description":"Messaging Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/messaging/index.html"}},{"name":"Mobile Devices","description":"Devices","externalDocs":{"description":"Devices Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/devices/index.html"}},{"name":"Notifications","description":"Channels, subscriptions, topics","externalDocs":{"description":"Notifications Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/notifications/index.html"}},{"name":"OAuth","description":"OAuth clients, providers","externalDocs":{"description":"OAuth Documentation","url":""}},{"name":"Objects","description":"Access-controlled objects in the platform","externalDocs":{"description":"authorization docs","url":"https://developer.mypurecloud.com/authorization"}},{"name":"Organization","description":"Organization"},{"name":"Organization Authorization","description":"Organization Authorization"},{"name":"Outbound","description":"","externalDocs":{"description":"Outbound Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/outbound/index.html"}},{"name":"Presence","description":"User and organization presences","externalDocs":{"description":"Presence Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/presence/index.html"}},{"name":"Process Automation","description":"Work items, flows"},{"name":"Quality","description":"Evaluations, calibrations","externalDocs":{"description":"Quality Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/quality/index.html"}},{"name":"Recording","description":"Recordings, policies, annotations, orphans","externalDocs":{"description":"Recording Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/recording/index.html"}},{"name":"Response Management","description":"Responses, library, query","externalDocs":{"description":"Response Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/responsemanagement/index.html"}},{"name":"Routing","description":"Queues, wrapup codes, skills, email & sms config","externalDocs":{"description":"Routing Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/routing/index.html"}},{"name":"SCIM","description":"System for Cross-domain Identity Management","externalDocs":{"description":"System for Cross-domain Identity Management: Definitions, Overview, Concepts, and Requirements","url":"https://tools.ietf.org/html/rfc7642"}},{"name":"Scripts","description":"Agent-facing scripts for interactions","externalDocs":{"description":"Scripts Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/scripts/index.html"}},{"name":"Search","description":"Search aggregate, users, groups","externalDocs":{"description":"Search Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/search/index.html"}},{"name":"SignedData","description":"Package data in signed JWTs"},{"name":"Socialize","description":"Gets, sets and updates entity data for the Socialize service"},{"name":"Stations","description":"Stations","externalDocs":{"description":"Stations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/stations/index.html"}},{"name":"Suggest","description":"Search suggest user, group, locations"},{"name":"Telephony","description":"Telephony providers and configuration","externalDocs":{"description":"Telephony Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/telephonyprovidersedge/index.html"}},{"name":"Telephony Providers Edge","description":"Edge phones, trunks, lines.","externalDocs":{"description":"telephony provider edge","url":"https://developer.mypurecloud.com/api/rest/v2/telephonyprovidersedge/index.html"}},{"name":"Tokens","description":"Authentication Tokens","externalDocs":{"description":"Tokens Documentation","url":""}},{"name":"User Recordings","description":"Summary, media","externalDocs":{"description":"User Recordings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/userrecordings/index.html"}},{"name":"Users","description":"Me, routing, roles","externalDocs":{"description":"Users Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/users/index.html"}},{"name":"Utilities","description":"","externalDocs":{"description":"Utilities Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/utilities/index.html"}},{"name":"Videos","description":""},{"name":"Virtual Reality","description":"Virtual Reality scenes and assets"},{"name":"Voicemail","description":"Mailbox, messages, policy","externalDocs":{"description":"Voicemail Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/voicemail/index.html"}},{"name":"WebChat","description":"WebChat deployments"},{"name":"Workforce Management","description":"Adherence, Schedules, Forecasts, Intraday Monitoring, Time Off Requests, Configuration","externalDocs":{"description":"Workforce Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/workforcemanagement/index.html"}}],"schemes":["https"],"consumes":["application/json"],"produces":["application/json"],"paths":{"/api/v2/webchat/guest/conversations":{"post":{"tags":["WebChat"],"summary":"Create an ACD chat conversation from an external customer.","description":"This endpoint will create a new ACD Chat conversation under the specified Chat Deployment.\n The conversation will begin with a guest member in it (with a role=CUSTOMER) according to the customer information that is supplied. If the guest member is authenticated, the 'memberAuthToken' field should include his JWT as generated by the 'POST /api/v2/signeddata' resource; if the guest member is anonymous (and the Deployment permits it) this field can be omitted.\n The returned data includes the IDs of the conversation created, along with a newly-create JWT token that you can supply to all future endpoints as authentication to perform operations against that conversation. After successfully creating a conversation, you should connect a websocket to the event stream named in the 'eventStreamUri' field of the response; the conversation is not routed until the event stream is attached.","operationId":"postWebchatGuestConversations","produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"CreateConversationRequest","required":true,"schema":{"$ref":"#/definitions/CreateWebChatConversationRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CreateWebChatConversationResponse"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.deployment.disabled":"The web chat deployment is currently disabled.","chat.deployment.bad.auth":"The customer member authentication has failed.","chat.error.invalid.queue":"The specified queue is not valid.","bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.createconversationrequest.routingtarget":"The routing target is not valid.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s","chat.deployment.require.auth":"The deployment requires the customer member to be authenticated."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"x-purecloud-method-name":"postWebchatGuestConversations"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}":{"get":{"tags":["WebChat"],"summary":"Get a media request in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequest"},"patch":{"tags":["WebChat"],"summary":"Update a media request in the conversation, setting the state to ACCEPTED/DECLINED/ERRORED","description":"","operationId":"patchWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"},{"in":"body","name":"body","description":"Request","required":true,"schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"patchWebchatGuestConversationMediarequest"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages":{"get":{"tags":["WebChat"],"summary":"Get the messages of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"after","in":"query","description":"If available, get the messages chronologically after the id of this message","required":false,"type":"string"},{"name":"before","in":"query","description":"If available, get the messages chronologically before the id of this message","required":false,"type":"string"},{"name":"sortOrder","in":"query","description":"Sort order","required":false,"type":"string","default":"ascending","enum":["ascending","descending"]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessageEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessages"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests":{"get":{"tags":["WebChat"],"summary":"Get all media requests to the guest in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequests","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequestEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequests"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing":{"post":{"tags":["WebChat"],"summary":"Send a typing-indicator in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberTyping","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatTyping"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.member.state":"The conversation member is in a state which does not permit this action.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberTyping"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages":{"post":{"tags":["WebChat"],"summary":"Send a message in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"},{"in":"body","name":"body","description":"Message","required":true,"schema":{"$ref":"#/definitions/CreateWebChatMessageRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.member.state":"The conversation member is in a state which does not permit this action.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberMessages"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation member","description":"","operationId":"getWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfo"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMember"},"delete":{"tags":["WebChat"],"summary":"Remove a member from a chat conversation","description":"","operationId":"deleteWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"204":{"description":"Operation was successful."},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","chat.error.member.state":"The conversation member is in a state which does not permit this action."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"deleteWebchatGuestConversationMember"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation message","description":"","operationId":"getWebchatGuestConversationMessage","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"messageId","in":"path","description":"messageId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessage"}},"/api/v2/webchat/guest/conversations/{conversationId}/members":{"get":{"tags":["WebChat"],"summary":"Get the members of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMembers","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"pageSize","in":"query","description":"The number of entries to return per page, or omitted for the default.","required":false,"type":"integer","default":25,"format":"int32"},{"name":"pageNumber","in":"query","description":"The page number to return, or omitted for the first page.","required":false,"type":"integer","default":1,"format":"int32"},{"name":"excludeDisconnectedMembers","in":"query","description":"If true, the results will not contain members who have a DISCONNECTED state.","required":false,"type":"boolean","default":false}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfoEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMembers"}}},"securityDefinitions":{"PureCloud OAuth":{"type":"oauth2","authorizationUrl":"https://login.mypurecloud.com/authorize","flow":"implicit","scopes":{"all":"All the scopes"}},"Guest Chat JWT":{"type":"apiKey","name":"Authorization","in":"header"}},"definitions":{"CreateWebChatConversationRequest":{"type":"object","required":["deploymentId","memberInfo","organizationId","routingTarget"],"properties":{"organizationId":{"type":"string","description":"The organization identifier."},"deploymentId":{"type":"string","description":"The web chat Deployment ID which contains the appropriate settings for this chat conversation."},"routingTarget":{"description":"The routing information to use for the new chat conversation.","$ref":"#/definitions/WebChatRoutingTarget"},"memberInfo":{"description":"The guest member info to use for the new chat conversation.","$ref":"#/definitions/GuestMemberInfo"},"memberAuthToken":{"type":"string","description":"If the guest member is an authenticated member (ie, not anonymous) his JWT is provided here. The token will have been previously generated with the \"POST /api/v2/signeddata\" resource."},"journeyContext":{"description":"A subset of the Journey System's data relevant to this conversation/session request (for external linkage and internal usage/context).","$ref":"#/definitions/JourneyContext"}}},"WebChatRoutingTarget":{"type":"object","required":["targetAddress","targetType"],"properties":{"targetType":{"type":"string","description":"The target type of the routing target, such as 'QUEUE'.","enum":["QUEUE"]},"targetAddress":{"type":"string","description":"The target of the route, in the format appropriate given the 'targetType'."},"skills":{"type":"array","description":"The list of skill names to use for routing.","items":{"type":"string"}},"language":{"type":"string","description":"The language name to use for routing."},"priority":{"type":"integer","format":"int64","description":"The priority to assign to the conversation for routing."}}},"GuestMemberInfo":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"The display name to use for the guest member in the conversation."},"avatarImageUrl":{"type":"string","format":"uri","description":"The URL to the avatar image to use for the guest member in the conversation, if any."},"customFields":{"type":"object","description":"Any custom fields of information, in key-value format, to attach to the guest member in the conversation.","additionalProperties":{"type":"string"}}}},"JourneyContext":{"type":"object","properties":{"customer":{"description":"A subset of the Journey System's customer data at a point-in-time (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyCustomer"},"customerSession":{"description":"A subset of the Journey System's tracked customer session data at a point-in-time (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyCustomerSession"},"triggeringAction":{"description":"A subset of the Journey System's action data relevant to a part of a conversation (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyAction"}}},"JourneyCustomer":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string","description":"An ID of a customer within the Journey System at a point-in-time. Note that a customer entity can have multiple customerIds based on the stitching process. Depending on the context within the PureCloud conversation, this may or may not be mutable."},"type":{"type":"string","description":"The type of the customerId within the Journey System (e.g. cookie)."}}},"JourneyCustomerSession":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string","description":"An ID of a Customer/User's session within the Journey System at a point-in-time"},"type":{"type":"string","description":"The type of the Customer/User's session ID within the Journey System (e.g. web, app)"}}},"JourneyAction":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of an action from the Journey System (an action is spawned from an actionMap)"},"actionMap":{"description":"Details about the action map from the Journey System which triggered this action","$ref":"#/definitions/JourneyActionMap"}}},"JourneyActionMap":{"type":"object","required":["id","version"],"properties":{"id":{"type":"string","description":"The ID of the actionMap in the Journey System which triggered this action"},"version":{"type":"integer","format":"int32","description":"The version number of the actionMap in the Journey System at the time this action was triggered"}}},"CreateWebChatConversationResponse":{"type":"object","properties":{"id":{"type":"string","description":"Chat Conversation identifier"},"jwt":{"type":"string","description":"The JWT that you can use to identify subsequent calls on this conversation"},"eventStreamUri":{"type":"string","format":"uri","description":"The URI which provides the conversation event stream."},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"}}},"WebChatMemberInfo":{"type":"object","required":["role"],"properties":{"id":{"type":"string","description":"The communicationId of this member."},"displayName":{"type":"string","description":"The display name of the member."},"avatarImageUrl":{"type":"string","format":"uri","description":"The url to the avatar image of the member."},"role":{"type":"string","description":"The role of the member, one of [agent, customer, acd, workflow]","enum":["AGENT","CUSTOMER","WORKFLOW","ACD"]},"joinDate":{"type":"string","format":"date-time","description":"The time the member joined the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss.SSSZ"},"leaveDate":{"type":"string","format":"date-time","description":"The time the member left the conversation, or null if the member is still active in the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss.SSSZ"},"authenticatedGuest":{"type":"boolean","description":"If true, the guest member is an authenticated guest."},"customFields":{"type":"object","description":"Any custom fields of information pertaining to this member.","additionalProperties":{"type":"string"}},"state":{"type":"string","description":"The connection state of this member.","enum":["CONNECTED","DISCONNECTED","ALERTING"]}}},"ErrorBody":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"code":{"type":"string"},"entityId":{"type":"string"},"entityName":{"type":"string"},"message":{"type":"string"},"messageWithParams":{"type":"string"},"messageParams":{"type":"object","additionalProperties":{"type":"string"}},"contextId":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/definitions/Detail"}},"errors":{"type":"array","items":{"$ref":"#/definitions/ErrorBody"}}}},"Detail":{"type":"object","properties":{"errorCode":{"type":"string"},"fieldName":{"type":"string"},"entityId":{"type":"string"},"entityName":{"type":"string"}}},"WebChatGuestMediaRequest":{"type":"object","required":["state","types"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"types":{"type":"array","description":"The types of media being requested.","items":{"type":"string","enum":["COBROWSE","SCREENSHARE"]}},"state":{"type":"string","description":"The state of the media request, one of PENDING|ACCEPTED|DECLINED|TIMEDOUT|CANCELLED|ERRORED.","enum":["PENDING","ACCEPTED","DECLINED","TIMEDOUT","CANCELLED","ERRORED"]},"communicationId":{"type":"string","description":"The ID of the new media communication, if applicable."},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}},"description":"Object representing the guest model of a media request of a chat conversation."},"WebChatMessageEntityList":{"type":"object","properties":{"pageSize":{"type":"integer","format":"int32"},"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMessage"}},"previousPage":{"type":"string"},"next":{"type":"string"},"selfUri":{"type":"string","format":"uri"}}},"WebChatMessage":{"type":"object","required":["body","bodyType","conversation","sender","timestamp"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"body":{"type":"string","description":"The message body."},"bodyType":{"type":"string","description":"The purpose of the message within the conversation, such as a standard text entry versus a greeting.","enum":["standard","notice"]},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatConversation":{"type":"object","properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatGuestMediaRequestEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}}},"WebChatTyping":{"type":"object","required":["conversation","id","sender","timestamp"],"properties":{"id":{"type":"string","description":"The event identifier of this typing indicator event (useful to guard against event re-delivery"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"}}},"CreateWebChatMessageRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string","description":"The message body. Note that message bodies are limited to 4,000 characters."},"bodyType":{"type":"string","description":"The purpose of the message within the conversation, such as a standard text entry versus a greeting.","enum":["standard","notice"]}}},"WebChatMemberInfoEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMemberInfo"}},"pageSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"total":{"type":"integer","format":"int64"},"firstUri":{"type":"string","format":"uri"},"selfUri":{"type":"string","format":"uri"},"nextUri":{"type":"string","format":"uri"},"previousUri":{"type":"string","format":"uri"},"lastUri":{"type":"string","format":"uri"},"pageCount":{"type":"integer","format":"int32"}}}},"responses":{"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"}},"429":{"description":"Rate limit exceeded the maximum [%s] requests within [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"}}},"externalDocs":{"description":"PureCloud API Documentation","url":"https://developer.mypurecloud.com"}}
\ No newline at end of file
diff --git a/version.json b/version.json
index f0caf612..6ce6db08 100644
--- a/version.json
+++ b/version.json
@@ -1,9 +1,9 @@
{
- "major": 2,
+ "major": 3,
"minor": 0,
"point": 0,
"prerelease": "",
"apiVersion": 0,
- "display": "2.0.0",
- "displayFull": "2.0.0"
+ "display": "3.0.0",
+ "displayFull": "3.0.0"
}
\ No newline at end of file