@youssefhenna/expo-enode-link-sdk
Version:
An Expo Module integration for Enode's Link SDK
24 lines (22 loc) • 7.91 kB
JavaScript
/*\
|*|
|*| :: Number.isInteger() polyfill ::
|*|
|*| https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
|*|
\*/
/*\
|*|
|*| StringView - Mozilla Developer Network
|*|
|*| Revision #12, March 21st, 2017
|*|
|*| https://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringView
|*| https://developer.mozilla.org/en-US/docs/User:fusionchess
|*| https://github.com/madmurphy/stringview.js
|*|
|*| This framework is released under the GNU Lesser General Public License, version 3 or later.
|*| http://www.gnu.org/licenses/lgpl-3.0.html
|*|
\*/
"use strict";function StringView(e,t,r,i){var n,a,o,h,g,s,f,c,w,u,d,U=isFinite(r)?r:0,b=15;switch(t&&(this.encoding=t.toString()),this.encoding){case"UTF-8":o=StringView.putUTF8CharCode,h=StringView.getUTF8CharLength,n=Uint8Array;break;case"UTF-16":o=StringView.putUTF16CharCode,h=StringView.getUTF16CharLength,n=Uint16Array;break;case"UTF-32":n=Uint32Array,b&=14;break;default:n=Uint8Array,b&=14}e:switch(typeof e){case"string":b&=7;break;case"object":switch(e.constructor){case StringView:b&=3;break e;case String:b&=7;break e;case ArrayBuffer:F=new n(e),g="UTF-32"===this.encoding?e.byteLength>>>2:"UTF-16"===this.encoding?e.byteLength>>>1:e.byteLength,a=0!==U||isFinite(i)&&i!==g?new n(e,U,isFinite(i)?i:g-U):F;break e;case Uint32Array:case Uint16Array:case Uint8Array:n=e.constructor,g=e.length,F=0===e.byteOffset&&e.length===(n===Uint32Array?e.buffer.byteLength>>>2:n===Uint16Array?e.buffer.byteLength>>>1:e.buffer.byteLength)?e:new n(e.buffer),a=0!==U||isFinite(i)&&i!==g?e.subarray(U,isFinite(i)?U+i:g):e;break e;default:g=(F=new n(e)).length,a=0!==U||isFinite(i)&&i!==g?F.subarray(U,isFinite(i)?U+i:g):F}break;default:F=a=new n(Number(e)||0)}if(b<8){switch(4&b?(S=g=(s=e).length,b^="UTF-32"===this.encoding?0:2,U=f=r?Math.max((S+r)%S,0):0,w=c=(Number.isInteger(i)?Math.min(Math.max(i,0)+U,S):S)-1):(s=e.rawData,g=e.makeIndex(),U=f=r?Math.max((g+r)%g,0):0,w=c=(S=Number.isInteger(i)?Math.min(Math.max(i,0),g-f):g)+f,"UTF-8"===e.encoding?(u=StringView.getUTF8CharLength,d=StringView.loadUTF8CharCode):"UTF-16"===e.encoding?(u=StringView.getUTF16CharLength,d=StringView.loadUTF16CharCode):b&=1),b=0===S||b<4&&s.encoding===this.encoding&&0===f&&S===g?7:b){case 0:for(var F=new n(S),T=0;T<S;F[T]=s[U+T++]);break;case 1:for(var S=0,V=U;V<w;V++)S+=h(s[V]);F=new n(S);for(V=U,T=0;T<S;V++)T=o(F,s[V],T);break;case 2:U=0;for(l=0;l<f;l++)U+=u(C=d(s,U));F=new n(S);for(V=U,T=0;T<S;V+=u(C),T++)C=d(s,V),F[T]=C;break;case 3:for(var C,l=S=0,V=0;l<c;V+=u(C))C=d(s,V),l===f&&(U=V),++l>f&&(S+=h(C));F=new n(S);for(V=U,T=0;T<S;V+=u(C))T=o(F,C=d(s,V),T);break;case 4:F=new n(S);for(var y=0;y<S;y++)F[y]=255&s.charCodeAt(y);break;case 5:for(var m=S=0;m<g;m++)m===f&&(U=S),S+=h(s.charCodeAt(m)),m===c&&(w=S);F=new n(S);for(T=0,l=0;T<S;l++)T=o(F,s.charCodeAt(l),T);break;case 6:F=new n(S);for(y=0;y<S;y++)F[y]=s.charCodeAt(y);break;case 7:F=new n(S?s:0)}a=3<b&&(0<U||w<F.length-1)?F.subarray(U,w):F}this.buffer=F.buffer,this.bufferView=F,this.rawData=a,Object.freeze(this)}Number.isInteger||(Number.isInteger=function(e){return"number"==typeof e&&isFinite(e)&&-9007199254740992<e&&e<9007199254740992&&Math.floor(e)===e}),StringView.loadUTF8CharCode=function(e,t){var r=e.length,i=e[t];return 251<i&&i<254&&t+5<r?1073741824*(i-252)+(e[t+1]-128<<24)+(e[t+2]-128<<18)+(e[t+3]-128<<12)+(e[t+4]-128<<6)+e[t+5]-128:247<i&&i<252&&t+4<r?(i-248<<24)+(e[t+1]-128<<18)+(e[t+2]-128<<12)+(e[t+3]-128<<6)+e[t+4]-128:239<i&&i<248&&t+3<r?(i-240<<18)+(e[t+1]-128<<12)+(e[t+2]-128<<6)+e[t+3]-128:223<i&&i<240&&t+2<r?(i-224<<12)+(e[t+1]-128<<6)+e[t+2]-128:191<i&&i<224&&t+1<r?(i-192<<6)+e[t+1]-128:i},StringView.putUTF8CharCode=function(e,t,r){return t<128?e[r++]=t:(t<2048?e[r++]=192+(t>>>6):(t<65536?e[r++]=224+(t>>>12):(t<2097152?e[r++]=240+(t>>>18):(t<67108864?e[r++]=248+(t>>>24):(e[r++]=252+t/1073741824,e[r++]=128+(t>>>24&63)),e[r++]=128+(t>>>18&63)),e[r++]=128+(t>>>12&63)),e[r++]=128+(t>>>6&63)),e[r++]=128+(63&t)),r},StringView.getUTF8CharLength=function(e){return e<128?1:e<2048?2:e<65536?3:e<2097152?4:e<67108864?5:6},StringView.loadUTF16CharCode=function(e,t){var r=e[t];return 55231<r&&t+1<e.length?(r-55296<<10)+e[t+1]+9216:r},StringView.putUTF16CharCode=function(e,t,r){return t<65536?e[r++]=t:(e[r++]=55232+(t>>>10),e[r++]=56320+(1023&t)),r},StringView.getUTF16CharLength=function(e){return e<65536?1:2},StringView.b64ToUint6=function(e){return 64<e&&e<91?e-65:96<e&&e<123?e-71:47<e&&e<58?e+4:43===e?62:47===e?63:0},StringView.uint6ToB64=function(e){return e<26?e+65:e<52?e+71:e<62?e-4:62===e?43:63===e?47:65},StringView.bytesToBase64=function(e){for(var t,r=(3-e.length%3)%3,i="",n=e.length,a=0,o=0;o<n;o++)a|=e[o]<<(16>>>(t=o%3)&24),2!=t&&e.length-o!=1||(i+=String.fromCharCode(StringView.uint6ToB64(a>>>18&63),StringView.uint6ToB64(a>>>12&63),StringView.uint6ToB64(a>>>6&63),StringView.uint6ToB64(63&a)),a=0);return 0==r?i:i.substring(0,i.length-r)+(1==r?"=":"==")},StringView.base64ToBytes=function(e,t){for(var r,i,n=e.replace(/[^A-Za-z0-9\+\/]/g,""),a=n.length,o=t?Math.ceil((3*a+1>>>2)/t)*t:3*a+1>>>2,h=new Uint8Array(o),g=0,s=0,f=0;f<a;f++)if(i=3&f,g|=StringView.b64ToUint6(n.charCodeAt(f))<<18-6*i,3==i||a-f==1){for(r=0;r<3&&s<o;r++,s++)h[s]=g>>>(16>>>r&24)&255;g=0}return h},StringView.makeFromBase64=function(e,t,r,i){return new StringView("UTF-16"===t||"UTF-32"===t?StringView.base64ToBytes(e,"UTF-16"===t?2:4).buffer:StringView.base64ToBytes(e),t,r,i)},StringView.prototype.encoding="UTF-8",StringView.prototype.makeIndex=function(e,t){var r=this.rawData,i=r.length,n=t||0,a=n,o=isNaN(e)?1/0:e;if(e+1>r.length)throw new RangeError("StringView.prototype.makeIndex - The offset can't be major than the length of the array - 1.");switch(this.encoding){case"UTF-8":for(var h,g=0;a<i&&g<o;g++)a+=251<(h=r[a])&&h<254&&a+5<i?6:247<h&&h<252&&a+4<i?5:239<h&&h<248&&a+3<i?4:223<h&&h<240&&a+2<i?3:191<h&&h<224&&a+1<i?2:1;break;case"UTF-16":for(g=n;a<i&&g<o;g++)a+=55231<r[a]&&a+1<r.length?2:1;break;default:a=g=isFinite(e)?e:i-1}return e?a:g},StringView.prototype.toBase64=function(e){return StringView.bytesToBase64(e?this.bufferView.constructor===Uint8Array?this.bufferView:new Uint8Array(this.buffer):this.rawData.constructor===Uint8Array?this.rawData:new Uint8Array(this.buffer,this.rawData.byteOffset,this.rawData.length<<(this.rawData.constructor===Uint16Array?1:2)))},StringView.prototype.subview=function(e,t){var r,i="UTF-8"===this.encoding||"UTF-16"===this.encoding,n=this.rawData.length;return 0===n?new StringView(this.buffer,this.encoding):(n=i?this.makeIndex():n,e=e?n<e+1?n:Math.max((n+e)%n,0):0,t=!Number.isInteger(t)||Math.max(t,0)+e>n?n-e:t,0===e&&t===n?this:(i=i?(r=e<n?this.makeIndex(e):n,t?this.makeIndex(t,r)-r:0):(r=e,t),"UTF-16"===this.encoding?r<<=1:"UTF-32"===this.encoding&&(r<<=2),new StringView(this.buffer,this.encoding,this.rawData.byteOffset+r,i)))},StringView.prototype.forEachChar=function(e,t,r,i){var n,a,o=this.rawData;if("UTF-8"===this.encoding||"UTF-16"===this.encoding){"UTF-8"===this.encoding?(n=StringView.getUTF8CharLength,a=StringView.loadUTF8CharCode):"UTF-16"===this.encoding&&(n=StringView.getUTF16CharLength,a=StringView.loadUTF16CharCode);for(var h,g=isFinite(r)?this.makeIndex(r):0,s=isFinite(i)?this.makeIndex(i,g):o.length,f=0;g<s;f++)h=a(o,g),t?e.call(t,h,f,g,o):e(h,f,g,o),g+=n(h)}else for(g=isFinite(r)?r:0,s=isFinite(i)?i+g:o.length;g<s;g++)t?e.call(t,o[g],g,g,o):e(o[g],g,g,o)},StringView.prototype.valueOf=StringView.prototype.toString=function(){if("UTF-8"!==this.encoding&&"UTF-16"!==this.encoding)return String.fromCharCode.apply(null,this.rawData);var e,t,r="";"UTF-8"===this.encoding?(t=StringView.getUTF8CharLength,e=StringView.loadUTF8CharCode):"UTF-16"===this.encoding&&(t=StringView.getUTF16CharLength,e=StringView.loadUTF16CharCode);for(var i,n=this.rawData.length,a=0;a<n;a+=t(i))i=e(this.rawData,a),r+=String.fromCharCode(i);return r};